操作系统线程和进程 学习笔记

什么是进程

进程:一个具有独立功能的程序在一个数据集合上的一次动态执行过程

进程的组成

  1. 程序的代码
  2. 程序处理的数据
  3. 程序计数器的值,指示下一条将运行的指令
  4. 一组通用的寄存器的当前值,堆,栈
  5. 一组系统资源(如打开的文件/网络资源/磁盘IO资源)
    总之,进程包含了正在运行的一个程序的所有状态信息

进程与程序的联系

  1. 程序是产生线程的基础
  2. 程序每次运行构成不同的进程
  3. 进程是程序功能的体现
  4. 通过多次执行,一个程序可以对于多个进程,一个进程可以包括多个程序(调度程序)

进程和程序的区别

  1. 进程是动态的,程序是静态的;程序是有序代码的集合;进程是程序的执行,进程还有核心态/用户态
  2. 进程是暂时的,程序是永久的;进程是一个程序运行的状态过程;程序可以长久保持
  3. 进程和程序组成不同;进程包括了程序、数据、和进程控制块(即进程状态信息)

进程和线程对比

  1. 进程是对运行时程序的封装,是系统调度资源的分配的基本单位
  2. 线程是进程的子任务,cpu调度和分配的基本单位,实现进程内的并发
  3. 一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存

什么是线程安全

如何保证线程安全

  1. 互斥量(锁),通过互斥机制防止多个线程同时访问公共资源
  2. 信号量(Semphare),控制同一时刻多个线程访问同一个资源的线程数
  3. 事件(信号):通过通知的方式保持多个线程同步

进程间通信方式

  1. 管道/匿名管道/有名管道(pipe)
  2. 信号(Singal):比如用户使用ctrl+c产生SIGINT程序停止信号
  3. 消息队列(Message)
  4. 共享内存
  5. 信号量
  6. 套接字(socket):最常用的方式,web应用都是这种方式

死锁发生的四个必要条件:

(1) 互斥条件(选项D):一个资源每次只能被一个进程使用。
(2) 请求与保持条件(选项C):一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件(选项B):进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件(选项A):若干进程之间形成一种头尾相接的循环等待资源关系。
只要发生死锁,上述四个条件一定满足,只要有一个条件不满足,就不会发生死锁
因此,要避免死锁,只要破坏上述四个条件之一,主要有以下方法:
静态分配资源:破坏条件(2)和(4)
按序分配资源:破坏条件(4)
剥夺是分配:破坏条件(3)
而互斥地使用资源是多进程能正确工作的前提,是必须保证满足的,不能破坏,否则就会出现问题如读写不一致

发布了15 篇原创文章 · 获赞 4 · 访问量 1031

猜你喜欢

转载自blog.csdn.net/qq_37316153/article/details/104298931