zoukankan      html  css  js  c++  java
  • 操作系统的运行环境

    1.处理器状态

      中央处理器(CPU):处理器由运算器、控制器以及一系列的寄存器以及高速缓存装置组成。

      两类寄存器:1.用户可见寄存器:高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数;

            2.控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用。

     典型的控制和状态寄存器呢包括了程序计数器 PC,那么这里头记录了要取出的指令的地址。 指令寄存器记录了最近取出的指令。 程序状态字寄存器 PSW,它记录了 CPU 的运行状态, 一些条件码、 模式、 控制位等信息。

      通常,我们对硬件希望提供一个基本运行机制,也就是CPU有一个特权级别,在不同的级别下可以运行不同的指令集合。通过分配不同的指令集合供操作系统和用户进程使用。在一个指令系统中,只能够有操作系统来执行的叫做特权指令,另外一类就是非特权指令。

      举一个例子 X86 系列处理器,它提供了四个 特权级别。 我们把它称之为特权环 R0, R1, R2 和 R3 那么从 R0 到 R3 它的特权的能力是由高到底的。 那么硬件设计者 设计了这样不同的特权级别 主要的目的呢,是希望在不同的级别呢能够运行不同的 程序。 比如说 R0 是希望能运行操作系统的一些关键代码 所以 R0 相当于内核态。 R1 呢 是运行设备驱动程序和一些 I/O 处理的历程 R2 呢,是运行一些受保护 共享的代码,比如说一些语言编译环境 而 R0 呢,R3 呢是给 用户程序使用的。 那么 R3 呢就相当于用户态 而 R1 和 R2 呢实际上是介乎于两者之间 那么不同的这种特权级别 其实就是运行指令的集合是不一样的 我们来看一下 R0 实际上是运行了所有的指令 而 R3 是运行的一个最小的子集 那么当然了,我们刚才说了,操作系统需要两个状态 所以呢通常情况下,大部分的 操作系统我们所熟知的,Linux 啊,Windows 啊,Unix 啊 都是只选择了 R0 和 R3 这两个特权级别 来使用。

    2.中断和异常

      上面说到,处理器一般选择两种状态:用户态和内核态。那么,我们是如何实现从用户态到内核态之间的互相切换呢?

      从用户态到内核态的唯一途径就是通过中断或者异常,从内核态切换到用户态就是通过寄存器中的的设置程序状态子PSW。

      最早的时候,中断的引入是为了支持CPU与外部设备之间实现并行的一种能力,如果没有中断,那么CPU就要负责对所有设备进行工作管理,有了中断,CPU会启用输入输出等工作,启动完成后,设备便可以自己独立工作,CPU再转去处理一些与输入输出无关的事情,当输入输出动作完成后,就会向CPU进行汇报,CPU根据这次输入输出的结果来判断下一步的动作。

     异常其实也是一种中断,主要是CPU执行过程中,遇到了一些自身性的问题,例如算术溢出除0、栈溢出等等,会使CPU转向对这次的异常进行处理,决定下一步的动作。

      通常,中断也被称为外中断,异常被称为内中断。

  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/zz1314/p/10544594.html
Copyright © 2011-2022 走看看