第一章    计算机系统漫游

11信息就是位+上下文

源程序实际上就是一个由01组成的位(又称比特位)序列,这些位被组织成8个一组,称为字节。每个字节都表示程序中某个文本字符。

系统中的所有信息都是由一串比特表示的。区分不同数据对象的唯一方法就是我们读到这些数据对象时的上下文。

 

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

unix> gcc –o hello hello.c   翻译成一个可执行目标文件hello四个阶段:

预处理阶段:预处理器根据#开头命令,修改原始程序,得到另一个程序,通常以i为扩展名。

编译阶段:编译器将.i翻译成.s文件,包含一个汇编语言程序。

汇编阶段:汇编器将hello.s翻译成机器语言指令。变成.o的二进制文件,它的字节编码时机器语言指令而不是字符。

链接阶段。将类似printf的函数(printf.o的单独预编译目标文件中)并入,结果的到hello文件,是一个可执行目标文件,可执行文件加载道存储器后,由系统负责执行。

 

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

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

 

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

Cpu:中央处理单元;ALU;算术/逻辑单元;PC;程序计数器; USB:通用串行总线。

总线:总线携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数是一个基本的系统参数,各个系统不尽相同。假定字长为4字节,并且假设总线依次只传一个字。

 

IO设备:键盘鼠标,显示器,磁盘

主存:由一组DRAM芯片组成。存储器是由一个线性字结数组组成每个字节都有自己唯一的地址(数组索引);这些地址是从零开始的。

 

处理器:CPU在指令的要求下可能会执行这些操作。

加载:从主存拷贝一个字节或者一个字到寄存器,覆盖寄存器原来的内容。

存储:从寄存器拷贝一个字节或者一个字到主存的某个位置,覆盖这个位置上原来的内容。

更新:靠被两个寄存器的内容到ALU,ALU将两个字相加,并将结果存储到一个寄存器中。

IO读:从IO设备中拷贝一个字节或者一个字到寄存器。

IO写:从一个寄存其中拷贝一个字节或者一个字到一个IO设备。

转移:从指令本身中抽取一个字,并将这个字拷贝到程序计数器中,覆盖PC中原来的值。

 

当输入./hello后,shell程序就逐一读取字符到寄存器,再把它存放到存储器中。

 

输入会车后,shell执行一系列指令,这些指令将hello目标文件中的代码和数据从磁盘拷贝到主存,从而加载hello文件,包括最终输出的字符串”hello,world\n”

 

一旦程序加载道存储器,处理器就开始执行主程序中的机器语言指令。这些指令将hello world\n中的字节从存储器中拷贝到寄存器文件,从寄存器文件拷贝到显示设备,最终线时到屏幕

 

1.5高速缓存

用来存放处理器在不久的将来可能会需要的信息。

 

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

1.7操作系统管理硬件

可以把操作系统看成是应用程序和硬件之间插入的一层软件,都依靠操作系统提供的服务。所有应用程序对硬件的操作尝试都必须通过操作系统。

操作系统有两个基本功能,防止硬件被失控的应用程序滥用;在控制复杂而又通常广泛不同的低级硬件方面,为应用程序提供简单一致的方法。(进程,虚拟存储器,文件)

文件是对io设备的抽象表示,虚拟存储器是对主存和磁盘io设备的抽象表示,进程则是对处理器,主存和io的抽象表示。

进程是操作系统对运行程序的一种抽象。实际上一个进程的指令和另一个进程的指令是交错执行的。交错执行机制称为上下文切换。

上下文切换:保存当前进程的上下文,恢复新进程的上下文,然后将控制权转移到新进程。新进程会从它上次停止的地方开始。

线程:一个进程由多个线程组成,每个线程都运行在进程的上下文中。共享同样的代码和全局数据。多线程比多进程之间容易共享数据。

虚拟存储器:是一个抽象概念,每个进程看到的存储器都是一致的,称之为虚拟地址空间。

1.8利用网络系统和其它系统通信

posted on 2009-12-13 23:11  IT Person  阅读(393)  评论(0编辑  收藏  举报