操作系统之-----进程管理

进程管理(Process)

一,引入

1.单道程序:占用全部资源,顺序执行,条件相同则结果必相同(可再现性)。
2.多道程序:并发进行,执行时可再输入,条件相同结果也未必相同;

操作系统之-----进程管理
2.1.Bernstein条件(并发执行条件):
当且仅当:R(p1) ∩ W(p2) ∪ R(p2) ∩ W (p1) ∪ W(p1) ∩ W(p2)=={ }

二,进程介绍(数据,程序,PCB)

1.三种基本状态及其转换
运行:进程数小于处理机数;
就绪:已获得必要资源,就等待处理机,队列按优先级排列;
阻塞:等待I/O 或因同步事件暂停,不能参与竞争处理机;

①就绪—>运行:获得处理机;
②.运行—>阻塞:由于I/O,等待同步事件,访问临界资源等原因 不能继续执行;
③阻塞—>就绪:阻塞条件解除后,回到就绪队列,等待处理机;

2.增加状态
①创建状态:分配PBC结构,进程组,链接好关系;
②退出状态:释放资源,暂留系统,收集PCB信息;
③挂起状态:因内存紧张,部分进程换至外存,解除后,不能直接进入就绪,有就绪挂起、阻塞挂起;
3.PCB结构
①进程描述信息:进程名,用户名,进程标识符;
②处理机状态信息:通用寄存器(暂存信息),指令寄存器(存下一条指令地址),程序状态字寄存器PSW(状态信息),栈指针(系统调用参数及地址);
③进程调度信息:进程状态,优先级,统计信息(执行时间,等待时间),阻塞原因;
4.PCB组织
相同状态的PCB链接为一个队列:
5.原语:要么做要么不做,不构成中断
阻塞原语:停止进程执行,插入阻塞队列,重新调度;
唤醒原语:进程由阻塞队列进入就绪队列,改变PCB状态;
挂起原语:检查进程状态并变成挂起状态;
**原语:就绪挂起则变为就绪,阻塞挂起则进入阻塞队列;
创建原语:申请空白PCB并初始化信息,为其分配资源;
撤销原语:终止进程,撤销子进程,归还资源,移出队列

三,线程

1.优点:响应度高(部分阻塞,其他线程仍可执行);资源共享(共享同一进程资源)
2.线程控制块(TCB):标识符,寄存器,栈指针,私有存储器;
3.线程创建: 进程---->创建主线程—>新线程—>投入就绪队列;
4.线程分类:
用户级线程(User Level Threads,ULT):线程库管理,内核不知道它的存在,可在任何操作系统运行(由自身线程库实现);
内核级线程(Kernel Supported Threads,KST):可以把一个进程中多个线程分配给多个处理机,缺点就是切换时需要内核状态装换;
区别:用户级线程阻塞则整个进程阻塞,内核级线程阻塞不会引起进程阻塞,
4.轻型进程(Light weight process)
操作系统之-----进程管理
轻型进程是介于用户级和内核级进程之间;
注意:
①只有和LWP链接的线程才可以和内核级线程通信;
②一个LMP对应一个内核级线程;
③内核级线程阻塞—>LWP阻塞—>所连用户级线程阻塞;
5.线程池
限制了最大的进程数量;
思想:进程创建一定的线程放入池中等待----->收到请求---->唤醒一个线程----->完成服务----->返回池中等待
若线程用完了,则等待;
优点:
①现有线程处理请求比临时创建更快;
②限制了可用线程数量;

四,进程同步与互斥

互斥:进程不能同时使用同一资源;
同步:多个进程存在时序关系;
临界资源:只允许一个进程访问的资源;
临界区:访问临界资源的那段代码;
操作系统之-----进程管理
实现方法: 信号量和PV操作

struct semaphore{
int value; value 表示某种资源数目
struct PCB *queue;
}

P原语:
void wait(semaphore s)
{
s.value = s.value-1;
if(s.value<0)
block(s.queue);
}
阻塞进程,投入等待队列;

V原语:
void signal(semaphore s)
{
s.value = s.value+1;
if(s.value<=0)
wackup(s.value);
}
唤醒阻塞进程,从等待进程取出,投入就绪队列;

①解决互斥问题:
定义互斥信号量 mutex=1
如:
semaphore mutex=1;
P1:
{
P(mutex);
R1=COUNT;
R1=R1+1;
COUNT=R1;
V(mutex);
}

P2:
{
P(mutex);
R2=COUNT;
R2=R2-+1;
COUNT=R2;
V(mutex);
}

②解决同步问题:
semaphore S=0;
/进程P1/
C1; // P1代码段
V(S);

/进程P2/
P(S);
C2;

经典进程同步,互斥问题
1.生产者----消费者问题
2.读者-------写者问题
3.哲学家进餐问题
4.打瞌睡的理发师问题

五,管程

1,思想:把信号量和操作原语封装在一个对象内部(用函数库实现);
2,特征:
①必须经过管程才能访问共享资源;
②一次只允许一个进程进入管程,其他进程调用管程一律挂起,实现了进程互斥;
③进程需要通过调用管程的一个过程来进入管程;

六,案例

1> Solars 的同步与互斥
①自旋锁:保护短的临界数据,长了就低效;
某时刻,只有一个进程获得自旋锁,本质上是检查内存上的一整数,为0则可获得,改为1后进入临界区,为非零则不断检查直至为0;
②读写锁:用于保护经常访问的只读数据,允许多进程只读访问,数据更新时互斥访问;
③十字转门:是一个就绪队列,未获得锁的进程阻塞并进入此队列;
2> Windows 的同步与互斥
除上述外,还有
①屏蔽中断:进程刚进入临界区时,屏蔽所有中断,防止其他进程介入;
②调度对象:
事件:条件出现,通知等待线程;
定时器:在一定事件后通知进程;

七,进程通信

1>.进程通信类型:
1.共享存储器系统
2.消息传递系统
3.管道通信
2>.客户端—服务器系统通信
1.命令管道
2.套接字
3.远程过程调用
4.远程方法调用