深入理解计算机系统第一章:计算机系统漫游

深入理解计算机系统第一章:计算机系统漫游

计算机由硬件和系统软件组成。

​ 这一章正如他的题目一样,是粗略的漫游了计算机系统,相当于是为后面章节的具体阐述做起始性的总结。

​ 首先可以知道,信息就是位加上下文。系统中的所有信息,都是由一串比特(bit)序列组成的,即由0或者1组成的位序列,8个一组称为字节(byte),程序中一般用ASCII码的标准来表示文本字符,也就是用单字节大小的整数值来表示字符。区分不同数据对象的唯一方法是我们读到这些对象的上下文,因为不同数据类型,如浮点数,整数,字符串或者机器指令等等可能是同样的字节序列组成的。

​ 其次是程序被不同程序翻译成不同的格式。就拿一个C语言的生命周期来说:写好的.c程序先被预处理器预处理,也就是处理#开头的命令,读取头文件呀,宏定义诸如此类的,编译器将.c这个文本文件翻译成汇编指令,再由汇编器将其翻译成机器语言,最后链接器将其他的预编译好的文件并入生成可执行目标文件。之后的学习要去明白如何优化程序性能,理解链接时出现的错误,学习如何避免安全漏洞。

​ 一个程序的执行首先是通过shell去解释,shell是一个命令行解释器,输出提示符等待输入,若输入不为内置shell命令,则会加载并执行文件。这里从硬件角度去看程序如何执行。当我们输入./***执行这个可执行文件时,通过键盘(I/O设备)将命令字符串读入寄存器,然后再存放入内存,指令结束,输入回车,shell程序得知我们结束命令的输入,于是从磁盘(I/O设备)将目标文件中的代码和数据从磁盘复制到主存,复制完毕后,处理器开始执行目标程序main程序中的机器语言指令,最后将输出结果复制到寄存器,再从寄存器复制到显示器(I/O)设备。整个步骤覆盖了系统的主要硬件组成,即总线(贯穿系统,传递字节信息)、I/O设备(输入输出,计算机与外界的联系通道)、主存(临时存储设备)、处理器(CPU,解释或执行存储在主存中指令的引擎)。

​ 从整个过程中可以发现,数据的传递会花费大量的时间,所以CPU中有了高速缓存处理器,存放近期可能会需要的信息,高速缓存中也分级,L1、L2、L3,级数越高,访问速度越快,但即是最低级数的高速缓存,访问速度也成倍地快于主存。每个计算机系统中地存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上至下,设备地访问速度越来越慢、容量越来越大、并且每字节的造价也越便宜。存储器层次结构的主要思想就是上一层的存储器作为低一级存储器的高速缓存,可以利用对此的理解来提高程序性能。

​ 在执行文件的时候,shell和目标文件都没有直接访问I/O设备,主存等等,这其中是操作系统提供的服务。操作系统有两个基本功能:防止硬件被失控的程序滥用向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。操作系统通过进程虚拟内存文件这几个基本的抽象概念来实现这两个功能。

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上,多个程序并发,也就是交错着执行,这种机制称为上下文切换。上下文也就是进程运行所需的所有状态信息,系统通过保存当前进程的上下文,恢复另一进程的上下文来并发的执行多个进程。一个进程实际上可以由多个称为线程的执行单元组成,线程共享同样的代码和全局数据。因此多线程之间比多进程之间更容易共享数据,线程也一般都比进程高效。

虚拟内存是一个抽象概念,每个进程看到的内存都是一致的,称为虚拟地址空间。如Linux的虚拟地址空间结构就是程序代码和数据区(存放代码和全局变量)、(FIFO,地址由低到高)、共享库(FILO,地址由高到低)、内核虚拟内存(内核使用,程序无读写权限)组成的。

文件就是字节序列。可以说文件向程序提供了一个统一的视图,来看待系统中可能含有的所有各式各样的I/O设备。

​ 系统之间利用网络通信。

系统不仅仅只是硬件。系统是硬件和系统软件相互交织的集合体,他们必须共同协作以达到运行应用程序的最终目的

​ 为了两个需求:计算机做的更多,计算机运行的更快,因此三个层次并行与并发来达到目的,线程级并发指令级并行单指令多数据并行

计算机系统中的一个重大主题就是提供不同层次的抽象表示,来隐藏实现的复杂性。文件是对I/O设备的抽象、虚拟内存是对程序存储器的抽象、进程是对正在运行的程序的抽象、虚拟机是对整个计算机的抽象。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2022-2023 Syclover.Kama
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信