转载出处:http://blog.csdn.net/wangrunmin/article/details/7967293
概括的挺详细的,然后我加上了纯分页系统和请求式分页系统的基本概念,也对有些部分稍作修改
一、分页存储管理
1、基本概念(页面和物理块)
将一个进程的逻辑地址空间划分成若干大小相等的部分,每一部分称为页或页面(页面的大小通常是2的次幂,大约在512B~4MB之间);同样,将内存空间也划分为与页面大小相同的若干个存储块,即物理块或页框。可将用户的任一页放在内存的任一块中,实现离散分配。
2、分页技术地址结构:
页号P 页内位移d
设给定逻辑地址为A,页面大小为L
页号: P=INT[A/L]
页内位移: d=[A] MOD L
举例:
设某系统的页面大小为1KB,A=3456,则P=3;d=384
3、页表
在分页系统中,允许将进程的各个页面离散地装入内存的任何空闲块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程设立一张页面映像表,简称页表。在进程空间内的所有页(0~n-1)依次在页表中有一个页表项,其中记载了相应页面在内存中对应的物理块号。页表的作用是实现从页号到物理块号的地址映射。
页号 块号 存储控制(存储控制用于对该存储块中的内容进行保护)
0 2
1 15(F)
2 14(E)
3 1
4、地址转换
(1) 程序执行时,从PCB中取出页表始址和页表长度(4),装入页表寄存器PTR。
(2)由分页地址变换机构将逻辑地址自动分成页号和页内地址。
例:11406D=0010|110010001110B=2C8EH
页号为2,位移量为C8EH=3214D
或11406 DIV 4096=2
11406 MOD 4096=3214
(3) 将页号与页表长度进行比较(2<4),若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4)将页表始址与页号和页表长度(页表项所占的内存空间大小,因为计算机是通过计算得到相应的位置,不能一眼看出)的乘积相加,便得到该页表项在页表中的位置。
(5)取出页描述子得到该页的物理块号。 2 14(E)
(6) 对该页的存取控制进行检查。
(7)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
例:0010|110010001101B
1110|110010001101B=EC8EH=60558D
或 14*4096+3214=60558D
5、快表的地址转换
页表存放在内存中,使CPU每要存取一个数据,都要两次访问(访问页表,寻找物理块号;访问内存,读写数据);这使计算机的处理速度降低1/2。为提高地址变换速度,可在地址转换机构中增设一个具有并行查寻能力的特殊高速缓冲存储器,又称快表(TLB),用以存放当前访问最频繁的那些少量页表项。
6、纯分页系统
所谓纯分页系统是指在调度一个作业时,必须把它的所有页一次装入到内存的物理块中,如果当时物理块不足,则该作业必须等待,直到有足够的物理块为止,这时系统可再调度另外的作业
纯分页系统同样有地址转换和快表,和基础分页系统求地址过程差不多
7、请求式分页系统
是目前常用的一种实现虚拟存储器的方式;基本思想是,作业在运行之前,只把当前需要的一部分页面装入内存,当需要其他页面是,才自动选择一些页交换到辅存,同时调入所需的页到内存中
二、分段存储管理
1.基本思想
将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
2. 分段存储方式的引入
方便编程
分段共享
分段保护
动态链接
动态增长
3. 分段地址结构
作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例程序段、数据段等。每个段都从0开始编址,并采用一段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间是二维的。
15 12 11 0
段号 段内位移量
段号4位,每个作业最多24=16段,表示段号从0000~1111(24-1);段内位移量12位,212=4k,表示每段的段内地址最大为4K(各段长度不同),从000000000000~111111111111
4. 段表
段号 段长 起始地址 存取控制
0 1K 4096
1 4K 17500
2 2K 8192
5. 地址变换
(1). 程序执行时,从PCB中取出段表始址和段表长度(3),装入段表寄存器。
(2). 由分段地址变换机构将逻辑地址自动分成段号和段内地址。
例:7310D=0001|110010001110B=1C8EH
段号为1,位移量为C8EH=3214D
(3). 将段号与段表长度进行比较(1<3),若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4). 将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5). 取出段描述子得到该段的起始物理地址。1 4K 17500
(6). 检查段内位移量是否超出该段的段长(3214<4K),若超过,产生越界中断。
(7). 对该段的存取控制进行检查。
(8). 将该段基址和段内地址相加,得到实际的物理地址。
例:0001|110010001101B
起始地址17500D+段内地址3214D=20714D
三、分页与分段的主要区别
分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
四、段页式存储管理
1.基本思想:
分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。
在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。
段页式系统中,作业的地址结构包含三部分的内容:段号 页号 页内位移量
程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。
为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。
2.地址变换的过程:
(1)程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。
(2)由地址变换机构将逻辑地址自动分成段号、页号和页内地址。
(3)将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4)将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5)取出段描述子得到该段的页表始址和页表长度。
(6)将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(7)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。
(8)取出页描述子得到该页的物理块号。
(9)对该页的存取控制进行检查。
(10)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
第一种是,你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记,最后在第一张纸做个列表,记录着三门笔记各自的范围。这就是分段管理,第一张纸叫段表。
第二种是,你从第二张纸开始做笔记,各种课的笔记是连在一起的:第2张纸是数学,第3张是语文,第4张英语……最后呢,你在第一张纸做了一个目录,记录着语文笔记在第3、7、14、15张纸……,数学笔记在第2、6、8、9、11……,英语笔记在第4、5、12……。这就是分页管理,第一张纸叫页表。你要复习哪一门课,就到页表里查寻相关的纸的编号,然后翻到那一页去复习
六、虚拟内存的置换算法
1、先进先出页面置换算法
总是选择在内存中停留最长的页淘汰,即先进入内存的页先被换出内存
2、最佳页面置换算法
当调入一个新的页面必须预先淘汰某个老页面时,所选择的老页面应是将来不再被使用,或者是在很久以后才被使用的页面。采用这种算法,理论上能保证有最少的缺页率,但无法实现,因为它需要人们预先知道作业整个运行期间的页面走向情况。
3、最近最少使用页面置换算法
根据页面调入内存后的使用情况,选择最近最少使用的页面予以淘汰。
4、第2此机会页面置换算法
对最老页面的R位进行检查,如果R位是0,那么这个页既老又没用,可立即被置换掉,如果R位是1,就清除掉这个位,并将该页放到链表的尾端,修改它的装入时间就像刚装入一样
5、时钟页面置换算法
把所有页面都保存在一个类似时钟表面的环形链表中,用一个指针指向最老的页面。当发生缺页中断时,算法检查指针指向的页面,如果R位是0就淘汰掉这页,并把新页插入这个位置,再把指针前移一个位置;是1,就清除R位并把指针前移一个位置