llsdog 发表于 2025-11-2 13:29:45

<<深入理解计算机系统第三版>>第一章导读

本帖最后由 llsdog 于 2025-11-2 13:40 编辑

CS:APP3e 第一章:
计算机系统漫游CS:APP的第一章并不是从计算机系统底层架构开始, 而是使用了一个巧妙的手法从C语言的Hello World程序的编译运行过程直达系统底层, 这也正符合书名中的"程序员视角", 然后再去阐述底层的各个部分, 作为之后进一步带着优化的目的去探索计算机系统的前言, 所以我打算详解此程序的底层执行流程来更加深入理解计算机系统
hello.c的编译与运行

Step 1.编译
一个内容为打印出Hello World的名为hello.c的程序:
编译系统的四个阶段
[*]预处理阶段:cpp → hello.i
[*]编译阶段:ccl → hello.s
[*]汇编阶段:as → hello.o
[*]链接阶段:ld → hello


此时hello.c就完成了编译, 等待执行

Step 2.
在shell键入"hello"的过程典型的计算机系统硬件组织结构如下图所示(以单核为例)
https://llsdog.cn/wp-content/uploads/2025/09/image.png
在原书中, 此时阐述大量概念和过程, 放进来阅读体验不好, 所以我选择继续绘制刚刚的hello执行的流程, 使初学者也能初步理解底层基础知识


键入"hello后按下回车, shell执行一些指令, 下一步硬件将会读取hello这个二进制程序"

Step 3.
硬件读取hello二进制程序过程如下
https://llsdog.cn/wp-content/uploads/2025/09/image-1.avif


这样, hello被读入主存等待执行

Step 4.
hello被执行过程如下
https://llsdog.cn/wp-content/uploads/2025/09/image-2.avif


这样, hello被逐步读取进CPU执行, 并在屏幕上显示Hello World

小结.
此过程从硬件和系统层面向你详细的描述了一个hello.c从编译到执行的过程, 但这只是一个简化的模型, 事实上, 现代处理器采用了许多技术来优化和加速这些过程, 可以观察到, 此过程中, 有以下部分起到了关键作用

[*]缓存和存储设备
[*]系统对硬件行为的控制


缓存和存储设备.
前言
你可能注意到, 在命令执行过程中, 命令实际上会在不同的存储设备间移动, 这种移动通常会花费大量的时间, 所以增加存储设备的读写速度是加速运行的关键之一, 但是读写速度越快的存储设备, 造价就越昂贵, 于是, 就有了存储空间大于寄存器, 读写速度大于磁盘的被称为缓存的存储设备出现了, 常常采用多级缓存来使储存大小和读写速度达到平衡, 缓存的存在缩小了文件复制和移动的时耗, 增加了计算机的运行速度
存储设备层级由于存储设备造价的关系, 同一计算机中的存储设备一般保持着存储空间越大, 读写速度越小的关系, 于是便有了如下层级图, 位于层级图上面的存储设备一般读写速度更快但存储空间更小
https://llsdog.cn/wp-content/uploads/2025/09/image-1.png
L1, L2, L3高速缓存一般用于加快主存和寄存器间的文件复制速度, 一般直接与寄存器交互
L1, L2, L3高速缓存形成了一个存储层次结构:

[*]L1缓存: 最接近CPU, 容量最小但速度很快
[*]L2缓存: 容量和速度介于L1和L3之间
[*]L3缓存: 通常为多核共享, 容量最大但相对较慢
这种层次结构利用了程序的局部性原理来提高整体性能

操作系统和硬件.
前言
hello.c的编译和执行需要硬件, 但是却不能直接与硬件交互, 一般都是通过操作系统提供的接口, 所以, 系统理所当然是优化的一部分
https://llsdog.cn/wp-content/uploads/2025/09/image-2.png
操作系统通过向外抽象硬件来规范行为和统一操作, 如下图
https://llsdog.cn/wp-content/uploads/2025/09/image-3.png
进程.
当有两个进程在单核上进行时, 通常被抽象为两个进程同时进行, 但实际上不同进程是交叉执行的
https://llsdog.cn/wp-content/uploads/2025/09/image-4.png
线程.
一个进程可以有不同的线程处于运行状态, 但是属于同一个进程的不同线程只能运行在不同处理器上
虚拟内存虚拟内存是对一个进程所使用的不同存储设备的总存储空间的抽象概念, 通常包含如下被精准分开的区
https://llsdog.cn/wp-content/uploads/2025/09/image-5.png
文件.
文件就是字节序列, 每个I/O设备,包括磁盘、键盘、显示器,甚至网络,都可以看成是文件, 为系统,硬件,软件的交互提供了一种规范
网络概述网络也可被视为一个I/O设备, 你可以向网络存储, 也可在网络取出, 通过网络可以让不同系统或计算机不再孤立, 而是相互连接
以下是一个远程运行hello的示例图
https://llsdog.cn/wp-content/uploads/2025/09/image-3.avif

一些其他重要概念
Amdahl定律.
一种描述对一系列过程的某一部分优化给整体带来的影响的公式, 对计算机层面的优化起到了一定指导作用, 这里不再赘述
并行和并发.
并发是一个概念, 指一个同时有不同活动的系统
并行是指用并发来使系统运行的更快
多核处理器多核处理器可实现更快地并发, 结构如下
https://llsdog.cn/wp-content/uploads/2025/09/image-6.png
抽象.
抽象是计算机科学中一个很重要的概念, 如操作系统对硬件的抽象
https://llsdog.cn/wp-content/uploads/2025/09/image-7.png
总结.
通过追踪一个简单的hello.c程序从源码到执行的完整过程,我们揭开了计算机系统底层的面纱, 这个看似简单的"Hello, World"程序,实际上触发了一系列复杂而精妙的系统行为:


[*]编译链接:源码经历预处理、编译、汇编、链接四个阶段,最终生成可执行文件
[*]存储层次:程序在寄存器、缓存、主存、磁盘间不断迁移,存储系统的层次化设计平衡了速度与容量的矛盾
[*]系统抽象:操作系统通过进程、虚拟内存、文件等抽象概念,为我们屏蔽了硬件的复杂性
[*]并发执行:看似同时运行的多个程序,实际上通过时间片轮转和多核并行来实现


ps. 本文中部分简化的硬件图是我用绘图软件做的, 如有错误请指出
文章原地址: CS:APP3e 第一章概述笔记 - llsdog的博客
第二章很长而我又太摆, 所以可能会很慢, 孩子们
https://llsdog.cn/wp-content/uploads/2025/08/微信图片_20250615212728.jpg

老梦站长 发表于 2025-11-2 15:00:31

强大:handshake(๑•̀ㅂ•́)و✧

llsdog 发表于 2025-11-2 15:36:40

老梦站长 发表于 2025-11-2 15:00
强大(๑•̀ㅂ•́)و✧

并非
页: [1]
查看完整版本: <<深入理解计算机系统第三版>>第一章导读