操作系统复习汇总
操作系统复习汇总
📘 Chapter 1:Introduction 简介
1️⃣ What is OS? 什么是操作系统?
- It is an extended machine(它是一个扩展的机器) 操作系统对底层硬件进行了抽象,使程序员可以更容易地使用计算机资源。
- It is a resource manager(它是一个资源管理者) 操作系统管理 CPU、内存、I/O 设备等硬件资源,协调多个程序之间的资源使用。
2️⃣ OS Concepts 操作系统的基本概念
- Processes(进程):程序的一个执行实例,是动态的,拥有独立的地址空间和运行状态。
- Address Spaces & Files(地址空间与文件):进程有属于自己的地址空间;文件是操作系统管理持久数据的方式。
- Protection & Shell(保护与命令解释器):操作系统提供安全机制防止进程互相干扰;Shell 是用户与操作系统之间的交互界面。
3️⃣ System Calls 系统调用
系统调用是用户程序与操作系统之间的接口。通过系统调用,程序可以请求操作系统提供服务。
(1) Process 进程相关系统调用
主要系统调用:
fork()
:创建一个新的子进程。子进程是父进程的拷贝。execve()
:通常在fork()
之后调用,用来用新程序替换当前进程的内存空间。waitpid()
:使父进程挂起,直到其子进程终止。exit()
:用于进程正常退出。
例子 1(伪代码):
1 | pid = fork(); // 创建子进程 |
例子 2(生成多个子进程)
1 | main() |
🔍说明:此代码将生成 3 个子进程,每个子进程都输出自己的编号。
(2) File 文件相关系统调用
open()
:打开文件。read()
:从文件中读取数据。write()
:写入数据到文件。close()
:关闭文件。lseek()
:在文件中移动读写指针。
这些调用允许程序通过文件描述符访问文件系统中的数据。
(3) Directory 目录相关系统调用
mkdir()
:创建新目录。rmdir()
:删除空目录。chdir()
:更改当前工作目录。getcwd()
:获取当前工作目录。opendir()
/readdir()
/closedir()
:用于读取目录内容。
这些调用管理和浏览目录结构。
(4) Linking 链接相关系统调用
link()
:创建硬链接。unlink()
:删除文件或链接。symlink()
:创建符号链接(软链接)。readlink()
:读取符号链接指向的路径。
链接允许多个文件名指向同一个文件数据块。
(5) Mounting 挂载相关系统调用
挂载(Mounting)是将一个文件系统集成到已有的目录树中的过程。
mount(source, target, type, flags, data)
:将文件系统挂载到指定挂载点。umount(target)
:卸载已经挂载的文件系统。
📌 举例说明:
- 将一个 USB 设备挂载到
/mnt/usb
,之后用户可以通过/mnt/usb
路径访问 USB 中的文件。
📘 Chapter 2:Process and Thread(进程与线程)
1️⃣ Process Model(进程模型)
- Multiprogramming(多道程序设计):多个程序同时驻留在内存中,CPU 在它们之间切换,提高 CPU 利用率。
- Concurrency(并发):多个进程逻辑上同时运行,实现资源共享和协同工作。
2️⃣ Process(进程)
🔹 Definition(定义)
进程是具有一定独立功能的程序关于某个数据集合的一次执行活动。
🔹 Process vs. Program(进程与程序的区别)
方面 | Program | Process |
---|---|---|
概念 | 静态,指令集合 | 动态,正在运行的程序实例 |
包含内容 | 指令 | 指令 + 数据 + PCB |
生命周期 | 长期存在 | 临时存在 |
关系 | 一个程序可生成多个进程 | 一个进程可调用多个程序 |
创建能力 | - | 可创建子进程 |
3️⃣ Process Creation(进程创建)
- 系统初始化(如开机)
- 调用系统调用,如
fork()
- 用户请求(命令行、点击图标)
- 批处理作业初始化
4️⃣ Process Termination(进程终止)
- 正常退出(voluntary)
- 错误退出(voluntary)
- 严重错误(如非法内存访问,involuntary)
- 被其他进程杀死(involuntary)
5️⃣ Process States(进程状态)
- Ready(就绪):等待被调度运行
- Running(运行):正在使用 CPU
- Blocked(阻塞):等待某事件(如 I/O)
- New(新建):刚创建尚未调度
- Terminated(终止):执行结束
📌 有时也称为“五状态模型”。
6️⃣ PCB:Process Control Block(进程控制块)
- 作用:记录进程的各种信息(进程状态、寄存器值、优先级、程序计数器、内存管理信息等)
- 存在位置:内核空间
7️⃣ Process Context Switch(进程上下文切换)
- 切换 CPU 使用权给另一个进程
- 由调度器执行
- 包含:
- 保存旧进程的 PCB
- 加载新进程的 PCB
- 清空缓存(flush cache)
- 改变内存映射(memory mapping)
- 代价高昂(1~1000 微秒),属于开销
8️⃣ Thread(线程)
🔹 What is thread?
线程是轻量级进程(LWP),是 CPU 调度的基本单位。
🔹 Why need threads?
进程开销大,线程更轻便,利于并发。
- 响应性(Responsiveness):多个线程并发运行
- 资源共享(Resource Sharing):同一进程的线程共享内存和资源
- 节省资源(Economy):创建/销毁开销小
- 适用于多核系统(Multiprocessor)
🔹 Thread vs Process(线程与进程的区别)
比较项 | 线程 | 进程 |
---|---|---|
调度单位 | CPU 调度单位 | 资源分配单位 |
地址空间 | 共享进程地址空间 | 拥有独立地址空间 |
开销 | 小(不涉及地址空间切换) | 大(涉及内存映射) |
创建/销毁 | 快 | 慢 |
控制块 | TCB | PCB |
管理方式 | 用户或内核 | 内核 |
生命周期 | 有 | 有 |
🔹 Thread Implementation(线程实现)
- 用户空间线程(User-level Threads)
- 内核空间线程(Kernel-level Threads)
- 混合实现(Hybrid)
- Pop-up Threads(弹出线程)
9️⃣ Inter-Process Communication(IPC 进程间通信)
🔹 基本概念
- 进程同步(Synchronization)
- 互斥(Mutual Exclusion)
- 临界资源(Critical Resource):一次只能被一个进程使用的资源
- 临界区(Critical Section):访问临界资源的代码段
🔹 解决方案
- 禁用中断(不推荐)
- 锁变量(Lock)
- 严格交替法(Strict Alternation)
- Peterson’s 解法
- Test and Set Lock(TSL)
- Sleep & Wakeup 睡眠唤醒
🔹 Semaphore 信号量与 P/V 操作
- 两种用法:
- 互斥锁(mutex):初值为 1,进入临界区时 P,退出时 V
- 同步信号量(empty/full)
- 含义:
S.count > 0
:有 S.count 个资源S.count < 0
:有 |S.count| 个进程在等待
- P(S):申请资源
- V(S):释放资源
- 注意事项:
- P/V 必须成对
- 同步 P 操作应在互斥 P 操作前
- V 操作顺序不重要
🔹 管程(Monitor)
- 更高级的同步机制
Process Scheduling (进程调度)
- 调度机会: 当进程被创建、退出、阻塞或发生I/O中断时,都可能触发调度。
- 调度算法:
- 批处理系统: 使用FCFS(先来先服务)和SJF(短作业优先)等算法。
- 交互式系统: 使用RR(轮转调度)、优先级调度、以及多级反馈队列等算法。
Chapter 6: Deadlock
Resource Type (资源类型)
- Preemptable Resources (可抢占资源): 这些资源可以在进程执行过程中被强制抢占并分配给其他进程。例如,CPU时间、内存等。
- Non-preemptable Resources (不可抢占资源): 这些资源在分配给进程后,不能被强制抢占,直到进程释放它们。例如,打印机、磁盘等。
Deadlock Definition (死锁定义)
- 死锁是指在一组进程中,每个进程都在等待另一个进程能引起的事件。换句话说,死锁发生时,每个进程都在等待其他进程释放它们持有的资源,从而形成一个无限等待的循环。
Four Conditions for Deadlock (死锁的四个条件) 死锁发生的必要条件有四个,称为死锁的四个条件:
- Mutual Exclusion Condition (互斥条件): 至少有一个资源必须是非共享的,即每次只有一个进程可以使用该资源。如果其他进程请求该资源,它们必须等待。
- Hold and Wait Condition (占有和等待条件): 进程持有至少一个资源,并等待其他进程持有的资源。
- No Preemption Condition (不可抢占条件): 进程占有的资源不能被抢占,只能等到进程释放资源后其他进程才能获取。
- Circular Wait Condition (环路等待条件): 进程集合中的进程形成一个闭环,其中每个进程等待下一个进程所占有的资源。
Deadlock Modeling (死锁建模)
Resource Allocation Graph (资源分配图) 资源分配图是一种用于检测死锁的图模型:
- 圆圈(○) 表示进程。
- 方块(□) 表示资源。
- □→○ 表示资源已分配给进程。
- ○→□ 表示进程正在等待资源。
规则:
- 如果资源分配图中没有环路,那么不存在死锁。
- 如果资源分配图中存在环路:
- 若每种资源类型只有一个实例,则存在死锁。
- 若每种资源类型有多个实例,则可能发生死锁。
Methods for Handling Deadlocks (死锁处理方法) 死锁的处理方法主要分为以下几类:
- The Ostrich Algorithm (鸵鸟算法)
- 解释: 假装死锁不存在,忽略死锁问题。通常应用于那些死锁发生概率极低的情况或死锁的代价不高时。
- Detection (死锁检测)
- 死锁检测算法:
- 每种资源只有一个实例时: 使用资源分配图算法检测死锁。
- 每种资源有多个实例时:
使用基于矩阵的算法进行检测。算法步骤:
- 定义矩阵
A
表示每个资源类型的分配情况。 - 如果矩阵
Ri
小于A
,则将Ci
加到A
中并计算下一条。如果所有资源都无法满足,则说明发生了死锁。
- 定义矩阵
- 死锁检测算法:
- Recovery (死锁恢复)
- 通过抢占 (Preemption): 强制抢占进程的资源并分配给其他进程,从而打破死锁状态。
- 通过回滚 (Rollback): 将进程状态恢复到某个先前的状态,通常通过检查点技术进行。
- 通过杀死进程 (Killing Process): 终止某个进程,释放其占用的资源,从而消除死锁。
- Avoidance (死锁避免)
- 安全状态 (Safe State): 系统处于安全状态时,能够确保所有进程最终都能完成,而不会发生死锁。
- 如果系统处于安全状态, 则无死锁。
- 如果系统处于不安全状态, 则存在死锁的可能。
- Banker’s Algorithm (银行家算法):
- 银行家算法是避免死锁的一种经典算法,它通过计算系统的最大资源需求和当前资源分配情况,确保系统始终处于安全状态,避免死锁发生。
- Prevention (死锁预防)
- 通过攻击死锁的四个条件之一来避免死锁的发生。
- 防止互斥: 可以通过共享资源的方式避免互斥,但并非所有资源都可以共享。
- 防止占有和等待: 进程必须一次性申请所有资源,而不是分步申请。
- 防止不可抢占: 可以允许进程抢占资源,或在进程请求资源时强制回滚。
- 防止环路等待: 通过禁止进程形成环路等待的条件来避免死锁。
- 通过攻击死锁的四个条件之一来避免死锁的发生。
- The Ostrich Algorithm (鸵鸟算法)
这些方法为死锁的预防、检测和恢复提供了理论支持。在实际操作系统中,通常结合多种方法来避免死锁发生,以确保系统能够高效稳定运行。
Chapter 3: Memory Management
- Storage Hierarchy (存储层次结构)
- A few MBs of fast, expensive, volatile cache memory (少量的MB级快速、昂贵、易失性缓存存储器): 高速的缓存存储器,存储少量数据,用于加速频繁访问的数据读取。
- A few GBs of medium-speed, medium-price, volatile main memory (RAM) (少量的GB级中速、中等价格、易失性主内存): 主要存储正在运行的程序和数据,RAM的大小通常较大。
- A few TBs of slow, cheap, nonvolatile disk storage (少量的TB级慢速、廉价、非易失性磁盘存储): 存储大量数据,虽然访问速度较慢,但价格便宜且数据不易丢失。
- Memory Management Schema (内存管理模式)
- No Memory Abstraction (没有内存抽象):
- 每个程序直接访问物理内存。
- 无法同时运行两个程序。
- Address Space (地址空间):
- Protection & Relocation (保护与重定位): 通过基址和界限寄存器实现内存的保护和重定位。
- Swapping (交换):
- 将进程从主内存移到磁盘,或从磁盘调回主内存,以便有效利用内存。
- Memory Management: Bitmap, Linked List
(内存管理:位图、链表):
- Linked List (链表):
- 内存的空闲区和已分配的进程可以通过链表管理。
- 每个节点包含起始地址和大小信息。
- Linked List (链表):
- Partition Allocation (分区分配) (Storage Placement
Strategies 存储分配策略):
- First fit (首次适应): 将内存分配给第一个足够大的空闲区。
- Next fit (下一个适应): 从上次分配结束的地方开始查找空闲区。
- Best fit (最佳适应): 将内存分配给最小的足够大的空闲区,以减少剩余空闲空间。
- Worst fit (最差适应): 将内存分配给最大的空闲区,以尽量保持大空闲区的存在。
- Quick fit (快速适应): 针对多个大小不同的空闲区维护多个列表,提高查找效率。
- No Memory Abstraction (没有内存抽象):
- Virtual Memory (虚拟内存)
- Principal (原理):
- 通过将物理内存和磁盘上的数据分页管理,使得程序可以使用比实际内存更多的地址空间。
- Implementation: Paging (分页), Segmentation (分段):
- Paging (分页): 将内存和程序地址空间分割为固定大小的页面。
- Segmentation (分段): 将程序划分为不同大小的段,每个段有独立的地址空间。
- Principal (原理):
- Paging (分页)
- Page Tables (页表):
页表的作用是将虚拟页面映射到物理页面框(页框)。
- 虚拟地址通过页号和偏移量进行划分。
- 16位虚拟地址: 高4位为页号,低12位为偏移量,这样可以表示16个页面和4096个字节的地址范围。
- Page Table Entry (页表项): 每个页表项记录虚拟页号到物理页框的映射。
- TLB (Translation Look-aside Buffer,
转换后备缓冲区):
- 用于缓存常用的页表项,避免重复查找页表。
- Multi-level Page Tables (多级页表):
- Advantages (优点):
- 降低页表的大小。
- 只保留实际需要的页表,减少内存占用。
- Example (示例):
- 32位机器,4KB页面大小,偏移量为12位,剩下的20位用于表示页号,分为两个10位的页表域。
- Advantages (优点):
- Inverted Page Tables (倒排页表):
- 采用倒排方式,页表项记录每个物理内存页框的映射,而不是每个虚拟页面的映射。
- Address Translation Scheme (地址转换方案):
- 地址转换将虚拟地址通过页表映射到物理地址。
- Page Fault (缺页中断):
- 当程序访问未映射的页面时,发生缺页中断,需要从磁盘加载该页面。
- Page Replacement Algorithm (页面替换算法):
- Optimal (最优算法): 根据未来的页面访问来选择最不常用的页面,但由于需要预知未来的页面访问,实际不可用。
- FIFO (先进先出): 选择最早加载的页面进行替换。
- Second Chance (二次机会): FIFO的改进版,给页面第二次机会,若访问过则不替换。
- Clock (时钟算法): 另一种Second Chance的实现,按环形队列顺序替换页面。
- NRU (最近未使用): 将页的访问和修改标记清零,根据标记选择页面。
- LRU (最近最少使用): 替换最近最少使用的页面。
- NFU (最不常使用): 统计每个页面的访问频率,选择最不常用的页面。
- Aging (衰老算法): 用于LRU的近似实现,通过位数的设置来记录页面的访问历史。
- Working Set (工作集): 在给定时间内,进程访问的页面集合。
- WSClock (工作集时钟算法): 基于工作集的页面替换算法。
- Page Tables (页表):
页表的作用是将虚拟页面映射到物理页面框(页框)。
- Design Issues for Paging Systems (分页系统设计问题)
- Replacement Scope (置换范围):
- Local Replacement (局部置换): 每个进程只替换自己分配的页面。
- Global Replacement (全局置换): 系统可以替换任何进程的页面。
- Page Size (页面大小):
- 太大: 会导致内存的内部碎片,浪费大量空间。
- 太小: 会导致需要更多的页面和页表,增加管理开销。
- Separate Instruction and Data Spaces (分离指令与数据空间): 将指令和数据放在不同的页面空间中,有助于提高效率和保护。
- Shared Pages (共享页面): 允许多个进程共享相同的页面,提高内存利用率。
- Replacement Scope (置换范围):
- Segmentation (分段):
- Address Translation (地址转换):
- 分段允许每个段的大小灵活变化,可以独立地扩展或缩小。
- Address Translation (地址转换):
- Segmentation with Paging (分页与分段结合):
- Address Translation (地址转换): 分段和分页结合使用,提供了更灵活的内存管理方式,能够处理复杂的内存访问模式。
这些是内存管理的核心概念,分页和分段是最常见的虚拟内存管理技术。分页通过将内存分成固定大小的页面进行管理,而分段则允许程序按照逻辑结构划分不同大小的段。在实际的操作系统中,常常将两者结合使用,以提高效率和灵活性。
Chapter 4: File System
- File and File System (文件与文件系统)
- File (文件): A named collection of related information that is stored on secondary storage (磁盘存储) for access by programs and users.
- File System (文件系统): A method for organizing and storing files and the data they contain to ensure easy access and efficient management of storage devices (用于存储、组织文件和文件数据的方法,以便易于访问和管理存储设备).
- Basic Functions of File System (文件系统的基本功能)
- Present logical (abstract) view of files and directories (提供文件和目录的逻辑抽象视图): The file system hides the complexity of underlying hardware and presents an abstract, user-friendly view of files and directories.
- Hide complexity of hardware devices (隐藏硬件设备的复杂性): The file system abstracts away the complexity of the storage hardware.
- Facilitate efficient use of storage devices (促进存储设备的高效使用): The file system optimizes storage usage and access patterns to improve performance.
- Support sharing (支持共享): Multiple users or processes can access files and directories concurrently, with the file system managing synchronization.
- Provide protection (提供保护): Ensures that unauthorized users cannot access or modify files.
- File Types (文件类型)
- Regular file (普通文件): Stores user data (could be text, binary, etc.).
- Directory file (目录文件): Contains information about other files, organizing them within a hierarchy.
- Character special file (字符特殊文件) and Block special file (块特殊文件): These are device files in UNIX that represent devices such as terminals and disk drives.
- File Structure (文件结构) There are three kinds of
file structures:
- Byte sequence (字节序列): A flexible structure where the file is simply a sequence of bytes. This structure provides the greatest flexibility.
- Record sequence (记录序列): Files organized in fixed-length records, such as databases.
- Tree structure (树结构): Records are not necessarily the same length and may contain keys. The tree is sorted on the key, typically used for efficient searching.
- File Access (文件访问)
- Sequential access (顺序访问): Access to file data is done in order, one piece at a time (often used for text files or logs).
- Random access (随机访问): Data can be accessed in any order, ideal for databases and non-linear file structures.
- Directory Structure (目录结构)
- One-level directory system (单级目录系统): A single directory (root) contains all the files.
- Two-level directory system (二级目录系统): A root directory contains user directories, each of which can have its own files.
- Hierarchical directory system (层次目录系统): A root directory and an arbitrary number of subdirectories, forming a tree-like structure of directories.
- Path Name (路径名)
- Absolute path name (绝对路径名): A full path that starts from the root directory.
- Relative path name (相对路径名): A path starting
from the current directory. If the first character is a separator (e.g.,
/
), the path is absolute.
- File Implementation (文件实现)
- Contiguous Allocation (连续分配):
- Advantages (优点):
- Simple to implement, as it only requires the starting sector and the file length.
- Excellent read performance, especially for sequential and direct access.
- Disadvantages (缺点):
- Disk fragmentation, as free space may become scattered.
- The maximum file size must be known in advance, making it impossible for files to grow beyond the initial allocation.
- Ideal for (适合): Write-once media like CD-ROMs and DVDs, where file sizes are predetermined and never change.
- Advantages (优点):
- Linked List Allocation (链表分配):
- Advantages (优点):
- No external fragmentation, as files can be scattered across disk blocks.
- Simple directory entries (only need the starting address).
- Files can grow dynamically as long as free blocks are available.
- Ideal for sequential access.
- Disadvantages (缺点):
- Random access is slower, as each block must be accessed sequentially.
- The amount of data in a block is not necessarily a power of 2, which can cause inefficiencies.
- File Allocation Table (FAT): A table that tracks where each file's data blocks are stored. The entire FAT is kept in memory, making it inefficient for large disks.
- Advantages (优点):
- Indexed Allocation (i-Node):
- Each file has an index node (i-node) that lists the attributes and addresses of the file's disk blocks.
- Advantages (优点):
- No external fragmentation.
- Only the i-node of an open file is kept in memory.
- Contiguous Allocation (连续分配):
- Directory Implementation (目录实现)
- Directory Entry (目录项):
- Contains information needed to find disk blocks, such as:
- The disk address of the entire file (for contiguous allocation).
- The number of the first block (for linked list allocation).
- The i-node number (for indexed allocation).
- Contains information needed to find disk blocks, such as:
- Handling Long File Names (处理长文件名):
- Fixed-length names (固定长度名称): Can waste space if the name is shorter than the allocated length.
- In-line (内联): Files names are stored in-line, and gaps are created when files are removed.
- Heap (堆存储): A heap can manage file names, but it requires extra effort for allocation and management.
- How to Search Files in a Directory
(如何在目录中搜索文件):
- Linearly (线性搜索): Search through the list of files one by one.
- Hash Table (哈希表): More efficient than linear search, used for faster lookups.
- Cache the results of searches (缓存搜索结果): Frequently accessed files can be cached for quicker access.
- Directory Entry (目录项):
- Shared Files (共享文件)
- Hard Link (硬链接): Both directories point to the
same i-node, meaning that the file has multiple names pointing to the
same data blocks.
- The i-node contains a reference count that is incremented when a new hard link is created. When the reference count reaches zero, the file is deleted.
- Symbolic Link (软链接): A file that contains the
path to another file, allowing you to reference a file indirectly.
- If the original file is deleted, the symbolic link becomes "broken."
- Advantages: Does not increase the reference count in the i-node, and can point to directories.
- Example File Systems (UNIX)
- UNIX File System: Typically uses i-nodes to store file metadata and pointers to disk blocks. The system supports hard and symbolic links, and has a hierarchical directory structure with efficient search mechanisms.
These are the core concepts and functions of file systems, focusing on their structure, implementation, and management. The file system is fundamental for organizing data in storage, and understanding how it works helps in optimizing performance, ensuring security, and providing flexibility in data access.
Chapter 5: Input/Output (I/O)
1. 设备分类
1.1 块设备
- 将信息存储在固定大小的块中,每个块有自己的地址。
- 每个块的大小范围从512字节到32KB。
- 每个块可以独立地进行读写操作。
- 示例:磁盘(如硬盘、SSD)。
1.2 字符设备
- 传送或接收字符流。
- 不可寻址,也没有寻道操作。
- 示例:打印机、网络接口、鼠标等。
2. 设备控制器
- I/O设备主要由两个部分组成:
- 机械部件:设备本身(如磁盘马达)。
- 电子部件:设备控制器(如磁盘控制器或适配器)。
- 控制器的任务(以磁盘为例):
- 将串行位流转换为字节块。
- 根据需要进行错误校正。
- 将数据提供给主存。
3. I/O寻址
- I/O和内存空间分离:I/O端口有专门的地址(I/O端口号),通常是8位或16位整数。
- 内存映射I/O:
- 所有控制寄存器映射到内存空间,但与I/O端口分开。
- 优点:
- 不需要特殊指令来读写控制寄存器。
- 不需要特殊的保护机制来防止用户直接访问控制寄存器。
- 每条内存引用指令也可以引用控制寄存器。
- 缺点:
- 高速缓存:如果设备控制寄存器的值被缓存,可能会导致问题。
- 解决方案:禁用对应控制寄存器的虚拟页面的缓存。
- 在有独立总线的系统中,内存和I/O控制器必须仔细处理地址区分。
- 混合方案:
- 数据缓冲区使用内存映射地址。
- 控制寄存器使用来自不同地址空间的地址。
4. I/O软件原理
- I/O软件的目标:设备独立性,优化I/O资源的管理。
- I/O操作:
- 程序化I/O(PIO):
- 优点:实现简单。
- 缺点:忙等待周期浪费CPU。
- 中断驱动I/O:I/O操作完成后,设备中断通知CPU,减少无效等待。
- 直接内存访问(DMA):允许数据在I/O设备和内存之间直接传输,无需CPU介入。
- 程序化I/O(PIO):
5. I/O软件层
- 中断处理程序:处理来自设备的中断信号,通知CPUI/O操作已完成。
- 设备驱动程序:控制特定设备的代码。
- 驱动程序可以为多个操作系统编写。
- 通常由设备制造商开发。
- 操作系统通常将驱动程序分为两类:
- 块设备驱动程序
- 字符设备驱动程序
- 设备独立的操作系统软件:
- 为设备驱动程序提供统一接口:
- 驱动程序按标准接口进行开发。
- 操作系统开发者可以基于这一接口开发设备无关的I/O功能。
- 缓冲区管理:
- 无缓冲输入
- 用户空间缓冲
- 内核缓冲后再复制到用户空间
- 内核中的双重缓冲
- 错误报告:报告I/O错误。
- 设备分配和释放:为进程分配和释放设备资源。
- 提供设备无关的块大小:确保设备间的一致性。
- 为设备驱动程序提供统一接口:
- 用户级I/O软件:
- I/O库提供I/O函数的实现,这些函数会调用相应的I/O系统调用。
- 有些程序不是直接向I/O设备写数据,而是写入一个假脱机程序(Spooler)。
6. 磁盘
- 磁盘组织:
- 磁盘被组织为柱面,每个柱面包含多个磁道,每个磁道又被划分为多个扇区。
- 磁盘格式化:
- 磁盘出厂时只有空的比特位。
- 每个盘面需要进行低级格式化和高级格式化。
- 格式化的磁道包含:
- 扇区及扇区间隙。
- 每个扇区通常包括:
- 前导码 – 数据(512字节) – 校验和。
- 柱面斜进:
- 每个磁道的第0扇区与前一个磁道的第0扇区存在偏移。
- 示例:
- 10,000转/分钟磁盘驱动(每圈6ms)。
- 每个磁道300个扇区(每个扇区20μs)。
- 寻道时间:800μs。
- 柱面斜进:40个扇区。
- 磁头调度算法:
- FCFS(先来先服务):按照请求到达的顺序进行处理。
- 最短寻道优先(SSF):优先处理寻道时间最短的请求。
- 电梯算法:磁头在一个方向上移动,直到处理完所有请求,然后反向移动(像电梯一样)。
这一章详细介绍了I/O设备、软件和磁盘系统。它讲解了设备的基本工作原理,控制器和驱动程序如何管理设备,以及如何从磁盘中读取和写入数据。理解这些原理有助于设计高效、可靠的系统管理I/O操作。