![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《现代操作系统》学习笔记
captxb
这个作者很懒,什么都没留下…
展开
-
chapter02_进程与线程_1_进程
(1) 在任意一个瞬间,一个CPU只能运行一个进程;但是CPU可以由一个进程快速切换至另一个进程,使每个进程各运行几十或几百ms。(2) 对于多核CPU,每个处理器在任意一个瞬间也只能运行一个进程(3) 单个处理器可以被若干进程共享,使用__调度算法__决定何时停止一个进程的工作转向另一个进程(1) 一个进程就是一个正在执行程序的实例(2) 两个进程恰好运行同一个程序时,仍然属于两...原创 2019-03-22 09:39:29 · 95 阅读 · 0 评论 -
chapter06_死锁_7_其他问题
两阶段加锁(1) 一般情况下死锁避免和死锁预防都难以做到, 但是在一些特殊的应用中,可以使用一些特殊的算法, 例如针对数据库的__两阶段加锁__(2) 具体操作第一阶段: 进程视图对所有记录加锁,每次锁一个记录第二阶段: 进行对数据库的更新操作,更新完成后释放所有锁第一阶段不做任何实际操作,只是尝试加锁: 尝试成功后则进入第二阶段真正的操作;尝试失败则进程释放它所有的加锁记录,回退到...原创 2019-04-10 14:44:38 · 101 阅读 · 0 评论 -
chapter06_死锁_6_处理死锁的策略(四)死锁预防
死锁避免__几乎不可能实现,因为不可能知道未来的请求信息。但是可以进行__死锁预防资源死锁的__4个必要条件__(1) 互斥条件资源要么已经分配给了唯一的进程,要么就是可用的未分配状态(2) 占有和等待条件已经占有了某个资源的进程,可以继续请求新的资源(3) 不可抢占条件已经分配给某个进程的资源, 不能被其他进程强制性抢占, 只能被占有它的进程显式释放(4) 环路等待条件...原创 2019-04-10 14:44:26 · 199 阅读 · 0 评论 -
chapter06_死锁_5_处理死锁的策略(三)死锁避免
避免死锁的算法是__存在的__, 但是__前提__是事先已经获得了进程要获取资源的全部信息(1) 安全状态当死锁没有发生时, 即使所有进程突然请求对资源的最大需求, 也仍然存在某种调度次序, 使得每一个进程都可以运行完毕(2) 不安全状态当死锁没有发生时, 不存在某种调度次序, 使得每一个进程都可以运行完毕单个资源的银行家算法(1) 基本思想对每一个资源请求进行__检查_...原创 2019-03-22 15:46:24 · 122 阅读 · 0 评论 -
chapter06_死锁_4_处理死锁的策略(二)死锁检测和恢复
每种类型的资源__只有一个__时的死锁检测(1) 画出所有进程、所有资源的__资源分配图(2) 检测资源分配图(有向图)中是否出现环路(3) 有向图检测环路算法有很多种每种类型的资源__有多个__时的死锁检测(1)设有n个进程, m种资源 E(1*m) = (E1,E2,..., Em)代表每种资源的个数 A(1*m) = (A1,A2,..., Am)代表每种资源可...原创 2019-03-22 15:34:13 · 344 阅读 · 0 评论 -
chapter06_死锁_3_处理死锁的策略(一)忽略死锁
鸵鸟算法(1) 死锁问题很少发生时,就当它不存在,出现问题时再说(2) 这样性能会提升不少,因为为了防止死锁或恢复死锁要引入很多额外的复杂操作...原创 2019-03-22 15:17:49 · 422 阅读 · 0 评论 -
chapter06_死锁_2_死锁概述
死锁(1) 定义如果一个进程集合中,每个进程都在等待只能由该集合中的其他进程才能引发的事件, 那么该进程集合__死锁__(2) 分类1° 资源死锁: 等待的事件是释放该进程集合中其他进程所占有的资源2° 通信死锁: 一组通信进程都在等待其他进程传递的消息,而由于某种原因通信信道为空且没有超时机制(3) 资源死锁是死锁最常见的类型。资源既可以是硬件资源(如打印机、CD-ROM),也可...原创 2019-03-22 15:16:40 · 96 阅读 · 0 评论 -
chapter06_死锁_1_资源
资源的一种分类(1) 可抢占资源: 可以从拥有它的进程中抢占而不产生其他副作用例如: 存储器(2) 不可抢占资源: 不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来例如: 光盘刻录机但是打印机比较特殊,物理打印机本身是不可抢占资源,但是假脱机打印是可抢占资源死锁和不可抢占资源相关,因为可抢占资源直接抢就是了,不是必须要等有时,请求资源的__顺序__可能会导致...原创 2019-03-22 15:13:04 · 124 阅读 · 0 评论 -
chapter02_进程与线程_3_进程(线程)间通信
进程通信的三个问题(1) 一个进程如何把信息传递给其他进程(2) 如何确保多个进程活动时不会出现交叉(3) 如果进程间需要按顺序进行,如何保证进程执行的顺序线程通信的两个问题(1) 由于多线程共享同一地址空间,所以不存在问题(1),但是问题(2)和(3)都存在(2) 接下来讨论解决进程通信三个问题的方法,但是方法对于线程通信也适用竞争条件(1) 定义多个进程读写某些共...原创 2019-03-22 11:59:02 · 139 阅读 · 0 评论 -
chapter02_进程与线程_5_生产者-消费者问题
方法一:使用Semaphore解决思路:设置两个信号量availableItems和availableSpaces,每次put和take之前先尝试获取对应的信号量(down操作),获取不到就阻塞;获取到了调用底层的两个受this锁保护的doInsert和doExtract方法,在这两个方法中会将对应的信号量做up操作 @ThreadSafe public class Semaphor...原创 2019-03-22 10:19:08 · 153 阅读 · 0 评论 -
chapter02_进程与线程_4_调度
许多适用于进程调度的算法也适用于线程调度,因此一并来讨论进程切换的代价比较高,需要__从用户态切换到内核态__,并且要__保存当前进程的状态__进程的分类计算密集型: 绝大多数时间花费在计算上IO密集型: 绝大多数时间花费在等待IO上随着CPU速度的提高,越来越多的进程由计算密集型转化为IO密集型需要进行调度的时机1° 创建一个新的进程后2° 一个进程退出后3° ...原创 2019-03-22 09:46:57 · 108 阅读 · 0 评论 -
chapter02_进程与线程_2_线程
使用多线程的原因(1) 一个应用进程中可能发生多种活动,有些活动可能会被阻塞,多线程可以简化程序设计(2) 线程比进程__轻量__,创建、撤销、转换线程的开销都更小(创建、撤销进程的开销包括分配和回收资源,切换进程的开销包括保存当前进程CPU状态和设置新进程CPU状态,而切换线程只需要保存少量寄存器)(3) 如果应用中存在大量IO操作,使用多线程可以加快应用程序的执行速度(如果应用程序是...原创 2019-03-22 09:43:25 · 93 阅读 · 0 评论 -
1_使用LinkedHashMap实现LRU
参考 https://www.cnblogs.com/lzrabbit/p/3734850.htmlLRU的整体思路是:淘汰最长时间未使用的页面(key)一种简单的实现思路是:维持一个链表,把刚被插入的节点放在链表尾;刚被访问的节点脱链,也放到链表尾;每次需要淘汰节点的时候就淘汰链表头(所以,其实是一个双链表比较好)但是上面思路的问题在于,如果链表很长,那么更新被访问节点...原创 2019-06-09 17:14:26 · 4046 阅读 · 0 评论