CS:APP第一章笔记

CS:APP 第一章:计算机系统漫游

1.信息就是位+上下文

一个程序的生命周期是从一个源程序(源文件)开始的。而源程序文件是由0和1组成的位序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。如ASCII码表

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

hello.c(源文件)------->hello(目标文件)

需要经历四个阶段:

1)预处理阶段

预处理器(cpp)根据字符#开头的命令,修改原始程序,获取头文件内容,并直接插入到程序文本中,得到另一个程序。hello.c------>hello.i

2)编译阶段

编译器(ccl)将文本文件hello.i翻译成汇编语言文本文件hello.s。即hello.s中每一条语句都用一种文本格式描述了一条低级机器语言指令。

3)汇编阶段

汇编器(as)将hello.s翻译成真正的机器语言指令,并打包成可重定位目标程序的格式,并把结果保存在hello.o中。hello.o是一个二进制文件

4)链接阶段

链接器(ld)处理某些函数存放在单独的预编译好的目标文件的情况,链接器把他们与hello.o合并,生成可执行目标文件,可以被加载到内存中,供系统执行。

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

3.1 系统的硬件组成

(1).总线

贯穿整个系统是一组电子管道,成为总线。通常总线被设计成传送定长的字节块,也就是字。(即总线传输的字节数就是字)。字中的字节数是一个系统参数,但是并不固定,可能是4个字节(32位),也可能是8个字节(64位)

(2)I/O设备

每一个I/O设备都通过一个控制器或者适配器与I/O总线相连。而控制器和适配器的主要区别就在于他们的封装方式,控制器是在主板上的芯片组,而适配器是插在主板上的卡。

(3)主存

主存是一个临时存储器,在处理器执行程序的时候用来存放程序和程序处理的数据。从物理上来讲,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来讲,存储器是一个线性的字节数组,每一个字节都有其唯一的地址,这个地址是从零开始的。

(4)处理器

中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(寄存器),称为程序计数器(PC)。在任何时刻PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。

CPU中还有两个重要的部件。寄存器文件和算数/逻辑单元(ALU)。寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。ALU用来计算新的数据和地址值。

5.高速缓存至关重要

在程序运行的过程中常常需要把数据到处复制,这会造成很大的开销,而且主存和寄存器存取的速度差别很大,这就造成了速度的减慢。

针对这种主存和处理器之间的速度差异,高速缓存寄存器(cache)被设计出来,作为暂时的集结区域,存放近期可能会需要使用的信息。高速缓存物理上利用了静态随机访问存储器(SRAM),逻辑上利用了程序的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。

(利用高速存储器存在的程序员可以利用高速缓存将程序的性能提高一个数量级)

6.存储设备形成层次结构

7.操作系统管理硬件

操作系统有两个基本功能:

1)防止硬件被失控的应用程序滥用

2)向应用程序提供简单一致的机制来控制复杂而又通常不相同的低级硬件设备。

操作系统通过进程,虚拟内存和文件这几个抽象概念来实现这两个功能。

7.1.进程

当hello这样的程序运行时,操作系统会提供一种假象,就好像系统中只有一个程序在运行。这个假象就是通过进程来实现的。

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

当操作系统决定把控制权从当前此进程转移到新的进程时,就会进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权转移到新进程,新进程就会从他上次停止的地方开始。

从一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻主存的部分。

当应用程序需要操作系统的某些操作时,比如读写文件,他就执行一条特殊的系统调用指令,将控制权转移给内核。然后内核执行被请求的操作并返回应用程序。(内核并不是一个独立的进程,相反,他是系统管理全部进程所有的代码和数据结构的集合。

7.2 线程

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

7.3虚拟内存

虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每一个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。

 

7.4 文件

文件就是字节序列,I/O设备都能堪称文件。是一种抽象的表示方法,方便程序员“一视同仁”

8 本章主要的抽象:

1)文件是对I/O设备的抽象

2)虚拟内存是对程序储存器的抽象

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

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

 

猜你喜欢

转载自www.cnblogs.com/AlanHe/p/11627655.html
今日推荐