二二年考题
辨析 Shared Memory 与 Message Passing(各自优缺点)
Shared Memory(共享内存)
- 优点:
- 速度快:共享内存允许进程直接访问同一块物理内存,因此数据传输速度快。
- 低开销:一次性设置共享内存后,多次通信无需再次设置,减少了系统调用开销。
- 灵活性高:可以通过共享内存实现复杂的数据结构和高效的数据共享。
- 缺点:
- 同步问题:多个进程同时访问共享内存时需要处理同步问题,避免数据竞争和死锁。
- 安全性:需要确保进程不会意外地修改或破坏共享内存中的数据,导致数据一致性问题。
- 管理复杂:设置和管理共享内存区域相对复杂。
Message Passing(消息传递)
- 优点:
- 易于实现同步:通过消息队列可以很容易地实现进程之间的同步和通信。
- 安全性高:消息传递隔离了进程间的地址空间,防止进程间的直接内存访问,提高了系统安全性。
- 模块化:适合分布式系统和网络通信,进程之间的依赖性较小。
- 缺点:
- 速度慢:消息传递需要经过内核来传递消息,导致通信速度相对较慢。
- 开销大:每次发送和接收消息都需要系统调用,增加了操作系统的开销。
- 有限的数据传输:传递消息时,数据大小受限于消息队列的容量。
辨析 Contiguous/Linked/Indexed Allocation
Contiguous Allocation(连续分配)
- 特点:将整个文件存储在一块连续的磁盘空间中。
- 优点:
- 访问速度快:顺序访问时,无需频繁的寻道操作。
- 简单管理:只需记录起始地址和长度即可。
- 缺点:
- 碎片问题:随着文件的创建和删除,会产生外部碎片。
- 文件大小限制:新文件的分配需要足够大的连续空间。
Linked Allocation(链式分配)
- 特点:每个文件由多个不连续的块组成,通过链表链接在一起。
- 优点:
- 无外部碎片:可以使用任何空闲块,无需连续空间。
- 动态扩展:文件大小可以动态增加。
- 缺点:
- 访问速度慢:顺序访问需要跟踪链表指针。
- 可靠性差:如果链表指针损坏,会导致文件丢失。
Indexed Allocation(索引分配)
- 特点:为每个文件分配一个索引块,索引块包含指向文件各数据块的指针。
- 优点:
- 快速访问:直接通过索引块访问文件的任意位置。
- 灵活性高:支持大文件和文件动态扩展。
- 缺点:
- 额外开销:需要额外的索引块,增加了存储开销。
- 索引块的限制:索引块大小限制了文件最大大小。
为什么 SJF 不适用于抢占性的系统,给出方案
SJF(Shortest Job First)
- 问题:SJF在非抢占式系统中表现良好,但在抢占式系统中不适用,因为抢占式系统要求在每次进程到达或进程状态改变时都重新评估调度,而SJF需要知道所有进程的执行时间,这在现实中往往无法提前准确获知。
方案:使用SRTF(Shortest Remaining Time First)
- 特点:每次调度时选择剩余执行时间最短的进程进行调度。
- 优点:动态评估剩余时间,更适合抢占式系统。
- 缺点:需要实时跟踪进程的剩余执行时间。
辨析 Concurrency/Parallelism
Concurrency(并发)
- 定义:指在同一时间段内,多个任务交替执行,使其在宏观上看似同时进行。
- 特点:
- 任务切换:通过任务切换实现并发。
- 单处理器:单处理器系统通过时间片轮转实现并发。
- 共享资源:并发任务共享系统资源,需要解决同步和互斥问题。
Parallelism(并行)
- 定义:指在同一时刻,多个任务真正同时进行,通常依赖于多处理器或多核系统。
- 特点:
- 真实同时:任务在多个处理器上同时执行。
- 多处理器:需要多处理器或多核系统支持。
- 独立执行:并行任务相对独立,减少了同步和互斥的需求。
辨析 用户线程/内核线程/LWP
用户线程(User Threads)
- 定义:由用户级线程库管理的线程,不直接与操作系统内核交互。
- 特点:
- 低开销:线程创建、销毁和切换不涉及系统调用,开销低。
- 快速切换:上下文切换速度快。
- 缺点:无法利用多处理器,单个进程内的线程不能真正并行执行。
内核线程(Kernel Threads)
- 定义:由操作系统内核管理的线程,直接与操作系统交互。
- 特点:
- 真正并行:可以利用多处理器,线程间可以真正并行执行。
- 系统调用:线程操作涉及系统调用,开销较大。
- 复杂管理:需要操作系统提供支持,管理较复杂。
轻量级进程(LWP,Lightweight Process)
- 定义:在某些操作系统(如Solaris)中,LWP是介于用户线程和内核线程之间的一种线程,用户线程通过LWP映射到内核线程。
- 特点:
- 混合模型:结合用户线程和内核线程的优点。
- 高效调度:用户线程通过LWP调度到内核线程,实现高效并行执行。
- 灵活性:既能提供用户线程的低开销,又能利用多处理器的并行能力。
20-21
(a) Compare the concepts of file, directory, and inode (or file control block)
(a) 比较文件、目录和inode(或文件控制块)的概念
File(文件)
- 定义:文件是操作系统中用于存储数据的基本单位。
- 特点:
- 内容:可以包含文本、图像、音频、视频等各种类型的数据。
- 操作:可以进行创建、读取、写入、修改和删除等操作。
- 属性:具有名称、大小、创建时间、修改时间、权限等元数据。
Directory(目录)
- 定义:目录是用于组织和管理文件的容器,可以包含文件和其他目录。
- 特点:
- 层次结构:支持文件系统的层次结构,目录可以嵌套。
- 路径:文件路径通过目录结构定位文件。
- 操作:可以进行创建、删除、重命名等操作。
Inode(或File Control Block,文件控制块)
- 定义:Inode是文件系统中的数据结构,用于存储文件的元数据和数据块位置。
- 特点:
- 元数据:存储文件的所有元数据,如文件大小、所有者、权限、时间戳等,但不包括文件名。
- 数据块指针:包含指向文件数据块的指针。
- 唯一标识:每个文件都有一个唯一的inode。
(b) Describe the four necessary conditions of deadlock
(b) 描述死锁的四个必要条件
Mutual Exclusion(互斥)
- 定义:至少有一个资源必须是非共享的,即一次只能被一个进程占用。
- 解释:如果一个资源可以被多个进程共享,则不会发生死锁。
Hold and Wait(占有且等待)
- 定义:一个进程已经获得至少一个资源,但在等待获取其他资源的同时不释放已占有的资源。
- 解释:如果进程在等待其他资源时必须先释放它已经占有的资源,则不会发生死锁。
No Preemption(不可剥夺)
- 定义:资源不能被强制从占有它的进程中剥夺,只能由占有它的进程主动释放。
- 解释:如果可以强制剥夺进程占有的资源,则不会发生死锁。
Circular Wait(循环等待)
- 定义:存在一个进程链,使得每个进程都在等待被下一个进程占有的资源。
- 解释:如果不存在这样的循环等待,则不会发生死锁。
(c) Compare the concepts of multi-programming and time sharing
(c) 比较多道程序设计和分时系统的概念
Multi-programming(多道程序设计)
- 定义:一种操作系统技术,允许多个程序同时驻留在内存中,并且由CPU轮流执行,以提高CPU利用率。
- 特点:
- 并发执行:多个程序并发执行,CPU在程序之间切换。
- 目标:最大化CPU使用率,减少CPU空闲时间。
- 实现方式:基于批处理系统,依赖于进程调度。
Time Sharing(分时系统)
- 定义:一种操作系统技术,通过快速切换CPU在多个用户任务之间,使每个用户感觉自己独占系统。
- 特点:
- 交互性:支持多用户交互,用户可以同时在线运行程序。
- 目标:提供响应性和交互性,每个用户任务都能获得公平的CPU时间。
- 实现方式:基于时间片轮转调度,每个任务分配一个时间片。
(d) List the timings when CPU scheduling takes place
(d) 列出进行CPU调度的时机
- 进程切换:当一个进程从运行状态转为等待状态(例如I/O操作)。
- 进程完成:当一个进程完成其执行并退出。
- 进程创建:当一个新进程被创建。
- 中断:当一个硬件中断发生(例如定时器中断)。
- 时钟中断:在时间片轮转调度中,时钟中断是一个常见的调度时机。
(e) List at least 5 issues considered in deciding the page size
(e) 列出在决定页面大小时需要考虑的至少5个问题
- 内部碎片:页面大小越大,内部碎片可能越多。
- 页表大小:页面越小,页表条目越多,页表大小增加。
- 磁盘I/O:大页面可能减少页表交换次数,但增加每次I/O的开销。
- 内存利用率:小页面可以更精细地分配内存,提高利用率。
- TLB命中率:页面越大,TLB命中率可能越高,但每次换入/换出时间也越长。
17-18
(a) Compare the concepts of thread and process.
(a) 比较线程和进程的概念
Process(进程)
- 定义:进程是一个正在运行的程序的实例,是操作系统资源分配和调度的基本单位。
- 特点:
- 独立性:每个进程有自己独立的地址空间、全局变量和系统资源。
- 资源拥有:每个进程拥有自己的文件句柄、信号处理等资源。
- 开销大:进程创建、切换的开销较大,因为涉及到整个进程的资源和内存的管理。
- 隔离性:进程之间的通信需要通过操作系统提供的机制,如消息传递、共享内存等。
Thread(线程)
- 定义:线程是进程中的一个执行流,是CPU调度和执行的基本单位。
- 特点:
- 共享资源:同一进程内的线程共享进程的地址空间、全局变量和系统资源。
- 轻量级:线程的创建和切换开销较小,因为线程之间共享进程的资源。
- 并发执行:同一进程内的多个线程可以并发执行,提高程序的执行效率。
- 通信方便:同一进程内的线程之间可以直接访问共享数据,通信开销低。
(b) How to select the page size? Please give four considerations at least.
(b) 如何选择页面大小?请给出至少四个考虑因素
- Internal Fragmentation(内部碎片):
- 影响:较大的页面可能导致更多的内部碎片,因为分配给进程的页面可能无法完全使用。
- 考虑:选择较小的页面可以减少内部碎片,提高内存利用率。
- Page Table Size(页表大小):
- 影响:较小的页面会导致页表项数量增加,从而增大页表的总大小。
- 考虑:较大的页面减少页表项数量,降低页表的存储和管理开销。
- Disk I/O Efficiency(磁盘I/O效率):
- 影响:较大的页面减少了页面交换次数,但每次I/O操作的传输数据量增加,单次I/O开销可能增大。
- 考虑:选择适中的页面大小以优化磁盘I/O性能。
- TLB Reach(TLB覆盖范围):
- 影响:较大的页面增加了每个TLB条目所覆盖的地址空间,提高TLB命中率。
- 考虑:适当增大页面大小有助于提高TLB的效率,减少地址转换开销。
(c) In a time-sharing operating system, why is system performance so sensitive to the value that is selected for the time slice? Briefly explain what type of system behavior we would be likely to observe if the value selected for the time slice were too large? too small?
(c) 在分时操作系统中,为什么系统性能对时间片值的选择如此敏感?简要解释如果选择的时间片值过大或过小,我们可能会观察到什么类型的系统行为?
System Performance Sensitivity(系统性能敏感性)
- 原因:时间片决定了CPU在每个进程之间切换的频率,直接影响系统的响应性和处理效率。
- 平衡点:选择适当的时间片可以在响应时间和上下文切换开销之间找到最佳平衡。
If the Time Slice is Too Large(时间片过大)
- 系统行为:
- 响应时间增加:每个进程占用CPU时间较长,其他进程需要等待较久才能获得执行机会,导致系统响应时间变长。
- 公平性下降:长时间运行的进程可能会占用大量CPU时间,短时间运行的进程得不到及时执行。
- 交互性差:用户交互型应用(如文本编辑器、浏览器)的响应变慢,用户体验不佳。
If the Time Slice is Too Small(时间片过小)
- 系统行为:
- 上下文切换开销增加:频繁的上下文切换导致CPU花费大量时间在保存和恢复进程状态上,降低了实际执行进程的时间。
- CPU利用率下降:大量时间用于上下文切换,实际用于执行用户进程的时间减少,整体CPU利用率降低。
- 调度开销大:调度程序需要更频繁地运行,增加了调度的开销。
在选择时间片时,需要在系统响应时间和上下文切换开销之间找到最佳平衡,以保证系统性能和用户体验。
14年
1. 程序、进程、线程概念
程序(Program)
- 定义:程序是指令和数据的集合,是静态的文件或存储在磁盘上的二进制文件,等待被加载和执行。
- 特点:
- 存储在磁盘上,需要被操作系统加载到内存中执行。
- 可以是应用程序、脚本或其他可执行文件。
- 通常由编程语言编写,例如C、Java、Python等。
进程(Process)
- 定义:进程是程序的一次执行活动,是操作系统分配资源和调度的基本单位。
- 特点:
- 拥有独立的地址空间和内存,包含代码、数据、堆栈等。
- 可以与其他进程并发执行,通过操作系统调度实现。
- 具有状态(运行、就绪、阻塞)和属性(进程ID、优先级、状态等)。
线程(Thread)
- 定义:线程是进程内的一个执行单元,是操作系统调度和执行的基本单位。
- 特点:
- 共享同一进程的地址空间和资源(如内存、文件句柄等)。
- 可以并发执行,通过线程调度实现。
- 线程间通信简便,共享数据和上下文。
2. 临界区问题
临界区问题(Critical Section Problem)
- 定义:多个进程或线程同时访问共享资源时,可能导致数据不一致或操作结果不确定的问题。
- 特点:
- 必须满足互斥访问:同一时刻只允许一个进程或线程访问临界区资源。
- 避免死锁:进程互斥访问时,不能无限等待其它进程所占有的资源。
- 避免饥饿:所有进程均应有机会进入临界区,避免某个进程无限期等待。
3. 内存保护的目的
内存保护的目的
- 目的:保护操作系统和进程不受恶意程序或错误程序的影响,确保系统稳定和安全。
- 方式:
- 地址空间隔离:每个进程有独立的地址空间,防止进程互相干扰。
- 访问权限:通过访问权限位控制对内存的读写权限,防止非法访问。
- 内存保护模式:硬件支持的内存保护模式,如虚拟内存机制,防止越界访问和内存泄漏。
4. 系统颠簸含义,原因,解决办法
系统颠簸(Thrashing)
- 含义:系统在忙于页面置换,而不能有效执行其他工作时,出现性能急剧下降的现象。
- 原因:
- 页错误率过高:进程频繁访问未加载到内存中的页面,导致频繁的页面置换。
- 内存不足:系统内存不足,导致操作系统无法为进程提供足够的物理内存空间。
- 过度多任务:系统负载过重,导致大量进程同时竞争有限的物理内存资源。
- 解决办法:
- 增加物理内存:提供更多的物理内存,减少页面置换的频率。
- 优化页面置换算法:使用更高效的页面置换算法,如LRU(最近最少使用)。
- 优化进程调度:合理调度进程,减少并发进程数,减少内存竞争。
- 使用高速缓存:增加系统缓存以减少对主存的访问次数。
5. 磁盘调度 SSTF SCAN LOOK
磁盘调度算法 SSTF(Shortest Seek Time First)、SCAN、LOOK
- SSTF(Shortest Seek Time First):
- 原理:优先访问离当前磁头位置最近的磁道,以最小化寻道时间。
- 优点:减少平均寻道时间,提高磁盘访问效率。
- 缺点:可能导致某些磁道长期被忽视,可能出现饥饿现象。
- SCAN:
- 原理:磁头按一个方向(内到外或外到内)移动,直到遇到最远的请求,然后返回。
- 优点:公平性好,所有请求都有机会得到服务。
- 缺点:可能会出现头部在磁盘的两端来回移动,导致部分请求等待时间过长。
- LOOK:
- 原理:类似于SCAN,但是在到达最远的请求后立即返回,不会继续向另一端移动。
- 优点:减少了SCAN算法中的尾部延迟,提高了性能。
- 缺点:可能会导致部分请求等待时间过长,不如SCAN公平。
15年
1. 进程与线程
进程(Process):
- 定义:进程是程序的一次执行活动,是操作系统分配资源和调度的基本单位。
- 特点:
- 拥有独立的地址空间和内存,包含代码、数据、堆栈等。
- 可以与其他进程并发执行,通过操作系统调度实现。
- 具有状态(运行、就绪、阻塞)和属性(进程ID、优先级、状态等)。
线程(Thread):
- 定义:线程是进程内的一个执行单元,是操作系统调度和执行的基本单位。
- 特点:
- 共享同一进程的地址空间和资源(如内存、文件句柄等)。
- 可以并发执行,通过线程调度实现。
- 线程间通信简便,共享数据和上下文。
区别:
- 资源开销:线程比进程更轻量级,创建和上下文切换开销更小。
- 并发性:线程之间的切换比进程更快速,因为它们共享相同的地址空间。
- 通信方式:线程可以直接访问同一进程中的共享变量,进程间通信需要更复杂的机制(如消息队列、共享内存)。
2. 临界区问题与同步问题的不同
临界区问题(Critical Section Problem):
- 定义:多个进程或线程同时访问共享资源时,可能导致数据不一致或操作结果不确定的问题。
- 解决:需要互斥访问共享资源,通过同步机制(如信号量、互斥量)来实现。
同步问题:
- 定义:广义上指多个进程或线程之间为了协调执行顺序或共享资源而进行的交互操作。
- 包含内容:
- 互斥:保证同一时间只有一个进程或线程能访问共享资源。
- 同步:控制进程或线程之间的执行顺序,以避免竞态条件和死锁。
- 通信:进程或线程之间传递消息或共享数据,实现合作任务的完成。
区别:
- 焦点不同:临界区问题侧重于共享资源的访问控制,而同步问题更广泛地包含了进程/线程之间的任何协调和通信问题。
- 解决方式:临界区问题解决的关键是实现互斥访问,而同步问题需要考虑进程/线程的调度顺序和数据一致性。
3. 内部碎片与外部碎片
内部碎片:
- 定义:内部碎片是分配给进程或数据结构的内存空间中未被利用的部分。
- 原因:通常是由于内存分配算法分配的内存大于进程或数据结构所需的实际空间。
- 影响:降低了内存利用率,增加了内存分配的总体开销。
外部碎片:
- 定义:外部碎片是未分配但由于大小不符合任何未完成请求的内存块而无法使用的内存空间。
- 原因:连续分配和释放内存块导致的空间浪费,无法有效利用。
- 影响:限制了大块内存分配的能力,可能导致后续的内存分配请求失败。
区别:
- 位置:内部碎片是已分配的内存中的空闲空间,而外部碎片是未分配的内存中的空闲空间。
- 解决方式:内部碎片可以通过更精确的内存分配算法或动态调整减少,外部碎片通常需要使用碎片整理或紧凑算法来合并空闲块。
4. 内存保护的目的,连续和不连续内存保护的实现方法
内存保护的目的:
- 目的:保护操作系统和进程不受恶意程序或错误程序的影响,确保系统稳定和安全。
- 方式:
- 地址空间隔离:每个进程有独立的地址空间,防止进程互相干扰。
- 访问权限:通过访问权限位控制对内存的读写权限,防止非法访问。
- 异常处理:硬件支持的异常机制,如页错误、访问违例等,保护系统核心数据和代码免受非法访问。
连续内存保护的实现方法:
- 基址(Base)和界限(Limit)寄存器:通过这两个寄存器来限制进程对内存的访问,确保进程只能访问其分配的内存范围。
- 段式存储管理:将内存划分为若干段,每个段具有不同的访问权限,通过段表进行地址转换和权限检查。
不连续内存保护的实现方法:
- 页式存储管理:将物理内存划分为固定大小的页面,使用页表进行虚拟地址到物理地址的映射,并设置页面级别的访问权限。
- 内存保护模式:操作系统或硬件提供的保护模式,如虚拟内存机制,可以将页面标记为只读、可写、执行等权限,保护系统核心数据和代码。
这些方法都旨在确保操作系统和进程能够安全有效地共享和管理系统资源,同时保护系统免受未经授权的访问和破坏。
16年
1. 双模式位(Dual Mode Bit)
双模式位(Dual Mode Bit),也称为特权位或操作模式位,是指硬件和操作系统结合起来的一种机制,用于区分操作系统内核和用户程序的权限级别。
- 定义:双模式位是CPU中的一位标志,用于区分当前正在执行的代码是运行在内核态(特权模式)还是用户态(非特权模式)。
- 特点:
- 权限控制:内核态具有更高的权限,可以执行特权指令和访问所有硬件资源;用户态受到限制,只能执行受限的指令和访问有限的资源。
- 安全性:双模式位确保操作系统可以控制和保护系统的关键部分,防止用户程序对系统进行非法访问和操作。
2. 线程、进程、程序
程序(Program):
- 定义:程序是指令和数据的集合,是静态的文件或存储在磁盘上的二进制文件,等待被加载和执行。
- 特点:程序本身不具备运行能力,需要加载到内存中并由操作系统创建进程或线程才能执行。
进程(Process):
- 定义:进程是程序的一次执行活动,是操作系统分配资源和调度的基本单位。
- 特点:
- 拥有独立的地址空间和内存,包含代码、数据、堆栈等。
- 可以与其他进程并发执行,通过操作系统调度实现。
- 具有状态(运行、就绪、阻塞)和属性(进程ID、优先级、状态等)。
线程(Thread):
- 定义:线程是进程内的一个执行单元,是操作系统调度和执行的基本单位。
- 特点:
- 共享同一进程的地址空间和资源(如内存、文件句柄等)。
- 可以并发执行,通过线程调度实现。
- 线程间通信简便,共享数据和上下文。
3. 段和页分别用来干嘛 区别
段(Segmentation)和页(Paging)是操作系统中的两种内存管理方式,用于实现虚拟内存的管理和保护。
段(Segmentation):
- 用途:将程序和数据划分为逻辑段,每个段具有不同的属性和访问权限。
- 特点:
- 逻辑划分:按功能或逻辑关系划分,如代码段、数据段、堆栈段等。
- 保护机制:每个段可以设置不同的访问权限,如只读、读写等。
- 地址转换:逻辑地址由段号和偏移量组成,需要进行段表查找转换为物理地址。
页(Paging):
- 用途:将进程的地址空间划分为固定大小的页面,简化内存管理和地址转换。
- 特点:
- 均匀划分:将进程分为大小相等的页面,如4KB或8KB。
- 地址转换:逻辑地址由页号和页内偏移量组成,通过页表进行地址转换。
- 碎片问题:解决外部碎片问题,但可能会引入内部碎片。
区别:
- 管理单位:段是逻辑单位,页是物理单位。
- 大小和均匀性:段的大小不固定,页的大小固定且均匀。
- 地址转换:段表查找复杂度高于页表,但能提供更细粒度的保护和管理。
4. 系统颠簸含义、原因、解决办法
系统颠簸(Thrashing)
- 含义:系统在忙于页面置换,而不能有效执行其他工作时,出现性能急剧下降的现象。
- 原因:
- 页错误率过高:进程频繁访问未加载到内存中的页面,导致频繁的页面置换。
- 内存不足:系统内存不足,导致操作系统无法为进程提供足够的物理内存空间。
- 过度多任务:系统负载过重,导致大量进程同时竞争有限的物理内存资源。
- 解决办法:
- 增加物理内存:提供更多的物理内存,减少页面置换的频率。
- 优化页面置换算法:使用更高效的页面置换算法,如LRU(最近最少使用)。
- 优化进程调度:合理调度进程,减少并发进程数,减少内存竞争。
- 使用高速缓存:增加系统缓存以减少对主存的访问次数。
系统颠簸会导致系统响应时间显著下降,严重时可能导致系统崩溃或长时间无响应,因此需要系统管理员和开发人员采取有效措施来避免和解决这一问题。
第一章
Single-batch Processing vs. Multiprogramming vs. Time Sharing
Single-batch Processing
- 定义:处理一个批次的作业,每个作业依次完成,没有交互式用户参与。
- 特点:
- 效率低:CPU利用率低,因为作业之间有大量空闲时间。
- 适用于:早期的大型机和没有交互需求的批处理任务。
- 缺点:资源利用率低,响应时间长,无法处理多个作业同时运行。
Multiprogramming
- 定义:多个作业在内存中同时存在,CPU在这些作业之间切换以提高利用率。
- 特点:
- 高效利用资源:多个作业共享系统资源,减少空闲时间。
- 并发执行:通过时间片轮转或其他调度算法,实现作业并发执行。
- 缺点:需要复杂的内存管理和作业调度,用户不能与作业交互。
Time Sharing(分时系统)
- 定义:多个用户通过终端与计算机系统交互,每个用户的作业按时间片轮流使用CPU。
- 特点:
- 交互性强:用户可以与系统进行实时交互。
- 快速响应:每个用户都能获得快速响应,感觉自己独占计算机。
- 适用于:多用户环境,如Unix系统。
- 缺点:系统负载大时,响应时间可能增加,需要高效的调度和资源管理。
Interrupt vs. Trap
Interrupt(中断)
- 定义:外部设备或硬件事件引发的信号,通知CPU进行处理。
- 特点:
- 外部事件:由外部设备(如键盘、鼠标、I/O设备)产生。
- 异步:与当前程序的执行无关,随时可能发生。
- 优先级处理:中断处理程序根据优先级处理不同的中断请求。
Trap(陷阱)
- 定义:由程序内部引发的异常或特殊事件,通常由操作系统捕获和处理。
- 特点:
- 内部事件:由程序执行过程中产生,如非法指令、算术错误、系统调用等。
- 同步:与程序的执行密切相关,按程序指令的执行顺序发生。
- 异常处理:操作系统通过陷阱处理程序处理这些异常事件。
User Mode vs. Kernel Mode
User Mode(用户模式)
- 定义:程序在受限权限下运行,无法直接访问硬件或执行特权操作。
- 特点:
- 受限权限:不能执行特权指令,访问受限的内存区域。
- 系统调用:通过系统调用接口请求内核服务。
- 安全性高:防止用户程序错误或恶意行为影响系统稳定性。
Kernel Mode(内核模式)
- 定义:操作系统内核运行的模式,具有完全的硬件访问权限。
- 特点:
- 完全权限:可以执行任何指令,访问所有内存区域和硬件设备。
- 系统控制:负责资源管理、进程调度、内存管理、设备驱动等关键任务。
- 高风险:内核代码的错误可能导致系统崩溃或安全漏洞。
总结
- Single-batch Processing vs. Multiprogramming vs. Time Sharing:
- Single-batch Processing 处理单个作业,效率低;Multiprogramming 通过作业并发提高资源利用率,但无交互;Time Sharing 提供交互式、多用户环境,每个用户感受到快速响应。
- Interrupt vs. Trap:
- Interrupt 由外部硬件事件引发,异步发生;Trap 由程序内部事件引发,按程序执行顺序发生。
- User Mode vs. Kernel Mode:
- User Mode 提供受限权限,确保系统安全;Kernel Mode 提供完全权限,管理系统资源和执行特权操作。
第二章 操作系统结构
Outside Operating System Service vs. Inside Operating System Service
Outside Operating System Service
- 定义:操作系统之外的服务,通常由应用程序或第三方软件提供。
- 特点:
- 外部实现:不需要操作系统内核的直接支持或修改。
- 独立性:可以独立于操作系统运行和更新。
- 示例:用户级库(如标准C库)、外部设备驱动、用户安装的软件。
- 优点:灵活性高,不会影响操作系统的稳定性。
- 缺点:性能可能不如内核级服务高,且有时需要通过系统调用接口访问底层资源。
Inside Operating System Service
- 定义:由操作系统内核提供的服务。
- 特点:
- 内核实现:需要操作系统内核的直接支持和实现。
- 紧密集成:与操作系统核心功能紧密集成,性能高。
- 示例:文件系统、内存管理、进程调度、网络协议栈。
- 优点:性能高,直接访问硬件和系统资源,通常更可靠。
- 缺点:更新和修改需要操作系统的支持,可能影响系统稳定性。
User Program vs. System Program vs. System Service
User Program
- 定义:由用户创建和执行的应用程序。
- 特点:
- 用户控制:由用户编写、安装和运行。
- 示例:文本编辑器、浏览器、游戏。
- 运行环境:通常在用户模式下运行,访问系统资源需要通过系统调用。
- 安全性:受限权限,保护系统资源。
System Program
- 定义:支持操作系统功能的程序,提供系统级管理和维护任务。
- 特点:
- 系统维护:帮助管理和配置系统资源。
- 示例:文件管理工具(如
ls
、cp
)、编译器、系统监控工具。 - 运行环境:可能需要更高的权限,但通常仍在用户模式下运行。
- 功能:提供系统配置、资源管理、开发工具等功能。
System Service
- 定义:操作系统提供的服务,通常在后台运行,支持系统和应用程序的功能。
- 特点:
- 后台运行:常驻内存,持续提供服务。
- 示例:守护进程(如cron、sshd)、系统日志服务、网络服务。
- 运行环境:通常需要更高权限,可能在内核模式下运行。
- 功能:提供网络、时间调度、系统日志等关键服务。
Layered Approach vs. Microkernel vs. Modules
Layered Approach(分层结构)
- 定义:操作系统被划分为多个层次,每一层次只依赖于下层的服务,向上层提供服务。
- 特点:
- 层次清晰:每一层次都有明确的职责和接口。
- 示例:经典的Unix操作系统设计。
- 优点:易于设计、实现和调试,每一层次可以独立开发和测试。
- 缺点:层次之间的严格界限可能导致性能损失,层次过多可能使系统复杂化。
Microkernel(微内核)
- 定义:操作系统内核被简化到最小,只包含核心功能(如进程管理、内存管理、IPC),其他功能在用户空间实现。
- 特点:
- 简化内核:内核只包含最基本的功能,其余功能在用户空间实现。
- 示例:Minix、QNX。
- 优点:内核小,可靠性高,易于移植和扩展,系统更稳定。
- 缺点:频繁的用户态和内核态切换可能导致性能开销,设计和实现复杂。
Modules(模块化)
- 定义:操作系统内核以模块化方式设计,功能可以动态加载和卸载。
- 特点:
- 动态加载:功能模块可以根据需要加载和卸载,无需重启系统。
- 示例:Linux内核模块。
- 优点:灵活性高,易于扩展和维护,不影响系统核心稳定性。
- 缺点:模块间依赖关系和接口复杂,可能引入安全和稳定性问题。
总结
- Outside Operating System Service vs. Inside Operating System Service:
- 外部服务由外部软件提供,独立于操作系统;内部服务由内核提供,紧密集成。
- User Program vs. System Program vs. System Service:
- 用户程序由用户运行,系统程序支持系统管理,系统服务在后台提供系统功能。
- Layered Approach vs. Microkernel vs. Modules:
- 分层结构设计清晰但可能有性能损失,微内核简化内核但可能有性能开销,模块化灵活但依赖关系复杂。
第三章 进程
Program vs. Process
Program(程序)
- 定义:一个程序是一个静态的代码和数据的集合,是存储在磁盘上的可执行文件。
- 特点:
- 静态实体:程序是一个静态的文件,不占用计算机资源(除了存储空间)。
- 示例:可执行文件如
.exe
、脚本文件如.sh
。 - 不运行:只是存储在磁盘上的指令和数据。
Process(进程)
- 定义:一个进程是一个正在运行的程序的实例,包括当前执行状态和资源。
- 特点:
- 动态实体:进程是一个动态的活动,正在进行的程序。
- 示例:运行中的浏览器、文字处理程序等。
- 资源占用:占用CPU时间、内存、I/O设备等资源。
Process vs. Thread
Process(进程)
- 定义:操作系统中资源分配和执行的基本单位,每个进程有独立的地址空间。
- 特点:
- 独立性:进程之间是独立的,互不干扰。
- 资源隔离:每个进程有自己的内存空间、文件描述符等资源。
- 切换开销:进程切换开销大,需要切换地址空间、上下文。
Thread(线程)
- 定义:线程是进程中的一个执行单元,是CPU调度的基本单位。
- 特点:
- 共享资源:同一进程内的线程共享内存、文件描述符等资源。
- 轻量级:线程创建和切换开销小,比进程更高效。
- 独立执行:线程独立调度和执行,但共享进程资源。
Long-term Scheduling vs. Mid-term Scheduling vs. Short-term Scheduling
Long-term Scheduling(长期调度)
- 定义:决定哪些作业(job)被加载到内存中以形成进程。
- 特点:
- 作业选择:选择作业进入系统,以控制系统中的进程数量。
- 频率低:发生频率较低,决定系统的作业负载。
- 目标:平衡I/O和CPU-bound进程。
Mid-term Scheduling(中期调度)
- 定义:决定哪些进程需要被暂时移出内存(挂起)或重新加载进内存(激活)。
- 特点:
- 进程交换:管理内存使用,挂起或激活进程。
- 频率适中:发生频率介于长期调度和短期调度之间。
- 目标:优化内存使用和系统响应时间。
Short-term Scheduling(短期调度)
- 定义:决定哪个就绪进程将获得CPU时间片。
- 特点:
- CPU分配:选择就绪队列中的进程,分配CPU时间片。
- 频率高:发生频率高,频繁切换进程。
- 目标:最大化CPU利用率,保证系统响应时间。
Zombie Process vs. Orphan Process
Zombie Process(僵尸进程)
- 定义:进程已经终止,但仍在进程表中占有条目,等待父进程读取其退出状态。
- 特点:
- 资源释放:已释放大部分资源,但保留进程表条目。
- 状态:终止状态,等待父进程处理。
- 影响:大量僵尸进程会占用进程表条目,影响系统资源。
Orphan Process(孤儿进程)
- 定义:父进程已经终止,但子进程仍在运行。
- 特点:
- 父进程终止:原父进程已终止,子进程成为孤儿进程。
- 自动收养:孤儿进程会被init进程(PID 1)收养,继续运行。
- 处理:init进程会负责清理孤儿进程,防止僵尸进程的产生。
Shared Memory vs. Message Passing
Shared Memory(共享内存)
- 定义:进程间共享一段内存区域,用于直接访问和交换数据。
- 特点:
- 速度快:数据传输快,因为无需通过操作系统内核。
- 同步问题:需要进程间同步机制,防止数据竞争。
- 管理复杂:内存管理复杂,需处理内存分配和保护。
Message Passing(消息传递)
- 定义:进程间通过发送和接收消息进行通信。
- 特点:
- 易于同步:通过消息队列等机制,实现进程间同步。
- 隔离性高:进程间地址空间隔离,提高系统安全性。
- 开销大:每次通信都需要系统调用,开销相对较大。
总结
- Program vs. Process:程序是静态代码和数据的集合,而进程是程序的动态实例,占用资源并执行任务。
- Process vs. Thread:进程是资源分配的单位,线程是CPU调度的单位;进程之间独立,线程共享进程资源。
- Long-term vs. Mid-term vs. Short-term Scheduling:长期调度选择作业进入内存,中期调度管理内存中的进程,短期调度分配CPU时间片。
- Zombie Process vs. Orphan Process:僵尸进程已终止但等待父进程处理,孤儿进程父进程已终止但仍在运行。
- Shared Memory vs. Message Passing:共享内存速度快但需处理同步问题,消息传递隔离性高但通信开销大。
第四章 线程
第五章 CPU调度
Timing of CPU Scheduling
CPU调度的时机主要包括以下几种情况:
- 进程切换:当一个进程从运行状态转为等待状态(例如I/O操作),操作系统需要选择一个新的进程来执行。
- 进程完成:当一个进程完成其执行并退出时,操作系统需要选择下一个进程来执行。
- 进程创建:当一个新进程被创建时,操作系统可能需要立即调度它,尤其是在使用某些调度策略时。
- 中断:当一个硬件中断发生时(例如定时器中断),操作系统可以使用这个时机检查是否需要进行进程调度。
- 时钟中断:在时间片轮转调度中,时钟中断是一个常见的调度时机,操作系统检查当前进程的时间片是否用完,以决定是否进行进程切换。
Preemptive vs. Non-preemptive Scheduling
Preemptive Scheduling(抢占式调度)
- 定义:操作系统可以在进程运行期间中断它,并将CPU分配给另一个进程。
- 特点:
- 响应时间短:系统能迅速响应高优先级任务或外部事件。
- 复杂性高:需要处理进程切换时的状态保存和恢复,增加了系统复杂性。
- 示例:Round-Robin(RR)、Shortest Remaining Time First(SRTF)、Priority Scheduling(带抢占)。
Non-preemptive Scheduling(非抢占式调度)
- 定义:一旦进程获得CPU控制权,它将继续运行直到完成或主动让出CPU。
- 特点:
- 简单实现:进程切换只有在进程主动放弃CPU时发生,简单且容易实现。
- 响应时间长:系统可能无法快速响应紧急任务或外部事件。
- 示例:First-Come, First-Served(FCFS)、Shortest Job Next(SJN)、Priority Scheduling(不带抢占)。
Scheduler vs. Dispatcher
Scheduler(调度器)
- 定义:决定哪个进程将获得CPU执行权的组件。
- 类型:
- 长程调度器:决定哪些作业被加载到内存中以形成进程。
- 中程调度器:决定哪些进程被挂起或重新激活。
- 短程调度器:决定哪个就绪队列中的进程将获得CPU时间片。
- 职责:选择进程并确定其优先级,调整系统负载。
Dispatcher(分派器)
- 定义:将CPU控制权交给被选中的进程的组件。
- 职责:
- 上下文切换:保存当前进程的状态并加载新进程的状态。
- 跳转到用户模式:将CPU从内核模式切换到用户模式,使进程运行。
- 跳转到进程入口:启动或恢复进程的执行。
ASP vs. SMP
ASP(Asymmetric Multiprocessing,不对称多处理)
- 定义:多个处理器中只有一个主处理器负责操作系统内核,其余处理器只运行用户进程。
- 特点:
- 主从关系:一个主处理器负责所有系统级任务,其他处理器仅处理特定任务。
- 负载不平衡:主处理器负载较重,其它处理器可能空闲。
- 简单实现:实现和管理相对简单。
SMP(Symmetric Multiprocessing,对称多处理)
- 定义:所有处理器对称地共享内存和I/O设备,任何处理器都可以执行操作系统内核和用户进程。
- 特点:
- 对称性:所有处理器平等,能更均匀地分担系统负载。
- 负载平衡:通过动态负载平衡提高系统性能。
- 复杂性高:实现和管理复杂,特别是处理多处理器间的同步和竞争。
Deterministic Modeling vs. Queueing Models vs. Simulations
Deterministic Modeling(确定性建模)
- 定义:使用具体的、已知的工作负载和系统参数来评估系统性能。
- 特点:
- 精确分析:适用于特定情况下的精确性能评估。
- 简单直观:易于理解和实现。
- 缺点:不能反映实际系统中的随机性和复杂性。
- 示例:分析调度算法的最坏情况或平均情况性能。
Queueing Models(排队模型)
- 定义:使用排队论来建模和分析系统中任务的排队和处理行为。
- 特点:
- 数学分析:使用数学公式和模型来预测系统性能。
- 反映随机性:能够反映系统中的随机到达和服务时间。
- 复杂性:数学模型可能复杂,需要一定的统计学和概率论知识。
- 示例:M/M/1队列模型、M/M/c队列模型。
Simulations(仿真)
- 定义:使用计算机程序模拟实际系统的行为,通过实验评估系统性能。
- 特点:
- 灵活性高:可以模拟各种复杂系统和情景。
- 反映实际:能反映系统中的各种随机性和复杂性。
- 计算成本:需要大量计算资源和时间,特别是对于大型系统。
- 示例:使用仿真软件或编程语言(如SimPy、OMNeT++)进行系统仿真。
总结
- Timing of CPU Scheduling:进程切换、进程完成、进程创建、中断和时钟中断等时机需要进行CPU调度。
- Preemptive vs. Non-preemptive Scheduling:抢占式调度允许进程在运行时被中断,非抢占式调度则不允许。
- Scheduler vs. Dispatcher:调度器决定哪个进程获得CPU,分派器执行实际的进程切换。
- ASP vs. SMP:ASP中主处理器处理系统任务,其余处理器处理用户进程;SMP中所有处理器对称处理所有任务。
- Deterministic Modeling vs. Queueing Models vs. Simulations:确定性建模使用具体参数进行分析,排队模型使用数学公式预测系统行为,仿真通过计算机程序模拟实际系统。
第八章&第九章
Symbolic Addresses vs. Relocatable Addresses vs. Absolute Addresses
Symbolic Addresses
- 定义:程序员在源代码中使用的标识符(如变量名、函数名),这些地址是抽象的、符号化的。
- 特点:
- 可读性高:便于程序员理解和使用。
- 编译阶段处理:编译器将符号地址转换为可重定位地址或绝对地址。
Relocatable Addresses(可重定位地址)
- 定义:在编译或汇编时生成的地址,表示相对于某个基地址的偏移量,可以在加载时调整。
- 特点:
- 灵活性高:可在内存的不同位置加载和执行。
- 加载时调整:操作系统在加载程序时将可重定位地址转换为绝对地址。
- 示例:编译器生成的代码中的相对地址。
Absolute Addresses(绝对地址)
- 定义:内存中的具体物理地址。
- 特点:
- 固定性:指向内存中的特定位置。
- 效率高:直接使用硬件地址,访问速度快。
- 缺点:灵活性低,程序必须在特定位置运行。
Logical vs. Physical Address vs. Virtual Address
Logical Address(逻辑地址)
- 定义:由CPU生成,作为程序视角的地址。
- 特点:
- 程序员使用:程序员和编译器操作的地址。
- 虚拟化:通过内存管理单元(MMU)映射到物理地址。
Physical Address(物理地址)
- 定义:内存单元的实际硬件地址。
- 特点:
- 硬件访问:直接由内存硬件使用。
- 透明性:对程序员不可见,由操作系统和硬件管理。
Virtual Address(虚拟地址)
- 定义:逻辑地址在虚拟内存系统中的表示,用于支持更大的地址空间和内存保护。
- 特点:
- 扩展性:可以比物理内存更大,通过页表映射。
- 隔离性:提供进程间的内存隔离。
- 分页:通过页表将虚拟地址转换为物理地址。
Dynamic Linking vs. Shared Libraries
Dynamic Linking(动态链接)
- 定义:程序在运行时链接所需的库,而不是在编译时链接。
- 特点:
- 运行时加载:库文件在程序执行时加载。
- 优点:减少可执行文件的大小,共享库的更新自动应用于所有使用该库的程序。
- 缺点:需要在运行时解析符号,可能增加启动时间。
- 示例:在Windows系统中使用DLL(动态链接库)。
Shared Libraries(共享库)
- 定义:多个程序可以共享使用的库文件,通常以动态链接方式使用。
- 特点:
- 内存共享:多个进程可以同时使用同一个共享库实例,减少内存使用。
- 代码复用:通过共享库减少重复代码,提高代码管理效率。
- 示例:Linux中的共享对象文件(
.so
)。
Internal Fragmentation vs. External Fragmentation
Internal Fragmentation(内部碎片)
- 定义:分配的内存块内部未使用的空间。
- 特点:
- 原因:内存块分配大小大于实际需求,导致未使用空间。
- 示例:分配8KB块给需要6KB的进程,剩余2KB未使用。
- 解决方案:更细粒度的分配策略。
External Fragmentation(外部碎片)
- 定义:内存中未使用的空间散布在已分配的内存块之间。
- 特点:
- 原因:连续分配和释放内存块导致内存空闲块分散。
- 示例:内存中有足够总量的空闲空间,但无法满足大块内存请求。
- 解决方案:内存紧凑、分页或分段。
Process of Demand Paging
Demand Paging(需求分页)
- 定义:只有在需要时才将页面从磁盘加载到内存。
- 过程:
- 页表查询:CPU生成虚拟地址并查询页表。
- 缺页中断:如果页面不在内存中,发生缺页中断。
- 页面加载:操作系统从磁盘加载页面到内存。
- 页表更新:更新页表以反映页面已加载到内存。
- 重试指令:重新执行导致缺页中断的指令。
LRU Implementation
LRU(Least Recently Used,最近最少使用)
- 定义:一种页面置换算法,替换最近最少使用的页面。
- 实现方法:
- 计数器法:每个页面有一个计数器,记录每次访问的时间戳,替换时选择时间戳最小的页面。
- 栈法:维护一个栈,每次访问页面时将其移到栈顶,栈底的页面为最近最少使用的页面。
Reference Bit vs. Modified Bit vs. Valid Bit
Reference Bit(引用位)
- 定义:用于记录页面是否被访问过。
- 特点:
- 简化LRU:可用于实现简化的LRU算法。
- 设置和清除:CPU设置引用位,操作系统周期性清除。
Modified Bit(修改位)
- 定义:用于记录页面是否被修改过。
- 特点:
- 写回控制:确定页面是否需要写回磁盘。
- 设置:CPU在页面写操作时设置修改位。
Valid Bit(有效位)
- 定义:用于表示页面是否在内存中。
- 特点:
- 页表项:页表中每个条目有一个有效位。
- 缺页中断:无效位时发生缺页中断,操作系统加载页面。
Global Replacement vs. Local Replacement
Global Replacement(全局替换)
- 定义:页面置换算法可以在所有进程的页面中选择要替换的页面。
- 特点:
- 灵活性高:可以选择整个系统中最近最少使用的页面。
- 公平性问题:某些进程可能会受到更多的替换影响。
Local Replacement(局部替换)
- 定义:页面置换算法只能在当前进程的页面中选择要替换的页面。
- 特点:
- 隔离性好:每个进程只替换自己的页面,避免互相影响。
- 限制:可能无法充分利用系统内存。
Thrashing
Thrashing(抖动)
- 定义:系统频繁发生页面置换,导致CPU大量时间用于处理缺页中断而非执行进程。
- 原因:
- 内存不足:进程需要的工作集超过物理内存容量。
- 频繁置换:频繁的页面置换导致性能急剧下降。
- 解决方案:
- 增加物理内存。
- 调整进程数:减少同时运行的进程数。
- 改进调度:优化页面置换算法。
Belady Anomaly
Belady Anomaly(贝尔迪异常)
- 定义:在某些页面置换算法(如FIFO)下,增加页面数反而导致更多的缺页。
- 特点:
- 反直觉:通常增加页面数应减少缺页,但某些算法下会增加。
- 示例:在FIFO置换下,某些特定访问模式下增加页面数导致更多缺页。
- 解决方案:
- 使用更好的算法:如LRU、LFU,避免贝尔迪异常。
Allocating Kernel Memory vs. Allocating User Memory
Allocating Kernel Memory(分配内核内存)
- 特点:
- 高优先级:内核内存分配必须迅速和高效。
- 使用方法:通常使用固定大小的内存块(如slab分配器)。
- 保护和安全:内核内存必须受到严格保护,避免用户进程干扰。
- 示例:分配内核数据结构、缓冲区等。
Allocating User Memory(分配用户内存)
- 特点:
- **灵
活性**:用户进程内存需求多样,分配策略更灵活。
- 使用方法:使用分页、分段等机制进行动态分配。
- 保护机制:通过虚拟内存实现用户进程间的隔离。
- 示例:分配用户进程的堆、栈等。
Page Size
Page Size(页面大小)
- 定义:内存和磁盘之间传输的基本单位。
- 特点:
- 影响因素:页面大小影响内存管理的性能和效率。
- 大页面:减少页表项数量和页表开销,但可能增加内部碎片。
- 小页面:减少内部碎片,提高内存利用率,但增加页表项数量和页表开销。
- 选择:
- 权衡:选择页面大小时需要权衡性能和内存利用率。
- 动态调整:一些系统支持多种页面大小,动态调整以优化性能。
总结:
- Symbolic vs. Relocatable vs. Absolute Addresses:符号地址是抽象的,重定位地址是相对的,绝对地址是具体的物理地址。
- Logical vs. Physical vs. Virtual Address:逻辑地址是程序视角的地址,物理地址是实际内存地址,虚拟地址是逻辑地址在虚拟内存系统中的表示。
- Dynamic Linking vs. Shared Libraries:动态链接在运行时链接库,共享库是多个程序共享使用的库。
- Internal Fragmentation vs. External Fragmentation:内部碎片是内存块内部未使用的空间,外部碎片是内存中未使用的空间分散。
- Process of Demand Paging:需求分页是按需将页面从磁盘加载到内存。
- LRU Implementation:LRU通过计数器或栈实现,替换最近最少使用的页面。
- Reference Bit vs. Modified Bit vs. Valid Bit:引用位记录页面访问,修改位记录页面修改,有效位表示页面是否在内存中。
- Global Replacement vs. Local Replacement:全局替换在所有进程中选择页面替换,局部替换在当前进程中选择页面替换。
- Thrashing:频繁页面置换导致系统性能急剧下降。
- Belady Anomaly:增加页面数反而导致更多缺页的现象。
- Allocating Kernel Memory vs. Allocating User Memory:内核内存分配高优先级和严格保护,用户内存分配更灵活且通过虚拟内存隔离。
- Page Size:页面大小影响内存管理性能和效率,需权衡选择。