相关链接|
¶进程的基本状态
-
执行
-
就绪
-
阻塞

绝对不会出现,CPU空闲而还有进程就绪的情况
cpu一定会从就绪队列中取下一个进程运行
¶进程的五种基本状态
-
创建状态 -> 即进程在申请PCB的阶段
-
终止状态 -> 进程已经完全运行完,等待OS善后,并回收PCB也称将死状态
¶进程的7种基本状态
-
挂起状态
即在状态转换种加入了人的参与,由用户操作将进程挂起
由,就绪和阻塞拓展出了两种新状态,
即,静态就绪和静态阻塞
用户执行挂起操作时就会将进程转换为这两种状态

¶进程控制块
PCB是进程的一部分,是操作系统中最重要的记录型数据结构,是进程存在的唯一标志,常驻内存
¶PCB的作用
-
作为独立运行基本单位的标志
-
能实现间断性的运行方式
-
提供进程管理所需要的信息
-
提供基础调度所需要的信息
-
实现与其他进程的同步与通信
¶PCB的信息——处理机状态信息
处理机状态信息主要是由处理机各种寄存器的内容所组成
-
通用寄存器
-
指令寄存器:存放要访问的下一条指令
-
程序状态字PSW:条件码,执行方式,中断屏蔽标志
-
用户栈指针:每个用户进程有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址
¶PCB的信息——进程控制信息
-
程序和数据的地址
-
进程同步和通信机制
-
资源清单
-
链接指针
、
¶PCB表
系统把所有的PCB组织在一起,并把他们放在内存的固定区域,就构成了PCB表。
PCB表的大小决定了系统中最多可同时存在的进程格式,称为系统的并发度
¶PCB表的组织方式
-
线性方式
-
链接方式
-
索引方式



¶进程控制
¶原语
-
原语
由若干条指令组成,用于完成一定功能的一个过程。
-
进程管理最基本的功能:由OS内核中的原语实现
¶进程创建
进程具有层次结构
有些进程会由于自身业务的需要,去主动创建子进程去处理业务
此时,就出现了层级关系,即父子进程
¶进程创建过程
-
申请空白PCB
-
分配所需要资源
-
初始化PCB
-
插入就绪队列
¶进程终止
¶引起进程终止的事件
正常结束
异常结束
外界干预
¶进程终止过程
找进程的PCB,读取进程状态
终止进程,并设置调度标志
终止所有子进程
回收进程所拥有的全部资源
回收PCB,生命周期结束
¶进程的阻塞与唤醒
¶引起进程阻塞的事件

¶进程阻塞过程
-
停止执行
-
状态由执行改为阻塞
-
将PCB插入阻塞队列
¶唤醒过程
-
从阻塞队列中移出
-
状态由阻塞改为就绪
-
将PCB插入就绪队列
进程的阻塞与唤醒一般成对出现
¶Unix进程控制实现
¶创建——fork()
-
为子进程分配进程表
-
为子进程分配进程标识符
-
复制进程的进程映像,但不复制共享内存区
-
增加父进程所打开文件的计数,表示新进程也在使用这些文件
-
把子进程置为“就绪”
-
返回子进程标识符给父进程,把0值返回给子进程

如果创建失败,则父进程会返回$-1$
¶进程映像的改换——exec
更改进程执行代码,更改正文段,数据段
调用格式:exec(文件名,参数列表,环境变量)
¶进程终止——exit
当一个进程指向性结束后,进程可以调用exit自我终止。
终止时它放弃占用的所有资源,清除缓冲区,处于等待父进程善后处理状态。
¶等待子进程终止——wait
父进程等待子进程的终止
对处于等待善后处理状态的子进程进行善后处理。
在用户态进程中,父进程调用wait(status)等待它的一个子进程终止
若子进程没有终止,则它进入阻塞态
¶进程通信
进程通信是指进程之间的信息交换


¶信号
¶概念
软件中断
处理异步事件的机制
信号名(以SIG开头)
¶信号产生
按中断键,硬件异常,kill函数,kill命令
¶信号


¶无名管道
¶原理
-
管道是连接读写进程的一个特殊文件,允许进程按先进先出的方式传送数据,也能使进程同步执行操作
-
发送进程以字符流形式把大量数据送入管道,接收进程重管道中读取数据,所以叫管道通信
¶相关系统调用
通过pipe系统调用创建无名管道,得到两个文件描述符,分别用于写和读


¶消息队列
¶msgget
根据用户给出的整数值key,创建新消息队列或打开现有消息队列,返回一个消息队列ID
¶msgsnd
发送消息
¶msgrcv
接收消息,可以指定消息类型;没有消息返回-1
¶msgctl
对消息队列进行控制,如删除消息队列;
¶无名管道
¶原理
-
共享内存是内核为进程创建的一个特殊的内存段,它可连接到自己的地址空间,也可以连接到其他进程的地址空间
-
最快的进程间通信方式
-
不提供任何同步功能

¶线程的概念及实现
进程的两个基本属性
-
进程是一个可拥有资源的独立单位
-
进程是一个可独立调度和分派的基本单位
-
进程是拥有资源的基本单位
-
线程作为调度和分派的基本单位
调度的基本单位
并发性
-
在引入线程的操作系统中,不仅进程中间可以并发执行,而且在一个进程中的多个线程之间,也可以并发执行
¶线程状态
-
执行态、就绪态、阻塞态
-
线程状态转换与进程状态转换一样
¶进程控制块
-
线程标识符、一组寄存器、线程运行态、优先级、线程专有存储器、信号屏蔽、堆栈指针
¶线程实现
¶实现方式
-
内核支持线程KST
-
用户级线程ULT
-
组合方式
具体实现:
-
内核支持线程的实现
-
用户级线程的实现
¶在内核空间的实现
优点
-
在多处理机系统中,内核可同时调度同一进程的多个线程
-
如果一个线程阻塞了,内核可调度其他线程(同一或其他进程)
-
线程切换比较块,开销小
-
内核本身可采用多线程技术,提高执行速度和效率
缺点
-
对用户线程切换,开销较大
¶用户级线程ULT

优点
-
线程切换不需要转换到内核空间
-
调度算法可以是进程专用的
-
线程的实现与OS平台无关
缺点
-
系统调用的阻塞问题
-
多线程应用不能利用多处理机进行多重处理的优点

¶进程线程对比
-
需要频繁创建销毁的优先用线程
-
需要进行大量计算的优先使用线程。所谓大量计算,会耗费很多CPU,切换频繁,优先选择线程。
-
强相关处理用线程,弱相关处理用进程
-
可能要拓展到多机分布的用进程,多核分布的用线程
课后习题
-
🚩采用轮换调度算法,进程中设置内核进程和用户进程效果完全不同