操作系统之——进程(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+=1若value+=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.支持多处理机系统
多个线程可分配到多个处理机上并行执行。
仅为个人学习整理归纳……
- 操作系统之——进程(2)进程同步与线程
- 操作系统之进程与线程5——进程同步与信号量
- 操作系统之进程与线程1——进程概述
- 操作系统之进程与线程4——进程调度
- 操作系统之进程互斥与同步和线程
- 操作系统之进程与线程
- 操作系统进程与线程之进程篇
- 操作系统 进程管理之进程与线程
- 操作系统 进程/线程 同步与互斥
- 操作系统之进程与线程6——死锁处理
- 操作系统之进程与线程2——用户级线程及其切换
- 操作系统之进程与线程3——内核级线程及切换(未完成)
- 操作系统进程与线程之线程篇
- 操作系统——进程与线程
- 现代操作系统——进程与线程
- 操作系统——进程与线程
- 操作系统——进程与线程
- 操作系统之进程同步
- C++修改文件名
- AppWeb服务后台登陆及配置的方法解答
- 新闻发布项目——后台JSP界面adminManage/manageTopic.jsp
- Spring Boot 菜鸟教程 5 热部署 devtools模块
- Cython三分钟入门
- 操作系统之——进程(2)进程同步与线程
- Java基础学习一
- CodeForces 740C Alyona and mex 简单构造题
- platform设备和驱动的注册机制
- RTL8723BS 移植(WIFI部分)已解决
- 新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
- 数字黑洞 (20)
- Java 通过URL传递中文出现乱码的解决方法
- C语言程序