计算机系统基础复习

一、一些概念

1、SRAM:将每个位存储在一个双稳态的存储器单元里,每个单元用一个6晶体管电路来实现。

2、DRAM:将每个位存储为对一个电容的充电,对干扰非常敏感,因此必须刷新:周期性的读出然后重写

3、DRAM芯片与超单元

  • DRAM芯片中的单元(位)被分成d个超单元(supercell),每个超单元都由w个DRAM单元组成.
  • 一个d*w的DRAM总共存储dw位信息.

4、固件:存储在ROM设备中的程序

5、磁盘相关:盘片、表面、旋转速率、磁道、扇区

6、对扇区的访问时间:寻道时间、旋转时间、传送时间

  • 寻道时间:找对应的磁道,一般为3~9ms
  • 旋转时间:找对应的扇区.
    • 最大旋转延迟为一圈的时间: 1/RPM * 60 s
    • 平均旋转时间为最大旋转延迟的一半: 1/2 * 1/RPM * 60s
    • RPM: 旋转速率
  • 传送时间: 1/RPM * 1/(每条磁道的平均扇区数) * 60s

7、SSD:由一个或多个闪存芯片和闪存翻译层组成

8、局部性:时间局部性、空间局部性

  • 时间局部性: 不同时间上同一内存位置的访问,比如累加变量或者累乘变量
  • 空间局部性: 不同时间上对当前位置附件位置的访问,比如数组

9、存储器层次结构

10、cache三种类型:直接映射、组相联、全相联

11、写命中的处理:直写、写回

  • 直写:立即将w的高速缓存块写回到紧接着的低一层中
  • 写回:尽可能地推迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到紧接着的低一层中,需要维护一个修改位
  • w是一个已经缓存了的字

12、写不命中的处理:写分配、非写分配

  • 写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块.
  • 写回通常是写分配的
  • 非写分配: 避开高速缓存,直接把这个字写道低一层中.
  • 直写通常是非写分配的

13、Core i7:4个核心,块大小64B,L1大小32KB,相联度8

14、cache的性能指标:不命中率、命中率、命中时间、不命中处罚

15、链接器的两个主要任务:符号解析、重定位

  • 符号解析:将每个符号引用正好和一个符号定义关联起来.
  • 重定位:编译器和汇编器生成从地址0开始的代码和数据节.

16、目标文件的3种形式:可重定位目标文件、可执行目标文件、共享目标文件

  • 可重定位目标文件: 包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件.
  • 可执行目标文件: 包含二进制代码和数据,其形式可以被直接复制到内存并执行.
  • 共享目标文件: 一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态地加载进内存并链接
  • 编译器和汇编器生成可重定位目标文件共享目标文件
  • 连接器生成可执行目标文件

17、Linux目标文件采用ELF格式

18、ELF格式中的重要section(节):.text、.data、.bss

  • .text: 已编译程序的机器代码,即函数.
  • .data: 已初始化的非0全局和静态C变量.
  • .bss: 未初始化的静态变量,以及初始化为0的全局或静态变量

19、符号表中的3种符号:全局符号、外部符号、局部符号

  • 全局符号:由模块m定义并能被其他模块引用的全局符号.对应于非静态的C函数和全局变量
  • 外部符号: 由其他模块定义并被模块m引用的全局符号,对应于在其他模块定义的非静态C函数和全局变量
  • 局部符号:只被模块m定义和引用的局部符号,对应于带static属性的C函数和全局变量

20、COMMON符号与.bss的区别

  • COMMON: 未初始化的全局变量
  • .bss: 未初始化的静态变量,以及初始化为0的全局或静态变量

21、强符号与弱符号

  • 函数和已初始化的全局变量是强符号
  • 未初始化的全局变量是弱符号

22、多个同名符号的3个处理规则

  • 不允许有多个同名的强符号
  • 如果有一个强符号和多个弱符号同名,那么选择强符号
  • 如果有多个弱符号同名,那么从这些弱符号中任意选择一个

23、链接器使用库来解析引用:次序问题

p.o -> libx.a -> liby.a 且 liby.a -> libx.a -> p.0
gcc p.o libx.a liby.a libx.a

24、重定位的两个步骤:重定位条目、重定位符号引用

  • 重定位条目:在这一步中,链接器将所有相同类型的节合并为同一类型的新的聚合节.
  • 重定位符号引用: 在这一步中,连接器修改代码节和数据节中对每个符号的引用,使得它们指向正确的运行时地址.

25、Linux x86-64的内存映像(图)

26、Linux中,静态库文件后缀为.a,动态库文件后缀为.so

27、异常处理程序运行在内核模式下

28、异常分为4类:中断、陷阱、故障、终止

类型 原因 行为 示例 同步 / 异步
陷阱 有意的异常 返回到下一条指令 系统调用,断点 同步
故障 潜在可恢复的错误 可能返回到当前指令 页故障(page faults) 同步
终止 不可恢复的错误 终止当前程序 非法指令 同步
中断 来自I/O设备的信号 返回到下一条指令 异步

29、中断是异步异常

30、进程上下文:程序正确运行所需的状态

31、进程提供给应用程序的关键抽象:一个独立的逻辑控制流、一个私有的地址空间

32、并发和并行

  • 并发: 如果两个流在时间上重叠,那么它们就是并发的
  • 并行: 如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流

33、用户模式与内核模式

​ 设置模式位时,进程就运行在内核模式中,可以访问系统中的任何内存位置,执行指令集中的任何指令

​ 没设置模式位时,为用户模式

​ 模式位放在某个控制寄存器中

34、进程上下文切换

35、进程控制函数:getpid、fork、exit、waitpid、wait、execve

fork: 创建子进程,一次调用返回两次

waitpid: 回收子进程

wait: waitpid的简单版本

execve: 加载并运行可执行目标文件filename,且带参数列表argv和环境变量列表envp.一次调用并从不返回

36、Linux提供了30种信号

37、pending位向量和blocked位向量

  • pengding:等待位向量
  • blocked:阻塞位向量

38、子进程和父进程同属一个进程组

39、键盘输入CTRL-C发送SIGINT信号(终止);CTRL-Z发送SIGTSTP信号(挂起)

40、kill发送信号:kill命令、kill函数

kill命令不带参数 默认为 SIGTERM(15)

杀死进程 kill -9 对应 SIGKILL

41、signal设置信号处理程序

42、用volatile修饰全局变量:只能从内存读写该变量

43、setjmp:一次调用,多次返回;longjmp:一次调用,从不返回

44、地址翻译:将虚拟地址转换为物理地址,需要CPU硬件和操作系统之间合作完成

45、任何时刻,虚拟页面集合分为三个不相交子集:未分配的、缓存的、未缓存的

46、页表将虚拟页映射到物理页,存放于物理内存中

47、DRAM缓存不命中称为缺页,并触发一个缺页异常

48、现代操作系统都使用按需页面调度:当发生不命中,才换入页面

49、地址翻译符号:VPO、VPN、TLBI、TLBT、…

50、TLB:MMU中对PTE的小缓存

51、多级页表

52、Core i7支持48位虚拟地址空间和52位物理地址空间

53、页面大小在系统启动时配置,Linux页大小为4K

54、CR3寄存器指向第一级页表的起始位置

55、Linux将虚拟内存组织为一些区域(段)的集合

56、Linux缺页异常处理:3个步骤

  • 判断虚拟地址是否合法
  • 判断视图进行的内存访问是否合法
  • 选择牺牲一个页面交换出去,换入新的页面并更新页表.CPU重启引起缺页的命令

57、内存映射:将一个虚拟内存区域与一个磁盘上的对象关联起来

58、共享对象写时复制(Copy-On-Write)

59、两种动态内存分配器:显式分配器、隐式分配器

60、分配器返回的块要求双字对齐

61、分配器的两个性能目标:最大化吞吐率、最大化内存利用率

62、内部碎片与外部碎片

63、带边界标记的堆块格式

64、空闲块的分割与合并

65、垃圾收集与有向可达图

二、重点习题

6.2、6.24、6.26、6.28、6.34

7.6、7.8、7.10

8.9、8.12(必须画出进程图)、8.23

9.11

三、单词

第六章

Random Access Memory(RAM) 随机访问存储器

Static RAM(SRAM) 静态随机访问存储器

Dynamic RAM(DRAM) 动态随机访问存储器

Read-Only Memory(ROM) 只读存储器

Solid State Disk(SSD) 固态硬盘

cache 高速缓存

第七章

relocation 重定位

symbol table 符号表

shared library 共享库

static linker 静态链接器

dynamic linker 动态链接器

第八章

exception 异常

system call 系统调用

concurrency / parallel 并发 / 并行

process 进程

signal 信号

第九章

page table 页表

virtual address 虚拟地址

physical address 物理地址

Memory Management Unit(MMU) 内存管理单元

Translation Lookaside Buffer(TLB) 翻译后备缓冲

Dynamic Memory Allocator 动态内存分配器

四、头文件中的常用函数

stdio.h –> scanf() printf()

stdlib.h –> exit() malloc() free()

dlfcn.h –> dlopen() dlsym()

unistd.h –> getpid() fork() sleep() execve()

sys/wait.h –> waitpid() wait()

signal.h –> kill() signal()

文章作者: Code Pirate
文章链接: http://blog.xswhb.cn/2019/07/02/计算机系统基础复习/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Code Pirate

评论