首页 > 技术文章 > 计算机系统漫游

lolau 原文

源程序在计算机中是以文本文件的形式保存的,源程序以字节的形式存储在文件中,字节由取值为0和1的位(bit)组成,8个位组成一个字节。

一个c语言程序从文本文件变为可执行文件需要经历预处理、编译、汇编和链接4个阶段。
预处理阶段:预处理器修改源程序中以#开头的代码,如将#include<stdio.h>替换为stdio.h文件的内容,预处理阶段完成后会生成“.i”文本文件。
编译阶段:编译器将".i"文件翻译成汇编语言,生成“.s”文本文件。
汇编阶段:汇编器将“.s”文件翻译成机器语言,生成“.o”二进制文件。
链接阶段:连接器将“.o”文件和标准库“.o”文件(如printf.o)合并成可执行文件。

系统的硬件组成
总线:将信息字节在各个组件间传递的电子管道,总线上传递的数据单位是字,即字节个数,如32位系统一般为4个字节。
I/O设备:输入输出设备,如鼠标、键盘、显示器和网络适配器等。
主存:主存储器,也就是内存,在cpu执行程序时,用于存放程序和数据的地方。
处理器:cpu,计算机的大脑,用于执行存储在主存中的指令,由控制器和运算器和寄存器组成,控制器负责从存储器中取出指令,确定指令类型及译码,按时间的先后顺序向其他部件发出控制信号,统一指挥和协调计算机各器件进行工作的部件;运算器是对数据进行加工处理的部件,可以实现基本的算术运算,还可以进行基本的逻辑运算,实现逻辑判断的比较及数据传递,移位等操作;寄存器是一个字长的存储单元,用于临时存储控制器和运算器需要使用的数据。

高速缓存
        寄存器访问速度很快,但是仅能存储几百字节的信息,内存可以存储几十亿字节的信息,但是访问速度要比寄存器慢100倍。位于cpu芯片上的L1缓存可以存储几万字节的信息,访问速度接近寄存器,L2缓存通过一条特殊的总线连接到cpu,访问速度比L1慢5倍,比内存快5~10倍,L3缓存可以获得更大存储器,并且也能提供较高的访问速度。
        缓存利用了局部性原理,将程序最近需要访问的数据存放在缓存中,以提升效率。
        相对来说,寄存器的L1缓存的缓存,L2缓存是L2缓存的缓存,L3缓存是内存的缓存,内存是磁盘的缓存。

操作系统的抽象
进程是对处理器和虚拟存储器的抽象,是正在运行的程序。
虚拟存储器是对主存和文件的抽象,虚拟存储器为每个进程提供了一个虚拟地址空间,映射到物理内存,使得每个进程看起来在独占内存空间。
文件是对I/O设备的抽象,在linux中,一切皆为文件。

并行和并发
并发指的是同时有多个活动在运行。
并行指的是用并发使一个系统运行得更快。
线程级并发
        单处理器是不能做到对多个线程同时执行的,所以并发一般是是针对多核处理器,每个核都有独立的寄存器、L1/L2高速缓存,L3高速缓存和内存是多个核之间共享的。
指令级并行
        处理器可以同时执行多条指令称为指令级并行。通过流水线(pipelining)将执行一个指令所需要的活动划分为不同的步骤,将处理器的硬件组织成一系列的阶段,每个阶段执行一个步骤,这些阶段可以并行地操作,用来处理不同指令的不同部分。
单指令、多数据并行
        许多现代处理器拥有特殊的硬件,允许一条指令可以产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。
        


推荐阅读