linux的存储管理方式

这里问linux采用什么样的存储管理方式,是指主存(也就是内存)采用什么样的管理方式。

         linux一般采用页式虚拟存储管理的方式。在页式虚拟存储系统中,将虚拟存储器划分为同样大小的页,c称为虚页或逻辑页,主存空间的页成为物理页。

在编程时,程序的虚地址由高位字段的虚页号和低位字段的页内地址两部分组成,虚页号标识页。虚地址到实地址之间的变换是由页表来实现的。页表是一张存放在主存中的虚页号和实页号的对照表,记录着程序的虚页调入主存时被安排在主存中的位置。也就是说主存中存在着页表和页,两种类型的数据。

定理:一个N级页表的存储管理方式,CPU访问数据需访问内存N+1次。简单点,拿一级页表来讲,虚拟地址要转化为物理地址。首先得将访问存在于内存中的页表来通过虚页号查找到对应的实页号,将实页号和页内偏移组成物理地址,再次访问内存得到数据。这样就是两次内存访问。

一般的CPU运算速度比内存访问快太多,这样N级页表需N+1次的内存访问,会降低了计算机的性能。

故而,现代 CPU 中一般都有一个快表寄存器(又称TLB或cache或快表),里面存储着最近使用过的页表记录。如果要查询的页表记录已经调入快表寄存器,就不用再从内存读取而是直接从快表寄存器中读取,而如果要查询的页不在快表寄存器中,则需要访问页表,将其调入快表。具体换出哪个页换入哪个页由页面置换算法决定。由于寄存器的读取速度要远快于内存,从而提高了系统性能。

知道计算机存储层次的朋友都该知道,处于金字塔顶端的寄存器速度最快但是存储空间却最小(至于为什么请看http://blog.jobbole.com/49481/)。快表寄存器容量不可能太大,它由高速缓存器组成  它是由用来缓解内存和CPU速度的差异的。

linux并不将程序中的全部页面装入内存中运行,它只装入少数必要的页面,便启动运行,以后,通过页面调度和页面置换功能,陆续将即将要运行的页面调入内存,同时把暂时不要运行的页面换到外存(磁盘)上。置换时以页面为单位。这也就是通常所说的虚拟存储方式。而不支持虚拟存储器的内存管理,则需要把每个作业都装入内存后才能运行。

请求分页的地址变换流程如下所示:

linux的存储管理方式_第1张图片

你可能感兴趣的:(虚拟存储器,计算机存储层次结构,linux存储管理方式,分页式)