第一章计算机系统漫游_CSAPP学习笔记
第一章计算机系统漫游
注:这篇笔记并 不是为了让你在看过书的情况下直接读笔记就能学会CSAPP,这篇笔记并不会写得比原书更好,笔记是对书本知识的要点的提炼,并且带有很强的主观性,本人也是只初学者,如有偏颇,请多多见谅。
1.1信息就是位 + 上下文
程序以字节序列的方式储存在文件中,我们输入的每一个字母,每一个符号,都对应这ASCII码表中的一个整数值,将该整数值转换为一个二进制字节序列。因此我们可以说系统中的所有信息,都是由一串比特表示的
疑问
这里的上下文是指 int double 这样的上下文吧
1.2 程序被其他程序翻译成不同的格式
将.c文件翻译成可执行文件的四个阶段
四个阶段的具体含义
预处理:将头文件(stdio.h)的内容 插入程序文本中,得到另一个c程序,但是以.i 作为文件拓展名
编译阶段: 编译器将文本文件hello.i 翻译成 hello.s 文件
汇编阶段: 将hello.s 翻译成 机器语言指令,并保存在hello.o中
链接阶段: 程序中调用了 printf函数,该函数存在于一个名叫printf.o的预编译文件中,链接器将printf.o文件合并到我们的hello.o文件中, 最终得到一个hello文件,这是一个可执行文件,被加载到内存中,由系统执行。
1.3 了解编译系统如何工作是大有益处的
有什么益处?
- 优化程序性能(例如:一个switch语句是否总比一系列的if -else 更有效)
- 理解链接时出现的错误(即与链接器操作有关的一些程序错误)
- 避免安全漏洞 (要限制从不受信任的源接收数据的数量和格式,理解数据和控制信息存储在程序栈上的方式会引起的后果)
疑问
第二个益处:理解链接时出现的疑问,我对这方面的知识严重缺乏。
1.4处理器读并解释存储在内存中的指令
1.4.1系统的硬件组成
这部分知识在计组中讲得非常多
系统硬件组成的四个部分是哪四个?
总线: 传送定长的字节块,字节块 又名 字。
字的字长是一个基本的系统参数,现在大多数机器 要么是 32位,要么是 64位
I/O设备: I/O设备通过适配器或控制器与总线通信
主存:存放程序和程序处理的数据
处理器:在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)
1.4.2 运行hello程序
运行hello程序的流程是什么样的
可以分为三个阶段: (以hello.c为例子)从键盘上读取hello命令 --> 从磁盘加载可执行文件到主存 --> 将输出字符串此部分存储器写到显示器
从键盘上读取hello命令:
从磁盘加载可执行文件到主存:
利用DMA技术, 将存储在磁盘上的hello可执行文件 直接存储到主存
将输出字符串从存储器写到显示器:
疑问
这个经过简略的过程非常简单了
不明白hello可执行文件从哪里来,在1.2中翻译的四个步骤在这个过程的哪个部分没说清楚
1.5高速缓存至关重要
现状:处理器从寄存器文件中读取数据比从主存中读取几乎快100倍,且这个差距在加大
问题: 在主存中读取一个字的 时间开销 要比 从寄存器中读取一个字 的 时间开销* 大得多
解决方案: 高速缓存, 让高速缓存中存放可能经常访问的数据, 大部分内存操作都能在快读的高速缓存中完成
1.6存储设备形成层次机构
主要思想: 将上一层的存储器作为低一层的存储器
1.7操作系统管理硬件
操作系统的两个基本功能是什么?
1.7.1 进程
什么是进程?
一个CPU 能在 同时 执行多个程序吗?
什么是并发运行?
什么是上下文切换?
1.7.2 线程
什么是线程?
多线程之间比多进程之间更容易共享数据,也因为线程一般比进程更高效。
1.7.3 虚拟内存
虚拟地址空间由哪些部分组成?
- 程序代码和数据
- 堆
- 共享库
- 栈
- 内核虚拟内存
1.7.4 文件
什么是文件?有哪些计算机组件可以看成是文件?
1.8 系统之间利用网络通信
从一个单独的系统来看,网络可以视为一个I/O设备
1.9 重要主题
1.9.1 Amdahl定律
Amdahl定律的主要观点是什么?
1.9.2 并发和并行
这部分感觉全是概述,很难写笔记,以后再补上
1.9.3 计算机系统中抽象的重要性
为什么要使用 抽象 来理解计算机系统呢?
个人看法: 如果要对底层硬件进行描述,太过复杂精细, 但如果能将底层硬件上 抽象出 一个简单的模型,而后我们来使用这个模型, 程序的书写和运行过程将会简单非常多。
本书目前提到过哪些抽象?
文件是对I/O设备的抽象
虚拟内存是对程序存储器的抽象
进程是对一个正在运行的程序的抽象
虚拟机是对 整个计算机的抽象
1.10 小结
本文作者:JiShi2001
本文链接:https://www.cnblogs.com/JiShi2001/p/16021173.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步