个人打卡,不够详细,慎看。
今天没有做《操作系统真象还原》的项目,受学长推荐,看了《深入理解计算机系统》这本书,说这本书写得很妙,帮助建立学习计算机的整体体系。
B站有UP自己讲了这本书,网课指路:
【CSAPP-深入理解计算机系统】2-1.信息的存储(上)_哔哩哔哩_bilibili
不过书其实写得很详细,只看书就够了。
一、hello程序的生命周期
实际上就是数据信息在磁盘、处理器、内存与IO设备之间搬运。
- 计算机中所有的数据与指令都是以二进制的形式存储的,区别他们的方式是读取这些数据时的上下文。大多计算机使用 ASCII 标准来表示文本字符【即使用唯一的单字节大小的整数值来表示每个字符】。所以我们看到的'a'在计算机里的存储内容是'a'的ASCII码。
- 像hello.c这样以字节序列的方式存储在文件中,只由ASCII码字符构成的文件称为文本文件,其他所有文件称为二进制文件。
- 大概流程:系统只认识机器指令,我们现在的hello.c程序需要转换成机器指令,hello.c现在属于高级语言,需要通过编译生成汇编语言,然后通过汇编生成机器指令。但是转化为机器语言指令还不够,这些指令还要按照exe格式打包,以二进制形式存放。
- 细致流程:预处理阶段、编译阶段、汇编阶段、链接阶段。
- hello.c 在预处理阶段,根据#开头的命令修改程序。比如#include<stdio.h>, 把stdio.h插入到hello.c得到另一个文件hello.i。
- hello.i通过编译器被翻译成包含汇编语言的程序hello.s。
- hello.s被汇编器翻译成机器指令,打包成可重定位目标程序hello.o。二进制形式。
- 链接器负责合并。合并调用的函数所在的目标文件与该文件。 生成exe文件,可以被加载到内存中,由系统执行。
二、硬件
- 为了运行hello.exe 可以利用shell。shell 是一个命令行解释器,它输出一个提示符,等待输人一个命令行,然后执行这个命令。
- 总线:在各个部件之间传送数据。
- IO设备:我们与系统联系的通道。 比如显示器、鼠标。
- 主存:由DRAM芯片组成。CPU必须把程序放在主存中才能执行。
- CPU处理器:核心是PC【大小为一个字的存储设备】。任何时候,PC 都指向主存中的某条机器语言指令(即含有该条指令的地址)。 从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令, 再更新程序计数器,使其指向下一条指令。
这本书要记录的知识点很多,不能全粘贴进来,记录一下印象最深刻的知识点。
强推这本书!!!