1.计算机整体结构和操作系统梗概

[TOC]

1.计算机结构

计算机系统大致分为4个组成部分,计算机硬件、操作系统、系统程序和应用程序、用户。

CPU

每个CPU都有其一套可执行的专门指令集。在时间多路复用(time multiplexing)CPU中,操作系统经常会中止正在运行的某个程序并启动(或再启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。

CPU包含寄存器

1.用来保存关键变量和临时数据的寄存器

由于用来访问内存以得到指令或数据的时间要比执行指令花费的时间长得多,因此,所有的CPU内都有一些用来保存关键变量和临时数据的寄存器。(这样,通常在指令集中提供一些指令,用以将一个字从内存调入寄存器,以及将一个字从寄存器存入内存。其他的指令可以把来自寄存器、内存的操作数组合,或者用两者产生一个结果,诸如将两个字相加并把结果存在寄存器或内存中。)

2.程序计数器

除了用来保存变量和临时结果的通用寄存器之外,多数计算机还有一些对程序员可见的专门寄存器。其中之一是程序计数器,它保存了将要取出的下一条指令的内存地址。在指令取出之后,程序计数器就被更新以便指向后继的指令。

3.堆栈指针

另一个寄存器是堆栈指针,它指向内存中当前栈的顶端。该栈含有已经进入但是还没有退出的每个过程的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量。

4.程序状态字(Program Status Word,PSW)寄存器

这个寄存器包含了条件码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户程序通常读入整个PSW,但是,只对其中的少量字段写入。在系统调用和I/O中,PSW的作用很重要。

CPU的内核态和用户态

多数CPU都有两种模式,即前面已经提及的内核态和用户态。通常,在PSW中有一个二进制位控制这两种模式。当在内核态运行时,CPU可以执行指令集中的每一条指令,并且使用硬件的每种功能。操作系统在内核态下运行,从而可以访问整个硬件。

相反,用户程序在用户态下运行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集。一般而言,在用户态中有关I/O和内存保护的所有指令是禁止的。

为了从操作系统中获得服务,用户程序必须使用系统调用(system call)系统调用陷入内核并调用操作系统。

我理解CPU这里是很复杂的,所以了解概念即可,类似,带有共享L2缓存的4核芯片;b)带有分离L2缓存的4核芯片这样的内容没有记录。

存储器

顶层的存储器速度较高,容量较小,与底层的存储器相比每位成本较高,其差别往往是十亿数量级。

寄存器

存储器系统的顶层是CPU中的寄存器。它们用与CPU相同的材料制成,所以和CPU一样快。显然,访问它们是没有时延的。其典型的存储容量是,在32位CPU中为32×32位,而在64位CPU中为64×64位。在这两种情形下,其存储容量都小于1 KB。程序必须在软件中自行管理这些寄存器(即决定如何使用它们)。

高速缓存

它多数由硬件控制。主存被分割成高速缓存行(cache line),其典型大小为64个字节,地址0至63对应高速缓存行0,地址64至127对应高速缓存行1,以此类推。最常用的高速缓存行放置在CPU内部或者非常接近CPU的高速缓存中。当某个程序需要读一个存储字时,高速缓存硬件检查所需要的高速缓存行是否在高速缓存中。如果是,称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存。高速缓存命中通常需要两个时钟周期。高速缓存未命中就必须访问内存,这要付出大量的时间代价。由于高速缓存的价格昂贵,所以其大小有限。有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢且容量更大。

现代CPU中设计了两个缓存。第一级或称为L1缓存总是在CPU中,通常用来将已解码的指令调入CPU的执行引擎。对于那些频繁使用的数据字,多数芯片安排有第二个L1缓存。典型的L1缓存大小为16KB。另外,往往还设计有二级缓存,称为L2缓存,用来存放近来所使用过若干兆字节的内存字。L1和L2缓存之间的差别在于时序。对L1缓存的访问,不存在任何延时;而对L2缓存的访问,则会延时1或2个时钟周期。

主存 RAM

主存。这是存储器系统的主力。主存通常称为随机访问存储器(Random Access Memory,RAM)

除了主存之外,许多计算机已经在使用少量的非易失性随机访问存储器。它们与RAM不同,在电源切断之后,非易失性随机访问存储器并不丢失其内容。只读存储器(Read Only Memory,ROM)在工厂中就被编程完毕,然后再也不能被修改。ROM速度快且便宜。在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中。另外,一些I/O卡也采用ROM处理底层设备控制。

磁盘

IO设备

可参考深入剖析神秘的“零拷贝”「转」
后续第5章节DMA会总结

实现输入输出三种方式

  • 1.忙等待 需要占据CPU

  • 2.中断

    中断一般有两个属性,一个是中断号,一个是中断处理程序。不同的中断有不同的中断号,每个中断号都对应了一个中断处理程序。在内核中有一个叫中断向量表的数组来映射这个关系。当中断到来时,cpu会暂停正在执行的代码,根据中断号去中断向量表找出对应的中断处理程序并调用。中断处理程序执行完成后,会继续执行之前的代码。

  • 3.DMA

总线

https://zh.wikipedia.org/wiki/%E6%80%BB%E7%BA%BF

PC上一般有五种总线:

  • 数据总线(Data Bus)

    在CPU与RAM之间来回传送需要处理或是需要储存的数据。

  • 地址总线(Address Bus)

    用来指定在RAM(Random Access Memory)之中储存的数据的地址。

  • 控制总线(Control Bus)

    将微处理器控制单元(Control Unit)的信号,传送到周边设备,一般常见的为USB Bus和1394 Bus。

  • 扩展总线(Expansion Bus)

    可连接扩展槽和电脑。

  • 局部总线(Local Bus)

    取代更高速数据传输的扩展总线。

例如:

  • PCL
  • ISA
  • SATA
  • ...

2.操作系统

  • 进程管理
  • 内存管理
  • 存储管理
  • ...

功能:

  • 用户界面
  • 程序执行
  • IO
  • 文件系统操作
  • 通信
  • 资源分配
  • 错误检测
  • 统计和安全

分类:

  • 单用户操作系统

单用户操作系统一次只能支持一个用户程序的运行。单用户操作系统向用户提供联机交互式的工作环境,比如MS-DOS就是一个经典的单用户操作系统。

  • 批处理操作系统

可对用户作业成批处理,期间勿需用户干预,分为单道批处理系统和多道批处理系统。

  • 分时操作系统

利用分时技术的一种联机的多用户交互式操作系统,每个用户可以通过自己的终端向系统发出各种操作控制命令,完成作业的运行。分时是指把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。

  • 实时操作系统

一个能够在指定或者确定的时间内完成系统功能以及对外部或内部事件在同步或异步时间内做出响应的系统,实时意思就是对响应时间有严格要求,要以足够快的速度进行处理.分为硬实时和软实时两种。

  • 通用操作系统

同时兼有多道批处理、分时、实时处理的功能,或者其中两种以上功能的操作系统。

  • 网络操作系统

一种在通常操作系统功能的基础上提供网络通信和网络服务功能的操作系统。

  • 分布式操作系统
  • 嵌入式操作系统

3.系统调用

类型:

  • 进程控制
  • 文件管理
  • 设备管理
  • 信息维护
  • 通信

4.其他基本概念

进程

进程本质上是正在执行的一个程序。与每个进程相关的是进程的地址空间(address space),这是从某个最小值的存储位置(通常是零)到某个最大值存储位置的列表。在这个地址空间中,进程可以进行读写。该地址空间中存放有可执行程序、程序的数据以及程序的堆栈。与每个进程相关的还有资源集,通常包括寄存器(含有程序计数器和堆栈指针)、打开文件的清单、突出的报警、有关进程清单,以及运行该程序所需要的所有其他信息。进程基本上是容纳运行一个程序所需要所有信息的容器。

线程

地址空间

通常,每个进程有一些可以使用的地址集合,典型值从0开始直到某个最大值。在最简单的情形下,一个进程可拥有的最大地址空间小于主存。

虚拟内存
操作系统可以把部分地址空间装入主存,部分留在磁盘上。