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

本文介绍了进程同步的基本概念,包括临界资源、临界区和同步机制的四条规则。详细讨论了硬件同步机制和信号量机制,如整型、记录型、AND型信号量以及信号量集,并举例说明了信号量在实现进程互斥中的应用。此外,文章还阐述了线程的概念,对比分析了进程与线程在资源占用、调度、并发性和独立性等方面的差异。

进程同步的基本概念

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

两种形式的制约关系

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.支持多处理机系统
多个线程可分配到多个处理机上并行执行。


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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值