CS:APP第一章笔记
1 计算机系统漫游
1.1 信息就是位+上下文
- 计算机系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据及网络上传输的数据都是由一串比特表示的。
- 区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个相同的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
1.2 程序被其它程序翻译成不同形式
- 预处理阶段:预处理器(cpp)根据#开头的命令修改原始C程序,得到另一个C程序xxx.i。
- 编译阶段:编译器(ccl)将xx.i的C程序文本翻译为xx.s的汇编语言程序文本。
- 汇编阶段:汇编器(as)将xx.s翻译为机器语言指令,并将其打包成可重定位目标程序,保存在xx.o的二进制文件当中。
- 链接阶段:将程序调用的库函数合并到hello.o中,生成可执行的目标程序。
1.4 处理器读并解释储存在内存中的指令
1.4.1 系统的硬件组成
总线
- 贯穿整个系统的一组电子管道,称作总线
- 通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数(即字长)是一个基本的系统参数,常见的有4字节(32位),8字节(64位)
I/O设备
- 例子:鼠标、键盘、显示器、磁盘
- 每个I/O设备都通过一个控制器或适配器与I/O总线相连
主存
- 主存是临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
- 物理上来说,主存时一组动态随机存储器(DRAM)芯片组成的
处理器
- 中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎
- 处理器的核心是一个大小为一个字的存储设备(或寄存器),成为程序计数器(PC),PC始终指向主存中某条机器语言指令
- 处理器运行过程:执行程序计数器指向的指令更新程序计数器,使其指向下一条指令,如此反复。
1.4.2 运行hello程序
- 从键盘读取命令
- 从磁盘加载可执行文件到主存
- 处理器执行程序
1.6 存储器层次结构
1.7 操作系统管理硬件
- 操作系统的基本功能:
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
- 操作系统通过几个基本抽象概念实现这两个基本功能:
- 文件:对I/O设备的抽象表示
- 虚拟内存:对主存和磁盘I/O设备的抽象表示
- 进程:对处理器、主存和I/O设备的抽象表示
1.7.1 进程
- 上下文:操作系统保持跟踪进程运行所需的所有状态信息,这种状态称为上下文。例如PC和寄存器文件的当前值、主存的内容。
- 上下文切换:当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程上下文、恢复新进程上下文,然后将控制权传递到新进程。
1.7.3 虚拟内存
- 虚拟内存为每个进程提供一个假象,即每个进程都在独占地使用主存。
- 每个进程看到的内存都是一致的,称为虚拟地址空间。
- 虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能。
- 程序代码和数据:对所有进程来说,代码是从同一固定地址开始,紧接着的是和C全局变量所对应的数据位置
- 堆:在调用malloc和free这样的函数时,堆的大小是动态地扩展和收缩的
- 共享库:用于存放类似C标准库和数学库这样的共享库的代码和数据的区域
- 栈:用于实现函数调用,可以动态地扩展和收缩
- 内核虚拟内存:地址空间顶部的区域是为内核保留的。不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数
1.7.4 文件
- 文件就是字节序列
- 每个I/O设备都可以看成文件
1.8 系统之间利用网络通信
- 从一个单独的系统来看,网络可以视为一个I/O设备
1.9 重要主题
- 系统是硬件和系统软件互相交织的集合体,他们必须共同协作以达到运行应用程序的最终目的
1.9.1 Amdahl定律
-
主要思想:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度
-
若系统执行某应用需要的时间为。假设系统某部分所需执行时间与该时间的比例为,而该部分性能提升比例为。即该部分初始所需时间为,现在所需时间为。推出总的执行时间应为
由此计算出加速比
-
主要观点:要想显著加速整个系统,必须提升全系统中相当大部分的速度
1.9.2 并发与并行
- 并发:指一个同时具有多个活动的系统
- 并行:利用并发来使一个系统运行得更快
线程级并行
- 多处理器组织结构
- 超线程:是一项允许一个CPU执行多个控制流的技术
- 多处理器提高系统性能:
- 减少执行多个任务时模拟并发的需要
- 可以使多线程方式书写的程序运行得更快
指令级并行
- 指令级并行:现代处理器能同时执行多条指令
单指令、多数据并行
- 单指令多数据并行:允许一条指令产生多个可以并行执行的操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)