文章目录
前驱图和程序执行
前驱图
就是一个有向无环图DAG
程序的顺序执行
- 顺序性
- 封闭性
- 可再现性
程序的并发执行
- 间断性:相互制约将导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。
- 失去封闭性:多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变
- 不可再现性:所以要引入进程和进程同步来规避这些问题
进程的描述
进程的定义与特征
- 定义:
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
- 进程特征:
- 结构性:由程序段、相关的数据段和PCB三部分便构成了进程实体
- 动态性:“由创建而产生,由调度而执行,由撤销而消亡”。进程实体有一定的生命期
- 并发性
- 独立性:进程是独立运行的基本单位,也是系统资源分配与调度的独立单位
- 异步性:进程以各自独立的、不可预知的速度向前推进
进程基本状态及转换
- 三种基本状态:
- 就绪状态(Ready):已经准备好运行的状态。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
- 执行状态(Executing)
- 阻塞状态(Blocked)(等待状态或封锁状态):正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态
致使进程阻塞的典型事件有:请求I/O,申请缓冲空间等。通常将这种处于阻塞状态的进程也排成一个队列。有的系统则根据阻塞原因的不同而把处于阻塞状态的进程排成多个队列。
- 三种状态的基本转换
- 创建状态和终止状态
- 创建一个进程一般要通过两个步骤:首先,为一个新进程创建PCB,并填写必要的管理信息;其次,把该进程转入就绪状态并插入就绪队列之中
- 创建状态:系统已为其分配了PCB,填写了进程标识等信息,但由于该进程所必需的资源或其它信息,如主存资源尚未分配等
- 终止状态:当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态
进程的终止也要通过两个步骤:首先等待操作系统进行善后处理,然后将其PCB清零,并将PCB空间返还系统
进入终止态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其它进程收集
一旦其它进程完成了对终止状态进程的信息提取之后,操作系统将删除该进程
挂起操作和进程状态的转换
- 挂起状态的引入
- 终端用户的请求
- 父进程的请求
- 负荷调节的需要
- 操作系统的需要
- 引入挂起挂起原语后三个进程状态的转换
- 活动就绪Readya→静止就绪Readys
- 活动阻塞Blockeda→静止阻塞Blockeds
- 静止就绪→活动就绪
- 静止阻塞→活动阻塞
- 静止阻塞→静止就绪
- 引入挂起操作后五个进程状态的转换
- 创建→活动就绪
- 创建→静止就绪
进程管理中的数据结构(进程控制块PCB)
- 操作系统中用于管理控制的数据结构
对于每个资源和每个进程都设置了一个数据结构,用于表征其实体,称之为资源信息表或进程信息表- 内存表
- 设备表
- 文件表
- 用于进程管理的进程表(进程控制块PCB)
- 进程控制块的作用
PCB作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构
进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。- 作为独立运行基本单位的标志:系统是根据进程的PCB而感知到该进程的存在的,PCB是进程存在的唯一标志
- 能实现间断性运行方式:系统可将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调度执行时恢复CPU现场时使用。
- 提供进程管理所需要的信息:程序和数据的始址指针、资源清单等
- 提供进程调度所需要的信息:进程处于何种状态;优先级;等待时间和已执行时间
- 实现与其他进程的同步与通信:信号量、通信队列指针等
- 进程控制块中的信息
- 进程标识符:内部标识符PID(唯一的数字标识符);外部标识符,由创建者提供
- 处理机状态:通用寄存器,指令计数器,程序状态字PSW,用户栈指针
- 进程调度信息:进程状态,进程优先级,进程调度所需其它信息(与采用的调度算法有关),事件(阻塞原因)
- 进程控制信息:程序和数据的地址,进程同步和通信机制,资源清单,链接地址
- 进程控制块的组织方式
- 线性方式
- 链接方式
- 索引方式
进程控制
操作系统内核
原语操作
是由若干条指令组成的,用于完成一定功能的一个过程。它与一般过程的区别在于:它们是“原子操作(Atomic Operation)”。所谓原子操作,是指一个操作中的所有动作要么全做,要么全不做。换言之,它是一个不可分割的基本单位,因此,在执行过程中不允许被中断。原子操作在管态下执行,常驻内存。
进程的创建Create
- 进程图
- 引起创建进程的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
- 进程的创建原语create
- 申请空白PCB
- 为新进程分配资源
- 初始化进程控制块
- 将新进程插入就绪队列
进程的终止
- 引起进程终止的事件
- 正常结束
- 异常结束:越界错误;保护错;非法指令;特权指令错;运行超时;等待超时;算术运算错;I/O故障
- 外界干预:操作员或操作系统干预;父进程请求;父进程终止
- 进程的终止原语termination
- 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态
- 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度
- 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程
- 将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统
- 将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息
进程的阻塞与唤醒
- 引起事件:
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可做
- 进程阻塞原语(block)
进程的挂起与激活
进程同步
进程同步的基本概念
- 两种形式的制约关系:
- 间接相互制约关系:源于资源共享
- 直接相互制约关系:进程间的合作
- 临界资源:一次只允许一个进程使用的资源
- 临界区:包含临界资源的程序段称为临界区
repeat
entry section
critical section;
exit section
remainder section;
until false;
- 临界区调度准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
硬件同步机制
- 关中断
- 利用Test-and-Set指令实现互斥
- 利用swap指令实现互斥
信号量机制
- 整型信号量:有忙等
- 记录型信号量
type semaphore=record
value: integer;
L: list of process;
end
procedure wait(S)
var S:semaphore;
begin
S.value:=S.value-1;
if S.value<0 then block(S.L);
end
procedure signal(S)
var S: semaphore;
begin
S.value:=S.value+1;
if S.value<=0 then wakeup(S.L);
end
- 实现互斥关系
- 实现同步关系
- 实现前驱关系
- AND型信号量
Swait(S1,S2,…,Sn)
if Si>=1 and … and Sn>=1 then
for i:=1 to n do
Si:=Si-1;
endfor
else
place the process in the waiting queue associated with the first Si found with Si<1 and set its program counter to the beginning of the Swait Operation.
endif
Ssignal(S1,S2,…,Sn)
for i:=1 to n do
Si:= Si +1;
Remove all the process waiting in the queue associated with Si into the ready queue.
endfor;
- 信号量集
Swait(S1,t1,d1,…,Sn,tn,dn)//S为信号量,d为需求值,而t为下限值。
if Si>=t1 and … and Sn>=tn then
for i:=1 to n do
Si:=Si-di;
endfor
else
Place the executing process in the waiting queue of the first Si with Si<ti and set its program counter to the beginning of the Swait Operation.
endif
Ssignal(S1,d1,…,Sn,dn)
for i:=1 to n do
Si:=Si+di;
Remove all the process waiting in the queue associated with Si into the ready queue
endfor;
- Swait(S,d,d)。此时,在信号量集中只有一个信号量S,但允许它每次申请d个资源,当现有资源数少于d时,不予分配。
- Swait(S,1,1)。此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)。
- Swait(S,1,0)。这是一种很特殊且很有用的信号量操作。当S≥1时,允许多个进程进入某特定区;当S变为0后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。
管程机制
- 定义
代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成了一个操作系统的资源管理模块
- 组成
- 名称
- 局部于管程内部的共享数据结构说明
- 对该数据结构进行操作的一组过程
- 对局部于管程内部的共享数据设置初始值的语句
- 特性
- 模块化
- 抽象数据类型
- 信息掩蔽
- 管程和进程的区别
- 条件变量
经典问题
生产者-消费者问题
哲学家进餐问题
Var chopstick array of semaphore:=(1,1,1,1,1);
processi
repeat
think;
Sswait(chopstick[(i+1)mod 5],chopstick[i]);
eating;
Ssignal(chopstick[(i+1)mod 5],chopstick[i]);
until false;
读者写者问题
写者不能同时写;
读者可以同时读;
读者读时写者不能写, 写者写时读者不能读
进程通信
- 两种交换信息:
- 低级通信(传递控制信息)
- 高级通信(传递数据)
进程通信的类型
- 共享存储器系统
- 管道通信系统
- 消息传递系统
- 客户机-服务器系统
消息传递通信的实现方式
直接消息传递系统实例
线程基本概念
线程的引入
线程与进程的比较
线程的状态与线程控制块
线程实现
线程的实现方式
线程的实现
线程的创建和终止
太文了,劳资不写了