【读书笔记】《深入理解计算机系统》第一章 计算机系统漫游
一、编译过程
-
源程序
.c源程序是一个文本 -
预处理
处理#开头的预处理命令,获得预处理后的文本 -
编译
将.i文本文件翻译成.s文本文件
.s文件是一个汇编语言程序 -
汇编
将.s文件翻译成机器语言指令,获得.o二进制文件 -
链接
合并调用的库函数的.o文件,最终获得可执行目标程序
.exe也是二进制文件
二、处理器是如何读和解释内存中指令的
1.系统的硬件组成
-
总线
功能:贯穿整个系统的一组电子管道,在各个部件间传递信息字节。字长:总线通常传送定长的字节块,就是字。字长是一个基本的系统参数,如64位(8字节),32位(4字节)。
-
I/O设备
功能:系统与外界联系媒介。图中的键鼠、显示器、磁盘都是I/O设备。I/O设备通过控制器或适配器和总线相连。
控制器是I/O设备或系统的电路板上芯片组
适配器是插在主板插槽上的卡 -
主存
临时储存设备,在处理器执行程序时,存放程序和数据。物理上说由一组DRAM芯片组成。
逻辑上说是一个线性的字节数组,索引从0开始。 -
CPU
解释或执行主存中指令的引擎。核心是程序计数器PC,任何时刻,PC都指向主存中某条机器指令的地址。
从系统通电开始,CPU执行PC指向的指令,然后PC指向下一条指令。
寄存器临时存储字节数据,ALU对数据进行算术运算。
2.hello程序是如何执行的
当我们给计算机指令执行程序时:
①可执行文件经由总线被读到主存里。
②处理器开始执行机器语言指令。
③字符串从主存复制到寄存器文件,再从寄存器文件复制到显示器上。
三、高速缓存
1.为什么需要高速缓存
为了加快程序工作速度,需要使得数据的复制操作尽可能快地完成。
根据机械原理,大存储设备比小存储设备运行速度慢,而高速设备造价远高于同等的低速设备。因此为了在效率和成本之间找到平衡,我们采用更小更快的存储设备——高速缓存存储区cache来存放近期可能使用的信息。
在CPU和大而慢的存储设备(如主存)间加一个较小的cache是一个普遍的观念。
2. 计算机存储器层次结构
计算机中存储设备事实上都被组织成了一个层次结构。
四、操作系统对硬件进行管理
应用程序通过操作系统来对硬件进行操作。
操作系统通过几个基本的抽象概念来实现自己的功能。
文件-对I/O设备的抽象
虚拟内存-对I/O设备和主存的抽象
进程-对I/O设备、主存和CPU的抽象
1.进程和线程
进程是操作系统对一个正在运行的程序的一种抽象。
并发:进程间指令交错执行
并发通过进程间切换来实现,称为上下文切换。
上下文:进程运行所需所有状态信息
上下文切换:保存当前进程上下文,恢复新进程的上下文,然后把控制权交给新进程。
进程的切换由操作系统内核Kernel来管理。
内核:操作系统代码常驻主存的部分。
内核不是一个进程,是系统管理全部进程所用的代码和数据结构的集合。程序需要操作系统提供的某些操作时,就通过系统调用指令把控制权交给内核,然后内核执行操作后返回应用程序。
进程可以由多个称为线程的执行单元组成。
线程都运行在进程的上下文中,共享进程的数据和空间。
多线程比多进程更好共享数据,线程一般而言也比进程高效。
2.虚拟内存
虚拟内存是一个抽象的概念。它为每个进程提供一种独占内存的假象。
每个进程看到的内存都是一样的,称为虚拟地址空间。
-
程序代码和数据
所有进程的代码都是从同一固定地址开始,然后是C全局变量对应地址。 -
堆
动态分配的。 -
共享库
存放C标准库和数学库等共享库的代码和数据。 -
栈
用于函数调用。
调用一个函数,栈增。从一个函数返回,栈缩。 -
内核
3.文件
就是字节序列,每个I/O设备都可看作是一个文件。
文件的概念为应用程序提供了一个统一的视图来看待各种I/O设备。
对于一个单独的系统而言,网络也可视作一个I/O设备,自然也可以视为一个文件。
五、其他
1.Amdahl定理
计算提升系统某一部分性能对系统整体性能提升的影响。
2.并行和并发
并发:同时具有多个活动的系统。
并行:使用并发来让系统运行得更快。
-
线程级并发
①单处理器系统:单操作系统+单处理器。
②多处理器系统:单操作系统+多处理器。
③多核处理器:多个CPU集成到一个芯片上。
④超线程(同时多线程):允许一个CPU执行多个控制流。常规处理器需要大概20000个时钟周期来进行线程切换。
超线程处理器可以在单个时钟周期基础上决定执行哪个线程。 -
指令级并行
可以同时执行多条指令。 -
单指令、多数据并行
即SIMD,允许一条指令产生多个可以并行执行的操作。
如:float的加法运算。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)