读书笔记《深入理解计算机系统》(第三版) 第一章 计算机系统漫游
这一章节主要从整体上粗略地介绍了该书中涉及到的知识如以下几点:
1、信息的存储:比特串位;
2、C程序编译过程:
1) 源码(.c)经过预处理器得到修改后的文件(.i)(主要是扩展include或者宏替换等);
2) .i文件再经过编译器编译为汇编文件(.s);
3) .s汇编文件通过汇编器编译为目标文件(.o)(机器语言指令);
4) 若使用到其他库文件或标准共享库的目标文件,则将其与该.o目标文件经过链接器合并便得到最终的可执行文件。
按照其说法,部分编程语言的编译器可能产生的输出文件为汇编语言,而其他的部分语言则可能转化为机器语言指令。
3、典型的系统硬件组成
总线(其影响机器字长,如4字节、8字节)、I/O设备(通过相应的控制器或适配器与I/O总线相连)、主存(DRAM)、处理器(CPU)(PC程序计数器、指令寄存器、数据寄存器、
多级缓存、ALU算数/逻辑单元)。
4、鼠标、键盘信息输入流程
鼠标、键盘->USB控制器->I/O总线->I/O桥->系统总线->总线接口->寄存器->总线接口->系统总线->I/O桥->内存总线->主存储器
5、磁盘信息输入流程(采用DMA直接存储器存取技术)
磁盘->磁盘控制器->I/O桥->内存总线->主存储器
6、图形显示信息流程
主存储器->内存总线->I/O桥->系统总线->总线接口->寄存器->总线接口->I/O桥->I/O总线->图形适配器->显示器
7、处理器的高速缓存存储器
L1->L2->L3:此三级缓存依次访问速度降低,容量上升,价格降低;高速缓存可极大的提供应用程序的性能,避免某些信息的来回多次获取和传递;
存储器层次结构:按照访问速度逐渐下降、容量逐渐上升,价格逐渐降低的排序依次为:寄存器->L1高速缓存->L2高速缓存->L3高速缓存->主存->本地二级存储(磁盘)->
远程二级存储(分布式文件系统、网络服务器);
层次结构中,前者作为后者的高速缓存。
8、操作系统硬件管理
计算机系统的分层:应用程序->操作系统->处理器/主存/(I/O设备);一般情况下,应用程序操作I/O设备只能通过操作系统提供的服务接口,而针对处理器和主存则应用程序
可直接操作或与操作系统配合操作;
操作系统的基本作用:1. 防止应用程序对硬件的错误操作 2.提供给应用程序统一的访问方式,抽象底层不同的硬件设备和复杂性;
操作系统提供的抽象:进程是对处理器、主存、I/O设备的抽象表示;虚拟内存则是对主存、I/O设备的抽象表示;文件则是I/O设备的抽象表示。
9、进程、线程、上下文、虚拟内存、文件
进程:对运行的程序的抽象,并发地运行多个进程,则通过处理器在进程间切换上下文交错执行进程指令;
进程上下文:一般如PC程序计数器、寄存器文件的当前值、当前进程在主存中的内容等;进程切换由操作系统内核管理,操作系统内核为操作系统常驻主存的部分(内核不是进程,
其只是全部进程所用代码、数据结构的集合);
线程:一个进程可由多个线程的执行单元组成,所有线程运行在该进程的上下文中,共享进程的代码和全局数据;一般情况下线程比进程更高效(方便数据共享以及创建线程开销
较小等),多处理器下多线程可以有效提高程序运行速度;
虚拟进程:
1. 进程占用主存的抽象;使得每个进程看到的内存均是一致的;
2. 进程的地址空间内容就低地址(0)到高地址(~)依次为:保留区域(用于捕捉空指针、引用内存异常)->代码区
->全局数据区(已初始化数据区->未初始化数据区)->运行时堆(一般由malloc申请的空间区域)->共享库的内存映射区域->用户栈(运行时创建的)->内核虚拟内存(用户代码不可见,
该区域内的部分区域是所有进程相同的,而另一些部分是为进程给操作系统的代码和数据用的则不同)。
3. 进程的虚拟内存中,运行时堆从低地址向高地址增长(即申请时候的分配方向);用户栈则相反,从高地址向低地址扩展;在运行时堆和用户栈的中间则是共享库的内存区域,因布局的内容和堆、栈
增长方向相对,当某种内容申请或者创建超过边界,则可能导致出现堆栈溢出(TODO: 溢出边界的检查应该是在边界处插入了一个哨兵)。
文件:字节序列,linux系统下,I/O设备包括磁盘、键盘、显示器、网络等均可看做文件,系统中的所有输入输出都是通过使用Unix I/O的系统函数调用读写文件来实现。
10.Amdahl定律
加速比:S = T(old)/T(new),对系统的改进、提升,当对某部分作了改进后,系统获得的提升加速比明显小于这部分的加速比;也就是要提升整体系统的性能,需要提升系统中的大部分的加速比;
11.并发与并行
并发:一个同时具有多个活动的系统;多个线程间通过切换来执行多个活动。
并行:用并发来使得一个系统运行更快,多个活动可同时进行;
并发的系统层次:
线程级并发:1.多核处理器 2.超线程;多处理器提供性能的两个方面:1) 减少执行多个任务时模拟并发的需要(减少了线程间的上下文切换) 2) 在多线程开发的应用程序下,使得应用程序运行得更快,可并行地执行;
指令集并发:采用流水线技术,将执行一条指令所需的活动划分不同步骤,将处理器的硬件组织成一系列阶段,每个阶段执行一个不步骤,其中某些阶段可以并行地执行;此外超标量处理器可实现比一个周期执行一条
执行更快的执行速度。
单指令、多数据并行:通过某些处理器的特殊硬件,运行一条指令产生多个可以并行执行的操作,其一般用在提供处理影像声音、视频等数据应用中,以提高执行速度。
11.计算机系统的抽象
文件是对I/O设备的抽象,虚拟内存是对主存和文件的抽象,指令集架构是对处理器的抽象,进程是对指令集架构和虚拟内存的抽象,虚拟机则是对操作系统和进程的抽象。
以上的知识点只是一个概貌,此后的每个章节针对相应章节内容进行深入的探讨、分析与学习。