操作系统的进程和线程基本知识

操作系统的进程和线程基本知识



Java、大数据开发学习要点(持续更新中…)


一、进程的定义和组成

  进程实体(进程映像,简称进程)由内存中程序段数据段PCB(Process Control Block)三部分组成。(注意:PCB是进程存在的唯一标志
  而进程则是进程实体的运行过程,是系统进行资源分配和调度的独立单位

严格来说进程实体进程是不一样的,进程实体是静态的,而进程则是动态的。但广义上,可以认为进程实体就是进程。

进程的组成
  如上文所说,进程由PCB、程序段和数据段组成。实际上PCB是进程存在的唯一标志,并且操作系统对进程的管理工作所需要的信息都存储在PCB中

可以总结为:内存中PCB中存储操作系统对进程管理信息,是给操作系统使用的;而程序段和数据段是进程自己使用的

二、进程的组织方式

  进程的组织主要讨论多个进程间的组织方式问题(如何使用适当的方式将各个进程的PCB组织起来)。进程的组织方式主要分为:链接方式索引方式

  • 链接方式,通过按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针。
    链接方式
  • 索引方式,根据进程状态的不同建立若干索引表,操作系统持有指向各个索引表的指针。
    索引方式

三、进程的特征

进程拥有以下特征:

  1. 动态性:进程是程序的一次执行过程,是动态产生、变化和消亡的(基本特征)。
  2. 并发性:内存中由多个进程实体,各进程并发执行。
  3. 独立性进程是能够独立运行、独立获取资源、独立接受调度的基本单元
  4. 异步性:进程按照自己独立的、不可预知的速度向前推进,导致运行结果的不确定性,而操作系统需要提供“进程同步机制”来解决异步问题。
  5. 结构性:每个进程都配置有一个PCB,并且由程序段、数据段共同组成。

四、进程的状态与转换

4.1 进程的状态

  操作系统为了方便对进程的管理,将进程分为三种基本状态

  1. 运行态:占有CPU,在CPU上运行(每个CPU核心同一时刻只有一个进程处于运行态)。
  2. 就绪态:已经具备运行条件,但没有空闲CPU,暂时不能运行(等待获取CPU资源)。
  3. 阻塞态:因为某一事件而暂时不能运行(如等待I/O操作的结果,为提高CPU利用率,进程需要将其他所需资源分配到位才能得到CPU的服务)。

  按照进程的生命周期来看,进程可分为另外两种状态

  1. 创建态:在进程被创建的时候,操作系统为进程分配资源、初始化PCB。
  2. 终止态:在进程被从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB。

4.2 进程状态的转换

进程状态的转换
  由上图可以看出,运行态到阻塞态是进程本身的主动行为(申请某种系统资源);阻塞态到就绪态是进程的被动行为(其他系统资源就绪,但还没分配到CPU)。总的来说,运行态 -> 阻塞态 -> 就绪态是一个进程从资源申请开始的单向变化

五、进程控制

  简单来说,进程控制就是如何实现对进程状态的转换。
进程控制的实现
  由上图可以发现一个重要的问题,进程状态变化时,往往需要同时改变PCB内容和所处队列,这必须是一个原子性的操作。由此,引出原语来实现进程控制:
  原语是原子操作,采用关中断指令开中断指令来保证原子性(在关中断后,开中断前的指令执行期间,进程将不会相应中断),所以开/关中断指令权限很大,是必须在核心态下执行的特权指令

无论哪个原语(创建、撤销、阻塞、唤醒、切换等原语),无非做了以下三类事情:

  1. 更新PCB中的信息
    a. 所有的进程控制原语一定都会修改进程状态标志
    b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    c. 某进程开始运行前必然要恢复其运行环境
  2. 将PCB插入合适的队列
  3. 分配/回收资源

六、进程通信**

  由于进程是分配系统资源的单位,因此各进程拥有独立的内存地址空间进程通信就是指进程间的信息交换。进程间的通信分为共享存储消息传递管道通信

  • 共享存储:设置一个共享空间,各进程互斥访问共享空间,直接读写内存避免了管道和消息队列通信方式从内核到用户空间的四次拷贝,效率最高四次拷贝,冗余用户空间到内核的数据拷贝和上下文切换的次数:1、由用户空间的buf中将数据拷贝到内核中。2、内核将数据拷贝到内存中。3、内存到内核。4、内核到用户空间的buf;两次拷贝: 1、用户空间到内存。 2、内存到用户空间。)
    共享存储

  • 管道通信:设置一个内存中固定大小的缓冲区(半双工)
    管道通信

  • 消息传递:将消息结构化(消息头/消息体),并使用系统send和recive原语控制,克服缓冲区大小限制、传递信息少的问题
    消息传递

  • 信号量:本质为一个计数器,控制多个进程对共享资源的访问(实际是个锁机制)。

  • 套接字:主要用于不同机器间进程的通信。

七、线程**

7.1 线程的定义

  线程是为了满足一个进程“同时”执行多个任务而被分解成的并发的多个顺序线程,为的是增加并发度。在引入线程概念后,线程成为CPU执行单元(调度)的基本单元,进程成为除CPU外系统资源的分配单元

7.2 线程和进程的区别**

(1)从资源层面看:
  线程几乎不拥有系统资源,并且同一进程的不同线程间共享进程资源。

(2)从系统调度层面看:
  线程是CPU调度的基本单元,而进程是除CPU外系统资源的分配单元。

(3)从系统开销层面看:
  创建销毁进程需要操作系统为其分配或回收资源(内存空间、I/O资源等),开销较大。同样的在进程切换时,需要保存原进程执行上下文、修改PCB信息和恢复另一进程的执行环境;而线程的切换只会涉及少量寄存器内容,开销较小。

(4)从通信层面看:
  进程间通信需要依靠IPC(进程间通信)完成;而同一进程的不同线程由于共享地址空间,通信甚至不需要系统干预。

7.3 线程的实现方式

  • 用户级线程:线程管理由应用程序负责,在用户态下即可完成(对操作系统透明)。

  • 内核级线程:线程管理由操作系统内核完成,在核心态下进行。

    注意:只有内核级线程才是CPU分配的单元

7.4 多线程模型

  • 多对一模型(一个内核级线程对应多个用户级线程):
    优点在于用户线程切换都是在用户态下完成,进程管理开销小效率高。
    缺点在于一个用户线程阻塞,其他的用户线程都被阻塞,并发度低。
  • 一对一模型(一个内核级线程对应一个用户级线程,主流Java线程的实现):
    优点在于各个用户线程分配到多核处理器并行执行,并发度高。
    缺点在于用户线程切换要基于内核线程的切换,需要在系统调用,且容纳线程数量有限。
  • 多对多模型:集二者所长。

参考:《王道考研操作系统》
地址:https://www.bilibili.com/video/BV1YE411D7nH

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值