第二节-进程的描述与控制

第二节-进程的描述与控制

进程的概念:理解进程和程序的区别

进程的组成:一个进程由哪些部分组成

进程的特征:进程有哪些重要特征

进程的概念,组成和特征

进程的概念

进程的组成-PCB

操作系统要记录PID,进程所属的用户ID(UID),还要记录给进程分配了那些资源(如分配了多少内存,正在使用那些I/O设备,正在使用那些文件),还要记录进程的运行情况(如CPU的使用时间,磁盘的使用情况,网络流量的使用情况等)这些信息都被保存在一个数据结构:PCB(Process Control Block),即 进程控制块 中。

QQ_1727069553722

操作系统对进程的管理工作所需的信息都存在PCB中。

进程(进程实体)的组成

QQ_1727069706417

还有 程序段和数据段,他们是给进程自己使用的,PCB是给操作系统使用的。

QQ_1727069881689

进程实体就相当于一个 快照,是一瞬间的不变的静态的,而进程是动态的

程序段,数据段,PCB三部分组成了进程实体(进程映像)一如进程实体的概念后,可以把进程定义为:进程是进程实体的 运行过程,是系统进程 资源分配 和 调度 的一个独立单位。

注意:PCB 是 进程存在 的唯一标识!

进程的特征

1)动态性

2)并发性

3)独立性

4)异步性

5)结构性

QQ_1727070274822

小结

QQ_1727070347312

进程的状态与转换

进程的状态:创建态,就绪态,运行态,阻塞态,终止态

进程的五状态模型(丁字裤模型):

QQ_1727070881595

QQ_1727071027594

为了同一个状态下的各个进程进行管理,操作系统会将各个进程的PCB组织起来:

进程的组织-链接方式

QQ_1727071198960

进程的组织-索引方式(不重要)

QQ_1727071220746

总结

QQ_1727071249786

进程的控制

进程的控制的主要功能是对系统中所有进程实施有效的管理,它具有创建新进程,撤销已有进程,实现进程状态转换等功能。(反正进程控制就是要是实现进程状态转换)。

  • 什么是进程控制?
  • 如何实现进程控制?(用原语实现)
  • 进程控制的原语
    • 进程的创建
    • 进程的终止
    • 进程的阻塞
    • 进程的唤醒
    • 进程的切换

如何实现原语的”原子性“

原语的执行具有原子性,执行过程是一气呵成的,期间不允许被中断,可以用”关中断指令“和“开终端指令”时间原子性:

正常情况下:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有就暂停运行当前这段程序,转而执行相应的中断处理程序。

但是如果有”关中断指令“,CPU在执行”开中断指令“之前就不会去检查外部的中断信号

QQ_1727073407286

进程控制的相关原语

1)进程创建:

创建原语:操作系统在创建一个进程的时候使用的原语。

  1. 申请一个空白的PCB
  2. 为新进程分配所需资源
  3. 初始化PCB
  4. 将PCB插入到就绪队列

创建原语,就是吧一个进程从创建态变为就绪态

2)进程终止

撤销原语:就绪态/阻塞态/运行态->阻止态->回收

  1. 从PCB集合中找到终止进程的PCB
  2. 若进程正在运行,立刻剥夺CPU,将CPU分配给其他进程
  3. 终止其他子进程(进程之间的关系是树结构)
  4. 将该进程拥有的全部资源归还给父进程或操作系统
  5. 删除PCB

引发进程中止的事件:

  1. 正常结束
  2. 异常结束
  3. 外部干预
3)进程的阻塞和唤醒

QQ_1727074109951

4)切换原语

QQ_1727074621135

总结

QQ_1727074544322

QQ_1727074594215

进程的通信

进程之间通信(Inter-Process Communication,IPC)指的是两个进程之间产生数据交互。

共享存储

进程可以申请一块 共享存储区 这个区域的数据其他进程也可以访问!

为了避免出错,冲突等,各个进程对共享存储区域的访问应该是 互斥 的 ,

各个进程可以使用操作系统内核提供的同步互斥工具(如P、V操作)

基于数据结构的共享

基于数据结构的共享:比如共享空间只能存放一个长度为10的数组。这种共享方式速度慢,限制多,是一种低级通信方式。

QQ_1727075921825

基于存储区的共享

基于存储区的共享:操作系统在内存中划出一块存储区,数据的形式,存放位置都是通信进程控制的,而不是操作系统。这种方式共享速度快,是一中 高级通信 方式

QQ_1727075930329

信息传递

进程之间的数据交换以 格式化的消息(Message)为单位。进程通过操作系统提供的 ”发送消息“/“接收消息” 的两个 原语 来进行数据交换。

格式化的消息:消息头(谁发送,发给谁等),消息体

QQ_1727076187781

直接通信方式

消息发送进程要指明接收消息的进程ID

QQ_1727076346303

进程P向进程Q发消息,先封装好msg,调用send发送给Q,在进程Q的PCB中的消息队列里接收到消息,Q再使用receive获取P发送的消息即可。

间接通信方式

通过“信箱” 间接的通信,因此又称为 “信箱通信方式”。

QQ_1727076551318

注意体会和直接通信的区别。

管道通信

管道(pipe):FIFO

进程P写数据到管道,进程Q从管道读数据

这个数据的流向是单项的

管道和共享内存的区别:

  1. 共享存储的区域,随便你写数据到哪里,哪里有位置你就写在哪里,不依次,

  2. 而管道通信室先进先出,从头到尾的写,取数据也是从头到尾的读,依次。(数据流)

管道只能采用半双工通信,某一时间端只能实现单向传输,如果需要实现双向同时传输,需要申请两个管道。

QQ_1727076947753

总结

QQ_1727077097777

线程的概念

QQ_1727077566021

引入线程之后,线程成为了程序执行的最小基本单位

QQ_1727078477856

所谓线程可以理解为 “轻量级的进程”

线程 是一个 基本的CPU执行单位,也是程序执行流的最小单位,不仅进程可以并发执行,进程里面的线程也可以并发执行

引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机,内存地址空间,都是分配给进程的的)

引入线程-带来的变化

QQ_1727078682964

线程的属性

QQ_1727078812095

线程的实现方式和多线程模型

线程的实现方式

用户级线程(UserLevel Thread,ULT):

是程序员通过线程库实现的

1)线程管理是由线程库来完成的

2)线程切换不需要CPU的变态(用户态-》内核态)

3)操作系统不能意识到用户级线程的存在

内核级线程

QQ_1727079584982

QQ_1727079687370

多线程模型

一对一模型

QQ_1727079732194

多对一模型

QQ_1727079756443

QQ_1727079769095

多对多模型

QQ_1727079797238

总结

QQ_1727079813666

线程的状态与转换

线程的状态与转换

基本上和进程是一样的:只需要关注这三个状态:

QQ_1727079913355

组织与控制

与进程的组织与控制差不多:

控制进程的数据结构:进程控制块(PCB)

控制线程的数据结构:线程控制块(TCB)

QQ_1727080222889


第二节-进程的描述与控制
http://example.com/2024/09/02/操作系统/第二节-进程的描述与控制/
作者
JcenLeung
发布于
2024年9月2日
许可协议