第二章では、プロセス制御を説明します
概要:従来のオペレーティングシステムでは、全体のリソース使用率やシステムを改善するために、マルチプログラム技術は、通常、同じ時にメモリに複数のプログラムをロードし、それらは伝統的なセンスプログラムconcurrently.Inを実行するために採用され、もはや実行することができますこの点independently.At、リソース割り当てと独立動作のこの基本単位はプロセスです。
*前身のグラフと、プログラムの実行
図前駆体は、有向非巡回グラフ(有向非巡回グラフ)との間で行われる処理シーケンスについての説明をいいます。例えば量PiのPjの前身関係が存在し、PI-> Pjのと呼ばれる、シリアル実行、II-> CI-> PI(入力算出印刷)、シーケンス(一連の動作)、(完全な排他的プログラム実行を閉じ)、再現性(プログラム実行環境のリソースと同じ初期条件);同時に実行、断続的に、損失の閉鎖、非再現性(間接的または直接的な制約関係の制約)
*プロセスを説明して
プロセスは、プロセスエンティティを実行するプロセスは、システムリソースの割り当てとスケジューリングの別個のユニットであり、セクション、関連するデータ・セグメントからなるプロセスのプロセス制御の基本的な条件および活動プロセスブロックPCBの説明、および従って制御及び管理プロセスを利用するシステム、及びPCBプロセスエンティティの三つの部分
进程的特征 动态性(由创建而产生,由调度而执行,由撤销而灭亡),并发性(多个进程同存于内存中),独立性(进程实体是一个能独立运行,独立获得资源和独立接受调度的基本单位),异步性(独立,不可预知的速度推进,配置相应的进程同步机制)
进程的基本状态及转换
就绪状态(进程分配到除CPU意外的所有必要资源),执行状态(进程获得CPU),阻塞状态(I /O请求、申请缓冲区失败);三种基本状态的转换,进程通过进程调度又就绪态到执行态,通过I/O请求由执行态到阻塞态,I/O完成后进入就绪态,当时间片用完时,从执行态过度到就绪态;创建进程,申请空白PCB,为该进程分配运行所需资源,安插于就绪队列中;终止进程,将PCB清零,返还系统
挂起操作和进程状态的转换
I/O速度慢于CPU的运算速度,出现CPU等待I/O的情况,即要将主存中的进程对换至外存;(1)终端用户的需要:修改、检查进程,(2)父进程的需要、协调子进程,(3)对换的需要:缓和内存,(4)符合调节的需要:保证实时任务的执行;挂起(Suspend)和激活(Active)的作用下,进程的就绪,阻塞存在四种状态转变;由于性能,内存,进程总数等原因,系统会限制并发进程总数
进程管理中的数据结构
1.数据结构:内存表,设备表,文件表,用于进程管理的进程表(PCB),即是对资源或进程的标识、描述、状态等信息以及一批指针
2.PCB作用:使一个在多道程序环境下不能独立运行的程序(含数据)成为一个独立运行的基本单位,一个能与其他进程并发执行的进程。Ⅰ.作为独立运行基本单位的标志;Ⅱ.能实现间断性运行方式;Ⅲ.提供进程管理所需要的信息;Ⅳ.提供进程调度所需要的信息;Ⅴ.实现与其它进程的同步与通信
3.PCB信息:进程标识符(父进程子进程用户标识,进程序号),处理机状态(处理机各种寄存器中的内容组成),进程调度信息(进程状态,进程优先级,进程调度算法,事件),进程控制信息(程序数据地址,进程同步通信机制,除CPU外的资源清单,链接指针)
4.PCB组织方式:线性方式(因扫描整张表,适合进程数目不多的系统);链接方式(就绪队列,若干个阻塞队列,空白队列,按优先级从高到低排序);索引方式(根据进程状态的不同,建立的几张索引表)
*进程控制
操作系统内核
保护系统数据,处理机的执行状态分为两种:系统态,即管态,内核态,执行一切指令,访问所有寄存器和存储区;用户态:执行权和访问权有所限制
支撑,中断处理(内核进程的转出),时钟管理(时间片轮转,用完产生中断信号),原语操作(要么全做,要么全不做,多条指令用于完成过程,常驻内存);资源管理,进程管理(调度与分派,创建与撤销),存储器管理(逻辑地址转换为内存空间的物理地址,内存分配与回收);设备管理,驱动,缓冲,设备分配和设备独立性
进程的创建与终止
四类进程创建另一个进程的事件,用户登录(为终端用户创建进程),作业调度(为批处理作业创建进程),提供服务(为用户程序创建进程),应用请求(为使应用进程并发执行创建进程);申请空白PCB->为新进程分配运行所需资源->初始化PCB->插入就绪队列;进程的终止,正常结束,异常结束,外界干预
进程的阻塞与唤醒
请求共享资源失败(无足够资源分配给他,进程不能运行而阻塞),等待某种操作结束完成(I /O操作的完成才将进程唤醒),新数据尚未到达(数据的并发先后顺序),等待新任务到达(完成任务即阻塞,等待新任务);block原语和wakeup原语是一对作用刚好相反的原语,须成对使用
进程的挂起与激活
挂起,suspend()是活动到静止处理的过程,复制此进程的PCB于指定的内存区域,若被挂起的进程正在执行,则转向调度程序重新调度;激活,active()是静止到活动处理的过程,若采用抢占调度策略,当新进程进入就绪队列时,检查是否进行重新调度
*进程同步
进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源;间接制约,竞争独占分配到的部分或全部共享资源,直接制约,协作等待来自其他进程的信息;临界资源,一次只允许一个进程使用的资源,生产者-消费者问题;
//数组单元指针in指向暂存,out指向取走(均初始化为0),buffer为具有n个缓冲区的缓冲池
int in = 0,out = 0,count = 0;
item buffer[n];
//生产者
void producer(){
while(1){
produce an item in nextp;
...
//满则不产
while(counter==n)
;
buffer[in] = nextp;
//这里的buffer使被组织成循环缓冲的
in = (in+1)%n;
counter++;
}
};
//消费者
void consumer(){
while(1){
//空则不出
while(counter==0)
;
nextc = buffer[out];
out = (out+1)%n;
counter--;
consumer the item in nextc;
}
}
临界区,进程中访问临界资源的一段代码;之前加上进入区,之后加上推出区,不属于前面区块的称为剩余区;
同步机制应遵循的规则:空闲让进,忙则等待,有限等待,让权等待(解决共享变量的完整性和正确性,简单、有效,适用于多处理机)
关中断实现互斥的最简单方法之一(不适用于多CPU系统);Test-and-Set,并发进程共享布尔型变量lock,用于表示资源的状态,初始值为false,表示资源可用
bool TS(boll *lock){
bool old;
old = *lock;
//资源正在被使用
*lock = 1;
return old;
}
do{
...
while TS(&lock);
critical section;
lock = 0;
remainder section;
}while(1);
Swap指令,每个临界资源设置一个全局布尔型变量lock,初始值为false,每个进程有一个局部布尔型变量key
void swap(bool *a,bool *b){
bool temp;
tamp = *a;
*a = *b;
*b = temp;
}
do{
key = 1;
do{
swap(&lock,&key);
}while(key!=0);
//临界区操作
lock = 0;
...
}while(1);
信号量机制,标识可供并发进程使用的资源实体数或等待使用临界区的进程数;Ⅰ整型信号量,P(wait)V(signal)操作,执行不可中断;Ⅱ记录型信号量,采用记录型的数据结构,当请求资源时,有S -> value--,当释放资源时,有S -> value++;
//包含两个数据项
typedef struct{
int value;
struct process_control_block *list;
}semaphore;
//wait(S)
wait(semaphore *S){
S->value--;
//资源分配完毕,自我阻塞,放弃处理机
if(S->value<0)
block(S->list);
}
//signal(S)
signal(semaphore *S){
S->value++;
//唤醒list中第一个等待进程
if(S->value<=0)
wakeup(S->list);
}
AND型信号量,两个及两个以上记录型信号量,一次性全部分配给进程,待进程使用完后再一起释放(注意临界资源分配方式可能产生死锁);信号量集,用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理;wait(mutex)和signal(mutex)成对出现
管程包含,管程的名称,局部于管程的共享数据结构说明,对该数据结构进行操作的一组过程,对局部于管程的共享数据设置初始值的语句;将共享变量以及对共享变量能够进行的所有操作集中在一个模块中
*经典进程的同步问题
Ⅰ.生产者-消费者问题
int in = 0,out = 0;
item buffer[n];
//mutex为1,两进程均未进入临界区;为0一个进入临界区运行,另一个等待;为-1一个正在临界区运行,另一个因等待阻塞在信号量队列中;empty,full表示空/满缓冲区
semaphore mutex = 1,empty = n,full = 0;
void producer(){
do{
producer an itemm nextp;
...
wait(empty);
wait(mutex);
//Swait(empty,mutex);
buffer[in]=nextp;
in=(in+1)%n;
signal(mutex);
signal(full);
//Ssignal(mutex,full);
}while(1);
}
void consumer(){
do{
wait(full);
wait(mutex);
//Swait(full,mutex);
nextc=buffer[out];
out=(out+1)%n;
signal(mutex);
signal(empty);
//Ssignal(mutex,empty);
consumer the item in nextc;
...
}while(1);
}
void main(){
cobegin
producer();
consumer();
coend
}
PC管程过程,cwait(condition),csignal(condition)
Monitor prodecerconsumer{
item buffer[N];
int in,out;
condition notfull,notempty;
int count;
public:
void put(item x){
if(count>=N)
cwait(notfull);
buffer[in]=x;
in=(in+1)%N;
count++;
csignal(notempty);
}
void get(item x){
if(count<=0)
cwait(notempty);
x=buffer[out];
out=(out+1)%N;
count--;
csignal(notfull);
}
{
in = 0;out = 0;count = 0;
}
}
Ⅱ.哲学家进餐问题
//五个信号量构成信号量数组,均被初始化为1
semaphore chopstick[5] = {1,1,1,1,1};
do{
//保证左边和右边执行完成
wait(chopstick[i]);
wait(chopstick[(i+1)%5]);
//Swait(chopstick[(i+1)%5],chopstick[i]);
...
//eat
...
signal(chopstick[i]);
signal(chopstick[(i+1)%5]);
//Ssignal(chopstick[(i+1)%5],chopstick[i]);
...
//think
...
}
Ⅲ.读者-写者问题
//wmutex因读写互斥而产生,rmutex因临界资源readcount可被多个Reader进程访问
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(1);
}
void Writer(){
do{
wait(wmutex);
perform write operation;
signal(wmutex);
}while(1);
}
void main(){
cobegin()
Reader();
Writer();
coend
}
*进程通信
进程间的信息交换 共享存储器系统,基于数据结构(低级通信),存储区(高级通信);管道通信系统(互斥,同步,确定对方是否存在);消息传递系统(直接通信方式,间接通信方式);客户机-服务器系统(套接字,远程过程调用和远程方法调用)
*线程
1.进程是系统资源分配的单位,线程是处理器调度的单位;
2.线程表示进程的一个控制点,可以执行一系列的指令。通常,和应哟个程序的一个函数相对应
3.进程分解为线程还可以有效利用多处理器和多核计算机
本章习题小结:
2.5 在操作系统中为什么要引入进程的概念?它会产生什么样的影响?
为了使程序在多道程序环境下能并发执行,并对并发执行的程序加以控制和描述,使程序的并发执行得以实行。
2.7 试说明PCB的作用具体表现在哪几个方面?为什么说PCB使进程存在的唯一标志?
PCB使进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其他进程并发执行的进程。OS使根据PCB对并发执行的进程进行控制和管理的。
2.16 在创建 一个进程时所要完成的主要工作是什么? Ⅰ.OS发现请求创建新进程事件后,调用进程创建原语Create();
Ⅱ.申请空白PCB;
Ⅲ.为新进程分配资源;
Ⅳ.初始化进程控制块;
Ⅴ.将新进程插入就绪队列。
2.17 在撤销一个进程时所要完成的住哟啊工作是什么?
Ⅰ.根据被终止进程标识符,从PCB集中检索出进程PCB,读出该进程状态;
Ⅱ.若被终止进程处于执行状态,立即终止该进程的执行,置调度标志真,指示该进程被终止后重新调度;
Ⅲ.若该进程还有子进程,应将所有子孙进程终止,以防止它们成为不可控进程;
Ⅳ.将被终止进程拥有的全部资源,归还给父进程,或归还给系统;
Ⅴ.将被终止进程PCB从所在队列或列表中移出,等待其它程序搜集信息。
2.19 为什么要在OS中引入线程?