操作系统之——进程(2)进程同步与线程

来源:互联网 发布:it工作经验怎么写 编辑:程序博客网 时间:2024/05/09 07:57

进程同步的基本概念

进程同步机制对相关进程在执行次序上进行协调,使并发的进程之间按一定规则共享资源,使程序的执行具有可再现性。

两种形式的制约关系

1.间接制约:进程间无关,但都要使用临界资源
2.直接制约:进程间协作,需要按照某些规则运行

临界资源

一次仅允许一个进程使用的资源称为临界资源。

临界区

每个进程访问临界资源的那段代码(对于进程本身而言)

同步机制应遵守的规则

1.空闲让进:临界资源 为空闲状态时,允许一个进程进入自己的临界区
2.忙则等待:临界资源被访问时,使其他试图进入临界区的进程等待
3.有限等待:保证等待的进程在有限时间内能进入临界区,避免死锁
4.让权等待:进程无法进入临界区时释放处理机

硬件同步机制

1.关中断
2.利用硬件指令Test-and-Set
3.利用对换指令Swap
(非侧重)

信号量机制

整型信号量

一个用于表示资源数目的整型量S,除初始化外还有P,V操作(wait,signal操作)

P操作(申请资源)wait(S){    while(S<=0);  //在资源数目不大于0时阻塞    S--;  //不阻塞,则占据1单位的资源,S数目减一}V操作(释放资源)signal(S){    S++;  //使用完毕后释放资源,S数目加一}

未遵循让权等待原则,使进程处于“忙等”状态。

记录型信号量

在整型信号量基础上增加了一个进程链表指针,用于连接所有等待的进程

typedef struct{    int value;  //资源数目    struct process_control_block *list;  //链表指针}semaphore;P操作wait(semaphore *S){    S.value--;    if(S.value<0)        block(S.list);}V操作signal(semaphore *s){    S.value++;    if(SS.value<=0)        wakeup(S.list);}s.value初值表示系统中某类资源的数目P(wait)操作,表示进程请求一个单位的资源,value-=1当s.value<0时表示该类资源已经分配完毕,进程调用block进行自我阻塞,放弃处理机并插入到信号量列表s.list中(让权等待)s.value为负数时表示信号量链表中阻塞的进程数目V(wait)操作,表示进程释放一个单位的资源,value+=1value+=1后仍为负,表示仍有进行需要该资源(value+=1仅是资源的记录加一,并未将资源实际分配),调用wakeup将阻塞队列中的第一个进程唤醒。

AND型信号量

进程需要多个资源时,一次性分配给其全部所需资源,使用完毕后将资源全部释放,使用AND信号量避免死锁。

P操作Swait(S1,S2....Sn)V操作Ssignal(S1,S2....Sn

信号量集

对AND型信号量进行扩充,一次分配一定数量的各种资源(而不是一个),进程对某资源的需求为d,该资源的分配下限为t(S>t时才可分配)

P操作Swait(S1,t1,d1,S2,t2,d2....Sn,tn,dn)V操作Ssignal(S1,t1,d1,S2,t2,d2....Sn,tn,dn)

信号量的应用

实现进程互斥

经典问题
1.生产者消费者问题
2.哲学家进餐问题
3.读者写者问题

详见下章

线程

概念引入

进程的属性
1.可拥有资源的独立单位
2.独立调度和分派的基本单位

进程拥有资源,在创建、撤销、切换中,系统时空开销较大,所以为了减少开销,将第二个属性独立出来产生线程,作为调度和分派的基本属性

进程与线程的比较

1.调度的基本单位
进程开销大,线程开销小
同一进程下线程的切换不会引起进程的切换
不同进程下线程的切换,进程也会切换

2.并发性
一个进程下的多个线程可以并发,多个进程下的多个线程也可以并发。
更加有效的 提高系统资源利用率和系统吞吐量。

3.拥有资源
线程除拥有自己 的少量资源意外还拥有,还允许多个线程共享该进程的所有资源。

4.独立性
同一进程下的不同线程之间独立性低(一般为了合作,提高并发性)
不同进程中的线程之间独立性高

5.系统开销
线程的开销比进程小很多

6.支持多处理机系统
多个线程可分配到多个处理机上并行执行。


仅为个人学习整理归纳……


0 0
原创粉丝点击