第一章 计算机系统漫游
执行一个hello world程序的步骤:
(1)第一步,shell中键入"./hello"字符串之后,字符串先到寄存器,再到内存。具体来说是:键盘 --> I/O桥 --> 总线接口 --> 寄存器–> 总线接口 --> I/O桥 -->** 内存**。
(2)第二步,键入回车。从磁盘把可执行文件运输到内存中,利用DMA技术可以不通过CPU把数据直接从磁盘读入内存。
(3)可执行文件加载到内存之后,CPU开始执行,执行的过程是将代码运输到寄存器中执行,最后将字符串复制到显示设备。
总结一下:①hello程序的机器码最初在磁盘上,加载时复制到内存,运行时复制到处理器(主要是寄存器里)②类似的,字符串“hello, world \n”最初在磁盘上,加载时复制到内存,运行时复制到显示屏上
阅读本书比较重要的帮助有:①学习优化C代码的窍门,以充分利用现代处理器和存储器系统的设计。②了解编译器如何实现过程调用,利用这些知识来避免缓冲区溢出。③并发,在“单芯片集成多处理器核”的时代越来越重要,了解并发带来的希望与陷阱。
C语言是系统级编程的首选,也非常适用于应用级编程,但是它缺乏对非常有用的抽象的显式支持,例如类、对象和异常。
总线被设计成传送定长的字节块,也就是字。32位机器字长是4字节,64位机器字长是8字节。
DRAM常用来做内存(主存),SRAM常用来做高速缓存。
计算机硬件可以分为3类:处理器、I/O设备、内存,应用程序不直接操作硬件,而是通过操作系统,操作系统有两个主要设计目的:①防止硬件被失控的程序滥用。②给应用程序提供统一的API来控制复杂且大不相同的低级硬件设备。
为了实现以上操作系统的两个目的,引入了三个抽象概念:进程、虚拟内存、文件。
进程间切换:操作系统在实现这种交错执行的机制成为上下文切换,上下文切换是由操作系统内核管理的,内核是操作系统代码常驻主存的部分。
内核不是一个独立的进程,相反,内核是系统管理全部进程所用代码和数据结构的集合