当我开始阅读《深入理解计算机系统》时,我意识到可能有些晚,但我知道现在就是最好的时候。相较于之前读的《JavaScript语言精髓与编程实践》,这本书的文字更加舒适、更耐读。
不过我没有放弃《JavaScript语言精髓与编程实践》,因为书中包含了很多深度的内容等待我去探索,但我现在想先放松一下,读一下《深入理解计算机系统》来缓冲一下大脑。
我们致力于搞懂写一个 Hello 的程序,我们通过跟踪 hello 程序的生命周期,从它的创建、运行、输出消息到终止,来学习在系统上执行程序时发生了什么以及为什么会这样。
程序的生命周期始于一个源文件 hello.c,这是我们通过编辑器保存的文本文件,实际上是由 0 和 1 组成的位序列,每 8 个位组成一组,被称为「字节」,每个字节表示程序中的某些文本字符。
当我们写一段程序时,这段程序会如何在计算机上执行呢?
我们需要将每一条写过的语句转换成一系列低级的机器语言指令,就是转成 0、1 这样的文本文件。然后这些指令打包成二进制文件,然后存储到磁盘,这样就变成了可执行文件。
这个流程就是编译系统,它由四个阶段组成:预处理阶段、扫描阶段、汇编阶段和链接阶段。
预处理阶段会修改原始程序,将所有的宏定义展开,将所有引用的文件插入到程序文本中。
扫描阶段将文本文件翻译成另一种文本文件,也就是翻译成汇编语言。
汇编阶段将汇编语言翻译成机器语言,如果我们用编辑器打开可执行文件,会看到一堆乱码。
大容量存储设备的运行速度相对较慢,而小容量、高速设备的价格却高于同类低速设备。
例如,磁盘驱动器的价格可能是存储器的 1000 倍,但对于处理器而言,从磁盘驱动器读取一个字所需时间开销比从存储器中读取要大 10,000,000 倍。
为了解决处理器与存储器之间的差异,系统设计者采用了高速缓存存储器(cache memory)来存放可能需要的信息。
当前端请求后端文件后,文件被缓存到 cache memory 中,所以我们再次访问文件会提示文件来源于 cache memory 中,而我们需要访问的文件存储在 cache memory 中,访问速度也大大加快了。
计算机系统中的存储设备被组织成了一个存储层次结构。从上到下,设备的访问速度越来越慢,容量越来越大,并且每个字节的造价也会越来越便宜。
这个层次结构以金字塔的形式展现,最上面是 CPU 寄存器,最下面是磁盘二级存储设备。
L0 寄存器属于CPU内部的高速缓存,速度非常快,容量也非常有限,但是造价很高。L1、L2 高速缓存的速度比主存快得多,但是容量也比主存小很多,造价也比主存高。主存的速度比磁盘等二级存储设备快得多,但是容量比高速缓存小很多,造价也比高速缓存高。本地磁盘存储的容量比主存大很多,但是速度比主存慢得多,造价也比主存低。远程二级存储的容量比本地磁盘存储更大,但是速度更慢,造价也更低。存储层次结构的主要思想是上一层的存储器作为下一层存储器的高速缓存。例如,寄存器文件就是 L0 的高速缓存,L1 是 L2 的高速缓存,L2 是主存的高速缓存,主存又是磁盘二级存储设备的高速缓存,在某些具有分布式文件系统的网络中,本地磁盘存储就是存储在其他系统中磁盘上的数据的高速缓存。操作系统是应用程序和硬件之间的中间层,它通过进程、虚拟内存和文件等基本抽象概念来实现功能。文件是对I/O设备的抽象,虚拟内存是对内存和磁盘I/O设备的抽象,进程则是对正在运行的程序的抽象。通过这些抽象,操作系统使得应用程序可以方便地访问系统资源,并且可以同时运行多个程序。进程是操作系统对正在运行的程序的抽象,一个系统可以同时运行多个进程,每个进程都好像在独占硬件资源。无论在单核还是多核系统中,CPU都会看上去在执行多个进程,这是通过处理器在进程间切换来实现的。操作系统管理这种交替执行机制,被称为上下文切换。进程的转换是由操作系统内核管理的。虚拟内存是为每个进程提供一个虚拟的地址空间,使得每个进程都可以独占使用内存,而且每个进程看到的内存都是一致的。虚拟地址空间中最上面的区域是保留给操作系统中的代码和数据的,这对所有进程来说都是一样的。文件是计算机系统中的一个重要概念,每个文件都可以包含磁盘、键盘、显示器以及网络等各种输入输出设备。所有输入输出都是通过一小组名为 Unix I/O 的系统函数调用读写文件实现的。文件的概念非常强大,它为应用程序提供了一个统一的接口,使得程序可以处理系统中可能存在的各种格式和类型的设备。随着全球网络的发展,计算机系统中最重要的用途之一就是通过网络从一台主机复制信息到另一台主机。例如,电子邮件、即时通讯、FTP等应用就是基于网络复制信息的功能。从单个系统的角度来看,网络可以被看作是一个 I/O 设备。当系统将一串字节从存储器复制到网络适配器时,数据流经过网络到达另一台机器,而不是到达本地磁盘驱动器。系统可以读取从其他机器发送来的数据,并将数据复制到自己的存储器中。计算机系统包含「缓存器、寄存器、操作系统、网络通信」等几个方面,我们会在后面的文章来逐步梳理书中的内容。
题图生成于:Stable Diffusion
内容优化使用 Notion AI
内容来源于《深入理解计算机系统》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34569.html