OS- -计算机硬件简介

文章目录

  • OS- -计算机硬件简介
    • 计算机硬件简介
      • 计算机硬件简介
      • CPU
      • 多线程和多核芯片
      • 内存
      • 寄存器
      • 高速缓存
      • 主存
      • 磁盘
      • I/O设备
      • 总线
      • 计算机启动过程

计算机硬件简介

现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输 出设备构成。

然而,程序员不会直接和这些硬件打交道,而且每位程序员不可能会掌握所有计算机系统的细节,这样 我们就不用再编写代码了

所以 在硬件的基础之上,计算机安装了一层软件,这层软件能够通过响应用 户输入的指令达到控制硬件的效果,从而满足用户需求,这种软件称之为操作系统;它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型。

我们一般常见的操作系统主要有Windowss Linux、FreeBSD或OS X ,这种带有图形界面的操作系 统被称为图形用户界面(Graphical User Interface, GUI),而基于文本、命令行的通常称为Shell

下面是我们所要探讨的操作系统的部件

这是一个操作系统的简化图:

  • 最下面的是硬件,硬件包括芯片、电路板、磁盘、键盘、显示器等我们上 面提到的设备,在硬件之上是软件。
  • 大部分计算机有两种运行模式:内核态 和 用户态
  • 软件中最基 础的部分是操作系统,它运行在内核态中,内核态也称为管态和核心态,它们都是操作系统 的运行状态,只不过是不同的叫法而已。操作系统具有硬件的访问权,可以执行机器能够运行的任何指 令。
  • 软件的其余部分运行在 用户态 下。
  • 用户接口程序(shell或者GUI)处于用户态中,并且它们位于用户态的最低层,允许用户运行其他程 序,例如Web浏览器、电子邮件阅读器、音乐播放器等。
  • 而且,越靠近用户态的应用程序越容易编 写,如果你不喜欢某个电子邮件阅读器你可以重新写一个或者换一个,但你不能自行写一个操作系统或 者是中断处理程序。这个程序由硬件保护,防止外部对其进行修改

计算机硬件简介

操作系统与运行操作系统的内核硬件关系密切。操作系统扩展了计算机指令集并管理计算机的资源。

因 此,操作系统因此必须足够了解硬件的运行,这里我们先简要介绍一下现代计算机中的计算机硬件。

从概念上来看,一台简单的个人电脑可以被抽象为上面这种相似的模型,CPU.内存、I/O设备都和总 线串联起来并通过总线与其他设备进行通信;现代操作系统有着更为复杂的结构,会设计很多条总线

CPU

  • CPU是计算机的大脑,它主要和内存进行交互,从内存中提取指令并执行它一个CPU的执行周期是从内存中提取第一条指令、解码并决定它的类型和操作数,执行,然后再提取、解码执行后续的指令。 重复该循环直到程序运行完毕。
  • 每个CPU都有一组可以执行的特定指令集。因此,x86的CPU不能执行ARM的程序并且ARM的 CPU也不能执行x86的程序。
  • 由于访问内存获取执行或数据要比执行指令花费的时间长,因此所有的 CPU内部都会包含一些寄存器来保存关键变量和临时结果。
  • 因此,在指令集中通常会有一些指令用于 把关键字从内存中加载到寄存器中,以及把关键字从寄存器存入到内存中。
  • 还有一些其他的指令会把来 自寄存器和内存的操作数进行组合,例如add操作就会把两个操作数相加并把结果保存到内存中。
  • 除了用于保存变量和临时结果的通用寄存器外,大多数计算机还具有几个特殊的寄存器,这些寄存器对 于程序员是可见的。
  • 其中之一就是程序计数器(program counter),程序计数器会指示下一条需要从 内存提取指令的地址。提取指令后,程序计数器将更新为下一条需要提取的地址
  • 另一个寄存器是 堆栈指针(stack pointer),它指向内存中当前栈的顶端。堆栈指针会包含输入过程 中的有关参数、局部变量以及没有保存在寄存器中的临时变量。
  • 还有一个寄存器是PSW(Program Status Word)程序状态字寄存器,这个寄存器是由操作系统维护 的8个字节(64位)long类型的数据集合。它会跟踪当前系统的状态。除非发生系统结束,否则我们可以 忽略PSWO用户程序通常可以读取整个PSW,但通常只能写入其某些字段。PSW在系统调用和I/O 中起着重要作用。
  • 操作系统必须了解所有的寄存器。在时间多路复用(time multiplexing)的CPU中,操作系统往往 停止运行一个程序转而运行另外一个。每次当操作系统停止运行一个程序时,操作系统会保存所有寄存 器的值,以便于后续重新运行该程序
  • 为了提升性能,CPU设计人员早就放弃了同时去读取、解码和执行一条简单的指令。许多现代的CPU 都具有同时读取多条指令的机制
  • 例如,一个CPU可能会有单独访问、解码和执行单元,所以,当 CPU执行第N条指令时,还可以对N + 1条指令解码,还可以读取N +2条指令。像这样的组织形式 被称为 流水线(pipeline)
  • 在上面这个设计中,存在多个执行单元,例如,一个用来进行整数运算、一个用来浮点数运算、一个用 来布尔运算。两个或者更多的指令被一次性取出、解码并放入缓冲区中,直至它们执行完毕。
  • 只要一个 执行单元空闲,就会去检查缓冲区是否有可以执行的指令。如果有,就把指令从缓冲区中取出并执行。 这种设计的含义是应用程序通常是无序执行的
  • 在大多数情况下,硬件负责保证这种运算的结果与顺序 执行指令时的结果相同。
  • 除了用在嵌入式系统中非常简单的CPU之外,多数CPU都有两种模式,即前面已经提到的内核态和 用户态。
  • 通常情况下,PSW寄存器中的一个二进制位会控制当前状态是内核态还是用户态。当运行在 内核态时,CPU能够执行任何指令集中的指令并且能够使用硬件的功能
  • 台式机和服务器上,操作 系统通常以内核模式运行,从而可以访问完整的硬件。
  • 大多数嵌入式系统中,一部分运行在内核态 下,剩下的一部分运行在用户态下。
  • 户应用程序通常运行在用户态下,在用户态下,CPU只能执行指令集中的一部分并且只能访问硬件 的一部分功能
  • 一般情况下,在用户态下,有关I/O和内存保护的所有指令是禁止执行的。当然,设置 PSW模式的二进制位为内核态也是禁止的。
  • 为了获取操作系统的服务,用户程序必须使用 系统调用(system call),系统调用会转换为内核态并 且调用操作系统
  • TRAP指令用于把用户态切换为内核态并启用操作系统。当有关工作完成之后,在 系统调用后面的指令会把控制权交给用户程序
  • 需要注意的是操作系统在进行系统调用时会存在陷阱。大部分的陷阱会导致硬件发出警告,比如说试图 被零除或浮点下溢等
  • 在所有的情况下,操作系统都能得到控制权并决定如何处理异常情况。有时, 由于出错的原因,程序不得不停止。

多线程和多核芯片

  • Intel Pentinum 4也就是奔腾处理器引入了被称为多线程(multithreading)或 超线程 (hyperthreading, Intel公司的命名)的特性,x86处理器和其他一些CPU芯片就是这样做的。
  • 包括SSPARC、Power5s Intel Xeon和Intel Core系列。近似地说,多线程允许CPU保持两个不 同的线程状态并且在纳秒级(nanosecond)的时间完成切换
  • 线程是一种轻量级的进程,例如,如果一个进程想要从内存中读取指令(这通常会经历几个时钟周期),多线程CPU则可以 切换至另一个线程。
  • 多线程不会提供真正的并行处理。在一个时刻只有一个进程在运行。
  • 对于操作系统来讲,多线程是有意义的,因为每个线程对操作系统来说都像是一个单个的CPU。比如 一个有两个CPU的操作系统,并且每个CPU运行两个线程,那么这对于操作系统来说就可能是4个 CPU。
  • 除了多线程之外,现在许多CPU芯片上都具有四个、八个或更多完整的处理器或内核。多核芯片在其 上有效地承载了四个微型芯片,每个微型芯片都有自己的独立CPU。

带有共享L2缓存的4核芯片:

带有分离L2缓存的4核芯片:

  • 如果要说在绝对核心数量方面,没有什么能赢过现代GPU(Graphics Processing Unit) , GPU是 指由成千上万个微核组成的处理器。它们擅长处理大量并行的简单计算。

内存

计算机中第二个主要的组件就是内存。理想情况下,内存应该非常快速(比执行一条指令要快,从而不会 拖慢CPU执行效率),而且足够大且便宜,但是目前的技术手段无法满足三者的需求。

于是采用了不同 的处理方式,存储器系统采用一种分层次的结构

  • 顶层的存储器速度最高,但是容量最小,成本非常高,层级结构越向下,其访问效率越慢,容量越大, 但是造价也就越便宜。

寄存器

  • 存储器的顶层是CPU中的寄存器,它们用和CPU 一样的材料制成,所以和CPU 一样快。

程序必须 在软件中自行管理这些寄存器(即决定如何使用它们)

高速缓存

  • 位于寄存器下面的是高速缓存,它多数由硬件控制。主存被分割成 为64 字节,内存地址的0 - 63对应高速缓存行0 ,地址64 - 127对应高速缓存行的1,等等。
  • 使用最频繁 的高速缓存行保存在位于CPU内部或非常靠近CPU的高速缓存中。当应用程序需要从内存中读取关 键词的时候,高速缓存的硬件会检查所需要的高速缓存行是否在高速缓存中
  • 如果在的话,那么这就 是高速缓存命中(cache hit)。高速缓存满足了该请求,并且没有通过总线将内存请求发送到主内 存
  • 高速缓存命中通常需要花费两个时钟周期。缓存未命中需要从内存中提取,这会消耗大量的时间。
  • 高速缓存行会限制容量的大小因为它的造价非常昂贵。有一些机器会有两个或者三个高速缓存级别,每 一级高速缓存比前一级慢且容量更大。
  • 缓存在计算机很多领域都扮演了非常重要的角色,不仅仅是RAM缓存行。

随机存储器(RAM):内存中最重要的一种,表示既可以从中读取数据,也可以写入数据。当机 器关闭时,内存中的信息会 丢失。

  • 大量的可用资源被划分为小的部分,这些可用资源的一部分会获得比其他资源更频繁的使用权,缓存经 常用来提升性能。操作系统无时无刻的不在使用缓存。
  • 例如,大多数操作系统在主机内存中保留(部 分)频繁使用的文件,以避免重复从磁盘重复获取。举个例子,类似于/home/ast/projects/minix3/src/kernel/clock. c这样的场路径名转换成的文件所在磁盘地址 的结果也可以保存缓存中,以避免重复寻址。
  • 另外,当一个Web页面(URL)的地址转换为网络地址(IP 地址)后,这个转换结果也可以缓存起来供将来使用。

在任何缓存系统中,都会有下面这几个噬需解决的问题

  • •何时把新的内容放进缓存
  • •把新的内容应该放在缓存的哪一行
  • •在需要空闲空间时,应该把哪块内容从缓存中移除
  • •应该把移除的内容放在某个较大存储器的何处
  • 并不是每个问题都与每种缓存情况有关。对于CPU缓存中的主存缓存行,当有缓存未命中时,就会调 入新的内容。通常通过所引用内存地址的高位计算应该使用的缓存行
  • 缓存是解决问题的一种好的方式,所以现代CPU设计了两种缓存。第一级缓存或者说是LI cache 总是位于CPU内部,用来将已解码的指令调入CPU的执行引擎。对于那些频繁使用的关键字,多数 芯片有第二个L1 cache。典型的L1 cache的大小为16 KB
  • 另外往往还设有二级缓存,也就是L2 cache ,用来存放最近使用过的关键字,一般是兆字节为单位L1 cache和L2 cache最大的不 同在于是否存在延迟。访问L1 cache没有任何的延迟,然而访问L2 cache会有1 - 2个时钟周期的 延后
  • 什么是时钟周期?计算机处理器或CPU的速度由时钟周期来确定,该时钟周期是振荡器两个脉冲之间的时间量
  • 一般而言,每秒脉冲数越高,计算机处理器处理信息的速度就越快。时钟速度以
    Hz为单位测量,通常为兆赫(MHz)或千兆赫(GHz)。
  • 例如,一个4 GHz处理器每秒执行 4,000,000,000个时钟周期。
  • 计算机处理器可以在每个时钟周期执行一条或多条指令,这具体取决于处理器的类型。
  • 早期的计算机处理器和较慢的CPU在每个时钟周期只能执行一条指令,而现代处理器在每个时钟周期可以 执行多条指令。

主存

  • 在上面的层次结构中再下一层是主存,这是内存系统的主力军,主存通常叫做RAM(Random Access Memory)
  • 由于1950年代和1960年代的计算机使用微小的可磁化铁氧体磁芯作为主存储器,因此旧时有时将其称为核心存储器。所有不能再高速缓存中得到满足的内存访问请求都会转往主存中。
  • 除了主存之外,许多计算机还具有少量的非易失性随机存取存储器。它们与RAM不同,在电源断电 后,非易失性随机访问存储器并不会丢失内容。
  • R0M(Read Only Memory)中的内容一旦存储后就不 会再被修改。它速度非常快而且便宜。(如果有人问你,有没有什么又快又便宜的内存设备,那就是ROM 了)
  • 在计算机中,用于启动计算机的引导加载模块(也就是bootstrap )就存放在ROM中。另外,一 些I/O卡也采用ROM处理底层设备控制。
  • EEPROM(Electrically Erasable PROM)和闪存(flash memory)也是非易失性的,但是与 ROM相反,它们可以擦除和重写。不过重写它们需要比写入RAM更多的时间,所以它们的使用方式 与ROM相同,但是与ROM不同的是他们可以通过重写字段来纠正程序中出现的错误。
  • 闪存也通常用来作为便携性的存储媒介。闪存是数码相机中的胶卷,是便携式音乐播放器的磁盘。闪存 的速度介于RAM和磁盘之间。另外,与磁盘存储器不同的是,如果闪存擦除的次数太多,会出现磨 损。
  • 还有一类是CMOS,它是易失性的。许多计算机都会使用CMOS存储器保持当前时间和日期。

磁盘

  • 下一个层次是磁盘(硬盘),磁盘同RAM相比,每个二进制位的成本低了两个数量级,而且经常也有 两个数量级大的容量。
  • 磁盘唯一的问题是随机访问数据时间大约慢了三个数量级。磁盘访问慢的原因是 因为磁盘的构造不同

  • 磁盘是一种机械装置,在一个磁盘中有一个或多个金属盘片,它们以5400rpm、7200rpm. 10800rpm 或更高的速度旋转。
  • 从边缘开始有一个机械臂悬横在盘面上,这类似于老式播放塑料唱片33转唱机上 的拾音臂。
  • 信息会写在磁盘一系列的同心圆上。在任意一个给定臂的位置,每个磁头可以读取一段环形 区域,称为磁道(track)把一个给定臂的位置上的所有磁道合并起来,组成了一个柱面(cylinder)

  • 每个磁道划分若干扇区,扇区的值是512字节。在现代磁盘中,较外部的柱面比较内部的柱面有更多的 扇区。
  • 机械臂从一个柱面移动到相邻的柱面大约需要1ms。而随机移到一个柱面的典型时间为5ms至 10ms,具体情况以驱动器为准。
  • 一旦磁臂到达正确的磁道上,驱动器必须等待所需的扇区旋转到磁头 之下,就开始读写,低端硬盘的速率是50MB/S ,而高速磁盘的速率是160MB/S

需要注意,固态硬盘(Solid State Disk, SSD)不是磁盘,固态硬盘并没有可以移动的部分,外形也不像唱片,并且数据是存储在存储器(闪存)中,与磁盘唯一的相似之处就是它也存储了 大量即使在电源关闭也不会丢失的数据。

  • 许多计算机支持一种著名的虚拟内存机制,这种机制使得期望运行的存储空间大于实际的物理存储空 间。
  • 方法是将程序放在磁盘上,而将主存作为一部分缓存,用来保存最频繁使用的部分程序,这种机 制需要快速映像内存地址,用来把程序生成的地址转换为有关字节在RAM中的物理地址
  • 这种映像由 CPU中的一个称为 存储器管理单元(Memory Management Unit, MMU)的部件来完成。

  • 缓存和MMU的出现是对系统的性能有很重要的影响,在多道程序系统中,从一个程序切换到另一个程 序的机制称为上下文切换(context switch),对来自缓存中的资源进行修改并把其写回磁盘是很有 必要的

I/O设备

  • CPU和存储器不是操作系统需要管理的全部,I/O设备也与操作系统关系密切
  • I/O设备一般包括两个部分:设备控制器和设备本身。控制器本身是一块芯片或者一组芯片,它能 够控制物理设备。它能够接收操作系统的指令,例如,从设备中读取数据并完成数据的处理。
  • 在许多情况下,实际控制设备的过程是非常复杂而且存在诸多细节。因此控制器的工作就是为操作系统 提供一个更简单(但仍然非常复杂)的接口。也就是屏蔽物理细节。
  • 任何复杂的东西都可以加一层代理 来解决,这是计算机或者人类社会很普世的一个解决方案
  • I/O设备另一部分是设备本身,设备本身有一个相对简单的接口,这是因为接口既不能做很多工作,而 且也已经被标准化了。
  • 例如,标准化后任何一个SATA磁盘控制器就可以适配任意一种SATA磁盘,所 以标准化是必要的。ATA代表 高级技术附件(AT Attachment),而SATA表示串行高级技术附件 (Serial ATA)。

AT是啥?它是旧M公司的第二代个人计算机的高级技术成果,使用1984年推出的6MHz 80286处理器,这个处理器是当时最强大的。