计算机考研408【操作系统】核心知识点总结

一、操作系统基本概念与特征

操作系统是计算机系统中最基本的系统软件,负责管理和控制整个计算机系统的硬件和软件资源,合理组织调度计算机的工作和资源分配,为用户和其他软件提供方便的接口和环境 。其核心特征包括:

并发:宏观上同时运行多个程序,是操作系统区别于早期单任务系统的关键特征 。操作系统通过时间片轮转等技术实现多任务并发执行。

共享:资源供多个并发进程共同使用,分为互斥共享(如打印机)和同时访问(如数据库)两种形式 。共享资源提高了系统利用率,但也增加了管理复杂度。

虚拟:将一个物理实体映射为多个逻辑实体,如虚拟内存、虚拟CPU等 。通过虚实转换技术,用户程序可以认为自己独占整个内存或CPU资源。

异步:进程以不可预知的速度向前推进 。异步性要求操作系统具备良好的事件处理和资源协调机制。

操作系统的主要功能模块包括:处理机管理、存储器管理、设备管理、文件管理以及用户接口管理 。这些功能共同构成了操作系统的核心职责,确保计算机系统的高效运行和资源合理分配。

二、进程与线程管理

1. 进程基本概念

进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位 。进程实体由三个部分组成:进程控制块(PCB)、程序段和数据段 。其中PCB是进程存在的唯一标志,包含进程标识符PID、处理机状态、调度信息等关键数据。

进程的五态模型包括:新建态 (New)、就绪态 (Ready)、运行态 (Running)、阻塞态 (Blocked/Waiting)和终止态(Terminated) 。进程在不同状态间转换的触发条件如下:

状态转换 触发条件 结果
新建→就绪 进程分配完所需资源 进入就绪队列等待CPU
就绪→运行 CPU调度选择该进程 获取CPU开始执行
运行→阻塞 请求I/O资源、等待事件或资源不足 暂停执行,进入阻塞队列
阻塞→就绪 I/O完成、事件触发或等待条件满足 恢复执行资格,进入就绪队列
运行→就绪 时间片耗尽或高优先级进程抢占 释放CPU,进入就绪队列
终止→退出 进程正常结束或异常终止 释放资源,进程生命周期结束
2. 线程概念与实现方式

线程是CPU调度和执行的基本单位,一个进程可包含多个线程,它们共享进程的资源 。线程的优势在于减少并发时空开销,增强并发性,有利于发挥多处理机效能。

线程的实现方式主要有三种:

内核级线程:由操作系统内核直接管理,每个线程都有独立的PCB,可跨进程共享,但切换需内核态支持,开销较大。Windows线程和Linuxpthread是典型代表。

用户级线程:由用户空间库管理,不依赖内核,但单线程阻塞会导致整个进程阻塞。Java早期实现和一些轻量级线程库采用这种方式。

混合式线程:结合内核级和用户级线程的优点,用户态调度与内核态支持结合,实现轻量级线程切换。Linuxpthread和Solaris线程采用这种方式。

线程与进程的主要区别在于:进程是资源分配单位,线程是CPU调度单位;线程间共享进程资源,而进程间资源隔离;线程切换开销小,进程切换开销大。

3. 处理机调度算法

处理机调度算法是操作系统的核心技术之一,主要调度目标包括:响应时间短、周转时间短、吞吐量高、公平性好等。常见调度算法如下:

调度算法 适用场景 优势 劣势
先来先服务(FCFS) 批处理系统 实现简单 长作业导致短作业等待时间长
短作业优先(SJF) 批处理系统 减少平均等待时间 需预知执行时间,易导致饥饿
时间片轮转(RR) 分时系统 公平性高,响应时间短 时间片过小会增加切换开销
优先级调度 实时系统 灵活,可满足实时性要求 静态优先级可能引发饥饿
多级反馈队列(MFQ) 通用操作系统 平衡短作业和长作业,兼顾响应速度与吞吐量 实现复杂度较高

多级反馈队列调度算法是现代操作系统的典型算法,其核心是将所有待分配作业分为多个有不同优先级的队列 。新进程进入最高优先级队列末尾,按FCFS排队;若时间片用尽未完成,则降级到下一队列末尾;仅当高优先级队列为空时才处理低优先级队列。高优先级队列的新进程可抢占当前运行进程,被抢占进程回到原队列末尾。该算法通过动态调整优先级和时间片大小,平衡了短作业和长作业的执行需求。

4. 进程通信机制

进程间通信(IPC)是操作系统的重要功能,常见机制包括:

管道:半双工通信方式,只能满足数据单向流动的需求。管道没有名字,只能用于父子进程间通信。若想实现双向数据流,需要创设双管道。

共享内存:允许多个进程访问同一块内存空间,主要目的是提升通信机制运行效率。共享内存通常需要配合互斥锁或信号量控制访问,适用于频繁数据交换的场景。

消息队列:消息链表实现,若进程存在足够的权限,可将相应信息添加至队列中,并且对队列中的信息进行读取。消息队列可以解决信号承载信息量少、缓冲区大小限制的问题。

套接字:一般进程间通信机制,能够实现不同机器的进程间通信。适用于分布式系统中的进程通信。

信号:异步事件处理方式,主要用于进程间简单事件通知。信号机制存在一定的复杂性,主要是将某个已发生的时间通知给接受进程。

三、进程同步与互斥

1. 同步与互斥基本概念

进程同步是指协调多个进程的执行顺序 ,确保它们按照特定顺序访问共享资源 。进程互斥是指确保临界资源一次仅被一个进程访问,防止数据竞争和不一致性 。

2. 实现方法
a. 软件方法

整型信号量:一个整型变量,只能通过P(wait)和V(signal)两个原子操作来访问 。整型信号量存在一个缺点,当信号量值≤0时,进程会处于"忙等"状态,不符合"让权等待"原则。

记录型信号量:为了解决整型信号量的忙等问题,引入了记录型信号量 。记录型信号量包含两个部分:一个整型变量count和一个进程等待队列queue。当信号量值≤0时,进程被放入队列并阻塞,而不是忙等。

Peterson算法:一种软件实现的互斥算法,通过共享变量和循环检查实现两个进程对临界区的互斥访问。该算法在理论上有意义,但在实际系统中应用较少。

b. 硬件方法

中断屏蔽:通过屏蔽中断来防止其他进程或中断服务程序访问临界资源。但这种方法只能实现简单的互斥,无法处理复杂的同步问题。

TestAndSet指令:一个原子操作,用于测试并设置一个变量的值。该指令可以实现简单的互斥锁,但无法直接支持复杂的同步需求。

Swap指令:交换两个寄存器的内容,用于实现更复杂的同步操作。通常需要配合其他机制使用。

c. 高级同步机制

管程(Monitor):一种高级同步机制,将共享变量及对其操作封装起来,保证互斥 。管程内部使用条件变量(如wait()和signal())实现进程同步 。条件变量允许进程在不满足条件时释放锁并阻塞,直到条件满足再被唤醒。

信号量集:在AND信号量机制的基础上,增加了一个下限,当资源数量低于某一下限时即不予以分配资源 。例如:Swait(S1,t1,d1,...S2,tn,dn),其中S为信号量,t为下限值,d为需求值。

3. 经典同步问题
a. 生产者-消费者问题

生产者-消费者问题是操作系统中进程同步与互斥的典型例子 。解决该问题的核心是控制生产者和消费者对共享缓冲区的访问,确保生产者不能向满缓冲区投放产品,消费者也不能在空缓冲区取数据。通常使用两个信号量(empty表示缓冲区是否为空,full表示缓冲区是否为满)和一个互斥信号量(mutex)来实现。

b. 读者-写者问题

读者-写者问题要求允许多个读者同时访问共享资源,但写者必须独占资源 。解决该问题的关键是协调读者和写者之间的访问冲突。通常使用两个信号量(RS表示读者互斥锁,WS表示写者互斥锁)和一个整型变量Readcount表示正在进行读取操作的进程数目 。当第一个读者进程进入时,需要检查Readcount是否为0,若是则执行P(WS)操作;当最后一个读者离开时,执行V(WS)操作。

c. 哲学家进餐问题

哲学家进餐问题是操作系统中经典的同步问题,涉及多个进程之间的资源分配和协调 。解决该问题的核心是破坏死锁产生的必要条件之一。常见的解决方案包括:限制哲学家同时拿两支筷子(破坏"持有并等待"条件);引入"服务者"角色(破坏"循环等待"条件);使用管程和条件变量实现。

四、死锁预防与处理

1. 死锁基本概念

死锁是指一组多个进程在运行过程中因争夺临界资源而导致的一种僵局状态 。此时,每个进程都在等待仅由该组进程中的其他进程才能引发的事件,导致所有进程都无法继续执行 。

2. 死锁必要条件

死锁的产生必须同时满足四个必要条件:

互斥 :资源一次仅允许一个进程使用。
持有并等待 :进程持有资源的同时等待其他资源。
不可抢占 :已分配的资源不能被强制剥夺。
循环等待:存在一个进程循环链,每个进程都在等待下一个进程持有的资源 。

3. 死锁预防

死锁预防是通过破坏死锁产生的必要条件来预防死锁 。常见方法包括:

资源一次性分配 :进程在开始执行前必须声明所需的所有资源,破坏"持有并等待"条件。
资源有序分配 :所有资源按固定顺序分配,破坏"循环等待"条件。
允许资源抢占 :当高优先级进程需要资源时,可以强制剥夺低优先级进程的资源,破坏"不可抢占"条件。
禁止持有并等待:进程在请求资源时,必须释放已持有的资源,破坏"持有并等待"条件。

4. 死锁避免

死锁避免是在资源动态分配过程中,防止系统进入不安全状态 。最著名的算法是Dijkstra的银行家算法,其步骤如下:

  1. 初始化可利用资源Work为Available。
  2. 检查进程Pi的Need是否≤Work,若满足则分配资源,更新Work和Finish数组。
  3. 重复步骤2直到所有进程完成或无法继续。
  4. 若所有进程都能完成,则系统是安全的;否则,拒绝当前进程的资源请求。

银行家算法通过试探性分配和安全性检查,确保系统不会进入死锁状态,但实现复杂度较高 。

5. 死锁检测与解除

当死锁发生后,操作系统需要通过死锁检测算法 发现死锁,并通过死锁解除策略打破僵局。常用方法包括:

资源分配图(RAP)检测:构建包含进程节点、资源节点的有向图,通过检测图中是否存在环路来判断死锁 。若存在环路,则系统处于死锁状态。

死锁定理:当某个状态的资源分配图不能再继续化简时,该状态为死锁 。资源分配图简化原则是进程申请的资源如果空闲,则可将请求边改为分配边,并将资源分配给该进程。当进程仅有分配边没有申请边时,可看作该进程在规定时间内完成并释放所占用的资源,可将指向该进程结点的边抹去,从而简化过程。

死锁解除策略

  • 进程终止:选择优先级最低或运行时间最短的进程终止,释放其资源。
  • 资源剥夺:强制剥夺其他进程的资源分配给死锁进程,需考虑优先级和安全性。
  • 银行家算法辅助:结合安全性检查选择可撤销的进程,确保系统恢复安全状态。

五、内存管理

1. 内存管理基础

内存管理的主要功能是:内存分配与回收、地址映射、存储保护与共享、内存扩充等 。内存管理的关键技术包括:

内存分配算法

  • 首次适应算法:从内存开始处寻找第一个满足大小的空闲块。
  • 最佳适应算法:寻找最接近所需大小的空闲块。
  • 最差适应算法:寻找最大的空闲块。
  • 伙伴系统算法:将内存划分为大小为2^n的块,通过合并和拆分管理内存。

地址映射:将逻辑地址转换为物理地址的过程,包括:直接映射、段式映射、页式映射和段页式映射等 。

内存保护:通过内存保护机制防止进程越界访问其他进程的内存空间。常见的保护机制包括:段表保护、页表保护和访问控制位等。

2. 虚拟内存管理

请求分页机制是虚拟内存的核心实现方式,其流程如下:

  1. 进程访问未在内存的页面时触发缺页中断。
  2. 操作系统查找页表,确定页面在外存中的位置。
  3. 若内存有空闲页框,则直接调入;否则,通过页面置换算法选择牺牲页。
  4. 将所请求的页面调入内存,更新页表。
  5. 恢复进程执行。

页面置换算法是虚拟内存管理的关键技术,常见算法包括:

算法 原理 优缺点
FIFO 置换最先调入内存的页面 实现简单,但可能因"Belady现象"导致缺页率上升
LRU 置换最久未使用的页面 基于时间局部性,性能较好,但需额外硬件支持
Clock 改进FIFO,通过循环扫描访问位(A)和修改位(M)选择淘汰页 实现简单,避免Belady现象,但可能牺牲局部性
OPT 置换未来最晚使用的页 理论最优,但实现复杂,需预测未来访问
LFU 置换最近最不常用的页面 考虑访问频率,但需记录访问次数,开销较大

虚拟内存的性能优化:通过减少缺页率来提高系统性能。有效访问时间T=(1-p)×m+p×d,其中p是缺页率,m是内存访问时间,d是磁盘访问时间 。降低缺页率是提高虚拟内存性能的关键。

六、文件管理

1. 文件基本概念

文件是具有名字的、在外存上持久保存的相关信息集合,操作系统通过文件系统提供对文件的创建、删除、打开、关闭、读和写等操作 。

2. 文件逻辑结构与物理结构

文件逻辑结构

  • 流式文件:将文件看成由字节按顺序排列而成,类似于数组结构。
  • 记录式文件:将文件看成由记录按顺序排列而成,支持按记录访问。
  • 索引文件:将记录按照某种规则排序,并建立记录的索引项提供快速的文件检索。

文件物理结构

  • 连续分配:文件占用连续物理块,优点是读写快,缺点是碎片问题严重 。
  • 链式分配:通过指针链接离散块,解决碎片问题但随机访问效率低 。
  • 索引分配:目录项包含索引表指针,支持大文件和随机访问,但索引表占用额外空间 。
3. 文件系统结构

树形目录结构:现代操作系统普遍采用的目录结构,支持文件共享与保护 。目录树的根节点是超级块,包含文件系统的基本信息和控制结构。

空闲空间管理方法

  • 位图法:每个磁盘块对应一位,1表示空闲,0表示占用。优点是空间利用率高,缺点是位图较大 。
  • 空闲块链表:通过链接指针组织空闲块,适合连续分配但查找效率低。
  • 空闲表法:记录空闲块的起始地址和大小,支持大文件分配但管理复杂 。

索引节点/inode:文件系统的元数据结构,包含文件的类型、大小、权限、时间戳等信息以及指向文件数据块的指针 。索引节点是文件系统管理文件的核心数据结构。

七、I/O管理

1. I/O管理基础

I/O管理是操作系统的重要功能,主要负责:**缓冲管理、设备分配与回收、设备独立性(无关性)、虚拟设备(SPOOLing)**等 。

2. I/O控制方式

程序查询方式:CPU不断查询设备状态,直到设备准备好。优点是实现简单,缺点是CPU利用率低。

中断方式:设备准备好后向CPU发送中断信号,CPU响应中断处理I/O操作。优点是CPU利用率高,缺点是中断处理开销较大。

DMA(Direct Memory Access)方式:通过DMA控制器直接在内存和设备之间传输数据,无需CPU干预。优点是提高I/O吞吐量,缺点是需要专用硬件支持。

通道控制方式:通过通道控制器管理设备和内存之间的数据传输,CPU只需启动通道即可。优点是进一步提高CPU利用率,缺点是实现复杂。

3. 缓冲技术

缓冲技术是操作系统提高I/O效率的重要手段,包括:

单缓冲:一个缓冲区,用于简单I/O操作。实现简单但I/O效率较低。

双缓冲:两个缓冲区,交替使用以提高I/O效率。适用于CPU和I/O设备速度差异较大的场景。

缓冲池:多个缓冲区组成的池,预分配内存块减少动态分配开销,提升I/O吞吐量。现代操作系统普遍采用缓冲池技术。

缓存技术:将频繁访问的I/O数据缓存在内存中,减少外存访问次数。适用于文件系统和数据库等场景。

4. 磁盘调度算法

磁盘调度算法是优化磁盘I/O性能的关键技术,常见算法包括:

算法 原理 优缺点
FCFS 按请求顺序处理 实现简单,但可能导致磁臂频繁移动
扫描算法(电梯算法) 磁臂单向移动,依次处理请求 减少寻道时间,但可能饥饿远端请求
SSTF 优先选择距离最近的请求 寻道时间短,但可能加剧饥饿

磁盘调度算法选择应根据具体应用场景决定。例如,对于交互式系统,响应时间更重要,适合使用扫描算法;对于批处理系统,吞吐量更重要,适合使用FCFS算法。

5. SPOOLing技术

SPOOLing(同时外围设备联机)技术是一种虚拟设备技术,通过"输入井"和"输出井"缓冲数据,实现设备共享与脱机操作 。其工作原理是:将多个进程的I/O请求先存入内存中的井中,然后由专门的后台进程统一处理,提高CPU利用率。

八、操作系统结构与实现

1. 操作系统结构

分层结构:将操作系统分为若干层,由第0层硬件层到最高层用户层,每层仅向相邻的上一层提供服务。分层结构使系统层次清晰,便于开发和维护。

模块化结构:将操作系统按功能划分为若干模块,各模块相对独立。模块化结构提高了系统的可维护性和可扩展性。

微内核结构:非核心功能不集中到内核,核心功能由微内核实现,其他功能通过用户态服务提供。微内核结构便于功能拓展,稳定性和安全性较高,但速度较慢,因为用户态和核心态在频繁切换。

宏内核结构:内核功能多,性能高。宏内核将大部分功能集成在内核中,减少了用户态和核心态之间的切换开销,但可维护性和安全性较差。

外核结构:为虚拟机进行资源分配,并对其进行管理,使得虚拟机仅能访问自己的资源而不发生冲突。外核结构主要用于虚拟化环境中的资源管理。

2. 操作系统引导

操作系统的引导过程包括:

  1. 通电激活CPU,CPU跳转到BIOS第一条指令,即ROM中的boot程序起址并执行。
  2. 硬件自检,检查是否有硬件故障。
  3. 加载主引导记录(MBR),包含磁盘引导程序和分区表。
  4. 加载分区引导记录,用于寻找并激活位于分区根目录下的启动管理器。
  5. 加载启动管理器。
  6. 执行操作系统初始化程序,完成系统引导 。
3. 虚拟机技术

虚拟机分为两类:

  • 第一类虚拟机(裸金属架构):虚拟机管理程序直接运行在硬件之上,如VMware ESXi。
  • 第二类虚拟机(寄居架构):虚拟机管理程序下面还有一个宿主操作系统,如VMware Workstation 。

虚拟机技术通过软件模拟硬件环境,实现多个操作系统在一台物理机上的运行,提高了资源利用率和系统隔离性。

九、系统调用与程序执行环境

1. 系统调用

系统调用 是操作系统提供给用户使用系统资源的端口 。用户程序通过系统调用请求操作系统服务,如文件读写、进程创建等。系统调用的实现通常通过访管指令(如trap指令)触发,将CPU从用户态转换到核心态,由操作系统处理请求。

2. 程序链接与装入

程序链接是将目标模块组合成一个可执行文件的过程,包括:静态链接和动态链接。静态链接在程序装入时完成,动态链接在程序运行时完成。

程序装入是将程序从外存加载到内存的过程,包括:加载、链接和执行三个阶段。程序装入后,形成程序的内存映像,包括:代码段、数据段、堆栈段等。

3. 程序的内存映像与地址空间

程序的内存映像包括:代码段 (存放程序指令)、数据段 (存放全局变量和静态变量)、堆栈段 (存放动态分配的内存和栈帧)等。程序的地址空间分为:用户空间 (存放用户程序和数据)和内核空间(存放操作系统代码和数据)。

地址空间保护:通过内存保护机制防止进程越界访问其他进程的内存空间。常见的保护机制包括:段表保护、页表保护和访问控制位等。

十、操作系统的发展历程与分类

1. 操作系统发展历程

操作系统的发展经历了从手工操作单道批处理 ,再到多道批处理分时系统实时系统 ,最后到现代分布式操作系统的演进过程 。这一发展历程反映了计算机系统对资源利用率、响应速度和系统规模不断增长的需求。

2. 操作系统分类

根据功能和应用场景,操作系统可分为:

批处理操作系统:作业成批处理,无交互能力,但资源利用率高。适用于计算密集型任务,如科学计算和大规模数据处理。

分时操作系统:主要使用时间片轮转调度算法,进行进程/作业调度,具有较强的交互能力。适用于需要用户交互的场景,如终端用户界面和多人共享系统。

实时操作系统:及时响应外部事件,保证在规定时间内完成任务。分为硬实时(必须严格按时完成)和软实时(允许存在一定误差) 。适用于嵌入式系统和工业控制等场景。

网络操作系统:支持多台计算机之间的资源共享和通信。适用于局域网和广域网环境中的资源共享。

分布式操作系统:将多台计算机的资源透明地集成到一个统一的系统中。适用于大规模计算和存储需求的场景,如云计算和大数据处理。

十一、总结与应用

操作系统作为计算机系统的灵魂,其核心知识点涵盖了资源管理、进程调度、同步互斥、死锁处理、内存虚拟化、文件系统和I/O控制等多个方面 。这些知识点不仅在考研中是重点,也是理解计算机系统工作原理的基础。

在实际应用中,操作系统的设计需要权衡各种因素,如响应时间与吞吐量资源利用率与系统稳定性实现复杂度与功能需求等。例如,多级反馈队列调度算法通过动态调整优先级和时间片大小,平衡了短作业和长作业的执行需求;虚拟内存技术通过请求分页和页面置换,实现了内存的高效利用;SPOOLing技术通过输入井和输出井,提高了CPU和I/O设备的利用率。

掌握操作系统的核心知识点,不仅有助于应对考研408的考试,也能为深入理解计算机系统和开发高效的软件应用奠定基础。在学习过程中,应注重理解基本概念和原理,同时关注实际应用和实现细节,以全面掌握操作系统的核心知识。

相关推荐
while(1){yan}2 小时前
文件IO的常识
java·开发语言·青少年编程·电脑常识
bulucc2 小时前
vim 快捷操作
linux·编辑器·vim
Light602 小时前
再见,REST API?你好,MCP Server!AI时代后端开发新范式
java·人工智能·rest api·ai agent·spring ai·mcp
我是koten2 小时前
用Ansible查找文件并记录文件名的playbook
linux·运维·centos·ssh·ansible·find·playbook
逸风尊者2 小时前
开发需掌握的知识:MQTT协议
java·后端
帅得不敢出门3 小时前
精简Android SDK(AOSP)的git项目提高git指令速度
android·java·开发语言·git·elasticsearch
青蛙大侠公主3 小时前
Spring事务
java·数据库·spring
小小Fred3 小时前
FreeRTOS函数prvInitialiseNewTask解析
java·开发语言
图表制作解说(目标1000个图表)3 小时前
Java通过BACnet协议读取和写入设备信息
java·楼宇自控·bacnet协议