计算系统概述
- IO设备可以并行执行
- 每个设备控制器都有一个本地缓冲区
- 每个设备控制器类型都有一个操作系统设备驱动程序来管理它
- 控制器 :硬件
- 驱动程序:操作系统中,软件
- CPU将数据从主存移动到本地缓冲区,或从存储移动到本地缓冲区
- IO从设备到控制器的本地缓冲区
- 设备控制器通过引起终端来通知CPU它已完成其操作
三个接口
- API(Application Programming Interface):软件层面给程序员使用的接口,定义函数调用规范(如POSIX API、Win32 API)
- ABI(Application Binary Interface):二进制层面接口,规定机器码如何调用函数(如寄存器用法、栈布局、字节序),确保不同编译器编译的程序能互相调用
- ISA(Instruction Set Architecture,指令集架构):硬件和软件之间的最底层接口,定义CPU支持的指令集(如x86、ARM、MIPS)
中断
- 目的是提高计算系统的性能
- 中断向量表保存了所有服务例程地址的中断向量
- 操作系统是中断驱动的
IO技术
- 编程式IO
- 中断驱动的IO
- 速度取决于处理器测试和服务于设备的速率
- DMA
- 请求读取或写入
- 所涉及的IO设备地址
- 需要设置好IO设备的缓冲、指针和计数器
- 每个块只生成一个中断,而不是每个字节生成一个中断
高速缓存(计组的东西)
- 时间局部性:最近被访问的项在不久的将来很可能再次被访问(如循环中的变量)
- 空间局部性:如果一个项被访问,则它附近的其他项也很可能被访问(如顺序执行的指令、数组访问)
- 存储结构的设计体现了空间局部性
- 对操作系统而言是不可见的
- 与其他内存管理硬件交互
- 处理器每执行一条指令至少进行一次内存访问
- 处理器的执行速度受到内存访问周期时间的限制
- 利用小而快的存储实现局部性访问,减少内存访问
- 内存墙:内存成为瓶颈
- 涉及“空间置换”的都可以用LRU(IO或内存)
- 写策略:全写法、回写法
操作系统执行
- 引导程序//TODO补充UEFI和BIOS的区别与联系
- 开机后第一个运行的程序
- 负责检测硬件、选择启动设备
- 内核加载
- 引导程序从启动设备读取内核代码到内存
- 跳转到内核入口点,开始执行内核
- 启动系统守护进程
- 定义:运行在后台的系统服务进程,提供系统级服务
- 特点:长期运行、无交互界面、随系统启动
- 示例:日志服务(syslog)、打印服务(cups)、网络服务(sshd)、计划任务(cron)
- 内核初始化完成后,启动后台服务进程
- 这些服务为用户程序提供支持
- 内核中断驱动(软硬件)
- 系统进入正常运行状态
- 等待处理硬件中断、系统调用等事件
用户态和内核态
-
内核态(Kernel Mode):最高权限,可访问所有硬件和内存,运行操作系统内核代码
-
用户态(User Mode):受限权限,只能访问用户空间,运行应用程序代码,用户不能显式将模式位设为内核态
-
切换到内核态的方式:系统调用(算一种ABI、本质软中断)、异常、硬件中断
-
为什么需要分离:安全(保护硬件)、稳定(统一管理资源)、效率(简化应用)
比如对控制寄存器的修改是特权指令,只有进入内核态才可执行
系统调用
- 定义:用户程序请求操作系统内核提供服务的编程接口
- 触发方式:软中断(trap),CPU从用户态切换到内核态
- 工作流程:用户程序调用 → trap指令 → 查找系统调用号 → 执行内核服务例程 → 返回结果
- 示例:read、write、open、fork、execve、malloc(底层)
虚拟化

- 特权多于用户态,少于内核态
- 功能:
- 允许OS在其他OS中运行应用程序
- 源CPU类型不同于目标类型,使用仿真
- 操作系统和虚拟机里的Guest系统都被本机编译
- 在没有多个OS情况下为多个OS开发应用
- 用于多个应用程序之间的隔离
定时器
- 进程调度:实现时间片轮转,确保CPU公平分配给各进程
- 系统时钟:维护系统时间和日期
- 定时任务:触发延迟操作或周期性任务(如cron、setTimeout)
- 超时检测:检测IO操作、进程等待的超时
- 性能统计:记录CPU使用时间、进程运行时间
- 定时器是硬件设备 + 软件配合
进程管理

- 进程是正在执行的程序:程序是被动的实体,进程是活跃的实体
- 进程需要资源来完成其任务
- CPU、内存、IO、文件
- 初始化数据
- 进程终止需要回收任何可重用资源
- 多线程进程每个线程有一个PC
- 一个程序可以对应多个进程(如微信多开)
- 一个进程可以加载不同程序
- 当进程调用 exec() 系统调用时:
- 保持不变:
- PID(进程ID)
- 打开的文件描述符(除非设置close-on-exec)
- 内存映射
- 进程资源(CPU时间、优先级等)
- 线程(如果是多线程,exec后只剩主线程)
- 被替换:
- 代码段(.text)
- 数据段(.data)
- 堆(heap)
- 栈(stack)
- 就像换工作时:你的工牌、工位、办公用品(PID、资源)不变,但工作内容和工作代码(程序)变了
- 课件P137的ls例子:都是ls一个程序,但由于参数不同有两个进程,有不同进程id
- 操作系统负责与进程管理相关的以下活动:
- 创建删除用户、系统进程
- 暂停和恢复进程
- 提供进程同步机制
- 为进程通信提供机制
- 提供死锁处理机制
内存管理
- 要执行程序,所有(或部分)指令必须在内存中
- 程序所需的全部(或部分)数据必须在内存中
- 内存管理决定内存中的内容和时间
- 优化CPU利用率和计算机对用户的响应
- 内存管理活动
- 跟踪内存的哪些部分当前正在使用以及由谁使用
- 决定将哪些进程(或其部分)和数据移入和移出内存
- 根据需要分配和释放内存空间
- 每个进程有自己的一组全局变量、局部变量、分配的内存
文件系统管理
- OS提供了信息存储的统一逻辑视图
- 物理属性抽象到逻辑存储单元文件
- 文件通常被组织到目录中
- 存在访问控制
- 系统活动包括
- 创建删除文件、目录
计算环境
- 传统
- 可移动
- 客户端服务器
- 点对点
- 云计算
- 实时嵌入式