操作系统读书笔记

来源:互联网 发布:算法第四版答案 编辑:程序博客网 时间:2024/05/10 12:11

1. 进程的创建

一旦操作系统发现了要求创建进程的事件后,便调用进程创建原语按下述步骤创建一个新进程

(1)    申请空白PCB

(2)    为新进程分配资源

(3)    初始化进程控制块

(4)    将新进程插入就绪队列

2.内核级线程和用户级线程

内核级线程:表示无论是用户进程中的线程还是内核进程中的线程,他们的创建、撤销和切换都是依靠内核的,主要缺点:对于用户的线程切换而言,其模式切换的开销较大。

用户级线程:仅存于用户空间,对于这种线程的创建、撤销和线程之间的同步等功能都无需利用系统调用来实现。主要缺点:一个进程中的一个线程阻塞了,其他线程也会被阻塞。

 

3.死锁的四个条件

循环等待

请求和保持

不可剥夺

资源不可共享

摒弃“请求和保持”条件:所有进程必须一次性申请所有的资源。

摒弃“不剥夺”条件:当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。

摒弃“环路等待”条件:系统将所有资源按类型进行线性排队,并赋予不同的序号,所有进程对资源的请求必须严格按照资源序号递增的次序提出,这样,在所形成的资源分配图中,不可能再出现环路,因而摒弃了“环路等待”条件。

4.安全状态

所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称〈P1,P2,…,Pn〉序

列为安全序列),来为每个进程 Pi分配其所需资源,直至满足每个进程对资源的最大需求,

使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全

状态。

5. 最有代表性的避免死锁的算法,是Dijkstra 的银行家算法

6.连续分配方式:单一连续分配、固定分区分配、动态分区分配、动态重定位分区分配。

单一连续分配:但只能用于单用户、单任务的操作系统中。采用这种存储管理方式时,可把内存分为系统区和用户区两部分,系统区仅提供给 OS 使用,通常是放在内存的低址部分;用户区是指除系统区以外的全部内存空间,提供给用户使用。

固定分区分配:这是将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。

动态分区分配:动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作这样三个问题。

数据结构:空闲分区表、空闲分区链。

分区分配算法:

i.                首次适应算法,以空闲分区链说明分配情况,算法要求空闲分区链以地质递增的次序链接,在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区位置,余下的部分仍留在空闲链表,若未找到这表示内存分配失败。

ii.               循环首次适应算法

不再是每次都从链首开始,而是从上次找到的空闲分区的下一个空闲分区开始查找。

iii.              最佳适应算法

总是把能满足要求,又是最小的空闲分区分配给作业

iv.              最坏适应算法

v.               快速适应算法

该算法又称为分类搜索法,是将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表,这样,系统中存在多个空闲分区链表,同时在内存中设立一张管理索引表,该表的每一个表项对应了一种空闲分区类型,并记录了该类型空闲分区链表表头的指针。

7. 伙伴系统

8.页表

在分页系统中,允许进程的各个页离散的存储在内存不同的物理块中,但系统应能保证进程的正确运行,系统为每个进程建立一张页表,页表的功能可以由一组专门的寄存器来实现。一个页表项用一个寄存器。由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度。

由于页表是存放在内存中的,这使 CPU 在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量 W 拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近 1/2。

9.页面置换算法

在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无

空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送磁盘

的对换区中

最佳(Optimal)置换算法:一种理论上的算法。 其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

先进先出(FIFO)页面置换算法:该算法总是淘汰最先进入内存的页面,即选择在内存中驻

留时间最久的页面予以淘汰。

最近最久未使用(LRU)置换算法:选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最久未使用的页面予以淘汰。

简单的 Clock 置换算法:当采用简单 Clock 算法时, 只需为每页设置一位访问位, 再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一页淘汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不换出,而给该页第二次驻留内存的机会,再按照 FIFO 算法检查下一个页面。

改进型 Clock 置换算法:在改进型 Clock 算法中,除须考虑页面的使用情况外,还须再增加一个因素,即置换代价

1 类(A=0,M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页。

2 类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。

3 类(A=1,M=0):表示该页最近已被访问,但未被修改,该页有可能再被访问。

4 类(A=1,M=1):表示该页最近已被访问且被修改,该页可能再被访问。


 

 

0 0
原创粉丝点击