文章目录
- 一、高频考点
- 二、操作系统概述
- 1、操作系统的定义
- 2、操作系统的目标
- 3、操作系统的作用
- 4、操作系统的类型
- 5、操作系统的特征
- 6、并发
- 7、共享
- 8、虚拟
- 9、异步
- 10、操作系统的体系结构
- 三、进程管理
- 1、进程的定义
- 2、进程的状态
- 3、进程控制块(PCB)
- 4、进程的创建
- 5、进程的终⽌
- 6、进程的阻塞与唤醒
- 7、进程的挂起与激活
- 8、线程的定义
- 9、线程的优点
- 10、进程间通信(IPC)
- 11、IPC的⽅式
- 12、共享内存
- 13、消息传递
- 14、管道
- 15、同步与互斥
- 16、临界资源
- 17、临界区
- 18、信号量
- 19、PV 操作
- 20、管程
- 21、 互斥锁
- 22、条件变量
- 23、读写锁
- 24、⾃旋锁
- 25、屏障
- 26、原⼦操作
- 27、⽆锁编程
- 28、并发集合
- 29、线程池
- 30、上下⽂切换
- 31、用户态线程和内核态线程
- 32、协程
- 33、纤程
- 34、NUMA架构
- 35、SMP架构
- 36、CPU缓存
- 37、缓存⼀致性
- 38、伪共享
- 处理机调度
- 39、处理机调度的定义
- 40、调度的层次
- 41、调度的⽬标
- 42、调度算法
- 43、先来先服务(FCFS)
- 44、短作业优先(SJF)
- 45、优先级调度
- 46、时间⽚轮转调度
- 47、多级反馈队列调度
- 48、实时调度
- 死锁
- 49、死锁的定义
- 50、死锁产⽣的必要条件
- 51、互斥条件
- 52、请求与保持条件
- 53、不可剥夺条件
- 54、循环等待条件
- 55、死锁的处理策略
- 56、预防死锁
- 57、 银⾏家算法
- 58、安全状态
- 59、不安全状态
- 60、死锁检测
- 61、资源分配图
- 62、死锁解除
- 63、资源剥夺
- 64、进程撤销
- 65、进程回退
- 66、选择死锁解除对象
- 67、饥饿
- 四、内存管理
- 1、内存管理的功能
- 2、地址空间
- 3、物理地址空间
- 4、逻辑地址
- 5、物理地址
- 6、地址转换
- 7、静态重定位
- 8、动态重定位
- 9、内存分配⽅式
- 10、连续分配
- 连续分配
- 11、固定分区分配
- 12、动态分区分配
- 13、外部碎⽚
- 14、动态分区分配算法
- 15、⾸次适应算法
- 16、最佳适应算法
- 17、最坏适应算法
- 18、邻近适应算法
- 19、碎⽚整理
- 非连续分配
- 20、分⻚存储管理
- 21、页
- 22、页框
- 23、页表
- 24、快表(TLB)
- 25、多级⻚表
- 26、反置页表
- 27、分段存储管理
- 28、段
- 29、段表
- 30、段页式存储管理
- 31、虚拟内存
- 32、请求分页存储管理
- 33、请求分段存储管理
- 34、页面置换算法
- 35、最佳置换算法(OPT)
- 36、先进先出置换算法(FIFO)
- 37、最近最久未使用置换算法(LRU)
- 38、时钟置换算法(Clock)
- 39、改进型Clock置换算法
- 五、总结
一、高频考点
本文主要讲解:计算机考研复试中 操作系统 复试面试的高频题汇总。
操作系统的重点串讲如下:
一、操作系统概述
- 概念、内核态和用户态、中断异常、系统调用
二、进程管理
- 进程与线程、处理机调度、同步与互斥、死锁
三、内存管理
- 内存管理基础、虚拟内存管理
四、文件管理
- 文件系统基础、文件系统实现、磁盘组织与管理
五、输入输出管理(I/O)
- I/O管理概述、I/O核心子系统
复试当中,常考的知识点主要集中在前三章,所以后面两章可以回顾初试书本上的内容,了解即可。
二、操作系统概述
1、操作系统的定义
操作系统(OperatingSystem,OS)是管理计算机硬件与软件资源的系统软件,是直接运⾏在 “裸机” 上的最基本的系统软件,是用户与计算机硬件之间的接⼝。(操作系统是计算机系统的核⼼。)
2、操作系统的目标
⽅便性、有效性、可扩充性、开放性。(这些⽬标指导着操作系统的设计和发展。)
3、操作系统的作用
管理计算机硬件资源、向上层软件提供服务、作为用户与计算机硬件之间的接⼝。(操作系统是计算机系统的重要组成部分。)
4、操作系统的类型
批处理操作系统、分时操作系统、实时操作系统、⽹络操作系统、分布式操作系统。(不同的操作系统适⽤于不同的应⽤场景。)
5、操作系统的特征
并发、共享、虚拟、异步。(这些特征体现了操作系统的核⼼功能。)
6、并发
指两个或多个事件在同⼀时间间隔内发⽣。(并发是操作系统的重要特征,可以提⾼资源利⽤率。)
7、共享
指系统中的资源可供多个并发执⾏的程序共同使⽤。(共享是操作系统的重要特征,可以提⾼资源利⽤率。)
8、虚拟
指通过某种技术将⼀个物理实体变为若⼲个逻辑上的对应物。(虚拟技术可以提⾼资源利⽤率和安全性。)
9、异步
指进程的执⾏不是⼀⽓呵成,⽽是以不可预知的速度向前推进。(异步是操作系统的重要特征,需要进⾏同步和互斥控制。)
10、操作系统的体系结构
单内核、微内核。(不同的体系结构有不同的优缺点。)
三、进程管理
1、进程的定义
进程是程序的⼀次执⾏过程,是系统进⾏资源分配和调度的基本单位。(进程是动态的概念。)
🌟 你双击打开 Chrome 浏览器,操作系统会创建⼀个进程来运⾏ Chrome。
如果你同时打开多个Chrome窗⼝,每个窗⼝对应⼀个独⽴的进程。(注意,现在的 Chrome 通常是多进程架构)
2、进程的状态
运⾏态、就绪态、阻塞态。(进程的状态反映了进程的执⾏情况。)
🌟 运⾏态:CPU 正在执⾏ Chrome 浏览器的代码,例如渲染⽹⻚。
🌟 就绪态:Chrome 浏览器已经准备好渲染新的⽹⻚,但 CPU 正在忙于执⾏其他进程。
🌟 阻塞态:Chrome 浏览器正在等待从⽹络下载图⽚,此时进程暂停执⾏。
3、进程控制块(PCB)
PCB是进程存在的唯⼀标志,记录了进程的所有信息。(PCB是操作系统管理进程的重要数据结构。)
🌟 PCB 就像 Chrome 浏览器的 “档案”,包含了进程ID(PID)、进程状态、优先级、程序计数器(指向下⼀条要执⾏的指令)、寄存器内容、内存管理信息(⻚表地址)、I/O状态信息(打开的⽂件列表)等。
4、进程的创建
操作系统创建⼀个新进程需要分配PCB、分配内存空间、加载程序代码和数据。(进程的创建是⼀个复杂的过程。)
🌟 当你点击 Chrome 浏览器中的 “新建标签⻚” 按钮时,Chrome 进程可能会创建⼀个新的线程,或者如果 Chrome 是多进程架构,可能会创建⼀个新的进程来处理新的标签⻚。
5、进程的终⽌
进程正常结束、异常结束、被操作系统终⽌。(进程的终⽌需要释放资源。)
🌟 当你关闭 Chrome 浏览器窗⼝时,该 Chrome 进程会终⽌,操作系统会回收该进程占⽤的内存、⽂件句柄等资源。
6、进程的阻塞与唤醒
进程因为等待某种事件⽽进⼊阻塞态,当事件发⽣时被唤醒进⼊就绪态。(阻塞和唤醒是进程同步的重要机制。)
🌟 Chrome 浏览器需要读取硬盘上的缓存⽂件,但硬盘读取速度较慢,Chrome进程会进⼊阻塞态。当硬盘数据读取完成后,操作系统会唤醒Chrome进程,使其进⼊就绪态。
7、进程的挂起与激活
将进程从内存移到外存,释放内存空间,称为挂起;
将进程从外存移到内存,称为激活。(挂起和激活可以提⾼内存利⽤率。)
🌟 如果你的电脑运⾏了很多程序,内存不⾜,操作系统可能会将⼀些不常⽤的 Chrome 浏览器标签⻚对应的进程挂起,释放内存空间给其他程序使⽤。当你再次访问这些标签⻚时,操作系统会将它们激活,重新加载到内存中。
8、线程的定义
线程是进程的⼀个实体,是CPU调度和分派的基本单位,⽐进程更⼩的能独⽴运⾏的基本单位。(线程是轻量级的进程。)
🌟 Chrome 浏览器进程可以有多个线程,⼀个线程负责渲染⽹⻚,⼀个线程负责处理⽤⼾输⼊,⼀个线程负责下载资源。
9、线程的优点
创建和撤销线程的开销⽐进程⼩、线程间切换的开销⽐进程⼩、线程间可以共享进程的资源。(线程可以提⾼程序的并发性和效率。)
🌟 进程是重量级的,线程是轻量级的。⼀个进程可以包含多个线程,线程共享进程的资源(代码段、数据段、堆),但拥有独⽴的栈和寄存器。
10、进程间通信(IPC)
指进程之间交换信息。(进程间通信是实现并发的重要⼿段。)
11、IPC的⽅式
共享内存、消息传递、管道、套接字(Socket)、信号量、信号、⽂件。(不同的IPC⽅式有不同的优缺点。)
12、共享内存
进程之间共享⼀块内存区域,需要进⾏同步和互斥控制。(共享内存是效率最⾼的IPC⽅式。)
🌟 多个 Chrome 浏览器进程需要共享渲染引擎的数据,可以使⽤共享内存。
13、消息传递
进程之间通过发送和接收消息进⾏通信。(消息传递可以实现进程间的同步和互斥。)
🌟 ⼀个进程负责监控键盘输⼊,另⼀个进程负责处理⿏标点击,它们可以使⽤消息传递来通知对⽅发⽣的事件。
14、管道
管道是⼀种半双⼯的通信⽅式,只能⽤于具有亲缘关系的进程之间。(管道是简单的IPC⽅式。)
🌟 在Linux系统中,可以使⽤管道将⼀个命令的输出作为另⼀个命令的输⼊,例如
ls -l | grep "txt"
15、同步与互斥
同步是指多个进程按照⼀定的顺序执⾏,互斥是指多个进程不能同时访问临界资源。(同步和互斥是解决并发问题的关键。)
16、临界资源
指⼀次只能允许⼀个进程访问的资源。(临界资源需要进⾏保护。)
🌟 打印机、共享变量、共享⽂件、数据库连接等。
17、临界区
指访问临界资源的代码段。(临界区需要进⾏保护。)
18、信号量
信号量是⼀种⽤于同步和互斥的机制。(信号量可以实现进程间的同步和互斥。)
19、PV 操作
P操作(wait 操作)和 V 操作(signal 操作)是信号量的基本操作。(PV 操作可以实现进程间的同步和互斥。)
20、管程
⼀种⾼级的同步机制,将共享变量和对共享变量进⾏操作的过程封装在⼀起,并提供互斥访问。(管程可以简化并发程序的编写。)
🌟 Java 中的
synchronized
关键字和java.util.concurrent
包中的并发集合类都是管程的实现。
21、 互斥锁
⼀种⽤于实现互斥的机制,⼀个互斥锁只能被⼀个线程持有。(互斥锁可以保证临界资源的互斥访问。)
🌟 C++ 中的
std::mutex
22、条件变量
⼀种⽤于线程同步的机制,允许线程在满⾜特定条件时进⼊等待状态,并在条件满⾜时被唤醒。(条件变量通常与互斥锁⼀起使⽤。)
🌟 C++ 中的
std::condition_variable
23、读写锁
⼀种允许多个线程同时读取共享资源,但只允许⼀个线程写⼊共享资源的锁。(读写锁可以提⾼并发程序的性能。)
🌟 数据库中,多个用户可以同时读取数据,但只有⼀个用户可以修改数据。可以使⽤读写锁来实现这种并发控制。
24、⾃旋锁
⼀种忙等待的锁,线程在获取锁失败时,会不断地循环尝试获取锁,⽽不是进⼊阻塞状态。(⾃旋锁适⽤于临界区代码执⾏时间较短的情况。)
🌟 在多核 CPU 系统中,如果临界区代码执⾏时间很短,使⽤⾃旋锁可以避免线程切换的开销。
25、屏障
⼀种⽤于线程同步的机制,允许⼀组线程等待所有线程都到达某个点后再继续执⾏。(屏障可以实现线程间的同步。)
🌟 在并⾏计算中,需要将⼀个任务分解成多个⼦任务,每个⼦任务由⼀个线程执⾏。当所有线程都完成⼦任务后,才能进⾏下⼀步计算。可以使⽤屏障来同步这些线程。
26、原⼦操作
⼀种不可分割的操作,要么全部执⾏,要么全部不执⾏。(原⼦操作可以保证数据的⼀致性。)
🌟 对⼀个整数进⾏自增操作,可以使⽤原⼦操作来保证多个线程同时进⾏⾃增操作时不会发⽣数据竞争。
27、⽆锁编程
⼀种避免使⽤锁的并发编程技术,通过使⽤原⼦操作等⼿段来实现并发安全。(⽆锁编程可以提⾼并发程序的性能。)
🌟 使⽤原⼦操作来实现⼀个⽆锁队列,可以避免使⽤锁带来的性能开销。
28、并发集合
⼀种线程安全的集合类,可以保证多个线程同时访问集合时的安全性。(并发集合可以简化并发程序的编写。)
🌟 Java 中的
ConcurrentHashMap
和ConcurrentLinkedQueue
等
29、线程池
⼀种管理线程的机制,可以减少创建和销毁线程的开销,提⾼程序的性能。(线程池是常⽤的并发编程技术。)
🌟 Web 服务器使⽤线程池来处理客⼾端的请求,可以避免频繁地创建和销毁线程。
30、上下⽂切换
操作系统切换 CPU 从⼀个进程/线程到另⼀个进程/线程的过程。(上下⽂切换会带来⼀定的开销。)
31、用户态线程和内核态线程
用户态线程由用户程序管理,内核态线程由操作系统内核管理。(内核态线程可以更好地利⽤系统资源。)
32、协程
⼀种用户态的轻量级线程,可以在⼀个线程中实现多个协程的并发执⾏。(协程可以提⾼程序的并发性和效率。)
33、纤程
比协程更轻量级的用户态线程。(纤程的切换开销更小。)
34、NUMA架构
非⼀致性内存访问架构,CPU 访问本地内存的速度⽐访问远程内存的速度快。(NUMA架构需要考虑数据放置的问题。)
35、SMP架构
对称多处理器架构,所有 CPU 共享同⼀块内存。(SMP 架构的编程相对简单。)
36、CPU缓存
CPU内部的⾼速缓存,⽤于存储常⽤的数据和指令。(CPU 缓存可以提⾼程序的性能。)
37、缓存⼀致性
多个 CPU 缓存之间需要保持数据的⼀致性。(缓存⼀致性是多核 CPU 系统需要解决的问题。)
38、伪共享
多个线程访问不同的变量,但这些变量位于同⼀个缓存行中,导致缓存失效,影响性能。(伪共享是多线程编程中需要避免的问题。)
处理机调度
39、处理机调度的定义
处理机调度是指从就绪队列中选择⼀个进程,将处理机分配给它运⾏。(处理机调度是操作系统的重要功能。)
40、调度的层次
⾼级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)
(不同的调度层次有不同的作⽤。)
41、调度的⽬标
提⾼CPU利⽤率、提⾼系统吞吐量、减少周转时间、减少响应时间、公平性。(这些⽬标是衡量调度算法好坏的重要指标。)
42、调度算法
先来先服务(FCFS)、短作业优先(SJF)、优先级调度、时间⽚轮转调度、多级反馈队列调度。(不同的调度算法有不同的优缺点。)
43、先来先服务(FCFS)
按照进程到达就绪队列的先后顺序进⾏调度。(FCFS 算法简单易实现,但不利于短作业。)
44、短作业优先(SJF)
选择就绪队列中运⾏时间最短的进程进⾏调度。(SJF 算法可以有效减少平均周转时间,但可能导致⻓作业饥饿。)
45、优先级调度
选择就绪队列中优先级最⾼的进程进⾏调度。(优先级调度可以保证重要进程的运⾏,但可能导致低优先级进程饥饿。)
46、时间⽚轮转调度
将 CPU 时间划分为时间⽚,每个进程轮流执⾏⼀个时间⽚。(时间⽚轮转调度可以保证每个进程都能得到 CPU 时间,但时间片的⼤⼩需要合理设置。)
47、多级反馈队列调度
设置多个就绪队列,每个队列的优先级不同,时间⽚⼤⼩也不同。进程在不同队列之间移动。(多级反馈队列调度可以综合考虑各种因素,是⼀种⽐较好的调度算法。)
48、实时调度
⽤于满⾜实时系统的时间约束。(实时调度需要考虑截⽌时间、响应时间等因素。)
死锁
49、死锁的定义
指多个进程因竞争资源⽽造成的⼀种僵局状态,若⽆外⼒作⽤,这些进程都将永远⽆法再向前推进。(死锁是并发编程中常⻅的问题。)
🌟 两个线程都需要访问两个共享资源 A 和 B。
🌟 线程 1 先获得了资源 A,然后尝试获取资源 B;
🌟 线程 2 先获得了资源 B,然后尝试获取资源 A。
🌟 如果两个线程都⽆法释放已经获得的资源,就会发⽣死锁。
50、死锁产⽣的必要条件
互斥条件、请求与保持条件、不可剥夺条件、循环等待条件。(这四个条件同时满⾜才会发⽣死锁。)
51、互斥条件
指进程对所分配到的资源进⾏排它性使⽤,即在⼀段时间内某资源只能被⼀个进程占⽤。(互斥条件是死锁产⽣的必要条件。)
🌟 打印机、磁带机等设备在同⼀时间只能被⼀个进程使⽤。
52、请求与保持条件
指进程已经保持了⾄少⼀个资源,但⼜提出了新的资源请求,⽽该资源⼜被其他进程占⽤,此时请求进程阻塞,但⼜对⾃⼰已获得的资源保持不放。(请求与保持条件是死锁产⽣的必要条件。)
🌟 线程 A 占⽤了⽂件 1,⼜请求⽂件 2,但⽂件 2 被线程 B 占⽤,线程 A 就保持着⽂件 1,等待⽂件 2。
53、不可剥夺条件
指进程已获得的资源,在未使⽤完之前,不能被剥夺,只能在使⽤完时由⾃⼰释放。(不可剥夺条件是死锁产⽣的必要条件。)
🌟 线程 A 占⽤了打印机,不能被其他线程抢占。
54、循环等待条件
指在发⽣死锁时,必然存在⼀个进程-资源的环形链,即进程集合 {P0,P1,P2, ..., Pn}
中的 P0
正在等待⼀个 P1
占⽤的资源;P1
正在等待 P2
占⽤的资源,……,Pn
正在等待 P0
占⽤的资源。
(循环等待条件是死锁产⽣的必要条件。)
🌟 线程 A 等待线程 B 释放资源,线程 B 等待线程 C 释放资源,线程 C 等待线程 A 释放资源,形成⼀个环。
55、死锁的处理策略
预防死锁、避免死锁、检测死锁、解除死锁。(不同的处理策略有不同的优缺点。)
56、预防死锁
通过破坏死锁产⽣的四个必要条件之⼀来预防死锁。(预防死锁可能会降低资源利⽤率。)
🌟 破坏互斥条件:尽量使⽤共享资源,例如,将独占的打印机通过 SPOOLing 技术转化为共享设备。
🌟 破坏请求与保持条件:进程在运⾏前⼀次性申请所有需要的资源,或者在申请新的资源之前释放所有已占⽤的资源。
🌟 破坏不可剥夺条件:当进程请求新的资源不能得到满⾜时,必须释放所有已占⽤的资源,以后再重新申请。
🌟 破坏循环等待条件:对所有资源进⾏编号,进程必须按照编号递增的顺序申请资源。
57、 银⾏家算法
银⾏家算法是⼀种避免死锁的算法,通过判断资源分配的安全性来决定是否分配资源。(银⾏家算法需要预先知道每个进程的最⼤资源需求量。)
🌟 假设系统中有 3 个进程
P1,P2,P3
和 3 种资源A,B,C
。
🌟Max[3][3]
表⽰每个进程对每种资源的最⼤需求量。
🌟Allocation[3][3]
表⽰每个进程已经分配到的每种资源的数量。
🌟Need[3][3] = Max[3][3] - Allocation[3][3]
表⽰每个进程还需要每种资源的数量。
🌟vailable[3]
表⽰系统当前可⽤的每种资源的数量
🌟 银⾏家算法会检查当前状态是否安全,如果安全,则分配资源;否则,拒绝分配资源。
58、安全状态
指系统能够按照某种进程顺序 P1,P2,...,Pn
为每个进程分配其所需的资源,直到满⾜每个进程的最⼤需求,使每个进程都能够顺利完成。(安全状态是避免死锁的关键。)
59、不安全状态
指系统⽆法找到⼀个进程顺序,能够满⾜所有进程的需求,系统可能进⼊死锁状态。(不安全状态不⼀定导致死锁,但死锁⼀定发⽣在不安全状态。)
60、死锁检测
允许死锁发⽣,但系统会定期检测是否存在死锁,并采取措施解除死锁。(死锁检测需要额外的开销。)
61、资源分配图
⼀种⽤于描述资源分配情况的图形,可以⽤于检测死锁。(资源分配图可以直观地显⽰进程和资源之间的关系。)
62、死锁解除
指当检测到死锁发⽣时,采取措施打破死锁状态,使系统恢复运⾏。(死锁解除的代价较⾼。)
63、资源剥夺
从⼀个或多个死锁进程中强⾏剥夺资源,分配给其他进程。(资源剥夺可能会导致某些进程的数据丢失。)
64、进程撤销
撤销⼀个或多个死锁进程,释放其占⽤的资源。(进程撤销可能会导致某些进程的⼯作丢失。)
65、进程回退
让⼀个或多个死锁进程回退到之前的状态,释放占⽤的资源。(进程回退需要保存进程的状态,开销较⼤。)
66、选择死锁解除对象
选择哪个进程进⾏资源剥夺或撤销需要考虑多种因素,例如进程的优先级、已占⽤的资源数量、完成所需的时间等。(选择合适的死锁解除对象可以减少损失。)
67、饥饿
指某个进程⻓时间⽆法获得所需的资源,导致⽆法运⾏。(饥饿是资源分配不公平导致的。)
四、内存管理
1、内存管理的功能
内存分配、内存回收、地址转换、内存扩充、存储保护。(内存管理是操作系统的重要功能。)
2、地址空间
指进程可以访问的内存地址的集合。(地址空间是进程的逻辑视图。)
3、物理地址空间
指计算机系统中实际存在的内存地址的集合。(物理地址空间是计算机系统的物理视图。)
4、逻辑地址
指进程使⽤的地址,也称为虚拟地址。(逻辑地址需要转换为物理地址才能访问内存。)
🌟 在C语⾔程序中,你声明⼀个变量
int a
,&a
获取的地址就是⼀个逻辑地址。
5、物理地址
指内存条上的实际地址。(物理地址是内存的真实地址。)
🌟 内存条上的每个存储单元都有⼀个唯⼀的物理地址。
6、地址转换
将逻辑地址转换为物理地址的过程。(地址转换是内存管理的关键。)
7、静态重定位
在程序装⼊内存时进⾏地址转换,以后不再改变。(静态重定位简单,但灵活性差。)
🌟 程序编译后,所有地址都是相对于程序起始地址的偏移量。加载程序时,将程序的起始地址加上所有偏移量,得到物理地址。
8、动态重定位
在程序执⾏过程中进⾏地址转换。(动态重定位灵活,可以实现虚拟内存。)
🌟 每次 CPU 访问内存时,MMU(内存管理单元)会根据⻚表将逻辑地址转换为物理地址。
9、内存分配⽅式
连续分配、⾮连续分配。(不同的分配⽅式有不同的优缺点。)
10、连续分配
指为进程分配⼀块连续的内存空间。(连续分配简单,但容易产⽣碎⽚。)
🌟 就像在停⻋场停⻋,连续分配就是给你分配⼀个连续的停⻋位。
连续分配
11、固定分区分配
将内存划分为若⼲个固定⼤⼩的分区,每个分区只能装⼊⼀个进程。(固定分区分配简单,但内存利⽤率低。)
🌟 将内存划为 10 个
10MB
的分区,每个分区只能运⾏⼀个程序。如果某个程序只需要5MB
内存,那么该分区就会有5MB
的内部碎⽚。
12、动态分区分配
根据进程的需求动态地分配内存空间。(动态分区分配可以提⾼内存利⽤率,但容易产⽣碎⽚。)
🌟 进程 A 需要
20MB
内存,系统就分配20MB
的连续内存空间给进程 A。如果进程 A 释放了内存,可能会在内存中留下⼀些⼩的空闲分区,这就是外部碎⽚。
13、外部碎⽚
指内存中存在的⽆法被利⽤的⼩块空闲内存。(外部碎⽚是动态分区分配的缺点。)
🌟 内存中有多个⼩块的空闲内存,例如
5MB
、8MB
、7MB
,但没有⼀块能够满⾜进程 B 的20MB
内存需求,这就是外部碎⽚。
14、动态分区分配算法
⾸次适应算法、最佳适应算法、最坏适应算法、邻近适应算法。(不同的分配算法有不同的优缺点。)
15、⾸次适应算法
从空闲分区表的第⼀个表项开始查找,找到第⼀个满⾜要求的空闲分区。(⾸次适应算法简单,但容易在低地址部分产⽣较多的⼩碎⽚。)
🌟 空闲分区表中有三个空闲分区:
10MB
、20MB
、30MB
。进程 A 需要15MB
内存,⾸次适应算法会选择20MB
的空闲分区。
16、最佳适应算法
从空闲分区表的所有表项中查找,找到能满⾜要求的最⼩的空闲分区。(最佳适应算法可以减少碎⽚,但开销较⼤。)
🌟 空闲分区表中有三个空闲分区:
10MB
、20MB
、30MB
。进程 A 需要 15MB 内存,最佳适应算法会选择20MB
的空闲分区。
17、最坏适应算法
从空闲分区表的所有表项中查找,找到能满足要求的最⼤的空闲分区。(最坏适应算法可以减少⼤碎⽚的产⽣,但容易产⽣较多的小碎⽚。)
🌟 空闲分区表中有三个空闲分区:
10MB
、20MB
、30MB
。进程 A 需要15MB
内存,最坏适应算法会选择30MB
的空闲分区。
18、邻近适应算法
从上次查找结束的位置开始查找,找到第⼀个满⾜要求的空闲分区。(邻近适应算法可以减少碎⽚,且开销较⼩。)
🌟 如果上次查找结束的位置是空闲分区表的第⼆个表项,那么邻近适应算法会从第三个表项开始查找。
19、碎⽚整理
将内存中的碎⽚进⾏合并,形成更⼤的连续空闲空间。(碎⽚整理可以提⾼内存利⽤率,但开销较⼤。)
🌟 将内存中所有的⼩块空闲内存移动到⼀起,形成⼀个⼤的连续空闲空间。这就像整理房间,把散落在各处的物品都归类放到⼀起。
非连续分配
20、分⻚存储管理
将进程的逻辑地址空间划分为若⼲个⼤⼩相等的⻚,将内存空间划分为若⼲个⼤⼩相等的块,以⻚为单位进⾏分配。(分⻚存储管理可以有效解决外部碎⽚问题。)
🌟 将进程的逻辑地址空间划分为
4KB
⼤⼩的⻚,将物理内存也划分为4KB
⼤⼩的⻚框。进程的每个⻚都可以加载到物理内存的任何⼀个空闲⻚框中。
21、页
进程的逻辑地址空间的基本单位。(⻚的⼤⼩通常为2的幂次⽅。)
🌟 页的⼤⼩可以是
4KB
、8KB
、16KB
等。选择合适的页⼤⼩需要权衡多种因素,例如 TLB 命中率、缺⻚率等。
22、页框
物理内存空间的基本单位,也称为物理块。(⻚框的⼤⼩与⻚的⼤⼩相同。)
🌟 如果⻚的⼤⼩是
4KB
,那么⻚框的⼤⼩也是4KB
。
23、页表
⽤于实现从⻚号到⻚框号的地址映射。(页表是分页存储管理的关键数据结构。)
🌟 页表是⼀个数组,数组的索引是页号,数组的值是页框号。例如,页表项
页表[0] = 5
表⽰逻辑地址空间的第 0 页映射到物理内存的第5个⻚框。
🌟 逻辑地址结构:页号 + 页内偏移量
🌟 物理地址计算:物理地址 = 页框号 * 页⼤⼩ + ⻚内偏移量
24、快表(TLB)
⼀种⾼速缓存,⽤于存储常⽤的⻚表项,以提⾼地址转换的速度。(快表可以有效提⾼地址转换的速度。)
🌟 当 CPU 访问⼀个逻辑地址时,⾸先在 TLB 中查找对应的页表项,如果找到(TLB 命中),则直接使⽤ TLB 中的⻚框号进⾏地址转换,如果没有找到(TLB 未命中),则需要访问内存中的⻚表。
25、多级⻚表
⽤于解决⻚表过⼤的问题,将⻚表分成多个层次。(多级⻚表可以节省内存空间。)
🌟 ⼆级⻚表,将⻚表再分⻚,第⼀级⻚表存储第⼆级⻚表的地址。
26、反置页表
以物理⻚框为索引,存储占⽤该⻚框的进程和⻚号。(反置⻚表可以减少⻚表的⼤⼩,但查找效率较低。)
27、分段存储管理
将进程的逻辑地址空间划分为若⼲个段,每个段的⻓度可以不同,以段为单位进⾏分配。(分段存储管理可以⽅便地实现信息共享和保护。)
🌟 将进程的逻辑地址空间划分为代码段、数据段、堆栈段等。
28、段
进程的逻辑地址空间的基本单位。(段的⻓度可以不同。)
🌟 代码段可以存储程序的代码,数据段可以存储程序的数据,堆栈段可以存储程序的堆栈信息。
29、段表
⽤于实现从段号到段起始地址和段⻓的地址映射结构。(段表是分段存储管理的关键数据)
🌟 段表是⼀个数组,数组的索引是段号,数组的值是段的起始地址和段的⻓度。
🌟 逻辑地址结构:段号 + 段内偏移量
🌟 物理地址计算:物理地址 = 段起始地址 + 段内偏移量
(需要检查段内偏移量是否超过段⻓)
30、段页式存储管理
将进程的逻辑地址空间划分为若干个段,每个段⼜划分为若干个页,以页为单位进⾏分配。(段页式存储管理综合了分⻚和分段的优点。)
31、虚拟内存
指具有请求调⼊功能和置换功能,能从逻辑上对内存容量加以扩充的⼀种存储器系统。(虚拟内存可以提⾼内存利⽤率和⽀持更⼤的程序运⾏。)
32、请求分页存储管理
在分⻚存储管理的基础上,增加了请求调⻚功能和⻚⾯置换功能。(请求分⻚存储管理是常⽤的虚拟内存实现⽅式。)
33、请求分段存储管理
在分段存储管理的基础上,增加了请求调段功能和段置换功能。(请求分段存储管理也可以实现虚拟内存。)
34、页面置换算法
用于决定将哪个页⾯置换出去,以腾出空间加载新的⻚⾯。(⻚⾯置换算法是虚拟内存的关键。)
35、最佳置换算法(OPT)
选择未来最⻓时间内不再被访问的⻚⾯置换出去。(OPT 算法是最优的,但⽆法实现。)
36、先进先出置换算法(FIFO)
选择最先进⼊内存的⻚⾯置换出去。(FIFO 算法简单,但性能较差,容易出现 Belady 现象。)
37、最近最久未使用置换算法(LRU)
选择最近最久未使⽤的⻚⾯置换出去。(LRU 算法性能较好,但实现开销较⼤。)
38、时钟置换算法(Clock)
⼀种近似 LRU 算法,使⽤⼀个环形缓冲区和⼀个指针,指针指向当前要检查的⻚⾯。(Clock算法性能较好,且实现开销较⼩。)
39、改进型Clock置换算法
在 Clock 算法的基础上,增加了修改位和访问位,可以更准确地反映⻚⾯的使用情况。(改进型 Clock 算法性能更好。)
五、总结
操作系统在考研复试中既是基础科目,也是拉开差距的关键。需要大家扎实掌握核心知识点,同时注重理论与实践的结合。通过系统复习、真题练习和面试模拟,可以有效提升复试表现。
希望这些总结对你有所帮助,祝复试顺利! 😊
发布评论