本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第一章 计算机系统概述
前言
- 参考书籍《计算机操作系统》 汤小丹、《2022年 操作系统考研复习资料》 王道。(个人认为王道的书整体顺序安排更合理,更好用)
- B站王道计算机考研 操作系统视频课
- 原本是小张期末考试整理的王道笔记,后来复习过程中使用笔记可以快速的根据目录或者文字检索去查找某个概念、知识点。所以分享给大家,需要文本文件的可以留言评论。
- 思维导图和文字内容是手敲的,所以可能有一些错别字,评论我会修改。
- 如果只是为了期末考试可以看我的这篇操作系统期末考试总结_鬼才小张同学的博客-CSDN博客
- 码字不易,严禁盗用!好用的话给小张个点赞收藏!
1.1.1 操作系统的概念、功能和目标
思维导图
本节内容
操作系统(Operating System,OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理地调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
eg:进程是一个程序执行过程,执行前==需要将该程序放到内存中==,才能被CPU处理。
功能:
- 命令接口,允许用户==直接使用==。联机命令接口:用户说一句,系统做一句,eg:使用cmd执行一句命令。脱机命令接口,用户说一堆,系统做一堆,脱机命令接口=批处理命令接口,eg:执行一个.bat的文件。
- 程序接口,只能通过用户==间接使用==,。eg:调用C:\Windows\System32\user32.dll。
- GUI,图形用户界面。用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令、参数。eg:在Windows操作系统中,删除文件夹只需要把文件拖拽到回收站。
目标:
- 方便性:使用编译命令将用户采用高级语言书写的程序翻译成机器代码或者直接 通过OS所提供的各种命令操作计算机系统,极大地方便用户,使计算机变得易学易用
- 有效性:提高系统资源的利用率,提高系统的吞吐量。
- 可扩充性:方便地增添新的功能和模块。
- 开放性:系统能遵循国际标准规范,所开发的软硬件都能彼此兼容。
1.1.2操作系统的特征
理解并发和并行的区别,并发和共享互为存在条件,没有并发和共享,就谈不上虚拟和异步,因此并发和共享是操作系统的两个最基本特征
思维导图
本节内容
特征
- 并发:指两个或多个事件在同一时间间隔内发生。这些事件==宏观上是同时发生地==,但==微观上是交替发生的==。操作系统的并发性指计算机系统中同时存在着多个运行着的程序。并行:指两个或多个事件在同一时刻同时发生。
- 共享:指资源共享,是指系统中的资源可供内存中多个并发执行的进程共同调用。
互斥共享:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。
同时共享:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。(宏观上是同时,微观上可能是交替对资源进行 访问,即分时共享)。
eg:使用QQ发送文件A,使用微信发送文件B
两个进程正在并发执行(并发性)
需要共享地访问硬盘资源(共享性)
eg:使用QQ和微信视频,同一时间段内摄像头只能分配给其中一个进程(互斥共享)
使用QQ发送文件A,同时使用微信发送文件B,宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从 中读取数据。从微观上看,两个进程是交替着访问硬盘的(互斥共享)。
- 虚拟:是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
eg:一个程序需要放入内存并给他分配CPU才能执行,那么为什么单核CPU可以同时运行多个程序。因为虚拟处理技术,实际上只有 一个单核CPU,在用户看来似乎由多个CPU同时为自己服务。
-
异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
eg:
1.1.3操作系统的发展与分类
思维导图
本节内容
手工操作阶段: 早期的操作方式是由程序员将事先已经穿好孔的纸带(或卡片),装入纸带输入机(或卡片输入机),再启动它们将纸带(或卡片)上的程序和数据输入计算机,然后启动计算机运行。仅当程序运行完毕并取走计算结果后,才允许下一用户上机。
缺点: 1).用户独占全机。即一台计算机的全部资源由上机用户所独占。
2).人机速度矛盾导致资源利用率极低。CPU等待人工操作。当用户进行装带(卡)、卸带(卡)等人工操作时,CPU及内存等资源是空闲的。
单道批处理系统: 引入脱机输入/输出技术(用磁带完成),并监督程序负责控制作业的输入、输出。
利用外围机把纸带读入磁带
优点:(自动性)缓解了一定程序的人机速度矛盾,资源利用率有所提升。
缺点:(顺序性、单道性)内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
多道批处理系统: 允许多个程序同时进入内存并允许他们在CPU中交替地运行。这些程序共享系统中的各种硬/软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
优点: 多道程序==并发==执行,==共享==计算机资源。==资源利用率大幅提升==,CPU和其他资源保持"忙碌"状态,系统吞吐量大。
缺点: 用户响应时间长,==没有人机交互功能==(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行)。
分时操作系统: 计算机以==时间片==为单位,==轮流为各个用户/作业服务==,各个用户可通过终端与计算机进行交互。
优点: 用户请求可以被即时响应,==解决了人机交互问题==。允许多个用户同时使用同一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
缺点:==不能优先处理一些紧急任务==。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
实时操作系统: 在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且==要在严格的时限内处理完时件==。实时操作系统的主要特点是==及时性和可靠性==。分时操作系统分为硬实时系统和软实时系统。硬实时系统: 必须在绝对严格的规定时间内完成处理。eg:导弹控制系统、自动驾驶系统。软实时系统: 能接受偶尔违反时间规定。eg:12306火车订票系统。
优点: 能够优先响应一些紧急任务,某些紧急任务不需要时间片排队。
以下做简单了解
网络操作系统:是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,==实现网络中各种资源地共享(eg:文件共享)和各台计算机之间地通信==(eg:Windows NT就是一种典型地网络操作系统,网站服务器就可以使用)。
分布式操作系统:主要特点是==分布性和并行性==。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成个人任务。
个人计算机操作系统:eg:Windows XP、MacOS,方便个人使用。
1.1.4操作系统的运行机制与体系结构
指令与代码有什么区别?
eg:
指令就是处理器(CPU)能识别、执行的最基本命令。
新的问题:有的指令“人畜无害”。有的指令有很高的权限,eg:内存清零指令,如果用户程序可以使用这个指令,就意味着一个用户可以将其他用户的内存数据随意清零,这样做很危险。
思维导图
本节内容
1.运行机制
两种指令
特权指令:如内存清零指令,不允许用户程序使用。
非特权指令:如普通的运算指令。
两种处理器状态
核心态(管态):特权指令,非特权指令都能执行。
用户态(目态):只能执行非特权指令。
#### 两种程序
内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态。
应用程序:为了保证系统运行安全,普通应用程序只能执行非特权指令,运行在用户态。
2.操作系统的内核
==内核==是计算机上配置的底层软件,是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是==内核程序==。
大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态。优点,高性能。缺点,内核代码庞大,结构混乱,难以维护
微内核:只要把基本的功能保留在内核。优点,内核功能少,结构清晰,方便维护。缺点:需要频繁地在核心态和用户态之间切换,性能低。
eg:操作系统地体系结构问题与企业管理问题很相似。
==内核==就是企业的==管理层==,负责一些重要地工作。只有管理层才能执行==特权指令==,普通员工只能执行==非特权指令==。==用户态、核心态==之间地切换相当于普通员工和管理层之间的工作交接。
==大内核==:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高,缺点是组织结构混乱,难以维护。
==微内核==:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护。缺点是效率低。
1.1.5中断和异常
思维导图
本节内容
各个程序只能串行执行,系统资源利用率低。
中断机制的诞生:为了解决资源利用率低,人们发明了操作系统(作为计算机的管理者),引入中断机制,实现了多道程序并发执行。
==本质==:发生中断就意味着需要操作系统介入,开展管理工作。
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I\O设备等)需要使用特权指令,因此CPU要从用户态转换为核心态。==中断==可以使CPU从==用户态切换为核心态==,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
2:30-6:20有详细讲解动画过程。
[video(video-5SFs4u9V-1642470986669)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
用户态、核心态之间的切换是怎么实现的?
用户态→核心态是通过中断实现的。并且中断是唯一途径。
核心态→用户态的切换是通过执行一个特权指令,将程序状态字(RSW)的标志位设置为“用户态”
外中断的处理过程
1.1.6系统调用
思维导图
本节内容
什么是系统调用?有什么作用? 操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组==系统调用==组成。
“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
应用程序通过==系统调用==请求操作系统的服务,系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如储存分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提供服务请求,由操作系统代为完成,这样==可以保证系统的稳定性和安全性==,防止用户进行非法操作。
系统调用与库函数的区别
系统调用背后地过程
第二章 进程管理
2.1.1进程的定义、组成、组织方式
思维导图
本节内容
进程的概念
进程的组成
进程(进程实体)由==程序段、数据段、PCB==三部分组成。
进程的组织
在一个系统中,通常有数十、数百乃至数千个PCB。为了能对他们加以有效的管理,应当用适当的方式把这些PCB组织起来。 注:进程的==组成==讨论的是一个==进程内部==由哪些部分构成的问题,而进程==组织==讨论的是==多个进程之间==的组织方式问题。
链接方式
索引方式
进程的特征
进程和程序是两个截然不同的概念,相比于程序,进程拥有以下特征:
- 动态性(最基本特征):进程是程序的一次执行过程,是动态地产生、变化和消亡地。
- 并发性:内存中有多个进程实体,各进程可并发执行。
- 独立性:进程是能独立运行、独立获得资源、独立接受调度地基本单位
- 异步性:各进程按各自独立的、不可预知地速度向前推进,操作系统要提供“进程同步机制”来解决异步问题,可能导致运行结果地不确定性。
- 结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成。
2.1.2进程的状态与转换
思维导图
本节内容
进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时需要等待CPU服务,可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。
三种基本状态
运行态:占有CPU,并在CPU上运行 就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行。 阻塞态:因等待某一事件而暂时不能运行。 ==注意==单核处理机环境下,每一时刻最多只有一个进程处于运行态。双核环境下可以同时有两个进程处于运行态。
另外另种状态
创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB。
终止态:进程正在从系统中撤销,操作系统回收进程拥有的资源、撤销PCB。
进程的状态转换
2.1.3进程控制
思维导图
本节内容
什么是进程控制? 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简单理解:进程控制就是要实现进程状态转换。
如何实现进程控制?动画讲解
1:13-5:00
[video(video-N1RSeRB5-1642471254871)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
用==原语==实现进程控制。原语的==特点==是执行期间==不允许中断==,只能一气呵成。 这种不可被中断的操作即==原子操作==。原语采用“==关中断==”和==开中断==指令实现。
==关/开中断指令==的权限非常大,必然是只允许在==核心态==下执行的==特权指令==。
进程控制相关的原语
各原语可以实现怎样状态转换,各原语大概做了哪些事(理解了在选择题分析出答案即可,不用背)
2.1.4进程通信
思维导图
本节内容
什么是进程通信 进程通信就是指进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此==各进程==拥有的==内存地址空间相互独立==。 为了保证安全,==一个进程不能直接访问另一个进程的地址空间==。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。
共享存储
管道通信
消息传递
进程间的数据交换以==格式化的消息==为单位。进程通过操作系统提供的“发送消息/接受消息”两个==原语==进行数据交换。动画讲解9:00-11:00
[video(video-OF9f4LAE-1642476224944)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
2.1.5线程概念和多线程模型
思维导图
本节内容
什么是线程?为什么要引入线程?
还没引入进程之前,系统中各程序只能串行执行。
可以把线程理解为"轻量级进程"。==线程==是一个==基本的CPU执行单元==,也是==程序执行流的最小单位==。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以==并发==,从而进一步提升了==系统的并发度==,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)。
引入线程后,==进程==只作为==除CPU之外的系统资源分配单元==(如打印机、内存地址空间等都是分配给进程的)。
引入线程机制后,有什么变化?
线程的属性
线程的实现方式
用户级线程
内核级线程
二者组合
多线程模型
在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。
多对一
一对一模型
多对多,集二者之所长
2.2.1处理机调度的概念、层次
思维导图
本节内容
调度的基本概念
调度的三个层次-高级调度
中级调度
补充知识:进程的挂起状态与七状态模型
暂时调到外存等待的进程状态为==挂起状态(挂起态)==。
挂起态又可以进一步细分为==就绪挂起、阻塞挂起==两种状态。
低级调度
三层调度的联系、对比
2.2.2进程调度的时机、切换与过程
思维导图
本节内容
进程调度的时机
==进程调度==(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
进程调度的方式
进程与进程切换过程
2.2.3调度算法的评价指标
思维导图
本节内容
CPU利用率
CPU“忙碌”的时间占总时间的比例 ==利用率===
系统吞吐量
对于计算机来说,希望能用尽可能少的时间处理完尽可能多的作业。 单位时间内完成作业的数量
系统吞吐量=
eg:某计算机系统处理完10道作业,共花费100s,则系统吞吐量为?
10/100=0.1 道/s
周转时间
对于计算机的用户来说,他很关心自己作业从提交到完成花了多少时间。 周转时间指从==作业被提交给系统开始==,到==作业完成为止==的这段时间间隔。
它包括四部分:作业在外存后备队列上等待作业调度(高级调度)时间、进程在就绪队列上等待进程调度(低级调度)的时间、进程在CPU上执行的时间、进程等待I/O操作完成的时间。后三项在一个作业的整个处理过程中,可能多次发生。
(作业)==周转时间===作业完成时间-作业提交时间
==平均周转时间===
==带权周转时间====
==平均带权周转时间===
等待时间
计算机的用户希望自己的作业尽可能少的等待处理机。 等待时间指进程/作业==处于等待处理机状态时间之和==,等待时间越长,用户满意度越低。
响应时间
对于计算机用户来说,会希望自己的提交请求(比如通过键盘输入了一个调试命令)尽早地开始被系统服务、回应。 响应时间指从用户==提出请求==到==首次产生响应==所用的时间。
2.2.4FCFS、SJF、HRRN调度算法
思维导图
本节内容
各种调度算法的学习思路
- 算法思想
- 算法规则
- 这种调度算法是用于作业调度还是进程调度
- 抢占式?非抢占式
- 优点和缺点
- 是否会导致==饥饿==
先来先服务
按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。
eg:
| 进程 | 到达时间 | 运行时间 | 完成时间 | 等待时间 | 平均等待时间 | 周转时间 | 平均周转时间 | 带权周转时间 | 平均带权周转时间 |
|---|---|---|---|---|---|---|---|---|---|
| P1 | 0 | 7 | 7 | 0 | 4.75 | 7 | 8.75 | 1 | 3.25 |
| P2 | 2 | 4 | 11 | 5 | 9 | 2.25 | |||
| P3 | 4 | 1 | 12 | 7 | 8 | 8 | |||
| P4 | 5 | 4 | 16 | 7 | 11 | 2.75 |
==注意I/O操作==
优点:公平、算法实现简单
缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即,FCFS算法==对长作业有利,对短作业不利==。
不会造成饥饿
短作业优先
最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)。
eg:非抢占式的短作业优先算法 P1→P3→P2→P4
| 进程 | 到达时间 | 运行时间 | 完成时间 | 等待时间 | 平均等待时间 | 周转时间 | 平均周转时间 | 带权周转时间 | 平均带权周转时间 |
|---|---|---|---|---|---|---|---|---|---|
| P1 | 0 | 7 | 7 | 0 | 4 | 7 | 8 | 1 | 2.5625 |
| P2 | 2 | 4 | 12 | 6 | 10 | 2.5 | |||
| P3 | 4 | 1 | 8 | 3 | 4 | 4 | |||
| P4 | 5 | 4 | 16 | 7 | 11 | 2.75 |
抢占式的短作业优先算法 P1(5)→P2(2)→P3(0)→P2(0)→P4(0)→P1(0)
==注意==
- 如果题目中==未特别说明==,所提到的"短作业/进程优先算法"==默认==是==非抢占式==
- 很多书上都会说“SJF 调度算法的平均等待时间、平均周转时间最少”。严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少。应该加上一个条件==“在所有进程同时可运行==时,采用SJF调度算法的平均等待时间、平均周转时间最少”,或者说“在==所有进程都几乎同时到达==时,采用SJF调度算法的平均等待时间、平均周转时间最少”。如果不加上述前提条件,则应该说“==抢占式的==短作业/进程优先调度算法(==最短剩余时间优先,SRNT==算法)的平均等待时间、平均周转时间最少”
- 虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS) ,SJF依然可以获得较少的平均等待间、平均周转时间。
- 如果选择题中遇到“SJF算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项。
优点:"最短的"平均等待时间、平均周转时间
缺点:不公平。==对短作业有利,对长作业不利。==可能产生==饥饿现象==。另外,作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。
会导致饥饿。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生=="饥饿"==现象。如果一直得不到服务,则成为=="饿死"==。
最高相应比优先
在每次调度时先计算各个作业/进程的==响应比==,选择==响应比最高==的作业/进程为其服务。
eg:
综合考虑了等待时间和运行时间(要求服务时间) 等待时间同时时,要求服务时间短的优先(SJF的优点) 要求服务时间相同时,等待时间长的优先(FCFS的优点) 对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题 不会导致饥饿
总结
2.2.5时间轮转法、优先级、多级反馈队列
思维导图
本节内容
时间轮转法
按照各个进程到达就绪队列地顺序,轮流让各个进程执行一个时间片(eg:100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放入就绪队列队尾重新排队。
eg:时间片大小为2
时间片大小为5
时间片太大或太小有什么影响?
如果==时间片==太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法==退化为先来先服务==调度算法,并且会==增大进程响应时间==,因此==时间片不能太大==。 另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果==时间片太小==,会导致==进程切换过于频繁==,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见==时间片也不能太小==。
eg:
优先级
每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。
eg:非抢占式
抢占式
补充知识
优点:用于优先级区分紧急程度、重要程度,适用于实时 操作系统。可灵活的调整对各种作业/进程的偏好程度。 缺点:若源源不断地有高优先级进程到来,则可能导致饥饿。
会导致饥饿。
多级反馈队列
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。
- 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾。
- 只有第K级队列为空时,才会为K+1级队头的进程分配时间片。
eg:动画讲解30:00-35:00
[video(video-qYRA1V9l-1642473680188)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
优缺点:对各类型进程相对公平(FCFS优点);每个新到达的进程都可以很快就得到响应(RR的优点);短进程只用较少的时间就可完成(SPF的优点);不必实现估计进程的运行时间(避免用户作假);可灵活地调整对各类进程地偏好程度,比如CPU密集型进程、I/O密集型进程(扩展:可以将因I/O而阻塞地进程重新放回到原队列,这样I/O型进程就可以保持较高优先级)。
总结
2.3.1进程同步、进程互斥
思维导图
本节内容
什么是进程同步?
并发性带来了异步性,有时需要通过进程同步解决这种异步问题。有的进程之间需要相互配合完成工作,各进程的工作推进需要遵守一定的先后顺序。
什么是进程互斥?
对临界资源的访问,需要互斥的进行。即同一时间段内只能允许一个进程访问该资源。
对临界资源的互斥访问,可以在逻辑上分为四部分:
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下规则:
- 空闲让进。临界区空闲时,应允许一个进程访问。
- 忙则等待。临界区正在被访问时,其他试图访问的进程需要等待。
- 有限等待。要在有限时间内进入临界区,保证不会饥饿。
- 让权等待。进不了临界区的进程,要释放处理机,防止忙等。
2.3.2进程互斥的软件实现方法
思维导图
本节内容
单标志法
双标志先检查法
如果在②发生进程切换,P1进程也满足访问临界区条件,所以违反忙则等待原则
双标志后检查法
Peterson算法
2.3.3进程互斥的硬件实现方法
思维导图
本节内容
中断屏蔽方法
TestAndSet指令
Swap指令
2.3.4信号量机制
思维导图
本节内容
信号量机制
用户进程可以通过使用操作系统提供的==一对原语==来对==信号量==进行操作,从而很方便的实现了进程互斥、进程同步。
整型信号量
记录型信号量
eg:动画17:00-23:00
[video(video-TR8GK3o7-1642473738324)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
2.3.5用信号量实现进程互斥、同步、前驱关系
思维导图
本节内容
信号量机制实现进程互斥
P操作是对资源的申请,V操作是对资源的释放。P、V操作必须成对出现
信号量机制实现进程同步
信号量机制实现前驱关系
2.3.6生产者-消费者问题
本节内容
问题描述
实现
==实现互斥的P操作一定要在实现同步的P操作之后。==
总结
2.3.7多生产者-多消费者
本节内容
问题分析
如果不设置互斥信号量
总结
2.3.8吸烟者问题
本节内容
问题描述
问题分析
总结
2.3.9读者-写者问题
本节内容
问题描述
问题分析
如何实现
总结
2.3.10哲学家进餐问题
本节内容
问题描述
问题分析
如何实现
==三种方案==
③仅当一个哲学家左右两只筷子都可用时才允许他抓起筷子
总结
2.3.11 管程
思维导图
本节内容
为什么引入管程?
解决信号量机制编程麻烦、易出错的问题。
管程的定义和基本特征
扩展
扩展
2.4.1死锁的概念
思维导图
本节内容
什么是死锁?
在并发环境下,各进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进。
eg:
死锁、饥饿、死循环的区别
死锁:在并发环境下,各进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进。
饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断地短进程到来,则长进程将一直得不到处理机,从而发生长进程"饥饿"。
死循环:某进程执行过程中一直调不出某个循环的现象。有时是因为核程序逻辑bug导致的,有时是程序员故意设计的。
死锁产生的必要条件
什么时候会发生死锁
死锁的处理策略
- 预防死锁。破坏死锁产生的四个必要条件中的一个或几个。
- 避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)。
- 死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。
2.4.2死锁的处理策略-预防死锁
思维导图
本节内容
破坏互斥条件
破坏不剥夺条件
破坏请求和保持条件
破坏循环等待条件
2.4.3死锁的处理策略-避免死锁
思维导图
本节内容
什么是安全序列
银行家算法
实际做题
代码实现银行家算法
总结
2.4.4死锁的处理策略-检测和解除
思维导图
本节内容
死锁的检测
死锁解除
第三章 内存管理
3.1.1内存地基础知识
思维导图
一般作为选择题考察
本节内容
什么是内存?有何作用?
内存是用于存放数据的硬件,程序执行前==需要先放到内存中才能被CPU处理==。
补充知识:几个常用的数量单位
进程的运行原理—指令
逻辑地址vs物理地址
从写程序到程序运行
装入模块装入内存
装入的三种方式—绝对装入
装入的三种方式—静态重定位
装入的三种方式—动态重定位
链接的三种方式
- 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
- 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
- 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
3.1.2内存管理的概念
思维导图
本节不是重点,主要形成大体框架
本节内容
操作系统要管理什么?
- 内存空间的分配和回收
- 内存空间的扩充
- 地址转换
- 储存保护
3.1.3覆盖与交换
思维导图
主要在选择题考察,理解两种技术的思想
本节内容
覆盖技术
eg:
交换技术
3.1.4连续分配管理方式
思维导图
本节内容
==连续分配==:指为用户进程分配的必须是一个==连续的内存空间。==
单一连续分配
固定分区分配
操作系统需要建立一个数据结构—==分区说明表==,来实现各分区的分配与回收。每个表项对应一个分区。
动态分区分配
==动态分区==又称为==可变分区分配==,这种分配方式==不会预先划分内存分区==,而是在进程装入内存时,==根据进程的大小动态地建立分区==,并使分区地大小正好适合进程地需要。因此系统分区的大小和数目是可变。
操作系统用什么样的数据结构记录内存的使用情况:空闲分区表、空闲分区链
当很多个空闲分区都能满足需求时,应选择哪个分区进行分配?
如何进行分区的分配与回收操作
首次适应算法,分配
最佳适应算法,分配
回收,两个相邻的空闲分区合并为一个
内部碎片和外部碎片的定义
动画讲解20:00-23:00
[video(video-VxRMSRYI-1642474865268)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
3.1.5动态分区分配算法
思维导图
本节内容
这节PPT动画效果更好
首次适应算法
==算法思想:==每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
==如何实现:==空闲分区以地址递增的次序排列。每次分配内存顺序查找==空闲分区链==(或==空闲分区表==)找到大小能满足要求的第一个空闲分区。
最佳适应算法
==算法思想==:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当”大进程“到来时能有连续的大片空间,可以尽可能多的留下大片的空闲区,即,优先使用更小的空闲区。
==如何实现==:空闲分区==按容量递增次序链接==。每次分配内存时顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。
最坏适应算法
==算法思想:==为了解决最佳适应算法的问题—即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲分区,这样分配后剩余的空闲分区就不会太小,更方便使用。
==如何实现==:空闲分区==按容量递减次序链接==。每次分配内存时按顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。
邻近适应算法
==算法思想==:首次适应算法每次都从链头开始查找,这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次查找都从上一次查找结束的位置开始检索,就能解决上述问题。
==如何实现==:空闲分区以地址递增的顺序排列(可以排列成一个循环链表)。每次分配内存时==从上次查找结束的位置开始==查找==空闲分区链==(或==空闲分区表==),找到大小能满足要求的第一个空闲分区。
总结
3.1.6基本分页存储管理的基本概念
思维导图
本节内容
连续分配方式的缺点
==连续分配==:为用户进程分配的必须是一个连续的内存空间。 ==非连续分配==:为用户进程分配的可以是一些==分散的内存空间==。 ==这节主要讲基本分页存储管理==
==把”固定分区分配“改造为”非连续分配版本“==
分页存储管理的基本概念
如何实现地址的转换?使用动态重定位
eg:
为了方便计算页号、页面偏移量,==页面大小==一般设为2的整数幂。
逻辑地址结构
页表
为了能够知道进程的每个页面在内存中存放的位置,操作系统要为==每个进程建立一张页表==。
3.1.7基本地址变换机构
思维导图
既有选择题又有大题
本节内容
基本地址变换机构
eg:
扩展
3.1.8具有快表的地址变换机构
思维导图
本节内容
局部性原理
快表:最近使用过的页表会放入快表。
引入快表后,地址的变换过程
总结
3.1.9两级页表
思维导图
本节内容
单极页表存在的问题,问题一
两级页表的原理、地址结构
如何实现地址变换
单极页表存在的问题,问题二,使用置换算法
细节
3.1.10基本分段存储管理方式
思维导图
本节内容
分段
进程的地址空间:按照程序==自身的逻辑==关系==划分为若干个段==,每个段都有一个段名(在低级语言中,程序员使用段名来编程),==每段从0开始编址==。
段表
地址变换
分段、分页管理的对比
3.1.11段页式管理方式
思维导图
本节内容
分页、分段的优缺点
段页式管理
段页式管理的逻辑地址结构
段表和页表: 一个进程对应一个段表,但一个进程可能对应多个页表
3.2.1虚拟内存的基本概念
思维导图
本节内容
传统存储管理方式的特征、缺点
局部性原理
虚拟内存的定义和特征
如何实现虚拟内存技术
3.2.2请求分页管理方式
思维导图
多理解
本节内容
前言
页表机制
缺页中断机构
动画4:40—7:00
[video(video-Ek5ldQF4-1642473629118)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
==缺页中断==是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
地址变换机构
3.2.3页面置换算法
思维导图
本节内容
最佳置换算法
==最佳置换算法==可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面,操作系统无法提前预判页面的访问序列。因此,==最佳置换算法是无法实现的==。
先进先出置换算法
最近最久未使用置换算法
时钟置换算法
改进型的时钟置换算法
总结
3.2.4页面分配策略
思维导图
本节内容
页面分配、置换策略
何时调入页面
从何处调入页面
抖动(颠簸)现象
工作集
第四章 文件管理
4.1.1初识文件管理
思维导图
本节内容
文件的属性
文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,==同一目录下不允许有重复文件==。
标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
类型:指明文件的类型(bat.txt)。
位置:文件存放的路径(让用户使用)、对外存中的地址(操作系统使用、对用户不可见)。
创建时间、上次修改时间、文件所有者信息
保护信息:对文件进行保护的访问控制。
文件内部的数据应该怎样组织起来
操作系统应该向上提供哪些功能
从上往下看,文件应该如何存放在外存
其他需要由操作系统实现的文件管理功能
4.1.2文件的逻辑结构
思维导图
本节内容
无结构文件
无结构文件没有明显的结构特性,所以重点学习有结构文件
有结构文件
由一组相似的记录组成,又称“==记录式文件==”。每条记录由若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据可作为==关键字==。
顺序文件
索引文件
索引顺序文件
多级索引顺序文件
4.1.3文件目录
思维导图
本节内容
文件控制块
需要对目录进行的操作
目录结构—单级目录结构
目录结构—两级目录结构
目录结构—多级目录结构
目录结构—无环图目录结构
索引结点(FCB改进)
4.1.4文件的物理结构(上)
本节内容
文件块、磁盘块
文件分配方式—连续分配
优点
缺点
文件分配方式—链接分配,隐式链接
文件分配方式—链接分配 显式链接
4.1.4文件的物理结构(下)
思维导图
本节内容
文件分配方式—索引分配
总结
4.1.5文件存储空间管理
思维导图
本节内容
存储空间的规划与初始化
存储空间的管理—空闲表法
存储空间管理—空闲链表法
操作系统保存着==链头、链尾指针==
离散分配、连续分配都适用。为一个文件分配多个盘块时效率更高!
存储空间管理—位示图法
==位示图==:每个二进制位对应一个盘块。
eg:(字号,位号)={i,j}的二进制位对应的==盘块号 b=ni+j== b号盘块对应的==字号i=b/n==,==位号j=b%n==
存储空间管理—成组链接法
回收过程动画22:00-27:00
[video(video-Quo1BvV5-1642472820769)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
4.1.6文件的基本操作
思维导图
本节内容
创建文件
删除文件
打开文件
关闭文件
读文件
写文件
4.1.7文件共享
思维导图
本节内容
==注意复制与共享的区别==
多个用户共享一个文件,意味着系统中只有"一份"文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。 如果是多个用户都"复制"了同一个文件,那么系统中会有"好几份"文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。
基于索引结点的共享方式(硬链接)
基于符号链的共享方式(软链接)
eg:快捷方式6:00-9:00
[video(video-bEkrm0D9-1642472689138)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
4.1.8文件保护
思维导图
本节内容
口令保护
加密保护
访问控制
精简的访问控制表
4.1.9文件系统的层次结构
本节内容
文件系统的层次结构
重要考点
4.2.1磁盘的结构
思维导图
本节内容
磁盘、磁道、扇区
如何在磁盘中读/写数据
盘面、柱面
磁盘的分类
4.2.2磁盘调度算法
思维导图
本节内容
先来先服务
最短寻找时间优先
扫描算法
LOOK调度算法
循环扫描算法
C-LOOK调度算法
4.2.3减少磁盘延迟时间的方法
思维导图
本节内容
减少延迟时间的方法:交替编号
磁盘地址结构的设计
减少延迟时间的方法:错位命名
动画9:00-14:00
[video(video-ZZdWgolv-1642472167825)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
4.2.4磁盘的管理
思维导图
本节内容
磁盘初始化
引导块
坏块的管理
第五章 输入/输出(I/O)管理
5.1.1 I-O设备的概念和分类
思维导图
本节内容
什么是I/O设备
I/O设备的分类—按使用特性
I/O设备的分类—按传输速率分类
I/O设备的分类—按信息交换的单位分类
5.1.2 I-O控制器
思维导图
考的频率不高,需要注意编址方式的区别
本节内容
I/O设备的机械部件
I/O设备的电子部件(I/O控制器)
I/O控制器的组成
==寄存器独立编址==
内存映像I/O v.s. 寄存器独立编址
5.1.3 I-O控制方式
思维导图
本节内容
程序直接控制方式
==轮询==
中断驱动方式
DMA方式
通道控制的方式
==通道==:一种硬件,可以理解为是“==弱鸡版的CPU==”。通道可以识别并执行一系列==通道指令==
5.1.4 I-O软件层次结构
知识点与重要考点
最常考的是I/O层次的顺序?处理顺序?
本节内容
知识总览
用户层软件
设备独立性软件
==设备独立性软件==,又称==设备无关系软件==。与设备的硬件特性无关的功能几乎都在这一层实现。
主要实现的功能:
- 向上层提供统一的调用接口(如read/write 系统调用)
- 设备的保护(原理类似于文件保护。设备被看作是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样)。
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
- 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。
思考:为何不同的设备需要不同的设备驱动程序?
设备驱动程序
中断处理程序
5.1.5 I-O核心子系统
本节内容
知识总览
这些功能要在哪个层次实现?
I/O调度
设备保护
5.1.6 I-O假脱机技术
思维导图
本节内容
什么是脱机技术
假脱机技术—输入井和输出井
假脱机技术—输入进程和输出进程
假脱机技术—输入/输出缓冲区
共享打印机原理分析
动画9:00-10:00
[video(video-z0gg9aOq-1642471789529)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
5.1.7 I-O 设别的分配和回收
思维导图
本节内容
设备分配时应考虑的因素
设备分配管理中的数据结构
设备分配的步骤
设备分配步骤的改进
5.1.8 I-O 缓冲区管理
思维导图
本节内容
什么是缓冲区?有什么作用?
有什么作用?
单缓冲
双缓冲
使用单/双缓冲在通信时的区别
循环缓冲区
缓冲池