操作系统
OS
zhangxiaojiakele
这个作者很懒,什么都没留下…
展开
-
死锁检测与恢复
注:本文主要参考自<<现代操作系统>>6.3,6.4节在死锁一文中,我们提到死锁问题有四种解决方案.本文将主要介绍第二种方法:死锁检测与恢复.此处简要提及一下第一种方法,忽略死锁.如果程序员可以推断死锁发生的概率非常小,且发生死锁后不会造成严重后果.则可以考虑忽略死锁,毕竟解决死锁问题不仅需要编写额外代码,死锁解决方案本身也会对程序性能造成影响.例如我们即将介绍的死锁检测与恢复方法中.需要持续判断当前是否发生了死锁,这是一个不小的开销.死锁检测与恢复使用这种技术,我们并不试图原创 2020-05-10 13:12:57 · 2725 阅读 · 0 评论 -
系统为什么会死锁?
注:本文主要参考<<现代操作系统>>6.1,6.2节何为死锁先给大家讲一个关于死锁的笑话:某天张三去面试,面试官问他你知道什么是死锁吗?张三说:你先给我offer我就告诉你.面试官说你先告诉我,我再给你offer.张三说:不行,你先给我offer,我再高速你.面试官说:不行,你先告诉我,我再给你offer.于是这场面试持续进行…哈哈哈!在计算机系统中,某些资源在同一时刻最多只能被一个进程使用,例如打印机.如果两个进程在同一时刻使用打印机,那打印出的一份文档上可能交叉打印出两原创 2020-05-10 11:06:58 · 319 阅读 · 0 评论 -
基于管程的多线程程序
注:本文主要参考自<<现代操作系统>>2.3.7节在互斥量与条件变量一文中,我们使用互斥量与条件变量解决了多线程生产者与消费者问题.其中互斥量主要用于确保生产者与消费者不会同时访问缓冲区,条件变量则用于确保线程仅在其执行必要条件满足时才会执行.本文,我们将介绍一种与该方法一脉相承的另一种技术:管程.管程首先,应当说明,管程属于编程语言的范畴.是为了方便程序员编程,而为编程语言添加的新特性.因此,并不是所有的编程语言都支持管程这一特性.为了支持管程,编程语言的编译器需要做一些额外原创 2020-05-09 13:54:16 · 274 阅读 · 0 评论 -
互斥量,条件变量
注:本文主要参考<<现代操作系统>>2.3.6节在进程唤醒与睡眠一文中,针对多进程的生产者-消费者问题,我们提出了基于信号量的解决方案.该方案避免了进程在等待其要求的下一步执行条件时进入忙等待状态.我们使用了三个信号量,信号量mutex用于保证生产者进程与消费者进程不会同时访问缓冲区.信号量empty用于保证当缓冲区满是生产者被阻塞进入休眠状态,当缓冲区不满时其能够被再次唤醒.信号量full用于保证当缓冲区空时消费者被阻塞进入休眠状态,当缓冲区不空时其将被生产者进程唤醒.信号量可原创 2020-05-09 12:48:59 · 370 阅读 · 0 评论 -
进程唤醒与睡眠
注:本文主要参考自<<现代操作系统>>2.3节进程唤醒与睡眠使用睡眠与唤醒避免忙等待在前一节如何避免多进程(线程)因竞争条件引发的错误?,我们提出了集中能保证多个进程互斥访问临界区,我们所提出的解决方案均使用忙等待策略,即在进程等待进入临界区时,其持续检查,直到能够进入临界区为止.我们能否在进程未满足下一步工作条件时进入休眠状态,当进程满足下一步工作条件时,由其他进程唤醒该进程呢?如果可以实现这种方法,则我们可以避免进程的忙等待,从而节省CPU资源.操作系统提供的sleep系原创 2020-05-08 22:36:09 · 2209 阅读 · 0 评论 -
如何避免多进程(线程)因竞争条件引发的错误?
注:本文主要参考自<<现代操作系统>>第2章如果避免多进程(线程)因竞争条件引发执行错误?多进程程序竞争条件对于多进程或多线程协作程序,如果多个执行程序间需要访问共享内存区域,则程序编写人员一定要仔细判断程序执行逻辑,确保多个程序对共享内存区域的访问不会出现逻辑错误.对于多个进程协作可能因竞争条件引发的执行错误,在多线程编程中同样存在,其解决方法也同样适用于多线程问题,因此后文均以多进程来说明问题.多进程协作间因竞争条件引发错误的根本问题在于程序并未按照开发者设想的逻辑顺序正原创 2020-05-08 17:50:11 · 1576 阅读 · 0 评论