基本思想:系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网路上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。
一个hello.c文件到一个可执行目标文件hello,需经历4个阶段。
预处理阶段:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。编译阶段:将得到的i文件翻译成汇编代码.s文件。汇编阶段:将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。连接阶段: 将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件。详见:深入理解计算机系统☞hello world背后的故事
CPU:中央处理器;ALU:算术/逻辑单元;PC:程序计数器;USB:通用串行总线
总线 携带信息字节并负责在各个部件间传递,贯穿着整个系统的一组电子管道,称作总线。 通常总线被设计成传送定长的字节块,叫做字(word)。字中的字节数是一个基本的系统参数,在各个系统中的情况都不尽相同。 64位机器字长8个字节;32位机器字长4个字节。I/O设备 输入/输出(I/O)设备是系统与外部世界的联系通道。 每个I/O设备都是通过一个控制器或适配器与I/O设备相连。 控制器和适配器之间的异同: 异:封装的方式不同。控制器是置于I/O设备本身的或者系统的主板上的芯片组,而适配器则是一块插在主板插槽上的卡。从这点看适配器更加灵活一些。 同:功能都是在I/O总线和I/O设备之间传递信息。主存 主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。 物理上,它是一组动态随机存取存储器(DRAM)芯片组成; 逻辑上,存储器是一个线性的字节数组,每个字节都有其唯一的地址。处理器 中央处理单元(CPU),是解释(或执行)存储在主存中指令的引擎。 处理器的核心是一个字长的存储设备(或寄存器),称为程序计数器(PC)。 在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。CPU 在指令的要求下会做如下操作:
加载:把一个字节或者一个字从主存复制到寄存器,以覆盖寄存器原来的内容存储:把一个字节或者一个字从寄存器复制到主存的某个位置,以覆盖这个位置上原来的内容操作:把两个寄存器的内容复制到 ALU,ALU 对这两个字做算术操作,并把结果存放到一个寄存器中,以覆盖寄存器原来的内容跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的内容。根据机械原理,较大的存储设备要比较小的 存储设备运行的慢,而快速设备的造价远高于同类的低速设备。 针对这种处理器与主存之间的差异,系统设计者采用了更小、更快的存储设备,即高速缓存存储器(简称高速缓存),作为暂时的集结区域,用来存放处理器近期可能会需要的信息。 位于处理器芯片上的L1高速缓存的容量可以达到数万字节,访问速度几乎和访问寄存器文件一样快。 L2高速缓存的容量为数十万到数百万字节,通过一条特殊的总线连接到处理器。 进程访问L2高速缓存的时间要比访问L1高速缓存的时间慢5倍,比访问主存的时间快5~10倍。 高速缓存硬件原理:静态随机访问存储器(SRAM)。
每个计算机系统中的存储和设备都被组织成了一个存储器层次结构。如图。 存储器层次结构的主要思想是一层上的存储器作为低一层存储器的高速缓存。
操作系统有两个基本的功能
防止硬件被失控的应用程序滥用。向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。操作系统通过几个基本的抽象概念来实现这两个功能。 文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O设备的抽象表示,进程则是都处理器、主存和I/O设备的抽象表示。
进程是操作系统对一个正在运行的程序的一种抽象。 一个CPU看上去是在并发的执行多个进程,是通过进程间的切换来实现的,这种机制叫上下文切换。 上下文,操作系统保持跟踪进程运行所需要的所有状态信息。它包括许多信息,例如PC和寄存器文件的当前值,以及主存的内容。
在现代系统中,一个进程实际上可以由多个执行单元(线程)组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
虚拟存储器是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占的使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间。 在Linux中,地址空间最上面的区域是为操作系统中的代码和数据保留的,这对所有的进程来说的都是一样的。地址空间的底部区域存放用户进程定义的代码和数据。
文件是字节序列。每个I/O设备,包括磁盘、键盘、显示器,甚至网络,都可以视为文件。系统中的所有输入输出都是通过使用一小组称为UNIX I/O的系统函数调用读写文件来实现的。
两个需求是驱动计算机进步的持续动力:
一个是我们想要计算机做的更多,术语并发;另一个是我们想要计算机运行的更快,术语并行。构建进程这个抽象,我们能够设计出同时执行多个程序的系统,这就导致了并发。使用线程,我们甚至能够在一个进程中执行多个控制流。 传统意义上的并发是模拟出来的,是通过使一台计算机在它正则执行的进程间快速切换的方式实现的。 单处理器系统,多个任务切换大多数实际的计算都是由一个处理器来完成。 多处理器系统,由单操作系统内核控制的多处理器组成的系统。随着多核处理器和超线程的出现,这种系统才变得常见。 多核处理器是将多个CPU(核)集成到一个集成电路芯片上。 超线程,有时称为同时多线程,是一项允许一个CPU执行多个控制流的技术。形象说则是利用N个物理内核,模拟出2N个逻辑内核的技术。在硬件上来讲,它涉及CPU某些硬件有多个备份,比如PC和寄存器;而其他的硬件部分只有一份,比如ALU。
现代处理器可以同时执行多条指令的属性称为指令级并行。 在流水线技术中,将执行一条指令所需的活动划分成不同的步骤,将处理器的硬件组织成一系列的阶段,每个阶段执行一个步骤。这些阶段可以并行的操作,用来处理不同指令的不同部分。我们会看到一个相当简单的硬件设计,它能够达到接近于一个时钟周期一条指令的执行速率。 超标量,就是处理器达到比一个周期一条指令更快的执行速率。
单指令、多数据的概念是指一条指令可以产生多个并行执行的操作的方式。当今的一些处理器中配备了特殊的硬件,可以达到这个效果。由于产生了多个并行执行的操作,因此就会涉及到多个数据,通俗的讲也可以理解为,一条指令操作多个数据。比如书中所提到的例子,一些处理器具有并行地对4对单精度浮点数做加法的指令。
抽象的使用是计算机科学中最为重要的概念之一。 计算机系统中的一个重大主题就是提供不同层次的抽象表示,来隐藏实际实现的复杂性。
转载于:https://www.cnblogs.com/BinBinStory/p/7529229.html