VMM 虚拟机器监控

很多年前,IBM 在售卖它们及其昂贵的大型机给大小组织机构。一个共同的需求在客户中提出,如果客户想要同时在这些硬件上运行不同的操作系统怎么办?还有,有些应用程序部署在某种 OS 上,另外些应用程序需要部署在另外的 OS 上。

IBM 为此种需求提供了一个解决方案,那就是 Virtual Machine Monitor ( VMM ),也被叫做 hypervisor (这个名字可能更为人所知......

超越物理内存限制的内存管理策略

没有为止,我们讨论的都是基于一个重要假设:每个进程的地址空间都能被 load 进内存。

这个假设是不现实的,因为内存永远都有被用完的一天,就跟人的一生生一样,我们必须考虑在有限的空间和时间里,让更多进程得到内存被分配的机会。

Cache 管理最优替换策略一个简单的替换策略:FIFO另外一个简单的策略:随机根据历史而来的替换策略:LRU / LFU具体的例子实现历史上的算法近似 LRU考......

超越物理内存限制的内存管理机制

没有为止,我们讨论的都是基于一个重要假设:每个进程的地址空间都能被 load 进内存。

这个假设是不现实的,因为内存永远都有被用完的一天,就跟人的一生生一样,我们必须考虑在有限的空间和时间里,让更多进程得到内存被分配的机会。

交换空间 Swap Space

内核会保留一些磁盘用于把内存页换出去,我们通常把这些磁盘空间叫做 交换空间(swap space)。

操作系统还必须记住......

缩小页表

上一篇 《TLB - 加速地址翻译》 介绍了加速虚拟地址翻译的机制和策略,但是还有个问题没有很好的解决,那就页表很占内存的问题。

一个 32-bit 的虚拟地址空间(2^32),有着 4KB(2^12) 的页大小,则可能有 2^20=2^(32 - 12) 个(大约 100 多万)个 PTE,假设每个 PTE 4 字节大小,则这个进程的整个页表可能高达 4MB,假设有 100 个进程在操作......

TLB - 加速地址翻译

上一篇《页式内存管理 - 简介》 介绍了页式内存管理的机制,留下了一个问题,那就是 慢,因为多访问了一次内存。

有没有办法减少内存访问次数的办法呢?

有。那就是 Cache,TLB (Translation Lookaside Buffer)——一小块集成在 MMU 中的芯片。

在每一次内存访问里,硬件先看下 TLB 中是否已经有想要的 Page Entry——如果有,那就......

页式内存管理

这是 《Operating System: Three Easy Pieces》 的第 7 篇读书笔记。

有关 页式内存管理 介绍 。

主要介绍的是一种常见的内存管理方式。

操作系统几乎会采取两种方式来应对空间管理的问题。第一种是把空间切成大小完全相等的碎片,第二种就是把空间切分成大小相等的碎片。

第一种方式如前面两篇笔记提到的,所带来的外部碎片管理问题让人头疼,......

空闲内存管理

这是 《Operating System: Three Easy Pieces》 的第 6 篇读书笔记。

上篇笔记 介绍了管理内存的一种方式:分段式内存管理,它可以更灵活的分配和管理内存。

本章将讨论内存管理中另一个相当基础的部分——空闲内存的管理,无论是 glibc 的 malloc 库,还是操作系统自身。

当内存切片都是固定大小的时候,分配会比较简单些,只要保存一个数组......

段式内存管理

这是 《Operating System: Three Easy Pieces》 的第 5 篇读书笔记。

上篇笔记 介绍了管理内存的一种简单实现方式,基于 base register 和 bound register 实现的 虚拟地址翻译、内存管理方式。

这种方式简单直观,但是缺点也是明显的——太浪费内存空间了,每个进程的 堆内存 和 栈内存 之间有很大的空隙是不被使用的,但是还是......

内存地址翻译

这是 《Operating System: Three Easy Pieces》 的第 4 篇读书笔记。

有关 虚拟内存地址的翻译机制( Mechanism )。

OS 对内存的掌控意味着 OS 会确保 一个运行中的应用程序只能访问得到属于它自己的内存,不能访问其他应用程序的内存 。

关键点:如何高效灵活地虚拟化内存?

关键点分解:

How can we ......

内存管理相关的 API

这是 《Operating System: Three Easy Pieces》 的第 3 篇读书笔记。

有关 内存管理的 API 。

主要介绍的是基于 Unix 系列系统的内存管理相关的 API。

关键点:如果分配和管理内存?

在 Unix里,或者说 C 程序里,理解如何分配和管理内存对于构建健壮和可靠的软件是非常关键的。

那么,哪些接口是经常使用的呢?......