操作系统--操作系统运行环境与运行机制

2. 操作系统运行环境与运行机制

    操作系统的主要工作包括程序的执行、完成与体系结构相关的工作、完成应用程序所需的共性任务。

2.1 操作系统运行环境

2.1.1 处理器状态(模式)

     CPU是由运算器、控制器、一系列的寄存器以及高速缓存构成。寄存器分为两类:用户可见寄存器和控制、状态寄存器。其中,用户可见寄存器是高级语言通过优化算法分配并使用之,以减少程序访问内存的次数。控制、状态寄存器是用于控制处理器的操作,在某些特权级别下可以访问、修改,通常由操作系统代码使用。

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

1)程序计数器(PC:Program Counter),记录将要取出的指令的地址

2)指令寄存器(IR:Instruction Register),记录最近取出的指令

3)程序状态字(PSW:Program Status Word),记录处理器的运行状态,如,条件码、模式、控制位等信息。

1. 处理器状态分类

     现代处理器通常将CPU状态设计划分为两种、三种或四种。在程序状态字寄存器PSW中专门设置一位(或两位),根据运行程序对资源和指令的使用权限而设置不同的CPU状态。

    操作系统需要两种CPU状态:内核态(Kernel Mode)和用户态(User Mode),内核态用于运行操作系统程序,用户态用于运行用户程序。CPU的两个状态可以执行不同的指令集合,所以可以指令集合划分为两类:特权(privilege)指令和非特权指令,特权指令是指只能有操作系统程序使用,用户程序不能使用的指令,非特权指令是指操作系统程序和用户程序都可以使用的指令。

    思考:下面哪些指令是特权指令?哪些指令是非特权指令?

启动I/O  控制转移  内存清零   修改程序状态字  设置时钟  算术运算  允许/禁止中断  访管指令  取数指令  停机

    特权指令:启动I/O、内存清零、修改程序状态字、设置时钟、允许/禁止中断、停机

    非特权指令:控制转移、算术运算、访管指令、取数指令

    x86系列处理器支持4个处理器特权级别,我们成为特权环:R0、R1、R2和R3。从R0到R3的特权级别由高到低,R0能够运行操作系统的关键代码,相当于内核态,R1能够运行设备驱动程序和一些I/O处理程序,R2能够处理受保护的共享的代码,例如一些语言编译环境,R3是给用户程序使用的相当于用户态。

    目前大多数基于x86处理器的操作系统,只选用了R0和R3两个特权级别。 

2. 处理器状态切换

    用户态-->内核态    唯一途径:中断/异常/陷入机制

    内核态-->用户态    设置程序状态字PSW

    一条特殊的指令:陷入指令(又称访管指令),提供给用户程序的接口,用于调用操作系统的功能(服务)。例如:int,trap,syscall,systenter/sysexit

2.1.2 中断与异常机制

1.  中断/异常简介

    中断与异常是CPU对系统发生的某个事件做出的一种反应。事件的发生改变了CPU的控制流,CPU暂停正在执行的程序,保留现场后自动去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。

    中断/异常机制的特点:随机发生、自动处理、可恢复。

    中断的引入是为了支持CPU和设备之间的并行操作,异常的引入是为了表示CPU执行指令时本身出现的问题。中断包括I/O中断、时钟中断、硬件故障。异常包括系统调用、页故障/页错误、保护性异常、断点异常、其他程序性异常。

2.  中断/异常机制工作原理

    中断/异常机制是现代计算机系统的核心机制之一,主要是硬件和软件互相配合完成的。在这个机制工作过程中,硬件用来捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交个特定的处理程序,这个过程叫做中断/异常响应。软件用于识别中断/异常类型并完成相应的处理,这个过程叫做中断/异常处理程序。

1)中断响应过程

    中断响应包括发现中断、接收终端的过程,有中断硬件部件完成。处理器控制部件中设有中断寄存器,用于保存接收的中断信号。


    中断向量表是由若干中断向量组成,中断向量是一个内存单元,里面存放中断处理程序入口地址和程序运行时所需的处理机状态字。


2)中断处理程序

     设计操作系统时,为每一类中断/异常事件编好响应的处理程序,并设置好中断向量表。系统运行时若响应中断,中断硬件部件将CPU控制权给中断处理程序,中断处理程序会做以下事情:保存相关寄存器信息,分析中断/异常的具体原因,执行相应的处理功能,恢复现场,返回被事件打断的程序。

     以设备输入输出中断为例:



3. 中断异常实例


2.1.3 系统调用机制

1. 系统调用简介

    系统调用是操作系统提供给编程人员的唯一接口,可以使CPU状态从用户态陷入内核态,从而用户在编程时可以调用操作系统功能,每个操作系统都提供几百种系统调用(进程控制、进程通信、文件使用、目录操作、设备管理、信息维护等)。

    系统调用与库函数、API以及内核函数有什么关系呢?


2. 系统调用机制设计


    如何实现用户程序的参数传递给内核



3. 系统调用的执行过程

    当CPU执行到特殊的陷入指令时:

1)中断/异常机制:硬件保护现场;通过查询中断向量表把控制权转给系统调用总入口程序。

2)系统调用总入口程序:保存现场;将参数保存在内核堆栈中;通过查系统调用表把控制权转给相应的系统调用的处理程序或内核函数

3)执行系统调用程序

4)恢复现场,返回用户程序

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值