正文

 

  存储管理是操作系统非常重要的功能之一,本文主要介绍操作系统存储管理的基础知识,包括缓存相关知识、连续内存分配、伙伴系统、非连续内存分配、内存碎片等,并结合linux系统对这些知识进行简单的验证。文章内容来自笔者学习清华大学和UCSD的操作系统课程的笔记和总结,以及自己的思考和实践。

分层的存储管理:

回到顶部

  CPU(Central Processing Unit)是计算机的核心,其主要工作是解释计算机指令、处理数据。那么这些指令和数据来自哪里呢?和TCP/IP的分层设计思想一样,数据的存储管理也分为以下四层:

  • 寄存器

  • cache

  • 内存

  • 外存(外设)

  四层中,越上层的速度越快,同时造价也更为昂贵,自然空间也更小。寄存器通常只有几十之多几百个字节,主要用来存放固定的指针或者计算的中间结果。cache是一个比较通用的术语,在计算机体系机构中,称之为高速缓冲存储器,直接由硬件来管理,不同的CPU有不同级别的cache内存由操作系统来管理。内存(一般又称为主存)在cache失效的时候访问,速度要比cache慢至少一个数量级,内存管理是操作系统中最复杂的功能之一。外存又称之为虚拟内存,是将外设的一部分空间用来存储未能加载到内存中的数据,当内存缺页(页的概念后面会介绍)的时候就会用到外存,外存的速度与内存比起来与天壤之别,慢个几十万倍都是可能的。

cache:

回到顶部

  在计算机系统中,CPU的运行速度与主存(即我们平常所说的内存)的访问速度极不匹配,导致CPU的利用率比较低。为了提高CPU利用率,现代计算机体系结构中广泛采用高速缓冲存储器(Cache)技术。

  cache也分为好多级,比如一级缓存(L1 cache)、二级缓存(L2 cache),基本上的CPU都至少有L1 cache与L2 cache,目前稍微好一点的CPU也会有L3 cache,对于性能更好的CPU还会有L4 cache。L1 cache、L2 cache一般都只有几十K个字节,存储指令或者数据,L3cache可以有几百个字节或者几M,L4 cache可以有几十、几百M。同样的,空间大小与速度、价格相关。

局部性原理:

  我们看到,cache的容量(特别是效率最高的L1 cache、L2 cache)都非常小,那怎么保证有比较高的命中率呢,如果命中率比较低,每次还得去内存取数据,还要置换cache中的数据,反而得不偿失。幸好,程序的局部性原理保证了cache能有比较高的命中率。什么是局部性原理:程序一般以模块的形式组织,某一模块的程序