跳至内容
王道操作系统笔记

王道操作系统笔记

操作系统

1.1_1 操作系统的概念、功能和目标

作为用户和计算机硬件之间的接口

提供的功能

  • 命令接口
    • 联机命令接口
    • 脱机命令接口
  • 程序接口
  • GUI(图形用户界面)
    • Windows
    • iOS
    • Android

目标

  • 方便用户使用

1.1_2 操作系统的特征

特征定义
并发多个事件交替发生(宏观同时发生、微观交替进行)
并行多个事件同时发生
共享两种资源共享方式:
1. 互斥共享方式(如打印机)
2. 同时共享方式(如文件)
虚拟物理实体映射为多个逻辑实体:
- 空分复用技术(如虚拟内存)
- 时分复用技术(如CPU分时)
异步进程执行走走停停,速度不可预知(需并发性支持)

1.1_3 操作系统的发展与分类

发展阶段

  1. 手工操作阶段
    • 纸带机(用户独占全机、人机速度矛盾)
  2. 批处理阶段
    • 单道批处理系统(外围机→磁带)
    • 多道批处理系统(操作系统出现)
  3. 分时操作系统
    • 轮流处理作业
    • 无法处理紧急任务
  4. 实时操作系统
    • 硬实时系统(严格时间限制)
    • 软实时系统(允许偶尔犯错)
  5. 其他类型
    • 网络操作系统
    • 分布式操作系统
    • 个人计算机操作系统

1.1_4 操作系统的运行机制与体系结构

运行机制

  • 两种指令
    • 特权指令(仅内核态可用)
    • 非特权指令
  • 两种处理器状态
    • 核心态(root权限)
    • 用户态
  • 两种程序
    • 内核程序(运行在核心态)
    • 应用程序

操作系统内核功能

  1. 时钟管理
  2. 中断处理
  3. 原语(原子性操作)
  4. 资源管理
    • 进程管理
    • 存储器管理
    • 设备管理

体系结构

类型特点
大内核主要功能模块运行在核心态(如Linux)
微内核仅保留最基本功能(如Windows NT)

1.1_5 中断和异常

  • 中断机制的作用:用户态→核心态的唯一途径
  • 中断分类:
        graph LR
    A[中断] --> B[内中断(异常)]
    A --> C[外中断]
    B --> D[陷阱(trap)]
    B --> E[故障(fault)]
    B --> F[中止(abort)]
      

1.1_6 系统调用

  • 概念:应用程序通过系统调用请求OS服务
  • 与库函数的区别:
    系统调用库函数
    OS直接提供的接口可能封装系统调用
    需切换到核心态运行在用户态

2.1_1 进程的定义、组成、组织方式、特征

定义

  • 进程:程序的一次执行过程

组成

  1. PCB(进程存在唯一标志)
  2. 程序段
  3. 数据段

组织方式

  • 链接方式(队列指针)
  • 索引方式(索引表)

特征

  • 动态性、并发性、独立性、异步性、结构性

2.1_2 进程的状态与转换

进程状态

状态描述资源占用情况
运行态占有CPU并执行指令(单核CPU同一时刻只能有一个进程处于运行态)CPU√,其他资源√
就绪态具备运行条件,但无空闲CPU(等待调度)CPU×,其他资源√
阻塞态等待某事件(如I/O完成)CPU×,其他资源×
创建态正在分配PCB、程序段和数据段-
终止态资源回收中-

状态转换

    stateDiagram-v2
    [*] --> 创建态
    创建态 --> 就绪态
    就绪态 --> 运行态
    运行态 --> 就绪态: 时间片用完
    运行态 --> 阻塞态: 主动等待资源
    阻塞态 --> 就绪态: 事件发生
    运行态 --> 终止态: 异常终止/完成
  

2.1_3 进程控制

进程控制

用原语实现进程控制

原语操作

  1. 更新PCB信息
  2. 将PCB插入目标队列
  3. 资源分配/回收

关键原语

原语类型触发事件操作
创建原语用户登录、作业调度、服务请求申请空白PCB → 分配资源 → 初始化PCB → 加入就绪队列
终止原语正常结束、异常终止、外界干预回收内存 → 撤销PCB
阻塞原语等待资源/其他进程运行态 → 阻塞态(主动)
唤醒原语等待事件发生阻塞态 → 就绪态(被动)
切换原语时间片耗尽、高优先级进程到达保存当前进程上下文 → 恢复目标进程上下文

2.1_4 进程通信

通信方式对比

方式实现原理特点
共享存储分配共享空间,通过PV操作互斥访问- 基于数据结构(低级)
- 基于存储区(高级)
消息传递直接/间接发送消息(含消息头和消息体)- 直接通信:消息挂载到目标进程
- 间接通信:通过信箱中转
管道通信半双工通信,遵循“写满才能读”的互斥规则适用于父子进程通信,容量固定

2.1_5 线程概念与多线程模型

线程 vs 进程

特性线程进程
单位基本CPU执行(调度)单位资源分配单位(不管系统中是否有线程)
系统开销切换代价小(同进程内线程共享进程资源)切换代价大(需保存整个上下文)
并发性同一进程的线程可并发进程间并发
通信方式同进程内 线程 不通过内核进程间通信 需通过内核
状态只有三种状态转化:运行、就绪、阻塞五种:运行、阻塞、就绪、创建、终止
独立运行不能独立运行,依赖进程独立
  • ✅ 一个进程可创建一个或多个线程
    • 进程是资源分配单位,可包含多个执行流(线程)
  • ✅ 一个线程可创建一个或多个线程
    • 线程可派生同级线程(如pthread_create)
  • ❌ 一个线程可创建一个或多个进程
    • 线程共享进程资源,无权直接创建进程(需通过进程级API如fork)
  • ✅ 一个进程可创建一个或多个进程
    • 通过fork/spawn等系统调用实现

线程实现方式

对比维度用户线程 (User-Level Thread)内核线程 (Kernel-Level Thread)组合方式 (Hybrid Model)
实现位置用户空间内核空间用户空间 + 内核空间
OS感知性内核不可感知内核直接管理,设置了一个线程控制块(TCB)用户线程动态绑定内核线程
线程映射模型多对一(多个用户线程→1个内核线程)一对一(1用户线程→1内核线程)多对多(灵活绑定)
创建/销毁开销⚡ 极低(无需内核介入)⚠️ 高(需系统调用)🔄 中等(用户线程管理+内核线程绑定)
阻塞问题🚫 单线程阻塞→整个进程阻塞✅ 单线程阻塞→可调度同进程其他线程✅ 通过内核线程避免完全阻塞
多核并行能力❌ 多个同进程用户线程只有一个运行(其实就是不能一个进程在多个cpu上)✅ 支持多线程并行✅ 根据内核线程支持
调度单位进程级调度线程级调度混合调度(用户线程池+内核线程调度)
  • ✅ 若系统中只有用户级线程,则处理机调度单位是进程
    • 用户线程内核不可感知关键问题解析

线程实现模型

    graph LR
    A[用户级线程 ULT] -->|映射| B[内核级线程 KLT]
    C[多对一模型] --> D[并发度低]
    E[一对一模型] --> F[开销大]
    G[多对多模型] --> H[平衡并发与开销]
  

2.2_1 处理机调度的概念与层次

三级调度对比

调度层次操作对象频率功能
高级调度作业(外存→内存)低创建PCB,决定作业调入/调出
中级调度挂起进程(内存↔外存)中提高内存利用率,管理挂起队列
低级调度进程(分配CPU)高(ms级)最基本的调度,决定进程执行顺序

挂起状态

  • 就绪挂起:进程在外存,可被调入内存执行
  • 阻塞挂起:进程在外存等待事件

2.2_2 进程调度时机与方式

调度触发条件

场景能否调度原因
处理中断过程中×内核态不可抢占
内核程序临界区×访问就绪队列等关键数据结构
原子操作(原语)×操作不可分割
进程主动阻塞/终止√主动放弃CPU
时间片耗尽√被动剥夺CPU

调度方式

类型特点适用场景
非抢占式进程主动放弃CPU批处理系统
抢占式强制剥夺CPU(响应紧急任务)实时/分时系统
最后更新于