本章节为《深入理解计算机系统》第三版的个人导读,参考B站up主-九曲阑干与深入理解计算机系统01——计算机系统漫游
这一节讲述的基本思想是:系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传输的数据都是由一连串比特位表示的。区分不同数据对象的唯一方法就是我们读到这些数据对象时的上下文。比如在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
先导:hello.c程序的生命周期是从一个高级C语言程序开始的,这是由人编写的,机器不懂,所以必须将它翻译成一个可执行目标文件hello。
编译系统:预处理器、编译器、汇编器和链接器。过程如下所示:
优化程序性能,理解链接时出现的错误,避免安全漏洞。
在上面,我们得到了hello可执行目标程序,接下来就要去shell执行它:linux> ./hello
用的图是上面的图。运行hello程序的过程:1.在shell中输入指令,shell会将你输入的逐一读入寄存器,再存放到内容中,也就是主存储器。2.当我们敲击回车时,shell知道已经结束输入,然后执行一系列命令来加载可执行的hello文件,这些指令会将文件从磁盘复制到内存(第六章会有新技术)。3.文件到了主存之后,处理器就开始执行main中的指令。这一些指令将“hello,world\n”从主存中复制到寄存器文件,再从寄存器文件中复制到显示设备。
这一节将了运行一个程序要搬来搬去的很麻烦,所以要很快很快的存储设备。所以针对这个,引出了高速缓存存储器。如下图:
这一节就一个图,很容易看懂的:
操作系统有两个基本功能:1.防止硬件被失控的应用程序滥用;2.向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。操作系统通过基本的抽象概念(进程,虚拟内存,文件)来实现这两种功能。
进程是对操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程地指令和另一个进程地指令是交错执行地。在大多数系统中,需要运行的进程总数是可以多于运行它们的CPU总数的。
尽管通常我们认为一个进程只有单一的控制流,但是在现代系统中,一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
第九章的内容。
文件就是字节序列,仅此而已。每个I/O设备,包括键盘,磁盘,显示器,网络等都可以看作为文件。
线程级并发、指令级并行、单指令,多数据并行。
并发:传统意义上,并发是模拟出来的是由计算机在运行的进程建快速切换来实现的,是一个处理器在同时处理多个任务。
并行:并行是指多个处理器同时处理多个不同的任务。
无
计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位,它们依据上下文由不同的解释方式。程序被其他应用程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件。
处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O设备和CPU寄存器之间复制数据,所以将系统中的存储设备划分为层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在层次结构中,位于更高层的存储设备比低层的存储设备要更快、单价比特造价也更高。层次结构中较高层次的存储设备可以作为较低层设备的高速缓存。通过理解和运用这些存储层次结构的知识,程序员可以优化C程序的性能。
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象:1.文件是对I/O设备的抽象;2.虚拟内存是对主存和磁盘的抽象;3.进程是处理器、主存和I/O设备的抽象。
最后,网络提供了计算机系统之间通信的手段。从特殊系统的角度来看,网络就是一种I/O设备。