第2章 计算机系统结构简介

  1. 计算机系统结构。
    1. 层次结构。
      1. 现代的通用计算机系统是由硬件和软件组成的一种层次式结构。最内层是硬件系统,最外层是使用计算机系统的人,人与硬件系统之间是软件系统。
      2. 软件系统从外到内依次是应用软件、支撑软件和系统软件。它们并不能截然分开,既有分工又有结合。
    2. 系统工作框架。
  2. 硬件环境。
    1. CPU与外设的并行工作。在现代的通用计算机系统中,都是通过输入/输出控制系统完成外围设备与主存储器之间的信息传送。各种外围设备连接在相应的设备控制器上。这些设备控制器又通过通道连接在公共的系统总线上。这种结构允许中央处理器和各种外围设备同时并行工作,它们都能访问共享的主存储器。
    2. 存储体系。现代计算机系统都采用多级存储体系,它包括寄存器、主存储器、高速缓冲存储器和辅助存储器。
      1. 寄存器。寄存器是处理器的组成部分,用来存放处理器的工作信息。
        1. 通用寄存器。存放参加运算的操作数、指令的运算结果等。
        2. 指令寄存器。存放当前从主存储器读出的指令。
        3. 控制寄存器。存放控制信息。
          1. 程序状态字寄存器。
          2. 中断字寄存器。
          3. 基址寄存器。
          4. 限长寄存器。
      2. 主存储器。
        1. 在计算机系统中,任何程序和数据都必须在装入主存储器之后才能对其进行操作。
        2. 主存储器以“字节”为单位进行编址。若干个字节可组成一个“字”。
      3. 高速缓冲存储器。
        1. 通常,处理器执行程序时花在访问主存储器的时间远远大于处理数据的时间。
        2. 为了减少对主存储器的访问,加快程序的执行速度,现代计算机系统往往配置一个高速缓冲存储器(cache)。
        3. 由于程序执行的局部性,在一段时间内会经常访问某一批信息。所以,直接从cache中存取信息的频率会很高。
        4. 处理器对cache的存取速度快于主存储器,cache的存储容量小于主存储器而大于寄存器。于是,位于处理器和主存储器之间的cache起到了缩短存取时间和缓冲存储的作用,故称其为高速缓冲存储器。
      4. 辅助存储器。
        1. 磁盘和磁带是最常用的辅助存储器。
        2. 辅助存储器的优点是容量大且能永久地保存信息,但它们不能被中央处理器直接访问。
        3. 辅助存储器只能与主存储器相互传送信息。
        4. 磁盘有软盘、硬盘和光盘之分。
    3. 保护措施。
      1. 在资源共享的情况下,安全保护相当重要。若有疏忽,一个程序的一个失误,可能影响到多个程序出错。
      2. 一般是硬件提供保护手段和保护装置,操作系统利用这些设施配合硬件实现保护。
      3. 硬件的部分保护措施:
        1. 特权指令。
          1. 不允许用户程序中直接使用的指令称为特权指令,其余的称为非特权指令。
          2. 例如,“启动I/O”、设置时钟、设置控制寄存器等一类可能影响系统安全的指令都属于特权指令。
          3. 特权指令只允许操作系统程序使用,用户程序不得使用特权指令。
          4. 其他一些特权指令也都是对计算机系统中的资源进行控制和管理的指令。
        2. 管态和目态。
          1. 当中央处理器处于管态时可执行包括特权指令在内的一切机器指令,当中央处理器处于目态时不允许执行特权指令。
          2. 操作系统程序占用中央处理器时,应让中央处理器在管态下工作,而用户程序占用中央处理器时,应让中央处理器在目态工作。
        3. 存储保护。
          1. 每个程序在主存中占一个连续的存储空间。
          2. 硬件设置两个寄存器:一个称为“基址寄存器”,另一个称为“限长寄存器”,用来限定用户程序执行时可以访问的主存空间范围。
          3. 中央处理器在目态下执行程序时,对每一个访问主存空间的地址都要进行核查。若关系式 基址寄存器的值≤访问地址≤基址寄存器的值+限长寄存器的值 成立,则允许访问,否则不允许访问。
          4. 中央处理器在管态下执行程序时,对访问主存的地址不进行核查,以允许操作系统对各用户程序进行管理和控制。
  3. 操作系统结构。
    1. 设计目标。
      1. 由于程序的结构是影响程序质量的内在因素,因此,有必要对操作系统的结构进行研究。操作系统的结构设计应追求下列目标。
        1. 正确性。操作系统必须充分估计和把握各种不确定的情况。
        2. 高效性。常驻主存储器的核心程序应遵循少而精的原则,使处理既有效又灵活。
        3. 维护性。在结构设计时,应注意到某些问题,使操作系统容易维护。如增减功能,错误修复等。
        4. 移植性。所谓移植性,是指能否方便地把操作系统从一个硬件环境移植到另一个新的硬件环境之中。为了能方便的移植,在结构设计时,应尽量减少与硬件直接有关的程序量,且将其独立封装。这样,在移植时只要修改这一部分程序即可。如果能采用国际通用的标准C语言或C++语言编写操作系统,那么,只要经过重新编译和设置必要的参数,就可使其适应新的硬件环境。
    2. 操作系统的层次结构。
      1. 操作系统的设计方法有无序模块法、内核扩充法、层次结构法、管程设计法等。
      2. 层次结构法的最大特点是把整体问题局部化。一个大型复杂的操作系统被分解成若干个单向依赖的层次,由各层的正确性来保证整个操作系统的正确性。
      3. 从资源管理的观点看,操作系统的功能从内向外分成四大部分,即处理器管理、存储管理、设备管理和文件管理。
      4. 层次结构的主要优点是有利于系统的设计和调试。实现各层次功能时都可利用较内层提供的功能,不必知道内层功能是怎样实现的,只需知道这些功能可做什么。调试工作可从最内层开始。
    3. UNIX系统的结构。
      1. UNIX是一个交互式的分时操作系统。从结构上看,UNIX可以分成内核层和外壳层两部分。
      2. 内核层是UNIX操作系统的核心。它具有存储管理、文件管理、设备管理、进程管理等功能,以及为外壳层提供服务的系统调用。
      3. 外壳层为用户提供各种操作命令(UNIX把它们称为shell命令)和程序设计环境。外壳层由shell解释程序、支持程序设计的各种语言、编译程序、解释程序、实用程序和系统库等组成。
      4. UNIX的内核程序用C语言和汇编语言编写。它被分成能独立编译和汇编的几十个源代码文件。这些文件按编译方式大致可以分成如下三类。
        1. 汇编语言文件。这些文件大多是与计算机硬件直接相关的部分,如系统启动、设备驱动等。
        2. C语言文件。除汇编语言文件外的内核程序文件均用C语言编写。每个C语言文件包含若干个子程序。C语言文件可以独立编译,经装配程序连接装配后就可运行。
        3. C语言全局变量文件。这类文件含有结构的重要说明,不能独立编译,只能与C语言文件一起编译。
      5. UNIX提供两种程序运行环境,即用户态和核心态。外壳层的程序在用户态运行,内核层的程序在核心态运行。
  4. 操作系统与用户的接口。
    1. 操作控制命令。
      1. 操作系统提供了让联机用户(操作员一级)表示作业执行步骤的手段:操作控制命令。
      2. 在批处理操作系统中为用户提供了另一种控制作业执行步骤的手段:作业控制语言(类似操作控制命令)。允许用户使用作业控制语言事先准备好一份表示作业执行步骤的“作业控制说明书”。
    2. 系统调用。
      1. 操作系统提供了许多不同功能的子程序,供用户程序执行中调用。这些由操作系统提供的子程序称为系统功能调用程序,简称系统调用。
      2. 系统调用应是在管态下执行的程序。
      3. 现代计算机系统的硬件系统都有一条“访管指令”。这是一条可在目态下执行的指令。
      4. 当处理器执行到访管指令时就产生一个中断事件,实现用户程序和系统调用程序之间的转换。
      5. 不同的操作系统提供的系统调用不全相同。大致上可分为以下几类。
        1. 文件操作类。
        2. 资源申请类。
        3. 控制类。执行中的程序可以请求操作系统终止其执行或返回到程序的某一点再继续执行。
        4. 信息维护类。例如设置日历时间、设置文件属性等。
  5. UNIX的用户接口。
    1. shell命令。
      1. UNIX提供的操作控制命令称为shell命令,一组shell命令组成了shell命令语言。
      2. 注册和注销。按Ctrl+D键可注销。
      3. 常用的shell命令。
        1. 命令行一般格式如下:
          命令名 参数1 参数2
        2. mkdir命令。
        3. rmdir命令。删除一个空目录。
        4. cd命令。
        5. pwd命令。
        6. ls命令。
        7. cp命令。
        8. mv命令。重命名。
        9. rm命令。
        10. cat命令。用于查看文本内容。
        11. more命令。可以一屏一屏的显示文件的内容。
      4. 后台执行的shell命令。
        1. UNIX规定,只要在请求后台执行的命令末尾输入字符“&”。系统在执行命令时,若发现末尾有“&”符号,就把实现该条命令功能的程序转入后台执行。
        2. UNIX把一个程序转入后台执行后,不等该程序执行完就立刻返回前台,且显示可以输入新命令的提示符。
      5. shell文件。
        1. 为了完成某个特定任务,有时要连续执行一串命令。UNIX系统允许用户把若干条shell命令编辑成一个文件,来表示一组命令的执行顺序。
        2. 用shell命令编辑成的文件称为shell文件。
        3. 一个shell文件被建立后,假定被命名为shellfile,则可以用下面的方法来执行。
          1. 使用csh命令。csh shellfile(亲测可用)
          2. 把shell文件改成可执行文件。
            1. 使用chmod +x为shell文件建立允许执行的许可,然后直接输入文件名即可。例如执行chmod +x shellfile,然后输入shellfile。(亲测可用)
        4. 在编辑shell文件时,还可以使用带编号的变量。带编号的变量被称为位置参数。文件中最多可以使用9个位置参数,分别是$1,$2,...,$9。用位置参数可以访问命令行中对应的参数,分别代表命令行中第一个参数,第二个参数,...
        5. 用位置参数取代实际参数来编辑shell文件,可提高shell文件的通用性。例如编译C程序。
        6. UNIX系统还提供了if条件语句、case选择语句、for循环语句和while循环语句等控制语句,以用来设计shell文件。
        7. 每个shell文件都可以看做由用户自己创建的一条属于自己的UNIX命令,并可登记在命令列表中。
  6. UNIX系统调用。UNIX的内核为外壳层的用户程序提供了一组系统调用。它们是外壳的应用程序请求UNIX为其服务的唯一形式。
    1. 常用的系统调用。
      1. 有关文件操作的系统调用。
        1. create 建立文件
        2. open 打开文件
        3. read 读文件
        4. write 写文件
        5. close 关闭文件
        6. link 链接一个文件
        7. unlink 解除文件的链接
        8. lseek 设定文件的读写位置
        9. chmod 改变对文件的读写权限
        10. rename 更改文件名
      2. 有关控制类的系统调用。
        1. fork 创建一个子进程
        2. wait 父进程等待子进程终止
        3. exit 终止子进程的执行
        4. exec 启动执行一个指定文件
      3. 有关信号与时间的系统调用。
        1. kill 把信号传送给一个或几个相关进程
        2. sigaction 声明准备接收的信号类型
        3. sigreturn 从信号返回,继续执行被信号中断的操作
        4. stime 设置日历时间
        5. time 获取日历时间
        6. times 获取执行所花费的时间
    2. trap指令。
      1. 在UNIX中,规定用户程序用“trap指令”(UNIX中的访管指令)来请求系统调用。
      2. 16位计算机上的指令由16个二进制位组成。trap指令中高10位用来识别trap指令的操作代码,低6位用来表示系统调用的编号。
      3. 在UNIX中,多数系统调用都要求用户提供参数,参数可存放在称为r0和r1的寄存器中,还可在系统调用trap指令后跟随参数。
    3. 系统调用程序入口表。
      1. 在进行系统调用处理时必须把用户程序提供的参数从用户态的存储区域(用户数据区)传送到核心态的存储区域(系统工作区)。为此,UNIX设置了一张“系统调用程序入口表”。
      2. 表中每个表项的内容都包含有系统调用编号、系统调用所带参数个数、系统调用处理程序入口地址、系统调用名称。各系统调用在表中占用的表项位置就是它们的系统调用编号。
    4. 系统调用实现过程。
      1. 当处理器执行到trap指令时便形成一个中断事件。此时将暂停当前用户程序的执行,而由UNIX系统内核的“trap处理子程序”来处理这个中断事件。
      2. trap处理子程序根据trap指令查找“系统调用程序入口表”,确定当前应提供服务的系统调用程序。

发表评论

电子邮件地址不会被公开。 必填项已用*标注