Johnny

博观而约取
厚积而薄发

《深入理解计算机系统》之计算机系统漫游

u=593542405,3494658384&fm=26&gp=0.jpg

计算机系统漫游

信息就是位+上下文

源程序设计上就是一个由值0和1组成的位(又称比特)序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。大部分的现代计算机系统都实用ASCII来表示每个文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。

基本思想:系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特进行表示的。区分不同的数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。

源文件到目标文件的转化

从源文件到目标文件的转化是由编译器驱动程序完成的

从源文件到目标文件的翻译一共需要分为四个阶段,执行这四个阶段的程序(预处理器、编译器、汇编器和链接器)一起构成了编译系统

  • 预处理阶段

预处理器(cpp)根据以字符#开头的命令,修改原始的C语言程序。(相当于完成所有宏命令的引入)

  • 编译阶段

将C语言编译成为汇编语言

  • 汇编阶段

汇编器将汇编语言翻译成为机器语言指令

  • 链接阶段

链接阶段时将系统函数库进行引入,链接器就负责处理这种合并。结果将生成一个可执行部目标文件,可以被加载到内存中,由系统进行执行。

知道编译系统工作有哪些好处

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

系统的硬件组成

  1. 总线

贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间进行传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在大多数机器字长要么是4个字节(32位),要么是8个字节(64位)

  1. I/O设备

I/O(输入/输出)设备是系统和外部世界的联系通道。每个I/O设备都通过一个控制器或/适配器与I/O总线相连。控制器和适配器之间的区别主要是在于它们的封装方式。控制器是I/O设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是在I/O总线和I/O设备之间进行传递信息。

  1. 主存

主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。

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

  1. 处理器

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

高速缓存

针对处理器和主存在速度方面的差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器,作为暂时的集结区域,存放处理器近期可能会需要的信息。

L1和L2高速缓存是用一种叫做静态随机访问存储器的硬件技术实现的。比较新的、处理能力更强大的系统甚至用三级高速缓存:L1、L2、L3。系统可以获得一个很大存储器,同时访问速度也很快,原因是利用了高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。通过让高速缓存里存放可能经常访问的数据,大部分内存操作都能在快速的高速缓存中完成。

存储器的层次结构

  1. 寄存器
  2. L1高速缓存(SRAM)
  3. L2高速缓存(SRAM)
  4. L3高速缓存(SRAM)
  5. 主存(DRAM)
  6. 本地二级存储(本地磁盘)
  7. 远程二级存储(分布式文件系统,Web服务器)

操作系统管理硬件

  • 文件是对I/O设备的抽象表示
  • 虚拟内存是对主存和磁盘I/O设别的抽象表示
  • 进程是对处理器、主存和I/O设备的抽象表示

进程

上下文:操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文,包括许多信息,比如PC和寄存器文件的当前值,以及主存的内容。

上下文切换:在任何一个时刻,单处理器的系统都只能执行一个进程的代码。当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程。新进程就会从它上次停止的地方继续开始。

从一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻内存的部分。注意:内核并不是一个独立的进程,相反,它是系统管理全部进程所用代码和数据结构的集合。

线程

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

虚拟内存

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

文件

文件就是字节序列,仅此而已。每一I/O设备,包括磁盘、键盘、显示器,甚至网络,都可以看成是文件。

Amdahl定律

主要思想:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。

主要观点:要想显著加速整个系统,就必须提升全系统中相当大的部分的速度。

并发和并行

  • 并发:两个任务交替执行
  • 并行:两个任务同时执行

多核处理器是值将多个CPU集成到一个集成电路芯片上。

小结

计算机系统由硬件和软件组成,它们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位,它们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式,开始时时ASCII文本,然后被编译器和链接器翻译成二进制可执行文件。

处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O设别和CPU寄存器之间复制数据,所以将系统中的存储设备划分成层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和硬盘存储器。在层次模型中,位于更高层的存储设备比底层的存储设备要更快,单位比特的造价也更高。层次结构中较高层次的存储设备可以作为较低层次设备的高速缓存。通过理解和运用这种存储层次结构的知识,程序员可以优化C程序的性能。

操作系统内核是应用程序和硬件之间的媒介。它提供了三个基本的抽象:文件是对I/O设备的抽象,虚拟内存是对主存和磁盘的抽象,进程是处理器、主存和I/O设备的抽象。

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

本原创文章未经允许不得转载 | 当前页面:Johnny-韩源-期待与你分享生活的每一天 » 《深入理解计算机系统》之计算机系统漫游

评论