操作系统
课件:
操作系统运行环境
处理器状态
常见的控制和状态寄存器:
- 程序计数器(PC:program counter), 记录即将要去除的指令的地址
- 指令寄存器(IR:instruction register),记录最近取出的指令
- 程序状态字(PSW:program status word),记录处理器的运行状态如条件码、模式、控制位等信息
需要硬件提供基本运行机制:
- 处理器具有特权级别,能在不同的特权级运行的不同指令集合
- 硬件机制可将OS与用户程序隔离
现代处理器通常将CPU状态设计划分为多种状态, 在PSW中专门设置以为,根据运行程序对资源和指令的使用权限而设置不同的CPU状态。
操作系统需要
两种CPU状态:
内核态(Kernel Mode):运行操作系统程序
用户态(User Mode):运行用户程序
特权指令 只能由操作系统使用,用户程序不能使用的指令
非特权指令 用户程序可以使用的指令
x86支持4个处理器特权级别:R0,R1,R2和R3, R0相当于内核态,R3相当于用户态,R1和R2介于两者之间,不同级别能够运行的指令集合不同。
CPU状态之间的转换
用户态 -> 内核态
唯一途径: 中断/异常/陷入机制
内核态 -> 用户态
设置程序状态字PSW
中断与异常机制
中断/异常的概念
- CPU对系统发生的某个事件作出的一种反应
- CPU暂停正在执行的程序,把刘现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序
特点:
- 是随机发生的
- 是自动处理的
- 是可以恢复的
中断: 为了支持CPU和设备之间的并行操作。当设备完成I/O后,通过向CPU发送中断报告,让CPU界定如何处理后续的事情。包括:
- I/O中断
- 时钟中断(如CPU时间片到了)
- 硬件故障
异常: 表示CPU执行指令时本身出现的问题,如算数溢出,访问内存地址时越界或者执行了陷入指令等。这时硬件改变了CPU当前的执行流程,转到相应的错误处理程序或异常处理程序或系统调用。包括:
- 系统调用
- 页故障/页错误
- 保护性异常
- 断点指令
- 其他程序性异常
中断与异常的工作原理
- 硬件该做什么事? --- 中断/异常响应
- 捕获中断源发出的中断/异常请求,以一定的方式响应,将处理器控制权交给特定的处理程序
- 软件要做什么事? --- 中断/异常处理程序
- 识别中断/异常类型并完成相应的处理
中断与异常的工作原理
中断响应过程示意
CPU在每条执行周期的最后扫描中断寄存器,查看是否有中断信号。
中断响应过程示意
系统调用机制
系统调用是操作系统提供给编程人员的唯一接口,使得CPU状态从用户态陷入内核态。
进程线程模型
进程的定义
进程是具有独立功能的程序,关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
- 程序的一次执行过程
- 是正在运行程序的抽象
- 系统资源以进程为单位分配,如内存,文件等,每个进程具有独立的地址空间
- 操作系统将CPU调度给需要的进程
进程控制块PCB(Process Control Block)
- 操作系统用于管理控制进程的一个专门数据结构
- 记录进程的各种属性,描述进程的动态变化过程
- 进程表: 所有进程的PCB集合
进程控制块包含的信息:
- 进程描述信息,如进程ID,用户标示符,进程组关系
- 进程控制信息,如果优先级,代码入口地址
- 所拥有的资源和使用情况,如虚拟地址空间的状况,打开文件列表
- CPU现场信息,寄存器值(PC,PSW,栈指针等)
进程状态和状态转换
三种基本状态:
- 运行态(Running): 占有CPU,并在CPU上运行
- 就绪态(Ready):已经具备运行的条件,但是由于没有空闲CPU而暂时不能运行
- 等待态(Waiting/Blocked):又称为阻塞态,因等待某一事件而暂时不能运行
三状态模型和状态转换
操作系统为每一类进程建立一个或多个队列,队列元素为PCB,伴随进程状态的改变,其PCB从一个队列进入另一个队列。
进程控制
进程的创建
给新进程分配一个唯一标示以及进程控制块
为进程分配地址空间
初始化进程控制块,设置默认值
设置相应的队列指针
结束进程
- 收回进程所占有的资源
- 撤销该进程的PCB
进程阻塞
- 处于运行状态的进程,在其运行过程中 期待某一事件发生,如等待键盘输入、等待 磁盘数据传输完成、等待其它进程发送消息, 当被等待的事件未发生时,由进程自己执行 阻塞原语,使自己由运行态变为阻塞态
Unix的fork()实现
为子进程分配一个空闲的进程描述符 proc 结构
分配给子进程唯一标识pid
以一次一页的方式复制父进程地址空间
从父进程处继承共享资源,如打开的文件和当前工
作目录等
将子进程的状态设为就绪,插入到就绪队列
对子进程返回标识符0
向父进程返回子进程的pid
Linux采用了写时复制技术COW(Copy-On-Write)加快创建进程。
进程地址空间
上下文切换
将CPU硬件从一个进程切换到另一个进程的过程称为上下文切换。
- 进程运行时,其硬件状态保存在CPU上的寄存器中。寄存器:程序计数器,程序状态字寄存器,栈指针,通用寄存器和其他控制寄存器的值
- 进程不运行时,这些寄存器的值保存在进程控制块PCB中
- 当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中
线程
http://www.chinesemooc.org/live/685646