共计 791 个字符,预计需要花费 2 分钟才能阅读完成。
本章节主要是通过一个整体的脉络介绍各个组成部分,讲解了计算机的整体流程。
后面的内容会对其中的小部分做更详细的讲解。这里记录了几个自己认为比较有意义的概念帮助理解。
信息就是位 + 上下文
系统中的所有信息,都是一串比特组成的。区分不同数据对象的唯一方法是联系他们的上下文。
从一个 c 文件,到可执行目标文件整个翻译过程分为 4 个阶段
- 预处理阶段 预处理器 cpp 根据字符# 开头的命令,修改原始的 C 程序。
比如 include<stdio.h> 命令告诉预处理器,读取系统头文件 stdio.h 的内容。并把它插入到程序中。结果得到了另一个 c 程序。通常为.i 作为文件拓展。 编译阶段。编译器(ccl)将 hello.i 翻译成文本文件 hello.s 翻译是将.i 转为汇编。
汇编阶段,汇编器(as)将 hello.s 翻译成机器语言指令,将这些指令打包成可重定位目标程序的格式。并将结果保存至目标 hello.o 中(改文件为二进制文件,它包含的 17 个字节是 main 的执行编码)。如果文本编辑器打开,则为一堆乱码
链接阶段:比如说 hello 程序调用了 printf 函数,是每个 C 编译器都提供的标准 C 库中的一个函数,printf 函数保存在一个名为 printf.o 的单独预编译完成的目标文件中。这个文件必须以某种方式合并到我们程序中。链接器(ld)就负责这种合并,于是得到 hello 文件,它是一个可执行文件,可以直接加载到内存中执行。
程序执行的过程:
shell 程序执行指令,等待我们的命令,输入命令并回车之后,shell 将字符都逐一读进寄存器。再把它放到内存中。
(利用 DMA: 直接存储器读取)技术可以数据不经过处理器而直接从磁盘到达主存。
一旦目标文件 hello 的代码和数据被加载到内存,处理器就开始执行。hello 程序中 main 程序中的机器语言指令。再从寄存器文件中复制到显示设备,最终显示在屏幕上。
摩尔定律:
思考:
为什么左边比右边快 20 倍
IT 内容具有时效性,未避免更新后未同步,请点击查看最新内容: 深入理解计算机系统 第 1 章:计算机系统漫游
文章首发于:https://nebofeng.com/2021/03/28/cs-a-p-p-01-c/
文章首发于:https://nebofeng.com/2021/03/28/cs-a-p-p-01-c/
正文完
欢迎关注个人公众号, 内含各种工具及大厂内推码合集