wywwzjj's Blog.

CSAPP 虚拟存储器 笔记

字数统计: 706阅读时长: 2 min
2019/11/11 Share

一个系统中的进程是与其他进程共享 CPU 和主存资源的。然而,共享主存会形成一些特殊的挑战。

虚拟内存提供了三个重要的能力:

  • 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在主存之间来回传送数据,通过这种方式,它高效地使用了主存。
  • 它为每个进程提供了一致的地址空间,从而简化了内存管理。
  • 它保护了每个进程的地址空间不被其他进程破坏。

image.png

物理和虚拟寻址

计算机系统的主存被组织成一个由 M 个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址。

在物理地址与虚拟地址间加个地址翻译就构成了虚拟寻址。

地址空间

地址空间是一个非负整数地址的有序集合。

地址空间的概念是很重要的,因为它清楚地区分了数据对象(字节)和他们的属性(地址)。

缓存

内存成了对硬盘的缓存,虚拟页面可划分为未分配的、未缓存的和已缓存的。

内存管理

  • 简化链接
  • 简化加载
  • 简化共享
  • 简化内存分配

内存保护

  • 地址翻译

逻辑地址到物理地址

内存映射

回到本章前言,“虚拟内存是强大的”。

  • 你知道可以通过读写内存位置读或者修改一个磁盘文件的内容吗?
  • 可以加载一个文件的内容到内存中,而不需要进行任何显示地复制吗?

将一个文件或其他对象映射到进程的地址空间,实现文件磁盘地址和进程地址空间中一段虚拟地址的一一对应。

实现了这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用 read、write 等系统调用函数。

相反,内核空间对这段区域的修改也直接反应用户空间,从而可以实现不同进程的文件共享。

简单总结,有如下特点:

  • 提高数据的读、写和传输的时间性能
    • 减少了数据拷贝次数
    • 用户空间和内核空间的高效交互(通过映射区域直接交互)
    • 用内存读写代替 I/O 读写
  • 提高内存利用率:通过虚拟内存、共享对象

动态内存分配

垃圾收集

CATALOG
  1. 1. 物理和虚拟寻址
  2. 2. 地址空间
  3. 3. 缓存
  4. 4. 内存管理
  5. 5. 内存保护
  6. 6. 地址翻译
  7. 7. 内存映射
  8. 8. 动态内存分配
  9. 9. 垃圾收集