9.1 真实操作系统内存使用情况

(00:00 - 03:32 在对前两个lab提问,与内容无关故跳过)

今天课程的内容是中断。但是在具体介绍中断之前,我想先回顾一下上周一些有趣的内容。因为上周的课程主要是讲内存,我们收到了很多内存相关的问题。我想先讨论一下内存是如何被真实的操作系统(而不是像XV6这样的教学操作系统)所使用。

下图是一台Athena计算机(注,MIT内部共享使用的计算机)的top指令输出。如果你查看Mem这一行,

首先是计算机中总共有多少内存(33048332),如果你再往后看的话,你会发现大部分内存都被使用了(4214604 + 26988148)。但是大部分内存并没有被应用程序所使用,而是被buff/cache用掉了。这在一个操作系统中还挺常见的,因为我们不想让物理内存就在那闲置着,我们想让物理内存被用起来,所以这里大块的内存被用作buff/cache。可以看到还有一小块内存是空闲的(1845580),但是并不多。

以上是一个非常常见的场景,大部分操作系统运行时几乎没有任何空闲的内存。这意味着,如果应用程序或者内核需要使用新的内存,那么我们需要丢弃一些已有的内容。现在的空闲内存(free)或许足够几个page用,但是在某个时间点如果需要大量内存的话,要么是从应用程序,要么是从buffer/cache中,需要撤回已经使用的一部分内存。所以,当内核在分配内存的时候,通常都不是一个低成本的操作,因为并不总是有足够的可用内存,为了分配内存需要先撤回一些内存。

另外,我这里将top的输出按照RES进行了排序。如果你查看输出的每一行,VIRT表示的是虚拟内存地址空间的大小,RES是实际使用的内存数量。从这里可以看出,实际使用的内存数量远小于地址空间的大小。所以,我们上节课讨论的基于虚拟内存和page fault提供的非常酷的功能在这都有使用,比如说demand paging。

有关这台机器的其它信息还有:

  • 即使它有103个用户登录进来了,它的负载还是很低

  • 它有许多许多的进程

  • 这台机器已经运行了249天,我们的XV6系统或许运行不了这么久

这里想传达的信息:大部分内存都被使用了,并且RES内存远小于VIRT内存。

Last updated