操做系统----->>>>>关于段页式内存管理的总结

内存管理的技术主要有: 程序员

固定分区内存管理、可变分区内存管理、简单页内存管理、虚拟内存页式管理、简单段内存管理、虚拟段内存管理 算法

这6中技术。其实还有一种是结合了段和页式内存管理的方案。下面主要讨论段页式内存管理。 数据结构



开讲以前,明白一个结论:页式内存对程序员透明,而段式内存管理,则不。 性能

一                            原理部分 spa

简单页内存管理---> 操作系统

原理:进程被组织成若干页,造成的页表。页表中的每一项包括页号、偏移地址、控制位(如修改位,读取位等)等。当进程运行时进程页被所有加载到内存中(在没有覆盖技术的系统中,反之,则能够部分加入)。当cpu 发生存储器访问(寻址)时,会发生逻辑地址(进程页号,偏移地址)到物理地址或实地址(内存帧号,偏移地址表示)的转换。即经过逻辑地址的进程页号做为索引,和基址寄存器(存放页表的起始地址=程序运行的首地址)指定的进程页表,索引到由操做系统维护的空闲内存帧列表中的内存帧(用帧号表示)。再经过帧号+偏移地址获得一个物理地址。 指针

注意一个概念,进程的页表由进程自身维护(用于描述自身的页)。而操做系统也会维护一个空闲内存帧表(由操做系统建立维护,用以描述空闲内存的帧)。这个概念在段式内存管理中一样适用。 对象

另外,和虚拟内存页管理不一样的是,简单页内存管理不要求进程的全部页被加入内存。 索引

存在内部碎片,没有外部碎片。 进程

进程页大小=内存帧大小


简单段内存管理原理-->

原理:程序在编译时,造成一系列的段。进程会维护一个段表。段中每项包括段号,偏移地址、控制位(修改位、读取位等控制位信息)等构成。当进程运行时,要求进程全部的段被加载到内存。当cpu发生存储器访问(寻址)时,须要把程序用的逻辑地址(段号,偏移地址共同表示),经过基址寄存器或称为段表指针(存放进程段表地址=程序执行首地址的寄存器),加上要访问的段号做为系统空闲段表的索引,索引到一个空闲内存段。最后+偏移地址,转换成实际的物理地址(空闲内存段号,偏移地址)。

而进程段表由自身维护,系统会维护一张当前内存空闲段的段表。

要求进程段在进程运行时所有加载。

因为,每一个进程段大小不一样,操做系统会根据进程段的大小寻找一块恰好大小的内粗段存放之。故没有内部碎片,可是有外部碎片。


虚拟内存下的页内存管理-->

原理:基本和简单页式内存管理别无二致。惟一不一样的是,进程运行时,不要求进程页表中的全部页被映射到内存帧。根据使用时,用到某个页,如今当前内存驻留页中查找是否存在该页,若是有直接存取。不然,经过一个缺页错误(缺页中断)就从磁盘中加载此缺页。另外,若是当前内存中内存已满,则某些页会被换出内存(写回磁盘)。

极端的是,当进程被挂起时,在这以前,该进程的全部页都将被换出内存,当进程唤醒时,再加入内存。


虚拟内存下的段内存管理:

原理:基本和简单段式内存管理别无二致。惟一不一样的是,不要求进程在运行时所有加入进程段。而是根据须要如虚拟页式内存管理同样,动态的加载与换出。所以,在理论上,每一个进程拥有一个和物理内存同样大的虚拟内存空间。

好比,一个32位地址系统,物理内存时4GB,则每一个进程拥有一个4GB的虚拟内存空间。


二                                优缺点对比


三                                基本术语


页、段、帧:

 页式进程的概念,段也是进程的概念,帧是页的物理内存映射,这个帧表有OS维护。

段表地址、页表地址、程序运行首地址、基址以及基址寄存器的关系?

段表中的每一个段都有本身的首地址(逻辑地址),段表描述进程中的每一个段。

页表由进程维护,描述每一个进程页未来映射到的空闲内存帧。

程序运行首地址通常和段表、页表首地址相同。基址也是如此,而基址寄存器存放基址

故以上的几个概念大体能够化等号。它们描述的对象是同样的。注意在不一样场合,灵活对待。

 

虚拟内存:

书上的概念是将辅助存储的一部分做为内存的扩展。也就是看成“内存”来用。

内存抖动:

进程的页或段频繁地在内存和磁盘(辅助存储)之间来回移动。好比,当你准备换出的页或段在换出的补偿时间内,有将被读入。并反复如此,就会致使内存抖动。

地址重定位:

逻辑地址到物理地址的映射过程。

逻辑地址:

段式逻辑地址=段号,偏移地址

页式逻辑地址页号,偏移地址

物理地址:

实际存储的地址

基址寄存器:

通常存放程序执行地址的寄存器。

进程页表:

页式内存系统下,用于描述进程的数据结构

内存空闲帧表

进程页映射到的空闲内存帧的集合

进程段表

段式内存下,用于描述进程的数据结构

内存空闲段表

进程段可以映射的实际内存段的集合

虚拟地址空间:

使用虚拟存储的系统,每一个进程理论上拥有的地址空间。


存储器访问(或寻址)会发生什么?

会发生地址重定位(程序的逻辑地址---->物理地址的转换)

页请求策略

页放置策略

页替换策略

页替换策略分为四大页替换算法:

最优替换策略(OPT):将当前驻留在内存中的,那些下次将要被访问的时间间隔最长的内存页替换出去(从主存写回磁盘)。这是一种预计未来的思想,这种算法固然是性能比较好的。这种玩意儿理解起来极其简单,也就是在当前的页访问序列中,未来最不可能被访问的帧被替换出去。产生 的页错误(页中断)次数最少。因为它预测了未来会发生什么,在现实中,它一般是不能实现的。

效率高,可是不易实现


最近最少使用替换算法LRU(Least recent use):把那些最近使用最不频繁的内存页替换出去。即离当前访问序列中最远的那个内存页(实际上是帧,为方便表述,将进程页的概念等价为内存帧。)

效率接近OPT,可是不易实现


FIFO替换算法(先进先出算法):这种算法是将当前驻留在内存中的最早进内存的页替换出去。

实现简单,可是效率低下,发生页错误的次数高。


时钟替换算法(Clock算法):一种类FIFO算法,可是又不一样。这种算法这种了效率和实现难度以及开销三者的利弊。科学家主要对这个小子进行开发。因此,大多数效率比较高的帧替换算法都是Clock替换算法的变种。

------>>>>>>好好掌握Clock算法很是关键。


效率比较:OPT>LRU>CLOCK>FIFO

相关文章
相关标签/搜索