操作系统

课件:

  1. 操作系统概述
  2. 操作系统运行环境
  3. 进程线程模型
  4. 处理器调度
  5. 同步机制(1)
  6. 同步机制(2)
  7. 存储模型(1)
  8. 存储模型(2)
  9. 文件系统(1)
  10. 文件系统(2)
  11. I/O系统
  12. 死锁

操作系统运行环境

处理器状态

常见的控制和状态寄存器:

  • 程序计数器(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

最近更新: 4/12/2020, 11:51:34 AM