CSAPP(第三版)第一章计算机系统漫游学习笔记
一.信息就是位+上下文
整个计算机系统中的所有信息都可以用一串比特串的形式表示,区分不同的数据对象的唯一方法就是我们读到的这些对象时的上下文
二.程序被其他程序翻译成不同的格式
一个高级语言写的程序(这里以C语言为例),从源代码到最终的机器中的可执行文件会经过一下几个阶段:
- 预处理阶段,处理源码的中的预处理语句(比如说#include)
- 编译阶段,将c语言编译成汇编语言
- 汇编阶段,把汇编语言翻译成机器指令
- 链接阶段,把在程序中调用的库函数的相关文件引入
三.了解编译系统如何工作室大有益处的
促使程序员要知道编译系统是如何工作的原因:
- 优化程序性能,我们需要对汇编语言以及编译器如何将不同的C语句转化为汇编语言有基本的了解
- 理解链接时出现的错误
- 避免安全漏洞,其中一个比较典型的是缓冲区溢出错误
四.处理器读并解释存储在存储器中的指令
一个计算机系统的硬件主要由以下几个部分组成:
- 总线,负责携带信息字节并在各个部件之间进行传输
- I/O设备,负责系统和外界的联系
- 主存,运行程序时存放程序以及程序中含有的数据
- 处理器,解释(或执行)存储在主存中的指令
执行一个hello程序的过程有一下几部:
- shell程序执行其指令,等待我们输入命令
- 我们输入完命令以后,shell执行一系列指令,将hello程序的代码以及其数据加载到主存中
- 处理器开始执行hello程序中的机器指令,将“hello world”输出到屏幕上
五.高速缓存
我们使用的存储设备通常是较大的存储设备比较小的存储设备运行地要慢,所以就使用一个较小的速度较快的存储设备作为CPU和Main Memory交换数据的桥梁,这个设备就是高速缓存(cache memories)
六.形成层次结构的存储结构
在计算机系统的存储设备被组织成了一个金字塔形的存储层次模型,其中从上到下,设备速度越来越慢,空间越来越大,每字节的造价越来越便宜。
七.操作系统管理硬件
操作系统可以看成是一个应用程序和硬件之间的一个软件,其有两个基本功能: 防止硬件被失控的程序滥用; 为应用程序提供控制硬件的简单一致的方法
- 进程:进程可以看成是操作系统对正在运行的程序的一种抽象,在一个系统中可以运行多个进程,这些进程对外表现好像是独占硬件,实际上是通过不同进程之间进程的交互执行实现的,这个过程叫上下文切换(context switch)
- 线程:一个进程可以由多个线程组成,运行在一个上下文环境中,共享代码以及全局数据。因为共享数据,使得其比一般的进程更加高效(花在context switch的时间少)。
- 虚拟存储器:给进程提供的一个好像自己独占主存的假象,对于进程的所使用的虚拟存储器可以分成一下几个部分:
- 程序代码和数据
- 堆,可以动态扩展或者收缩,供像malloc和free这样的C语言中的库进行调用
- 共享库
- 栈,可以动态扩展或者收缩,用于编译器的函数调用
- 内核虚拟存储器
- 文件:文件可以看成字节序列,每一个I/O设备从本质上来看都可以看成是文件
八.系统之间利用网络通信
九.重要主题
- Amdahl定律:Gene Amdahl,计算领域的早期先锋之一,对提升系统某一部分性能所带来的效果做出了简单却有见底的观察。
- 并发和并行
- 线程级并发
- 指令级并行
- 单指令,多数据并行
- 计算机系统中抽象的重要性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本