计算机系统基本概念概述

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

2. 程序的生命周期是从一个源程序(源文件)开始的,即程序员利用编辑器创建并保存的文本文件。源程序实际上就是由值0和1组成的位(bit)序列,8个位被组织成一组,称为字节。

3. 大部分现代系统都使用ASC2标准来表示文本字符,即用一个唯一的单字节大小的整数值来表示每个字符。

4. 一个基本的思想:系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。

5. 区分不同数据对象的唯一方法是我们独到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。

6. 综合2-5,可知:信息就是位+上下文

7. 为了在系统上运行程序,只有源代码是不行的,所以每条语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。

8. 在类Unix系统中,从源文件到目标文件的转化是由编译器驱动程序完成的:

  $ gcc -o hello hello.c

  gcc编译器读取源文件hello.c,并把它翻译成一个可执行目标文件hello。这个翻译的过程可以分为四个阶段完成:

    源程序——>被修改的源程序——>汇编程序——>可重定位目标程序——>可执行目标程序

    hello.c         hello.i                  hello.s            hello.o+printf.o             hello

    文本            文本                    文本               二进制                          二进制

    第一阶段(第一个箭头),预处理阶段:修改源代码,将头文件代码插入其中并且去掉注释和无用的空格等,结果就得到另一个C程序,通常以.i 作为文件扩展名。

    第二阶段,编译阶段:将文本文件*.i 翻译成 *.s ,将C源码编译成汇编的源码。汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。

    第三阶段,汇编阶段:将*.s翻译成机器语言指令,把这些指令打包成一种叫做 可重定位目标程序(relocatable object program) 的格式,并将结果保存在目标文件*.o 中。

    第四阶段,链接阶段:链接器合并各种.o文件,生成一个可执行文件。

9. 系统的硬件大约有:总线、I/O设备、主存、处理器等

  总线:贯穿整个系统的一组电子管道,它携带信息字节并负责在各部件间传递。

  I/O设备:输入/输出设备是系统与外部世界的联系通道。例如:键盘、鼠标、显示器、磁盘等。每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器和适配器之间的区别主要在于他们的封装方式。控制器置于设备本身或主板上,适配器则是一块插在主板插槽上的卡。它们的功能都是在I/O总线和I/O设备之间传递信息。

  主存:一个临时存储设备。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(即数组索引),这些地址是从零开始的。

  处理器(cpu):是解释(或执行)存储在主存中指令的引擎。

10. 由于处理器与主存之间的读取速度差异太大,系统设计者采用了更小更快的存储设备,即高速缓存存储器(高速缓存),作为暂时的集结区域,用来存放处理器近期可能会需要的信息。

11. 一直到高速缓存存在的应用程序原可以利用高速缓存将他们的程序性能提高一个数量级。

12. 操作系统管理硬件

13. 操作系统有两个基本功能:1)防止硬件被失控的应用程序滥用。2)向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

14. 操作系统通过几个基本的抽象概念(进程、虚拟存储器和文件)来实现这两个功能。

  进程:操作系统对正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。并发运行,是说一个进程的指令和另一个进程的指令是交错执行的。通常情况下,需要运行的进程数是多余可以存行它们的CPU个数的。操作系统实现这种交错执行的机制称为上下文切换。操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文,它包括许多信息,例如PC和寄存器文件的当前值,以及主存的内容。

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

  虚拟存储器:一个抽象的概念,它为每个进程提供了一个假象,即每个进程都在独立地使用主存。在Linux中,地址空间最上面的区域是为操作系统中的代码和数据保留的,这对所有进程都一样。地址空间的底部区域存放用户进程定义的代码和数据。

  文件:文件就是字节序列。每个设备都可以视为文件。它向应用程序提供了一个统一的视角,开看代系统中可能含有的所有各式各样的设备。例如,处理磁盘文件内容的应用程序员非常幸福,因为他们无需了解具体的磁盘技术。进一步说,同一个程序可以在使用不同磁盘机数的不同系统上运行。

15. 数字计算机的整个历史中,有两个需求是驱动进步的持续动力:一个是我们想要计算机做得更多,另一个是让计算机运行的更快。当处理器同时能够做更多事情的时候,这两个 因素都会改进。

16. 并发是一个通用的概念,指一个同时具有多个活动的系统;并行指的是用并发使一个系统运行得更快。

  线程级并发(同时运行多个线程),指令级并行(处理器同时执行多条指令),单指令、多数据并行(SIMD并行)。

17. 抽象的使用是计算机科学中最为重要的概念之一

  文件是对I/O的抽象;

  虚拟存储器是对程序存储器的抽象;

  进程是对一个正在运行的程序的抽象;

  虚拟机是对整个计算机的抽象;

18. 网络提供了计算机系统之间通信的手段。从特殊的角度来看,网络就是一种I/O设备。

声明:

  本文为 iddmx 对《Computer Systems : A Programmer's Perspective》(Second Edition) Chapter 1 | A Tour of Computer Systems 的读书笔记。内容大部分都是书中内容,也有一些个人理解,由于 iddmx 水平,并不能把书中所有精华全部提取,如果想要深入了解,请阅读原书。

  本文档欢迎自由转载,但请务必保持本文档完整或注明来之本文档。本文档未经 iddmx 同意,不得用于商业用途。最后,如果您能从这个简单文档里获得些许帮助,iddmx 将对自己的一点努力感到非常高兴;iddmx 水平有限,如果本文档中包含的错误给您造成了不便,iddmx 在此提前说声抱歉。

  祝身体健康,工作顺利。☺

 

posted @ 2012-12-20 11:59  iddmx  阅读(1840)  评论(0编辑  收藏  举报