深入理解计算机系统

delims 于 2020-12-11 发布

编译系统

hello.c 程序的编译过程分为4个阶段。

预处理器(cpp)根据以字符 # 开头的命令修改源文件。

比如遇到#include 会直接将stdio.h的文件内容插入到程序文件中,生成 hello.i 文件

编译器(ccl) 将文本文件 hello.i 翻译成文本文件 hello.s 的汇编程序。

汇编器 as 将 hello.s 翻译成机器语言指令,将结果保存在目标文件中。

操作系统有两个基本功能

操作系统通过几个基本的概念来实现这两个功能。

超线程

指令集并行

SRAM 和 DRAM

X86_64 寄存器

虚拟内存

当MMU在试图翻译某个虚拟地址时触发了一个缺页,这个异常会导致控制转移到内核的缺页处理程序,随后执行如下步骤:

  1. 判断虚拟地址A是不是在某个段的区间内,如果没有直接触发segmentation fault 终止程序。

  2. 如果存在,判断访问是否合法,例如是不是对只读内存区域执行了写操作,如果是会触发一个保护异常。

malloc 不初始化内存。calloc会初始化内存为0。realloc可以改变之前分配块的大小。

Unix I/O

I/O 多路复用 ,使用select函数,要求内核挂起线程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。