最后——我们将彼此永不相忘;|

ASO2001

园龄:3年粉丝:0关注:2

2022-03-18 12:00阅读: 35评论: 0推荐: 0

第一章计算机系统漫游_CSAPP学习笔记

第一章计算机系统漫游

注:这篇笔记并 不是为了让你在看过书的情况下直接读笔记就能学会CSAPP,这篇笔记并不会写得比原书更好,笔记是对书本知识的要点的提炼,并且带有很强的主观性,本人也是只初学者,如有偏颇,请多多见谅。

1.1信息就是位 + 上下文

程序以字节序列的方式储存在文件中,我们输入的每一个字母,每一个符号,都对应这ASCII码表中的一个整数值,将该整数值转换为一个二进制字节序列。因此我们可以说系统中的所有信息,都是由一串比特表示的

疑问

image

这里的上下文是指 int double 这样的上下文吧

1.2 程序被其他程序翻译成不同的格式

将.c文件翻译成可执行文件的四个阶段

image

四个阶段的具体含义

预处理:将头文件(stdio.h)的内容 插入程序文本中,得到另一个c程序,但是以.i 作为文件拓展名
编译阶段: 编译器将文本文件hello.i 翻译成 hello.s 文件
汇编阶段: 将hello.s 翻译成 机器语言指令,并保存在hello.o中
链接阶段: 程序中调用了 printf函数,该函数存在于一个名叫printf.o的预编译文件中,链接器将printf.o文件合并到我们的hello.o文件中, 最终得到一个hello文件,这是一个可执行文件,被加载到内存中,由系统执行。

1.3 了解编译系统如何工作是大有益处的

有什么益处?

  1. 优化程序性能(例如:一个switch语句是否总比一系列的if -else 更有效)
  2. 理解链接时出现的错误(即与链接器操作有关的一些程序错误)
  3. 避免安全漏洞 (要限制从不受信任的源接收数据的数量和格式,理解数据和控制信息存储在程序栈上的方式会引起的后果)

疑问

第二个益处:理解链接时出现的疑问,我对这方面的知识严重缺乏。

1.4处理器读并解释存储在内存中的指令

1.4.1系统的硬件组成

这部分知识在计组中讲得非常多

系统硬件组成的四个部分是哪四个?

总线: 传送定长的字节块,字节块 又名 字。
字的字长是一个基本的系统参数,现在大多数机器 要么是 32位,要么是 64位
I/O设备: I/O设备通过适配器或控制器与总线通信
主存:存放程序和程序处理的数据
处理器:在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)

1.4.2 运行hello程序

运行hello程序的流程是什么样的

可以分为三个阶段: (以hello.c为例子)从键盘上读取hello命令 --> 从磁盘加载可执行文件到主存 --> 将输出字符串此部分存储器写到显示器

从键盘上读取hello命令:
image

从磁盘加载可执行文件到主存:
利用DMA技术, 将存储在磁盘上的hello可执行文件 直接存储到主存
image

将输出字符串从存储器写到显示器:
image

疑问

这个经过简略的过程非常简单了
不明白hello可执行文件从哪里来,在1.2中翻译的四个步骤在这个过程的哪个部分没说清楚

1.5高速缓存至关重要

现状:处理器从寄存器文件中读取数据比从主存中读取几乎快100倍,且这个差距在加大
问题: 在主存中读取一个字的 时间开销 要比 从寄存器中读取一个字 的 时间开销* 大得多
解决方案: 高速缓存, 让高速缓存中存放可能经常访问的数据, 大部分内存操作都能在快读的高速缓存中完成

image

1.6存储设备形成层次机构

主要思想: 将上一层的存储器作为低一层的存储器
image

1.7操作系统管理硬件

操作系统的两个基本功能是什么?

image

1.7.1 进程

什么是进程?

image

一个CPU 能在 同时 执行多个程序吗?

image

什么是并发运行?

image

什么是上下文切换?

image

1.7.2 线程

什么是线程?

image

多线程之间比多进程之间更容易共享数据,也因为线程一般比进程更高效。

1.7.3 虚拟内存

虚拟地址空间由哪些部分组成?

  1. 程序代码和数据
  2. 共享库
  3. 内核虚拟内存

1.7.4 文件

什么是文件?有哪些计算机组件可以看成是文件?

image

1.8 系统之间利用网络通信

从一个单独的系统来看,网络可以视为一个I/O设备

1.9 重要主题

1.9.1 Amdahl定律

Amdahl定律的主要观点是什么?

image

1.9.2 并发和并行

这部分感觉全是概述,很难写笔记,以后再补上

1.9.3 计算机系统中抽象的重要性

为什么要使用 抽象 来理解计算机系统呢?

个人看法: 如果要对底层硬件进行描述,太过复杂精细, 但如果能将底层硬件上 抽象出 一个简单的模型,而后我们来使用这个模型, 程序的书写和运行过程将会简单非常多。
image

本书目前提到过哪些抽象?

文件是对I/O设备的抽象
虚拟内存是对程序存储器的抽象
进程是对一个正在运行的程序的抽象
虚拟机是对 整个计算机的抽象

1.10 小结

image

本文作者:JiShi2001

本文链接:https://www.cnblogs.com/JiShi2001/p/16021173.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ASO2001  阅读(35)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起