X

曜彤.手记

随记,关于互联网技术、产品与创业

吉 ICP 备10004938号

《CSAPP(第三版)》读书笔记(第 9-12 章)


书接上文,本文为第 9-12 章的笔记。其中最后三章(10-12),由于其主题本身的内容(系统级 I/O、网络编程、C++ 并发编程)可以通过讲解的更为深入的其他整本书籍来进行学习,因此这里先不花时间记录,后面如果有需要再回来了解。

第九章、虚拟内存

  1. (Page:560)物理寻址虚拟寻址

  1. (Page:561)虚拟内存作为缓存的工具:

- 页表(存放在物理内存中):

  1. (Page:567)虚拟内存作为内存保护的工具:每个进程对应的独立页表中还添加了与页访问权限相关的标志位(“是否可写”、“是否可读”、“是否只能在内核模式下访问”等)。若一条指令访问了没有权限的页,则 CPU 将触发一个“一般保护故障”,并将控制权传递给内核中的一个异常处理程序。
  2. (Page:567)地址翻译:是一个从 VAS 到 PAS 之间的映射。

- 结合高速缓存与虚拟内存

- 使用 TLB 加速地址翻译

  1. (Page:571)多级页表:用来压缩页表

- 一个两级页表的层次结构(32 位):

  1. (Page:577)Core i7 地址翻译概况:

  1. (Page:580)Linux 虚拟内存系统:

  1. (Page:582)内存映射:Linux 通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容。虚拟内存区域可以映射到这两种类型的对象中的一种:
  1. (Page:583)共享对象私有对象

- 共享对象

- 私有对象

  1. (Page:586)可以使用 mmap 函数创建新的虚拟内存区域,并将对象映射到这些区域中。同理,munmap 用来删除虚拟内存。
  2. (Page:587)动态内存分配器(兼具应用内存分配和回收算法的职责):维护着一个进程的虚拟内存区域,即“堆”。对于每个进程,内核维护着一个变量 “brk”,它指向堆的顶部。例如 std::malloc 等动态内存分配器,可以通过使用 mmap 和 munmap 函数,显式地分配和释放堆内存,或还可以使用 sbrk 函数来扩展和收缩堆(一般分配小内存可能使用 sbrk/brk,大块内存会使用 mmap)。
  3. (Page:590)(隐式空闲链表 & 显式空闲链表)

第十章、系统级 IO

(略)

第十一章、网络编程

(略)

第十二章、并发编程

(略)



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)