关于进程

来源:互联网 发布:java http请求框架 编辑:程序博客网 时间:2024/06/06 02:59

创建进程

有4种事件导致进程的创建:
1、系统初始化
2、有一个执行中的进程所调用的进程创建系统调用
3、用户自己创建进程
4、一个批处理作业的初始化
(fork)

进程的状态

1、运行态
2、就绪态
3、阻塞态

进程的实现

操作系统有一张进程表。每一项记录每个进程的各种信息。也称为进程控制块

进程间通信

1、竞争条件
两个或多个进程读写某个共享数据,而最后的结果取决进程运行的精确时序,称为竞争条件
2、临界区
(1)任何两个进程不能同时进入临界区
(2)不能使进程无限期等待进入临界区
(3)在临界区外的进程不能阻塞其他进程
3、忙等待的互斥
1、屏蔽中断
进程进入临界区即屏蔽中断,离开时打开中断,CPU只有发生中断时才会进行进程切换
2、锁变量
设一个共享锁,初始化为0,如果锁为0,进程可以进入临界区,进入后设置锁为1,其他进程无法进入,等其出来才把锁设0
3、严格轮换法
整型变量turn,初始化为0,用于记录轮到哪个进程进入临界区,turn为0,进程0可以进入临界区,出来后把turn设1,然后进程1可以进入临界区
这里写图片描述
4、Peterson解法
进程0调用enter_region,通过设置数组元素和将turn设置0,表示希望进入临界区,由于进程1不想进入临界区,所以enter _region很快返回,如果,进程1现在调用enter _region会挂起,直到进程0调用leave——region退出临界区
这里写图片描述
4、睡眠与唤醒
生产者-消费者模式
http://blog.csdn.net/jyxmust/article/details/56834219
5、信号量
用一个整型变量来累计唤醒次数,两个操作,down和up,down操作,信号量减1,up操作信号量加1
6、互斥量
互斥量是处于两态之一的变量:加锁和解锁,而就在表示,0表示解锁,其他值表示加锁,解锁状态,进程可以调用mutex_lock进入临界区,加锁则被阻塞

enter _region和mutex _lock的区别,前者进入临界区失败,则一直在重复测试(忙等待),后者会调用thread _yield将CPU放弃给另一个进程

7、管程
任一时刻管程只有一个活跃进程,互斥由编译器负责,只需知道所有临界区转换为管程过程,使用条件变量wait和signal让生产者发现缓冲区满了

原创粉丝点击