理解计算机系统
理解计算机系统
Chapter1->FastRead
计算机系统由硬件和软件组成并共同运行应用程序。了解这些部件如何工作、如何影响程序的准确性和性能是阅读此书的目标。
Example1–>Hello.c
hello程序从一个源程序(或者源文件)开始。它存储在磁盘中,由01写成。
这类可通过ascii码或其他编码转为明显可理解的字符文件为文本文件,其他文件为二进制文件。
此hello.c可被编译器gcc编译为可执行文件。编译过程如下:
- 预处理阶段:预处理器根据#开头的指令,修改原始的c文件。处理结果通常以.i为扩展名。
- 编译阶段:将hello.i翻译为hello.s,包含一个汇编语言程序
- 汇编阶段:汇编器将hello.s翻译成机器指令,并打包为可重定位目标程序的格式(01的二进制文件),保存为hello.o
- 链接阶段:hello程序中因调用了printf这个标准库中的函数,而它独立存在于printf.o的文件中。链接器负责处理并入这些文件,最终得到一个可执行文件。该文件加载到内存中即可直接执行。
Question1–>编译系统如何运行
促使程序员学习编译系统如何工作的原因:
- 优化程序性能。
- 理解链接时出现的错误
- 避免安全漏洞
当hello被载入内存中时(’./hello’通过向shell键入此命令),它被执行直到程序结束或中断。中间的过程如下:
程序执行内容:shell将逐一读取字符到寄存器,再把它放到存储器中,直到键入回车,程序再执行一系列指令,最终输出hello world。
读取字符时数据由接入usb的设备经总线到达cpu中接受数据处理,再存入主存中。
输出字符时,先前的数据被从主存中直接取出,经总线直达输出设备。
读取磁盘数据时,可从磁盘控制器直达主存。
该实例使我们了解到,系统花费了大量的时间等来将数据挪来挪去。设计系统的主要目标之一就是使这些拷贝操作尽可能快。解决方案之一就是更小更快的存储设备——高速缓存存储器。理解了它的机理可做到极大提高程序的性能。
同时此案例也使我们明白,程序无法直接访问键盘、显示器等设备接口,只能依赖操作系统。或者说,程序的所有对硬件操作的尝试都必须通过操作系统。
操作系统有两个基本功能:防止硬件被失控的应用程序滥用,以及在控制复杂又通常广泛不同的低级设备方面,为应用程序提供简单一致的方法。
Question2–>进程机制
同时运行许多进程(并发运行)的机制为上下文切换 。
系统保存进程运行所需的所有状态的信息,如寄存器的值、主存内容等,称为上下文。任意时刻系统都只能运行一个进程,但当系统决定从当前进程转移控制权到某个进程时,就发生了上下文切换。
程序的交错执行会打乱人们眼中的时间概念,因此获取准确测量值也需要特殊的技术。
进程由可以由多个称为线程的执行单元组成,运行在上下文中共享代码和全局数据。
Chapter2->信息的表示和处理
(施工ing~