Loading... # 深入理解计算机系统 笔记 ## 第一章 计算机系统漫游 ### 信息就是位 + 上下文 位 = bit 8位 = 8bit = 1byte = 1字节 ### 程序被其他程序翻译成不同的格式 - 源程序 `hello.c` -> 预处理器 (cpp) - hello.i -> 编译器 (ccl) - hello.s -> 汇编器 (as) - hello.o (bin) - printf.o (bin) - ... -> 链接器 (ld) - hello可执行目标程序 (bin) #### 预处理阶段 读取源程序的头文件的内容,插入程序文本,得到另一个C程序 hello.i #### 编译阶段 将程序翻译成汇编语言,包含程序main的定义,hello.i -> hello.s #### 汇编阶段 将汇编语言翻译成机器语言指令,并将指令打包成 `可重定位目标程序`,hello.s -> hello.o (bin) #### 链接阶 程序中调用的函数存在于标准C库中,而该函数存在于单独预编译好的目标文件中 链接器负责将这类文件合并到我们的程序中,之后得到 `可执行目标文件` ### 了解编译系统如何工作是大有益处的 不要教编译器优化代码 ### 系统的硬件组成 - 总线 - I/O设备 - 主存 (内存) - 处理器 #### 总线 贯穿整个系统的电子管道,负责在各个部件之间传递信息字节。 总线被设计成传送定长的字节块,也就是 `字` 字长是操作系统的基本参数: 8位 = 字节 16位 = 字 32位 = 双字 64位 = 四字 #### I/O设备 I/O设备时系统与外部世界的联系通道。 每个I/O设备都通过一个控制器或适配器与I/O总线相连,两者的区别在于封装方式的不同。 控制器是I/O设备本身或主板的芯片组;适配器是插在主板上的卡。 #### 主存 主存由DRAM芯片组成 逻辑上可看成线性的字节数组,没个字节都有唯一的地址 (数组索引) #### 处理器 CPU 是解释或执行储存在主存中指令的引擎。 其核心是一个大小为一个字的 `寄存器 `,称为 `程序计数器 (PC)` PC指向主存中含有该条指令的地址。 从通电开始到断电技术,处理器一直在不断地执行PC指向的指令,再更新PC指向的地址。 处理器按照指令执行模型来操作,这个模型由 `指令集架构` 决定。 解释或执行指令的操作围绕着 主存,寄存器文件和算数/逻辑单元 (ALU) ### 高速缓存 现代处理器主要分为 L1, L2, L3 三级缓存,而 L0 指的是CPU寄存器。速度逐级减少。 ### 进程 进程是操作系统对一个正在运行的程序的一种抽象。 在一个系统上可以同时运行多个进程,而每个进程都好像在独占硬件。 `并发` 是说一个进程的指令和另一个进程的指令时交错执行的。 无论在单核还是多核系统中,一个CPU看上去都是在并发的执行多个进程,这是通过处理器在进程间的切换来实现的。 操作系统实现这种交错执行的机制成为 `上下文切换` 。 #### 上下文切换 当系统决定要把控制权从当前进程转移到某个新进程时,就会执行 `上下文切换` 即 保存当前进程的上下文、恢复新进程的上下文、将控制权转移到新进程,新进程会从它上次停止的地方开始。 上下文切换的操作是由操作系统的 `内核`管理的 内核不是独立的进程,它是系统管理全部进程所用代码和数据结构的集合 ### 线程 在现代操作系统中,一个进程实际上可以由多个称为 `线程` 的执行单元组成 ### 虚拟内存 虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在 独占主存,每个进程看到的内存都是一致的,称为 `虚拟地址空间` 虚拟内存的进本思想是把一个进程虚拟内存的内容存储在硬盘上,然后用主存作为高速缓存 #### 虚拟地址空间 ##### 程序代码和数据 对所有进程来说,代码是从同一固定地址开始 代码和数据区在进程开始时就被置顶了大小 ##### 堆 堆可以在进程运行时动态地拓展和收缩 ##### 共享库 存放C标准库之类的共享库代码和数据的区域 ##### 栈 编译器用栈来实现函数调用,栈在程序执行期间可以动态的拓展和收缩 特别的,每当我们调用一个函数时,栈就会增长;从一个函数返回时,栈就会收缩 注:方法的压栈和弹栈 ##### 内核虚拟内存 地址顶部空间区域是为内核保留的 不允许应用程序读写或直接调用内核代码定义的函数,相反的,应该通过调用内核,通过内核来执行函数 ### Amdahl定律 $$ S=\frac{1}{(1-\alpha)+\alpha/k} $$ 当我们对系统的某个部分加速时,其对系统整体性能得影响取决于该部分的重要性和加速程度。 想要显著加速整个系统,必须提升全系统中相当大的部分的速度。 ### 并发和并行 #### 并发 指一个同时具有多个活动的系统 #### 并行 指使用 `并发` 来使一个系统运行得更快 - 线程级并发 - 指令级并行 - 单指令、多指令并行 ### 计算机系统中的抽象 - 文件 - I/O设备的抽象 - 虚拟内存 - 程序存储器的抽象 - 进程 - 正在运行的程序的抽象 - 虚拟机 - 整个计算机的抽象 最后修改:2022 年 12 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 6 本作品采用 CC BY-NC-SA 4.0 International License 进行许可。
1 条评论
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。