文章目录
进程的描述与控制
前趋图和程序执行
前趋图
前趋图是一个有向无循环图。用于描述进程之间执行的先后顺序。
程序顺序执行
特征:顺序性;封闭性;可再现性;
程序并发执行
特性:间断性;失去封闭性;不可再现性;
进程的描述
进程的定义和特性
进程实体=程序段+数据段+控制块PCB
- 进程是程序的一次执行。
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
- 进程是具有独立功能的程序在 一个数据几何上运行的过程,他是系统进行资源分配和调度的一个独立单位。
特性:动态性(基本特征);并发性;独立性;异步性;
进程的基本状态及转换
进程的三种基本状态:就绪状态;执行状态;阻塞状态;
与进程执行相关的各种共享资源:CPU、存储器、I/O设备、时间片;
挂起操作和进程状态的转换
引起进程挂起的原因:用户登录;作业调度;提供服务;应用请求;
进程管理中的数据结构
进程控制块PCB的作用:作为独立运行基本单位的标志;能实现间断性运行方式;提供进程管理所需要的信息;提供进程调度所需要的信息;实现与其它进程的同步与通信;
进程控制块中的信息:
①进程标识符:外部标识符;内部标识符;
②处理机状态:通用寄存器;指令计数器;程序状态字PSW;用户栈指针;
③进程调度信息:进程状态;进程优先级;进程调度信息;事件;
④进程控制信息:程序和数据的地址;进程同步和通信机制;资源清单;连接指针;
进程控制块的组织方式:线性方式;链接方式;牵引方式;
进程控制
操作系统内核
两大功能:
①支撑功能:中断处理;时钟管理;原语操作;
②资源管理功能:进程管理;存储器管理;设备管理;
进程的创建
引起创建进程的事件:用户登录;作业调度;提供服务;应用请求;
进程的创建:
①申请空白PCB;
②为新进程分配其运行所需的资源;
③初始化进程控制块;
④如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列;
进程的终止
引起进程终止的事件:正常结束;异常结束;外界干预;
进程的终止过程:
①根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;
②若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度;
③若该进程有子孙进程,应将其终止,以防成为不可控进程;
④将资源归还给父进程或系统;
⑤将被终止进程(PCB)从所在队列中移除,等待其它程序来搜索信息;
进程的阻塞与唤醒
引起进程阻塞和唤醒的事件:向系统请求共享资源失败;等待某种操作的完成;新数据尚未到达;等待新任务的到达;
阻塞和唤醒的过程:
①将PCB中的状态改为阻塞;
②该PCB加入到阻塞队列中;
③转进程调度,将处理机分配给另一进程;
④进程行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态;
进程的挂起与激活
进程同步
进程同步的基本概念
两种制约关系:间接相互制约关系;直接相互制约关系;
对多个相关进程在执行次序上进行协调使并发执行的进程之间能按照一定的规则共享系统资源并能很好地相互合作,从而使程序的执行具有可再现性。
临界资源:一次仅允许一个进程使用的资源
while(TURE){
进入区
临界区
退出区
剩余区
}
规则:空闲让进;忙则等待;有限等待;让权等待;
控制同步的关键:主要涉及“判断”和“修改标志”操作不应被打断;
硬件同步机制
关中断:进入锁测试之前关闭终端,直到完成锁测试并上锁之后才能打开中断,进程在临界区执行期间计算机系统不响应中断,从而不会引发调度;
缺点:滥用风险;关中断时间过长,会影响系统效率限制CPU交叉执行能力;不适用与多CPU系统;
Test-and-Set指令实现互斥:
boolean TS(boolean *lock){
boolean old;
old=*lock;
*lock=TRUE;
return old;
}
do{
...
while TS(&lock);
critical section;
lock=FALSE;
remainder section;
}while(TRUE);
利用Swap指令实现进程互斥
void swap(boolean *a,boolean *b){
boolean temp;
temp=*a;
*a=*b;
*b=temp;
}
do{
key=TRUE;
do{
swap(&lock,&key);
}while(key!=FALSE);
临界区操作;
lock=FALSE;
...
}while(TRUE);
信号量机制
整型信号量
wait(S){
while(S<=0);
S--;
}
signal(S){
S++;
}
记录型信号量
typedef struct{
int value;
struct process_control_block *list;
}semaphore;
wait(semaphore *S){
S->value--;
if(S->value<0) block(S->list);
}
signal(semaphore *S){
S->value++;
if(S->value<=0) wakeup(S->list);
}
信号量的应用
利用信号量实现进程互斥
semaphore mutex=1;
PA(){
while(1){
wait(mutex);
临界区;
signal(mutex);
剩余区;
}
}
PB(){
while(1){
wait(mutex);
临界区;
signal(mutex);
剩余区;
}
}
管程机制
管程由四部分组成:①管程的名称;②局部于管程的共享数据结构说明;③对该数据结构进行操作的一组过程;④对局部于管程的共享数据设置初始值的语句;
经典进程的同步问题
生产者—消费者问题
int in=0,out=0;
item buffer[n];
semaphore mutex=1,empty=n,full=0;
void producer(){
do{
producer an item nextp;
...
wait(empty);
wait(mutex);
buffer[in]=nextp;
in=(in+1)%n;
signal(mutex);
signal(full);
}while(TRUE);
}
void consumer(){
do{
wait(full);
wait(mutex);
nextc=buffer[out];
out=(out+1)%n;
signal(mutex);
signal(empty);
consumer the item in nextc;
...
}while(TRUE);
}
void main(){
cobegin
producer();consumer();
coend;
}
哲学家进餐问题
semaphore chopstick[5]={1,1,1,1,1};
do{
wait(chopstick[i]);
wait(chopstick[(i+1)%5]);
...
//eat
...
signal(chopstick[i]);
signal(chopstick[(i+1)%5]);
...
//think
...
}while(TRUE);
读者—写者问题
semaphore rmutex=1,wmutex=1;
int readcount=0;
void Reader(){
do{
wait(rmutex);
if(readcount==0) wait(wmutex);
readcount++;
signal(rmutex);
...
perform read operation;
...
wait(rmutex);
readcount--;
if(readcount==0) signal(wmutex);
signal(rmutex);
}while(TRUE);
}
void Writer(){
do{
wait(wmutex);
perform write operation;
signal(wmutex);
}while(TRUE);
}
void main(){
cobegin
Reader();Writer();
coend;
}
进程通信
进程通信的类型
共享存储器系统(基于共享数据结构的通信方式;基于共享存储区的通信方式;)
管道通信系统
消息传递系统(直接通信方式;间接通信方式;)
客户机-服务器系统
消息传递通信的实现方式
直接消息传递系统
信箱通信
直接消息传递系统实例
线程的基本概念
线程的引入
进程的两个基本属性:①进程是一个可拥有资源的独立单位;②进程同时又是一个可独立调度和分派的基本单位;
程序能并发执行,系统必须进行以下操作:创建进程;撤销进程;进程切换;
线程——作为调度和分派的基本单位;
线程与进程的比较
调度的基本单位;并发性;拥有资源;独立性;系统开销;支持多处理机系统;
线程的状态和线程控制块
线程运行的三个状态:执行状态;就绪状态;阻塞状态;
线程控制块TCB(线程标识符;一组寄存器;线程运行状态;优先级;线程专有存储区;信号屏蔽;堆栈指针;)
多线程OS中的进程属性:①进程是一个可拥有资源的基本单位;②多个线程可并发执行;③进程已不是可执行的实体;
线程的实现
线程的实现方式
内核支持线程KST
用户级线程ULT
组合方式