Skip to content

操作系统

更新: 2021-01-10 00:30:31

按点总结

1.系统调用

用户与操作系统进行交互,从而请求系统执行一些只有操作系统才能做到的指令,每个这样的请求都是由用户调用来执行特权指令的,这种请求成为系统调用。操作系统内核提供一系列预订功能,通过一组成为系统调用的接口呈现给编程人员,系统调用把应用程序的请求传给内核,系统调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。

每个系统调用都跟一个数相关,通过索引找内核函数,类似于中断向量表,系统调用本质上也是一种软中断。

API掩盖细节,提供方便的功能,可移植性强,系统调用太复杂了。

向操作系统传递参数:堆栈;寄存器;内存。

特权指令:能引起及其损害的。

1609853679539-033468fa-feff-4976-b94a-70f244f9fdaa.png

2.进程

进程上下文用进程的PCB表示,它包括寄存器的值、进程状态和内存管理信息等。通常通过执行一个状态保存来保存CPU的当前状态(不管他是内核模式还是用户模式),之后执行一个状态恢复重新开始运行。

PCB是进程存在的唯一标志。

PCB的组织:链接方式是每个队列对应一个表,索引是每个队列对应一个索引表,差不多。

并发:在某一个时间段内任务交替执行;并行:多个任务同时执行。

进程状态转换:

画板

标准答案:

1609857144853-8963ac6f-87cc-4653-863c-f24a4215eed2.png

进程调度

高级调度 作业调度 长期调度

中级调度 内存调度 中期调度

低级调度 进程调度 短期调度

1609910271423-9dcc6a41-7a22-414e-89ae-7629b39a8d21.png

进程的挂起与7状态模型

1609910085515-88de6923-f5f8-4cc5-8115-c04e9344cb87.png

子进程

fork 子进程做父进程的上下文拷贝,包括PCB和新的地址空间。

pid = fork() 父进程返回子进程号,子进程返回0,错误-1。

3.格式化

磁盘的格式化分为 物理格式化和逻辑格式化 。 物理格式化又称低级格式化,是对磁盘的物理表面进行处理, 在磁盘上建立标准的磁盘记录格式,划分磁道(track) 和扇区(sector)。逻辑格式化又称高级格式化, 是在磁盘上建立一个系统存储区域,包括引导记录区、 文件目录区FCT、文件分配表FAT。

逻辑格式化创建了文件系统。

4.VFS

物理文件系统与文件系统服务之间的一个接口层,对物理文件系统的所有细节进行抽象,并为这些不同的文件系统提供一个统一的系统调用接口。严格来说不是一个文件系统,只存在于内存中,不存在于任何的外存空间,在系统启动时建立,系统关闭时消亡。

5.线程

线程是一个基本的CPU执行单元,也是程序执行流的最小单位。进程是除CPU之外的系统资源的分配单元。

内核级线程才是处理机分配的单位。

**用户级线程、内核级线程。**多线程模型(用户级线程与内核级线程的映射关系):多对一、一对一、 多对多。

处理器只能看到内核级线程,对于多核只能调度这个。

不共享栈和寄存器。

1610174602242-2c808d15-2a4d-45d1-96cd-e95d36ec6d3f.png

6.CPU调度

衡量准则

CPU利用率:忙碌的时间占比

系统吞吐量:单位时间内完成作业的数量

周转时间:作业完成时间 - 作业提交时间

平均周转时间 = 各作业周转时间之和 / 作业数

带权周转时间 = 周转时间 / 作业实际运行时间

平均带权周转时间 = 各作业带权周转时间之和 / 作业数

等待时间:对于进程,进程建立后等待被服务的时间之和;对于作业,除了建立进程后的等待时间,还要加上作业在外存后备队列中的等待时间。等待时间 = 周转时间 - 运行时间 - I/O操作时间(如果有的话)

响应时间:用户提交请求到首次产生响应所用的时间。

周转时间 = 等待时间 + 执行时间 = 结束时间 - 进入就绪队列时间。

调度算法

**先来先服务 FCFS、最短作业优先 SJF、最短剩余时间 SRTF、轮转法 RR、优先级算法、**多级反馈队列调度算法

导致饥饿:优先级调度和SJF

调度算法详解

7.进程同步与互斥

Peterson 使用令牌,i ,j 会有问题和bug

硬件:

while的那种会有自旋锁,忙等待。

非忙等待:block,把自己送入该信号量的等待队列中。1610193443576-bc6ad9ff-ffa4-463d-ac54-be3b13288a96.png

管程:一种数据结构,结构内的多个子程序形成的多个工作线程互斥的访问共享资源,可以理解为一个类的定义,但是不同的是,管程有条件变量可以用于控制进程之间的同步。

1609943000991-a772d7fc-a77a-4703-983b-8f57cc6629f5.png

互斥

太简单了。用PV挨个加

同步

生产者消费者问题

关系:① 缓冲区大小,生产者每生产一个之前都要申请一个空间。 ② 商品,消费者需要拿一个商品 ③ mutex

如果只有2个的话,可以没有mutex其实。

吸烟者问题

三种材料两两一组看做三种,生产者轮流提供,三个吸烟者轮流获取,获取完都要V(finish)一下。

读者写者问题

key:如何实现读写 写写的互斥而读读不互斥,方法是加count在第一个读和最后一个读进行pv操作。

这个会导致饥饿,于是解决方法是,再加一对PV,实现写优先:在阻塞写者之前,加一个P,如果同时有写和读,那么这个时候虽然写者在P真正的操作,但是上面的P已经不允许新的读者了。(如果有已经在阻塞中的写者,则阻塞住新的读者,操作是在写着阻塞那句话之前p一个变量,写者需要p这个变量才能整新的。)

哲学家进餐问题

解决死锁的方法:① 最多允许4个人同时进餐 ② 奇数先拿左边,偶数先拿右边 ③ 第五个哲学家先右边,其他人先左边 ④ 只有当左右都可以拿的时候才拿 ⑤ 管程。

④ 不太好,这样所有人拿筷子变成了互斥。

睡眠理发师问题 (¦3[▓▓]

用PV保护变量的修改 那些 count

1610197757282-d2ceaf8d-fdf2-45e1-ac5c-d69ebe709ebe.png

8.死锁

一组处于等待(阻塞)状态的进程,每一个进程持有其他进程所需要的资源,而又等待使用其他进程所拥有的的资源,导致这组进程互相等待,均无法向前推进。

**四个条件:**互斥、占有并等待、非抢占、循环等待

预防,破坏四个条件:互斥:SPOOLing;占有并等待:拥有不等待、等待不拥有;非抢占:抢占;循环等待:对资源排序,按照顺序申请。

死锁避免:银行家算法

① request <= need && request <= available

② 假分配 寻找安全序列

死锁检测:思路跟银行家算法一样,不过可以从表中,也可以从图中。

死锁恢复:进程终止、资源将抢占。

9.内存

连续分配之动态分区分配

首次适应、最佳适应、最差适应、临近适应(Next-fit)

分页

页:逻辑内存,帧:物理内存。页框和页帧是对于内存的,页和页面时对于进程的。

**页表:**一个进程对应一张页表

起始地址 = M号内存地址*页框大小

1610082967687-3725c357-c705-4618-adcd-c1f17bffb0f9.png
1610086657778-ddda665c-523e-423b-a11f-fc708830aa8f.png

一些理解:页内偏移量是为了物理地址。

然后算多少个页表项,所以需要页面大小/每一块的大小。

1610089200146-70ff4e57-f2be-49ef-932c-0398ccdbe046.png
1610090045664-3026c7cc-361a-4881-860d-7c1ef5f0b409.png

分段存储

注意这里的段表加了一个段长。

1610090854550-d572073f-0278-4a09-a246-745d015e7e4b.png

10.虚拟内存

仅把作业的一部分装入内存,具有请求调入和置换功能,能在逻辑上对内存空间加以扩充。

给页表加了几个字段:状态位、访问字段、修改字段、外存地址。

缺页中断属于内中断中的“故障”。

1610095728767-05a18e9a-e931-4d7a-8cb6-f0d5d102aca3.png

置换算法

最佳置换算法(OPT)

淘汰在之后的访问中最长时间不再访问的面。

。。。只是理想化的算法,在实际应用中是无法实现的。

先进先出置换算法(FIFO)

Belady异常——当为进程分配的物理块增大时,缺页次数不减反增的异常现象。

实现简单,但是算法性能差。

最近最久未使用置换算法(LRU)

性能好,但是实现困难,需要硬件支持,开销大

时钟置换算法(CLOCK)

循环队列,找第一个访问位为0的,扫描过的1->0

改进版:优先淘汰没有被修改过的页面,增加修改位。

00 01 10 11

系统抖动

进程没有足够的帧,频繁的进行页调度。

解决方法:① 采用局部替换和局部置换算法(? ② 工作集,定义一个窗口尺寸,看看在这个尺寸里有多少不同的帧

11.对于有数据的部分的文件系统管理

分块。

连续分配,外碎片。

链接分配,可以扩展,指针占用空间,可靠性差。

加入FAT的链接分配,可以随机访问了。

索引分配:随机访问、可拓展、没有外碎片。

1610114005812-84b9c37b-d639-4e18-af06-e604f65d965a.png

12.空闲地址管理

位向量

链表

成组链接法:超级块 链头

13.磁盘调度

先来先服务FCFS

最短寻找时间 SSTF,选择离当前刺头最近的,可能会饥饿

扫描算法SCAN: 不会饥饿,到了头才回头,不平均

LOOK:改进SCAN,不用到头

循环扫描算法C-SCAN:单向运动,快速回去。

C-LOOK:不到头。

14.I/O

阻塞I/O:当应用程序发出一个阻塞系统调用时,应用程序挂起,应用程序从运行队列转入等待队列。等系统调用完成之后再回到就绪队列,在合适的时候继续运行。

非阻塞式I/O:一个非阻塞调用在程序执行过长时间并不会终止应用程序,他会很快返回,其返回值表示已经传输了多少个字节。适合多个程序协作完成I/O


零碎知识点,王道顺序

基本知识

并发:微观上多个任务交替执行,宏观上多个任务一起完成。

并行:同时进行。

程序状态寄存器PSW记录了当前是核心态还是用户态。

操作系统的结构:

1609852276426-2be05cbc-50db-43b2-be2d-a234b3833994.png

大内核和微内核的区别:大内核要上面的橙色、黄色;微内核只要上面的黄色一层。各有优缺点。

中断

用户态->核心态是通过中断实现的,并且中断是唯一的途径。核心态->用户态是执行一个特权指令,将程序状态字PSW的标志位设置为用户态。

内中断:当前指令,CPU内部;外中断:狭义的中断,CPU外部,与当前指令无关。

系统调用

与资源有关的操作(如存储分配、I/O操作、文件管理)

1609853679539-033468fa-feff-4976-b94a-70f244f9fdaa.png

进程

进程实体:进程控制块 PCB + 程序段 + 数据段

PCB是进程存在的唯一标志。

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。如果有线程,那不是调度的基本单位。

1609854256756-dacbbcb4-f4ef-4c9e-b396-dfb3ff4e57fc.png

组织PCB(进程)的方式:

1609855690654-7eb1400f-0133-459b-aa9d-53b92393c20c.png

链接方式:

1609855755263-f596f555-2562-4fdf-8049-97b113221b8f.png

索引方式:

1609856041963-c6bc3d8a-aae1-4f3d-9ec0-1f9a9e85e6ec.png

这两种差不多。

**进程的特征:**动态性、并发性、独立性、异步性、结构性。动态性是进程最基本的特征,进程是资源分配、接受调度的基本单位。

进程状态及其转换:

1609857144853-8963ac6f-87cc-4653-863c-f24a4215eed2.png

1609857153358-1622bea1-6a1f-4919-87b2-d0118303ab99.png1609857163576-583c59dc-69fb-4842-abc0-24135e8246b6.png

进程通信

两个进程对共享空间的访问必须是互斥的

pipe

消息传递,通过“发送消息/接受消息”两个原语

线程

线程是一个基本的CPU执行单元,也是程序执行流的最小单位。进程是除CPU之外的系统资源的分配单元。

用户级线程、内核级线程。

内核级线程才是处理机分配的单位。

多线程模型(用户级线程与内核级线程的映射关系):多对一、一对一、 多对多。

处理机调度

高级调度/作业调度:从后备队列等待,选择进入内存,运行结束退出内存

中级调度/内存调度:PCB继续留在内存中,进程退出进入外存,等待被调度重新进入内存。

低级调度/进程调度:从就绪队列中(在内存里)选择,将处理机分配给它

1609910271423-9dcc6a41-7a22-414e-89ae-7629b39a8d21.png

进程的挂起与7状态模型

1609910085515-88de6923-f5f8-4cc5-8115-c04e9344cb87.png

进程在操作系统内核程序临界区中是不能进行进程调度与切换的,但是在普通临界区中是可以的。

调度算法

CPU利用率:忙碌的时间占比

系统吞吐量:单位时间内完成作业的数量

周转时间:作业完成时间 - 作业提交时间

平均周转时间 = 各作业周转时间之和 / 作业数

带权周转时间 = 周转时间 / 作业实际运行时间

平均带权周转时间 = 各作业带权周转时间之和 / 作业数

等待时间:对于进程,进程建立后等待被服务的时间之和;对于作业,除了建立进程后的等待时间,还要加上作业在外存后备队列中的等待时间。等待时间 = 周转时间 - 运行时间 - I/O操作时间(如果有的话)

响应时间:用户提交请求到首次产生响应所用的时间。

先来先服务 FCFS

哪个队列先到后备队列,哪个进程先到就绪队列

1609915717922-a66298c8-db0b-4cdc-ba91-d393e119e107.png

短作业优先 SJF

服务时间最短的优先/进程先得到服务

分为非抢占式和抢占式SRTN

可能会导致饥饿现象

非抢占式:

1609916535921-3d1e3a02-d35e-4424-9967-7e164bc99e7e.png

抢占式:

1609916564361-98fb728f-e575-4fce-aeca-3b674c59a41a.png

高响应比优先 HRRN

在每次调度时,先计算响应比,选择响应比高的进程或者作业。是非抢占式。

响应比 = (等待时间+要求服务时间)/ 要求服务时间

1609916893623-230b0f7d-16b6-4fb1-9891-068b17551b2a.png
1609916982839-e9c427ff-8199-4a1c-b4bf-4e024f520d18.png

时间片轮转 RR

是用于进程调度的,因为分配时间片是对于进程来说的。

算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms),如果进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。

属于抢占式算法

常用于分时操作系统,更注重“响应时间”,因此这里不计算周转时间

优先排新来的,再排刚结束的。如果没用完则主动放弃处理机。

当时间片足够大,那么就退化成了FCFS算法。

个人理解像是设置一个止损的最大时长,但缺点是进程数量过多的时候效率会有设计上的损耗。

标准答案缺点:进程切换开销大、无法区分紧急任务。

1609921031951-c932e8d4-14ac-44f1-a102-e0c955a745ad.png
1609920973759-46b5158b-c998-4425-98f2-0f9eff4cde38.png

让切换进程的开销不超过1%

优先级调度算法

可以作业调度也可以进程调度,甚至可以I/O调度

非抢占式:

1609921517654-055dc467-4e0a-431f-bf49-e1b873eac5bc.png

抢占式:需要在就绪队列改变的时候也检查优先级。

1609921617835-348e5879-05a2-4bc5-b22f-537ea023a20e.png

对于优先级的选择:

1609921775732-ae103a02-7d7a-4166-9f04-e61fbb637874.png

可能会导致饥饿。

多级反馈队列调度算法

被抢占之后还是在原来这个级别的队列中。如果到了最低级的队列,那么运行完一个时间片后如果任务还没结,那么还是放到当前层级的队列中。

没啥缺点好像。

1609922346308-c2a4de2d-907f-47e5-b340-19a11b6160b8.png

进程互斥

单标志法:违反空闲让进

双标志法:标记各进程想进入临界区的意愿

1609923104309-6e541de4-bf3c-48a9-a880-b0108a6352a0.png

双标志后检查法:。。。。。。。

1609923237142-34f32f09-44a7-4021-b4f5-2e819c46094e.png

Peterson 算法

双方都让了一次之后,后说的那个能能够谦让成功。

1609923896142-53060b3f-213c-41ee-804c-519ea7e1939c.png

硬件方法:中断屏蔽(内核进程才可以)

TestAndSetLock(用硬件实现不允许被中断的lock,检查和上锁写在了一起,不满足让权等待)

1609924542800-7eec8f90-8e47-4ca4-85c3-f6c8c77af12b.png

Swap指令

1609924508094-f38b1ba8-7b8e-4ae6-8f91-041a8d70a523.png

信号量

整型信号量存在的问题:不满足让权等待会发生忙等待。

1609925834494-0b5074c8-8b00-4f75-9fed-89bed2a8a4d0.png

记录型信号量:

1609926040654-a282d15c-eb7d-4950-93af-20be0f158d9c.png1609926046790-c2e36de6-79fe-4608-8bbf-3ac2188d1b84.png

block的时候进程从运行态->阻塞态

wakeup:阻塞态->就绪态

实现互斥:semaphore mutex = 1

实现同步:semaphore S = 0; 在先完成的操作后V,后需要的代码前P

实现前驱:1609934069263-ef2ba211-aecb-49b3-971b-e1163a8d1091.png


生产者-消费者

找进程 - 找关系 - 几对信号量

1609934871742-509c50bf-590a-4e26-8b1e-18b91255733a.png

多生产者-多消费者

1609935594933-4b08acaf-fa4b-446a-9454-828d07801e9d.png

吸烟者问题

1609937523027-5c169a73-b431-4729-841e-488cfa637b3f.png

读者写者问题

key在于如何实现读写的互斥而保持可以同时多个读者,加count只对第一个读者和最后一个读者进行操作。

1609938066993-214d17ae-c3f2-4bef-b20d-6279f3e2e32e.png

实现写优先

思想:如果有已经在阻塞中的写者,则阻塞住新的读者,操作是在写着阻塞那句话之前p一个变量,写者需要p这个变量才能整新的。

1609938550910-bbc536ad-544e-4a79-b5ad-90f537d7de8e.png

哲学家进餐

重点是解决资源问题导致的死锁

1609939277964-6d45eb73-25be-41d8-8759-0cb6d29bf581.png
1609939297614-b3fbd913-0e98-4e10-9bc5-82c05d3cdba4.png

1609939336994-c8a708c2-8dd9-402d-ad25-b1c46deca1fe.png1609939343645-ec441ecc-ad9f-40c4-a4a4-49cd8813c6ab.png

这样不太好其实,这样是拿筷子的操作是互斥。

睡眠理发师问题

实验题目

管程

用来实现同步和互斥的

1609942824600-757b5201-6270-4529-ae6e-6271748ca081.png1609943000991-a772d7fc-a77a-4703-983b-8f57cc6629f5.png

死锁

1609944563600-dfb3e2bf-f17b-456a-8821-0d6d2f7290e0.png 四个必要条件:

互斥、占有并等待、非抢占、循环等待。

预防死锁

1609945383356-8f24746f-38a7-4209-a4cc-df3709d7b1a6.png

避免死锁

寻找安全序列

在资源分配之前预先判断这次分配是否会导致系统进入不安全状态

银行家算法

定义向量,找安全序列。

1609998161363-bfc71d7d-3885-4c44-9334-908ce7556f47.png

死锁的检测和解除

检测:找一个不阻塞也不鼓励的进程,然后假设分给他资源,如果可以的话那么全部释放,继续找下一个,直到简化整个图。

1610030522203-66c0d9d9-daff-4d80-b4e9-f569792e7669.png
1610022824810-7d73904e-27f7-4d95-9ba0-e06fb82c882a.png

解除死锁:

  1. 资源剥夺法:挂起死锁进程,抢占资源,把资源分配给其他。但这样可能会导致饥饿。
  2. 撤销进程法:强制撤销进程。
  3. 进程回退,回退到足以避免死锁的地步,要求记录历史信息和还原点。
1610030487887-c67f8aab-22c2-4f6e-a8c3-ab16ef665e23.png

内存的基础知识

按字节编址: 每个存储单元为1字节,即1B,8个二进制位

按字编址:看这个计算机的字长是多少,字长为16位的计算机那么每个存储单元=每个字=16个二进制位

绝对装入,静态重定位,**动态重定位:**在使用的时候重定位寄存器+地址

链接也有三种方式

内存管理

内存保护:上下限寄存器、重定位寄存器和届地址寄存器进行越界检查、

覆盖技术:

1610031626766-06366697-270b-4cb9-a152-62ae14d22a4d.png1610031670203-14bcfbc5-f818-461b-aaf7-477e56436496.png

交换技术:中级调度

动态分区分配

首次适应:从低地址开始查找空闲分区。

最佳适应算法:按照容量递增,找大小能满足要求的第一个空闲分区,能满足但最小的。会产生很多小碎片。

最坏适应算法:容量递减,跟上一个相反。对于大进程不友好。

邻近适应算法: 从上次查找结束的位置开始查找空闲分区。

1610032994254-8a7f6010-89de-43c9-9bc4-29b1d680cc7c.png

基本分页存储管理

把内存分为小分区,然后按照小分区大小拆分真正的大进程。

页框和页帧是对于内存的,页和页面时对于进程的。

地址转换:

1610033512394-82cf41e0-1c5d-45f8-a487-046bdb1ebbb7.png1610082354740-7707b05b-fb7e-429b-9bbc-9d223fff0eab.png

1610082441359-59a2148f-4583-4a8c-b94e-fb715397cbd9.png

如果用二进制表示的话,就更简单了。

**页表:**一个进程对应一张页表

起始地址 = M号内存地址*页框大小

页表︰将页和帧完成映射(逻辑地址到物理地址的映射)。由于页号是从0开始按顺序排列的,所以页表中忽略页号,只留帧号。

1610083621984-30b822a7-3b6a-4467-9e55-dc0ff84ec669.png
1610082967687-3725c357-c705-4618-adcd-c1f17bffb0f9.png

地址变换机构

1610087135333-63a84fec-0aad-45c3-8ff9-62cc00b8dae3.png
1610086657778-ddda665c-523e-423b-a11f-fc708830aa8f.png

例题:

1610087318942-6edda4f5-288c-4c01-a2d1-30ea141aa68a.png

快了个表:

1610088756010-21dbe5dd-e62f-488d-a359-002020dffabc.png

两级页表

1610089200146-70ff4e57-f2be-49ef-932c-0398ccdbe046.png
1610090045664-3026c7cc-361a-4881-860d-7c1ef5f0b409.png

分段存储

段号、段内地址

1610090393248-96ed8991-b329-45ff-ba18-e8d2bd6bd78b.png
1610090854550-d572073f-0278-4a09-a246-745d015e7e4b.png

分段、分页的对比

1610091325598-8ebc5393-87a9-495a-98cd-4e00cbd5335b.png
1610091828006-ff892daf-2aed-4a5e-b340-6daed11709e1.png

段页式

1610091969435-e88bb9cd-cd07-4e5f-9b33-035992ca3532.png

1610093285632-239bc7ef-acac-4f69-83ed-33d9a115b6ea.png1610093513903-fd24d225-6e5e-4517-bd7a-cef464a01571.png

虚拟内存

1610094266604-c9802ac4-8375-4b4e-bbb4-ef1e0ed5e6b5.png 把基本换成请求

1610094367023-2ef5abb6-94e3-4f70-86dd-7f4b8731680f.png

特征:

1610094433146-49175c0b-c7c8-405b-a9af-a58844d5f07a.png
1610094686092-89386bc2-03a2-4bc6-b10a-169bf310564e.png

缺页中断属于内中断的故障。

1610095728767-05a18e9a-e931-4d7a-8cb6-f0d5d102aca3.png
1610095720342-d40abefa-d432-4944-b166-07d8593c9ed7.png

页面置换算法

最佳置换算法(OPT)

淘汰在之后的访问中最长时间不再访问的面。

。。。只是理想化的算法,在实际应用中是无法实现的。

先进先出置换算法(FIFO)

Belady异常——当为进程分配的物理块增大时,缺页次数不减反增的异常现象。

实现简单,但是算法性能差。

最近最久未使用置换算法(LRU)

性能好,但是实现困难,需要硬件支持,开销大

时钟置换算法(CLOCK)

循环队列,找第一个访问位为0的,扫描过的1->0

改进版:优先淘汰没有被修改过的页面,增加修改位。

00 01 10 11

** **1610108701808-9f8be9ed-ba78-46f9-b13f-ee8c9c031751.png

1610108822543-32627202-636e-4d07-aac5-9e2ba5b5248e.png

页面分配、置换策略

驻留集:指请求分页存储管理中给进程分配的物理块的集合。

1610109197086-2a60b853-525d-491b-be5c-7dfa27f57d2a.png

固定分配局部置换,灵活性低

可变分配全局置换,缺页会获得新的物理块

可变分配局部置换:根据缺页率动态增删。

1610109327392-ce36ee00-5a13-4d94-b8e1-a98eaf3ad3aa.png

调入页面:预调页、请求调页

1610109628335-c40692a1-02ba-4922-acde-e908723df94a.png

工作集:在某段时间间隔里,进程实际访问页面的集合。

1610109746419-264ce4fd-618b-48a3-93e6-b317f3d2d993.png

文件系统

数据项是文件系统中最基本的数据单位

1610110209293-21388b23-f730-44a5-ae9e-49ce4384aef4.png

文件通过目录组织起来

向上提供的基本功能:

1610110348045-d0a91a8c-8cd4-4ab5-8030-9f7a4d62bb03.png

有结构文件的逻辑结构

顺序文件、索引文件、索引顺序文件

顺序文件:串结构、顺序结构

1610111056191-aca90fcb-1dd4-4bb5-8ec1-a5efc6bf4537.png

索引文件、索引顺序文件

后一种,先分组再建立索引

1610111294161-52f7b156-6e18-4a2b-8980-00a5bc279e21.png

多级索引顺序文件……

文件目录

单极目录

两层目录结构

树形目录结构,引入相对路径和绝对路径,不好解决多用户共享

无环图目录结构

文件分配方式 物理结构

连续分配:支持顺序访问和直接访问;顺序访问速度快;不适合拓展;磁盘碎片

链接分配(隐式链接):链表,只顺序,不随机,适合拓展

链接分配(显式链接):指针放到一个文件分配表中(FAT)

1610113118996-55342d57-9a37-4cfc-9677-55a6f3e4af51.png

文件分配方式 索引分配

每个文件一个索引表

随机访问√文件拓展√

文件太大:

链接方案:多个索引块

多层索引:K层索引 K+1次读磁盘操作

1610113840282-31c04dee-24fe-42fe-8fad-cc9deb06e1c3.png

混合索引:

1610113880086-3184f52a-c80d-4188-a66f-80fa1d11b439.png
1610114005812-84b9c37b-d639-4e18-af06-e604f65d965a.png

存储空间管理 空闲

空闲表法

1610114173986-5155a679-2214-4909-81c3-aab8bda76690.png

空闲链表法:分为两种

1610114240698-37391498-d129-4ce3-88ac-1fb47f921ca3.png

位示图法

1610114591339-6309f6c3-9962-4b29-ac7b-66c43a1a5e99.png

成组链接法:

超级块 链头

文件系统层次结构

1610118131786-2673508f-e0b7-4fe3-ae8e-407de6dfd3d7.png

磁盘调度

先来先服务FCFS

最短寻找时间 SSTF,选择离当前刺头最近的,可能会饥饿

扫描算法SCAN: 不会饥饿,到了头才回头,不平均

LOOK:改进SCAN,不用到头

循环扫描算法S-SCAN:单向运动,快速回去。

C-LOOK:不到头。

I/O

1610120798872-e8012e61-a4d7-4fd3-87d3-1e53d9386511.png
1610120922299-c87596ec-f6f2-48f9-923c-338ffb5209ba.png
1610120966795-b8129fdb-aad1-4bd9-bb57-682e9c34d03e.png

1610121036986-038ea8fd-bd50-4419-a9ab-4bf559f08e80.png1610121080196-48953dff-ad17-4902-97c7-6f509c6fd10f.png1610121093670-56c1f1f3-2f52-46c1-a367-ba60dcc7eaeb.png1610121108260-11128fdf-58de-436b-8c49-a9596fe0b752.png1610121216765-eacee4e1-343c-414e-8593-ed148336d778.png

1610121445393-96af534b-1b8f-4492-8d36-d62755de8b73.png
1610121454957-42efa8ed-2697-4b26-b46c-89a33f2d0754.png

I/O缓冲

单缓冲 MAX(T,C)+ M

1610121863209-3f47b530-2469-44df-af50-4ae5b9be2667.png
1610122015406-a53039ef-20fd-43b1-b4ec-88168cc0ba33.png

更新: 2021-01-10 00:30:31
原文: https://www.yuque.com/qer233/sdu_note/os