计算机系统漫游

2014/05/01 Computer

计算机系统漫游

当我们把计算机和人做类比时,硬件就相当于人的身体,软件就相当于人的三魂七魄(中国古代的说法),或者灵魂(西方宗教的说法),或者思维(现代的说法)。 同人一样,计算机也是由很多部分组成,我们先来解剖一部PC机,看看它的内部构造,以及各部分之间的连接方式。

下面我们来分别介绍。

处理器——一颗奔腾的心

计算机所完成的任务是靠一条一条的指令来完成的,指令就在处理器中执行,计算机其他的各个部分都是为了配合处理器而存在的。处理器也称CPU(Central Processing Unit,中央处理器),所有从外部输入的命令,都是在处理器里面进行处理的,所有我们看到的文字、声音、图像,都是经处理器处理过后,再表现出来的。

存储器——大肚能容,容天下难容之事

人脑可以既做运算,又存储数据,而在计算机中,计算由处理器完成,数据存储,则由存储器完成。

CPU在做计算时,是从寄存器中读数据的,不过寄存器的容量实在是太小,几乎无时无刻不需要从内存中读取数据,为了减少从内存中读写数据的次数,在CPU内部做了一个缓存(cache),避免频繁读写。

内存的记忆力虽好但是记得的事情也还不多,最重要的一点是,内存睡一觉(掉电后)什么东西都忘了,属于易失性存储介质。所以数据都要存储在一个容量大,且永久存储的设备上,这个设备就是硬盘。还是硬盘好,默默无闻的工作,什么都默默的记下,掉电了也不会丢失数据,不过由于速度较慢,如果直接和处理器打交道,那处理器就要等到黄花菜都凉了。从这个角度来说,内存是处理器和硬盘之间的缓存。

对于计算机来说,CPU是核心,不过对于人们来说,硬盘才是核心,因为所有的数字信息都记录在上面,其他的器件随便更换都没有关系,但硬盘却不能随便更换,起码是不能让别人随便更换。网络上有句名言:“男人一定要会修电脑,曾经有个人不会修自己的电脑,后来的事大家都知道了……”

硬盘空间虽大,但是在这个信息爆炸的年代,什么信息都存放在本地硬盘是不可能的,还好互联网的发展使得我们可以轻松的访问网络,获取想要的信息。大量的信息存储在网络上其他计算机的硬盘上,我们只需要将别人的数据传输过来就可以了,所以说传输和存储,本身就是一体的,存储是信息在时间上的传递,传输是信息在空间上的传递。

硬盘安在电脑上,是不能随便移动的,不同的电脑间要交换点数据,在不方便使用网络的条件下,就需要可移动的存储介质,如光盘、U盘、SD卡等。

光、电、磁等特性可以作为存储介质,光盘使用光特性,内存和U盘使用电特性,现在硬盘的存储介质还是以磁盘为主,使用磁特性。磁盘先驱者之一Al Hoagland曾经调侃到:“我认为,硅谷的名字叫错了,如果你回顾近十年来产品的收入情况,磁盘比硅产品收入要多得多,因此应该把这个地方改名为氧化铁谷。”不过,现在随着闪存容量的不断加大,也有慢慢替代磁盘的趋势,闪存完全采用电的访问方式,比磁盘机械的访问方式要快很多。手机、摄像机等消费类电子产品中已经集成了中等容量的闪存。当然,单位容量下闪存的成本还是远高于硬盘,磁盘式硬盘仍然会存在很长一段时间。

主板与芯片组——架起沟通的桥梁

计算机内部这么多部件,总要有个板子来承载,这个板子就是主板。主板提供了各种各样的接口,CPU、显卡、声卡、硬盘、光驱、PCI-E插槽、USB插槽等部件都接在上面。除了起物理连接作用外,主板上还有两颗重要的芯片,俗称北桥和南桥芯片,统称为芯片组,它们的主要工作,就是负责处理器和其他部件间的通信。

上北下南,和处理器相邻的桥称为北桥,北桥下面的桥称为南桥。南桥和北桥有明确的分工,北桥负责处理器与那些需要较高通信带宽部件间的通信,主要是存储器和显卡,由于Intel Core i7处理器中集成了内存控制器,因此内存直接接在了处理器上,很多处理器没有内存控制器,那么北桥芯片则会提供内存控制器连接内存。

南桥负责处理器与较低速度部件间的接口,通常连接各种输入输出设备,如USB、硬盘等。

计算机的性能主要来源于CPU、内存和显卡的性能,但是,如果没有适合的主板和芯片组,处理器与其他部件的数据通信就会受到限制,影响处理器的运行速度,就好比再好的跑车,在乡间小路上也是跑不快的。芯片组和主板一般是针对某一特定处理器或某一处理器家族进行设计的。其他部件,如显卡、硬盘、键盘、鼠标等,则相对较独立,只要符合接口标准就可以了。

输入设备——五觉

人靠五觉(听觉、视觉、味觉、触觉、嗅觉)来接受外界的信息,计算机也要靠输入设备来接受信息。

键盘

现在用的QWERTY键盘最早来自于打字机,专家们发现,QWERTY键盘的效率并不是最高,又提出了一套DVORAK的键盘。但是很多东西,人们一旦熟悉了,就不想再改变了,因此QWERTY键盘仍然占据着绝对的主流。

鼠标

鼠标是由道格拉斯·恩格尔巴特于1946年发明的,后来被引入到了施乐PARC的图形用户界面中,从此,鼠标成了电脑的标准配置。

计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。

#include<stdio.h>								//贯串全文的hello代码
int main()
{
	printf("hello world\n");
	return 0;
}

计算机花费了大量的时间在内存、I/O设备和CPU寄存器之间复制数据,所以将系统中的存储设备划分成层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。

信息 = 位 + 上下文

hello程序的生命周期是从一个源程序(源文件 hello.c)开始的。源程序实际上是由值0和1组成的位(bit)序列,8个位被组织为一组,称为字节(Byte)。

hello.c程序是以字节序列的方式储存在文件中的。像hello.c这样只有ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。

基本思想:系统中的所有信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传达的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据据对象的上下文。

程序被其他程序翻译成不同的格式

每条C语句都必须转化为一系列的低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打包,并以二进制磁盘文件的形式存放起来。目标程序也成为可执行目标文件。

编译系统:预处理器、编译器、汇编器、链接器。

  • 预处理阶段:(hello.c)进入预处理器(cpp)根据以#开头的命令,读取头文件并插入程序文本中,得到另一个C程序(hello.i)。
  • 编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。
  • 汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o(文本编辑器打开后是乱码)中。
  • 链接阶段:printf函数存在于一个名为printf.o的预编译好了的目标文件中,这个文件需要合并到hello.o的程序中。链接器(ld)就负责处理这种合并,得到一个可执行目标文件(二进制)。

了解编译系统如何工作

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

处理器读并解释储存在内存中的指令

shell是一个命令行解释器,它输出一个提示符,等待输入一个命令行,然后执行这个命令。

  • shell加载并运行hello程序,然后等待程序终止。
  • hello程序在屏幕上输出它的消息,然后终止。
  • shell随后输出一个提示符,等待下一个输入的命令行。

系统硬件组成

  • 总线:贯串整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。
  • I/O设备:每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器和适配器的主要区别是它们的包装方式。控制器是I/O设备本身或者系统的主板的芯片组,适配器是在主板插槽上的卡。
  • 主存:由一组动态随机存取储存器(DRAM)芯片组成。
  • 处理器:中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)

寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。ALU计算新的数据和地址值。CPU在指令的要求下执行加载、存储、操作、跳转操作。

运行hello程序

初始时,shell程序执行它的指令,等待我们输入命令。当我们在键盘上输入字符串“./hello”后,shell程序将字符逐一读入寄存器,再把它放入内存中。敲下回车后,shell执行一系列指令来加载可执行的hello文件,这些指令将hello目标文件中的代码和数据从磁盘复制到主存。

一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令,这些指令将“hello world\n”字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。

高速缓存

一个寄存器文件只储存几百字节的信息,主存里存放几十亿字节,处理器从寄存器文件中读数据比从主存中快100倍。针对这种差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器,作为暂时的集结区域,存放处理器近期可能会需要的信息。

L1和L2高速缓存是一种叫静态随机访问存储器的硬件技术实现的。比较新的、处理能力更强大的系统甚至有三级高速缓存,L1、L2、L3。系统有一个很大的存储器,访问速度很快,原因就是利用了高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。

操作系统管理硬件

  • 防止硬件被失控的应用程序滥用。
  • 向应用程序提供一种简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程是对处理器、主存、I/O设备的抽象表示。

进程

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。

操作系统保持跟踪进程运行所需的所有状态信息。这种状态,就是上下文。

从一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用的指令,将控制权传递给内核,然后内核执行被请求的操作并返回应用程序。

线程

一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

线程一般比进程更加高效,多线程之间比多进程之间更容易共享数据。

虚拟内存

每个进程看到的内存都是一致的,称为虚拟地址空间。地址空间的底部区域存放用户进程定义的代码和数据。

每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能,从最低的地址向上来说,分别是程序代码和数据、堆、共享库、栈、内核虚拟内存。

文件

文件就是字节序列。每个I/O设备,包括磁盘、键盘、显示器、甚至网络,都可看作是文件。

系统之间利用网络通信

现代系统经常通过网络和其他系统连接到一起。从一个单独的系统来看,网络可视为一个I/O设备。

Search

    微信好友

    博士的沙漏

    Table of Contents