计算机系统漫游·一

来源:互联网 发布:qq截图软件绿色版 编辑:程序博客网 时间:2024/05/21 08:44
第一章 计算机系统漫游
关键词:编译系统,系统的硬件组成,存储设备的层次结构,操作系统管理,进程和线程

1 信息就是位+上下文

程序hello.c如下所示:
#include
int main()
{
       printf("hello,world\n");
}

#   i         n       c    l        u      d      e       ……
35 105    110   99  108   117  100   101  ……
hello.c的表示方法说明了一个基本的思想:系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串比特指示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

2 了解编译系统如何工作是大有益处的

(1)优化程序性能
一个switch语句总是比一系列的if-then-else语句高效的多吗?
一个函数调用的代价有多大?
while循环比do循环更有效吗?
指针引用比数组索引更有效吗?
相对于通过引用传递的参数求和,为什么用本地变量求和的循环,其运行就会快得多呢?
为什么两个功能详尽的循环的运行时间会有很大差异呢?
(2)理解链接时出现的错误
一些最令人困扰的程序错误往往都与链接器操作有关。
链接器报告说无法解析一个引用,这是什么意思?
静态变量和全局变量的区别是什么?如果在不同的C文件中定义了名字相同的两个全局变量会发生什么?
静态库和动态库的区别是什么?
为什么我们在命令行上排列库的顺序是有影响的?
最烦人的是,为什么有些链接信息错误直到运行时才出现?
(3)避免安全漏洞
缓冲区溢出错误造成了大多数网络和Internet服务器上的安全漏洞。

3 系统的硬件组成

总线:贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送丁昌德字节快,也就是字(word)。字中的字节数(即字长)是一个系统的基本参数,各个系统中也不尽相同。
I/O设备:是系统与外界的联系通道。包括:键盘、鼠标、显示器、磁盘驱动器。每个I/O设备都是通过一个控制器或适配器与I/O总线连接起来的。控制器和适配器之间的区别主要在于它们的组成方式。控制器是I/O设备本身中或是系统的主印刷电路板(通常称作主板)上的芯片组,而适配器则是一块插在主板插槽上的卡。
主存:是一个临时设备,在处理器执行程序时,它被用来存放程序和程序处理的数据。物理上,主存是一组DRAM(动态随机访问存储器)芯片组成的。逻辑上讲,存储器是由一个现行的字节数数组组成的,每个字节都有自己唯一的地址(数组索引),这些地址都是从零开始的。一般来说,组成程序的每条机器指令都由不定量的字节构成。
处理器:重圆处理单元(CPU)简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个被成为程序计数器(PC)的自场大小的存储设备【或寄存器】。在任何一个时间点上,PC都指向贮存中的某条机器语言指令(内含其地址)。
CPU的指令要求可能会执行以下这些操作:
加载:从主存拷贝一个字节或者一个字到寄存器,覆盖寄存器原来的内容。
存储:从寄存器拷贝一个字节或者一个字到主存的某个位置,覆盖这个位置上原来的内容。
更新:拷贝两个寄存器的内容到ALU,ALU将两个字相救啊,并将结果存放到一个寄存器中,覆盖该寄存器中原来的内容。
I/O读:从一个I/O设备中拷贝一个字节或者一个字到一个寄存器。
I/O写:从一个寄存器中拷贝一个字节或者一个字到一个I/O设备
跳转:从指令本身中抽取一个字,并将这个字拷贝到程序计数器(PC)中,覆盖PC中原来的值。

4 形成层次结构的存储设备

寄存器—L1高速缓存器—L2高速缓存器—主存储器—本地二级存储器—远程耳机存储
从左至右分别我L0-L5,且从左至右,存储空间更大,存取速度更慢,每个字节的存储造价更便宜。

5 操作系统管理硬件

表1 计算机系统的分层视图

软件

应用程序

操作系统

硬件

处理器

主存

I/O设备

操作系统主要有两个用途:防止硬件被失控的应用程序滥用;在控制负载而有通常广泛不同的低级硬件设备方面,为应用程序提供简单一致的方法。
表2 操作系统提供的抽象标识

进程

 

虚拟存储器

 

 

文件

处理器

主存储器

I/O设备

文件是对I/O设备的抽象,虚拟存储时是对主存和I/O设备的抽象表示,进程则是处理器、主存和I/O设备的抽象表示。
操作系统保存进程运行所需的所有状态信息。这种状态成为上下文。
因为多线程之间比多进程之间更容易共享数据,也因为线程一般逗比进程更高效,因此线程成为越来越重要的编程模型。
虚拟存储器是一个抽象概念,它为每个进程提供了一个假象,好像每个进程都在独占地使用竹村,每个进程看到的存储器都是一致的,称之为虚拟地址空间。
从低到高,虚拟地址空间分布为:程序代码和数据—堆—共享库—栈—内核虚拟存储器。

6 小结

计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被标示为一组组的位,它们依据不同的上下文有不同的解释方式。程序被其它程序翻译成成不同的形式,开始时是ASCII文本,然后被编译器和连机器翻译成二进制可执行文件。
处理器读取并解释存放在驻村里的二进制指令。因为计算机花费了大量的时间在存储器、I/O设备和CPU寄存器之间拷贝数据,所以系统中的存储设备就按层次排列,CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存储器和磁盘存储器。在层次模型中位于更高层的存储设备比低层次的存储设备要快,单位比特造价也更高。程序员通过理解和运用这种存储层次机构的只是,可以优化他们C程序的性能。
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象概念:文件是对I/O设备的抽象,虚拟存储时是对主存和I/O设备的抽象表示,进程则是处理器、主存和I/O设备的抽象表示。
最后,网络提供了计算机系统之间通信的手段。从某个角度来看,网络就是一种I/O设备。

参考文献

Bryant R E, 布赖恩特, O'Hallaron D, et al. 深入理解计算机系统[M]. 中国电力出版社, 2004.
0 0
原创粉丝点击