《程序员的自我修养–链接、装载与库》第一章阅读笔记
Terry.Tang 原创作品转载请注明出处 《程序员的自我修养–链接、装载与库》阅读笔记1/13
2017/4/18
一.基本概念
回顾计算机软硬件体系中的几个重要概念,在计算机繁多的硬件设备中,三个部件最为关键:重要处理器CPU、内存和I/0控制芯片。而我们程序员的目的就是充分利用这三个部分。
- 南北桥结构
1.设计原因:分离低速设备和高速设备,简化单一的北桥结构的设计成本。
2.设计方式:南桥(ISA)负责处理低速设备—Modern, Sound card, Printer等;北桥(PCI)负责处理高速设备—内存,USB接口,图形设备等;南北桥硬件结构图如下图所示:
SMP和多核
对称多处理器(SMP,Symmetrical Multi-Processing): 多个CPU并行,所处地位和功能一样,相互对称的。
缺点:我们的程序并不能同时分解成多个不相干的子问题同时运行在各个CPU上;并且成本太高
使用场合:大型数据库,网络服务器上,同时处理相互独立的大量请求
改进方式:保留多个核心,共享价格昂贵的缓存部件—–多核处理器(Multi-core Processor)系统软件
可大致分为两类:
1.平台软件—操作系统,驱动程序,运行库,系统工具(应用程序)
2.辅助程序开发—编译器,汇编器,链接器等开发工具和开发库
本书重点介绍:链接器,运行库和开发库计算机系统软件体系结构中–分层结构的几个概念:
接口(Interface):每个层次之间相互通信的通信协议,接口的下面层来提供并定义接口,接口的上面层来使用接口提供的功能—-接口尽可能保持不变,向后兼容
中间层:除了硬件和应用程序,其他都是中间层
比如:系统调用接口的实现是通过软件中断(Software Interrupt)的方式提供的,Linux—0x80中断号; Window—0x2E号中断
二.操作系统
两个功能:提供抽象的接口和管理硬件资源
1.CPU利用率
演变方式:单一运行一个程序–>多道运行程序–>分手系统—>多任务系统(使得多进程能很好共享CPU)
操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别。所有的应用程序都以进程(Process)的方式运行在比操作系统权限更低的级别,每个进程都有独立的地址空间,使得进程之间的地址空间相互隔离。
多任务系统中:目前CPU分配方式比较流行的是抢占式(Preemptive)—优先级决定2.I/O设备驱动
操作系统作为硬件层的上层,是对硬件的管理和抽象,其中的硬件设备驱动程序处理所有的硬件细节,它和操作系统内核一起运行在特权级,但和内核只有有一定的独立性。
设备驱动程序的开发工作一般由硬件厂家完成,操作系统为其提供相应的接口和框架,凡是按照这个接口和框架进行开发的驱动程序都能够。
三.内存利用
当多任务系统出现之后,CPU的利用率得到提升,那么接下来有一个明显的问题:如何将计算机上有限的物理内存分配给多个程序使用
原始的物理内存直接使用的方式存在以下几个问题:
1.地址空间不隔离:恶意的程序可以修改其他程序的内存数据,导致其他任务崩溃
2.内存使用效率低:程序执行时,监控程序需要将整个程序装入内存中开始运行,任务切换时候,内存不够,则将当前运行程序写回到磁盘中。—大量数据换入换出,效率十分低下
3.程序运行的地址不确定:内存给程序的空闲区域的位置是不确定的,不利于编写程序,因为程序编写时,访问数据和指令跳转时的目的地址很多都是固定的。
——为了解决这几个问题,增加中间层—虚拟地址,通过某些映射的方式,将整个虚拟地址转换成实际的物理地址。
1.解决隔离问题
程序的最佳执行环境:一个单一的地址空间,自己的CPU,占有整个计算机资源不用关心其他的程序。
地址空间概念:可想象成一个很大的数组,每个数组的元素是一个字节,而这个数组大小由地址空间的地址长度决定,比如32位(地址线决定是多少位)的地址空间位4GB。
地址空间可分为虚拟地址空间(Virtual Address Space) & 物理地址空间(Physical Address Space)
注意:物理地址空间可能是4G,但是可能由于内存条只有2G,所有有效的物理地址就只是前面2G了
解决地址空间不隔离和运行地址不确定的方式——-分段(Segmentation)分段(Segmentation)
由操作系统设置映射函数,实际由硬件完成,将程序所需要的内存大小的虚拟空间映射到某个地址空间。
解决内存使用效率低下的问题——-分页(Paging)
分页(Paging)
概念:把地址空间(虚拟&物理)人为地等分成固定大小的页,每一页的大小由硬件决定,或者硬件支持多种大小的页,由操作系统来选择决定页的大小。
当我们把进程的虚拟地址空间按页分割,把常用的数据和代码页装载到内存中,把不常用的代码和数据保存到磁盘中,在需要用的时候再把它从磁盘中取出来即可(页错误中断)。
注意:虚拟存储的使用依靠MMU的部件(集成在CPU内部)来完成页映射。