| 场景/操作 | 由操作系统完成(OS的责任) | 不由操作系统完成(易混淆点) | 备注/易混淆点说明 |
|---|---|---|---|
| 中断相关操作 | 1.中断响应后的现场保护(将PSW、PC等压入系统栈)。 2.分析中断原因,并转入相应的中断处理程序。 3.执行中断服务例程(如设备驱动、系统调用处理)。 4.中断返回前的现场恢复,并可能进行进程调度。 | 1.中断信号的触发(由硬件设备或CPU异常自动产生)。 2.硬件自动完成的第一步:硬件自动保存断点(PC)和状态(PSW)到核心栈。 3.用户程序直接处理中断(不可能,中断处理全程为核心态)。 | 关键分界线:硬件负责检测和初始响应(保存最小现场,转入内核态)。OS负责识别、执行完整处理和恢复。整个中断处理过程在核心态下进行。 |
| 终止进程时 | 1.回收进程所占用的所有资源(内存、文件、I/O设备等)。 2.更新系统数据结构:将进程状态改为“终止”,从就绪/阻塞队列移除,并可能通知其父进程。 3.销毁进程控制块(PCB),最终释放PCB存储空间。 4.进行进程调度,选择下一个要运行的进程。 | 1.进程自己执行“退出”操作(如调用exit()系统调用)。这是进程自身行为,但该调用会陷入内核,将控制权交给OS2.释放其用户地址空间内的内存(此释放操作由OS的内存管理模块执行,不属于进程自己的能力)。 | 易混淆:进程发起终止,但资源回收和清理工作必须由OS完成。进程无法自行从系统级数据结构中彻底抹去自己。 补充:终止子进程不是OS在终止进程时的必需操作。通常子进程由init进程接管,除非显式设置父子联动终止。(进程发起终止,但资源回收和清理必须由OS完成。子进程通常成为孤儿进程,被init进程收养,而非随父进程强制终止) |
| 支持页式存储的进程切换时 | 1.保存旧进程的上下文(通用寄存器、状态等,PC和SP属于上下文的一部分)到其PCB。 2.更新内存管理数据结构:将旧进程的页表指针(如CR3寄存器)保存到PCB,将新进程的页表指针加载到MMU。 3.处理TLB相关事宜:可选地刷新整个TLB,或使用ASID标记避免刷新。 4.切换内核栈,更新当前进程PCB指针。 5.恢复新进程的上下文,并开始执行。 | 1.具体的地址转换过程(由MMU硬件完成,查找页表、检查权限、形成物理地址)。 2.缺页异常/页面错误的检测(由MMU硬件在转换过程中发现无效位、权限不符时触发)。 3.TLB的查找与填充(由MMU硬件自动完成,OS负责在页表变更后维护TLB一致性)。 | 核心分工: -OS:管理页表内容、决定谁用物理页、在切换时告诉硬件用哪套页表 -硬件(MMU):使用OS设置的页表,自动进行虚拟到物理的转换。 易错点:认为“切换页表”或“处理缺页”是纯OS行为。实际上,缺页是由硬件触发的中断,OS响应并处理。 |
进程终止:OS确保资源回收和系统状态一致性,但不保证子孙进程的连带终止。这是“孤儿进程”机制的基础。
进程切换(含页式):必须保存/恢复完整硬件上下文(包括PC、SP、PTBR等),以及管理地址空间映射的切换。这属于OS的底层调度职责。
考察了OS职责的边界与确定性:哪些是OS必须做的(资源管理、上下文切换),哪些是OS不一定做的(如终止子进程)
分界线原则:硬件负责具体执行和自动检测(执行指令、触发中断、地址转换),操作系统负责管理、决策和复杂处理(资源管理、调度、异常处理程序)。
特权级原则:凡是需要访问或修改系统核心数据结构(如PCB链表、页表、设备队列)的操作,都必须由在核心态下运行的操作系统完成。用户进程(用户态)无法直接操作。
页式存储相关:务必分清“页表管理”(OS)和“地址转换”(硬件)。进程切换时,OS只是切换了页表基址寄存器,后续无数次的地址转换都是MMU自动完成的。
进程终止:进程可以自愿结束生命(调用
exit),但不能亲自料理自己的后事。资源回收、注销身份(PCB)必须由“殡葬师”(OS)来完成。
| 场景/操作 | 由操作系统完成(OS的责任) | 不由操作系统完成(易混淆点) | 核心考点与易混淆点说明 |
|---|---|---|---|
| 系统调用执行过程 | 1.陷入处理:接收用户程序的软中断/陷入指令,切换到核心态。 2.参数验证与传递:检查用户传递的参数合法性,从用户栈复制到内核栈。 3.执行内核服务例程:根据系统调用号查找并执行对应的内核函数(如文件读写、进程创建等)。 4.返回结果:将执行结果(或错误码)返回给用户程序,并恢复用户态执行。 | 1.发起系统调用:由用户程序通过库函数(如read())调用,最终执行int 0x80或syscall等指令触发陷入。2.库函数包装:标准库(如C库)提供的封装函数,不属于OS内核,但常与系统调用混淆。 | 关键分界:用户程序请求服务,OS验证并执行服务。整个系统调用处理在核心态进行。陷阱指令是硬件行为,但陷入后的处理是OS责任。 |
| 动态内存分配(用户态) | 1.维护进程的堆空间:通过brk/sbrk系统调用调整进程数据段结束地址(堆顶)。2.提供内存分配系统调用:如 mmap可用于映射大块内存或文件。3.内核级的物理内存管理:为进程分配/回收物理页框。 | 1.用户态内存分配器的管理:如malloc/free的实现(在glibc等库中),管理用户堆空间内的空闲块链表等。这些运行在用户态,不属于OS内核。2.具体的堆内内存使用与释放:由程序员或垃圾回收器(如Java GC)在用户态决定。 | 经典混淆:malloc/free是库函数,不是系统调用。它们使用OS提供的brk/mmap等系统调用来获取/释放内存,但日常的分配/释放管理在用户态完成。 |
| 页面置换(缺页处理中) | 1.选择被置换的页面:执行页面置换算法(如LRU、CLOCK)选择牺牲页。 2.页面写回:若牺牲页被修改(脏页),安排将其写回磁盘。 3.更新页表:将牺牲页的页表项置为无效,新页的页表项填入物理页框号并设为有效。 4.从磁盘调入所需页面:启动磁盘I/O,将所需页面读入内存空闲帧。 | 1.缺页异常的检测:由MMU硬件在地址转换时发现页表项无效位=1触发。 2.具体的磁盘I/O操作:由磁盘控制器硬件执行,OS仅发出I/O命令。 3.TLB更新:当OS修改页表后,需要使TLB中对应项无效,这个使无效命令由OS发出,但TLB硬件的具体刷新由硬件完成。 | 重要考点:整个缺页处理是中断响应过程,由硬件触发,OS处理。页面置换算法是OS实现的决策逻辑。注意区分“选择置换谁”(OS算法)和“具体换入换出操作”(OS发起I/O,硬件执行)。 |
| 设备管理(I/O操作) | 1.设备驱动程序:提供统一的设备操作接口,将OS请求转换为设备控制命令。 2.I/O调度:对磁盘等设备的I/O请求进行排序(如电梯算法)以提高性能。 3.缓冲区管理:在内核空间设立缓冲区,减少设备I/O次数,解决速度不匹配。 4.设备分配与回收:跟踪设备状态,分配设备给进程,避免冲突。 | 1.具体的I/O命令执行:由设备控制器硬件执行,如磁盘旋转、磁头移动、数据读写。 2.DMA传输的控制:OS设置DMA控制器的参数(内存地址、传输长度等),但数据传输本身由DMA硬件完成,无需CPU干预。 3.用户程序的I/O请求:用户程序调用库函数,最终通过系统调用请求I/O。 | 核心思想:OS管理设备,提供抽象接口,处理缓冲、调度等高级功能。硬件执行具体操作。DMA传输中,OS负责初始化和善后,传输过程硬件独立完成。 |
| 文件系统操作(如打开文件) | 1.路径名解析:将路径名分解,逐级查找目录,找到文件控制信息(如inode)。 2.权限检查:检查进程是否有权限访问该文件。 3.分配文件描述符和打开文件表项:在进程和系统级打开文件表中创建条目,维护文件打开状态。 4.管理文件控制块(如inode):维护文件元数据(权限、大小、位置等)。 | 1.磁盘块的读写:具体的数据读写由磁盘驱动程序、磁盘控制器硬件完成。 2.用户程序的文件操作调用:如 fopen、read等库函数,它们封装系统调用。3.目录文件的存储格式:虽然格式由OS设计,但目录文件本身的存储和读写与其他文件一样,依赖底层存储设备。 | 易错点:路径解析、权限检查等是OS在打开文件过程中必须完成的。文件数据内容本身并不在“打开”时全部读入内存。文件描述符是OS管理的进程资源。 |
| 进程同步(如信号量操作) | 1.提供同步原语:如信号量、管程的实现,保证这些原语的原子性执行。 2.维护等待队列:当进程阻塞在信号量上时,OS将其放入等待队列,并切换进程。 3.进程调度切换:在 P操作导致阻塞、V操作唤醒等待进程时,OS执行调度程序。 | 1.用户程序中的同步逻辑:程序员决定在哪里使用P/V操作,以及信号量的初始值。2.硬件原子指令:信号量底层依赖硬件提供的原子指令(如Test-and-Set)来实现,但这些指令只是工具,完整的同步机制由OS利用这些工具构建。 | 关键区分:信号量本身是一个内核对象(通常),其P/V操作是系统调用或由OS支持的原子操作。OS负责管理等待队列和进程状态变更。硬件仅提供最底层的原子读-修改-写指令。 |
| 进程通信(如消息传递) | 1.维护通信通道:如消息队列、管道、共享内存区的内核数据结构。 2.保证通信的同步与互斥:协调发送与接收进程,处理阻塞与唤醒。 3.内核中的消息复制:在内核缓冲区中暂存消息,从发送进程地址空间复制到接收进程地址空间(对于消息队列)。 | 1.共享内存的用户态访问:一旦OS建立了共享内存映射,进程可以直接在用户态读写该内存区域,无需OS干预每次访问。 2.用户程序的通信逻辑:谁发送、谁接收、发送什么内容,由应用程序决定。 | 重要区别:消息传递通常涉及内核作为中转(复制),而共享内存则只在内核建立映射,后续访问无内核参与。管道是内核维护的缓冲区,其读写涉及系统调用和内核复制。 |
| 启动过程(从加电到用户界面) | 1.内核初始化:初始化各种内核数据结构(进程表、文件系统等),探测硬件设备并初始化驱动程序。 2.启动init进程:创建第一个用户进程(如 /sbin/init),进而启动整个用户空间的服务和登录界面。3.提供系统服务:启动后,OS持续处理系统调用、中断,调度进程,管理资源。 | 1.BIOS/UEFI固件:执行硬件自检,加载引导扇区(Bootloader)。 2.Bootloader(如GRUB):不属于OS内核,负责加载OS内核镜像到内存,并将控制权交给内核入口点。 3.用户空间初始化脚本和服务:由 init进程按配置启动,如/etc/init.d中的脚本,这些属于用户态程序。 | 经典启动顺序:BIOS/UEFI → Bootloader → OS内核初始化 → init进程 → 用户shell/图形界面。OS内核的初始化是其责任的开始,之前的步骤属于固件和引导程序。 |
特权级与分界线:牢记用户态与核心态的界限。需要访问硬件资源或修改核心数据结构时,必须通过OS在核心态完成。
硬件与OS的协作模式:通常是硬件检测/触发 → OS处理/决策 → 硬件执行。例如:缺页(硬件检测)→ OS选择置换页 → 磁盘I/O(硬件执行)。
库函数 vs 系统调用:库函数可能封装系统调用,也可能完全在用户态实现(如
malloc管理堆内存)。系统调用是明确的用户态到核心态的接口。OS的核心角色是“管理者”和“抽象提供者”:管理CPU(调度)、内存(分配/置换)、设备(驱动/缓冲)、文件(命名/组织)。它不直接执行具体计算或I/O操作,而是安排和控制这些操作。
进程与资源:OS是资源的唯一管理者,进程是资源分配的单位。任何资源的获取、释放、共享都必须经过OS。