分段 分页与分页信息共享的区别

(转)分页和分段的区别 - sunshisonghit - 博客园
随笔 - 280, 文章 - 0, 评论 - 0, 引用 - 0
转自:http://blog.csdn.net/wangrunmin/article/details/7967293
一.&分页存储管理
1.基本思想
&&& 用户程序的地址空间被划分成若干固定大小的区域,称为&页&,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。
2.&分页存储管理的地址机构
15&&&&&&&&&&12 &&&&&&&&11&&&&&&&&&&&&&&&&&&0
&&&&&页号P&&&&&&&&&&&&&&&&&页内位移量W
页号4位,每个作业最多2的4次方=16页,表示页号从(24-1),页内位移量的位数表示页的大小,若页内位移量12位,则2的12次方=4k,页的大小为4k,页内地址从~
若给定一个逻辑地址为A,页面大小为L,则
页号P=INT[A/L],页内地址W=A&&MOD&&L
分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程建立一张页面映射表,简称页表。页表的作用是实现从页号到物理块号的地址映射。
页号 物理块号 存取控制&&&
&&0&&&&&&&&2&&&&
&&1&&&&&&&15(F)&&&&
&&2&&&&&&&14(E)&&&&
&&3&&&&&&&1&&
4.&地址变换
(1) 程序执行时,从PCB中取出页表始址和页表长度(4),装入页表寄存器PTR。
(2)由分页地址变换机构将逻辑地址自动分成页号和页内地址。
例:1|B=2C8EH
&&&&&&页号为2,位移量为C8EH=3214D
或11406&&DIV&&4096=2
&&&&&11406&&MOD&&
(3) 将页号与页表长度进行比较(2&4),若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。
(5)取出页描述子得到该页的物理块号。&&2&&&&&&&14(E)
(6) 对该页的存取控制进行检查。
(7)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
例:01101B
01101B=EC8EH=60558D
或&14*558D
5.&具有快表的地址变换机构
分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为&联想存储器&或&快表&,存放当前访问的页表项。
二.分段存储管理
1.基本思想
将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
2.&分段存储方式的引入
3.&分段地址结构
作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例程序段、数据段等。每个段都从0开始编址,并采用一段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间是二维的。
15&&&&&&&&&&&12 &&11&&&&&&&&&&&&&&&&&&0
&&&&&&&段号&&&&&&&&&&&&段内位移量
段号4位,每个作业最多24=16段,表示段号从(24-1);段内位移量12位,212=4k,表示每段的段内地址最大为4K(各段长度不同),从~
段号 段长 起始地址 存取控制&&&
0&&&&&1K&&&&&4096&&&&
1&&&&&4K&&&&&17500&&&&
2&&&&&2K&&&&&8192&&
5.&地址变换
(1).&程序执行时,从PCB中取出段表始址和段表长度(3),装入段表寄存器。
(2).&由分段地址变换机构将逻辑地址自动分成段号和段内地址。
例:|B=1C8EH
段号为1,位移量为C8EH=3214D
(3).&将段号与段表长度进行比较(1&3),若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4).&将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5).&取出段描述子得到该段的起始物理地址。1&&&&&&&&&4K&&&&&&&&&&&&&17500
(6).&检查段内位移量是否超出该段的段长(3214&4K),若超过,产生越界中断。
(7).&对该段的存取控制进行检查。
(8).&将该段基址和段内地址相加,得到实际的物理地址。
例:01101B
起始地址17500D+段内地址D
三.分页与分段的主要区别
分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
四.段页式存储管理
1.基本思想:
分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。
在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。
段页式系统中,作业的地址结构包含三部分的内容:段号&&&&&&页号&&&&&&&页内位移量
程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。
为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。
2.地址变换的过程:
(1)程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。
(2)由地址变换机构将逻辑地址自动分成段号、页号和页内地址。
(3)将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4)将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5)取出段描述子得到该段的页表始址和页表长度。
(6)将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(7)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。
(8)取出页描述子得到该页的物理块号。
(9)对该页的存取控制进行检查。
(10)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
五、在网上找到了一个比较形象的比喻,挺不错的,呵呵,列出来如下:
打个比方,比如说你去听课,带了一个纸质笔记本做笔记。笔记本有100张纸,课程有语文、数学、英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择。
第一种是,你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记,最后在第一张纸做个列表,记录着三门笔记各自的范围。这就是分段管理,第一张纸叫段表。
第二种是,你从第二张纸开始做笔记,各种课的笔记是连在一起的:第2张纸是数学,第3张是语文,第4张英语&&最后呢,你在第一张纸做了一个目录,记录着语文笔记在第3、7、14、15张纸&&,数学笔记在第2、6、8、9、11&&,英语笔记在第4、5、12&&。这就是分页管理,第一张纸叫页表。你要复习哪一门课,就到页表里查寻相关的纸的编号,然后翻到那一页去复习
再粘贴一个帖子:
分页概念:逻辑空间分页,物理空间分块,页与块同样大,页连续块离散,用页号查页表,由硬件做转换,页面和内存块大小一般选为2的若干次幂(便于管理)页表作用:实现从页号到物理地址的映射请求分页的基本思想1.请求分页=分页+请求2.请求分页提供虚拟存储器3.页表项中的状态位指示该页面是否在内存,若不在,则产生一个缺页中断页面置换:把一个页面从内存调换到磁盘的对换区中抖动:在具有虚存的计算机中,由于频繁的调页活动使访问磁盘的次数过多而引起的系统效率降低的一种现象页面走向:常用的页面置换算法:先进先出法:(置换次数比较多)最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现)最近最少使用置换法(LRU):当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以淘汰最近未使用置换法(NUR):是LRU算法的近似方法,选择在最近一段时间里未被访问过的页面予以淘汰段式管理的基本思想是:把程序按内容或过程(函数)关系分成段,每个段有自己的名字(编号)。一个作业或进程的虚拟存储空间都对应于一个由段号(段号:段内偏移)构成的二维地址,编译程序在编译链接过程中就直接形成这样的二维地址形式。段式管理以段为单位分配内存,然后通过地址变换将段式虚拟地址转换成实际的内存物理地址。和页式管理一样,段式管理也采用只把那些经常访问的段驻留内存,而把那些将来一段时间不被访问的段放入外存,待需要时自动调入的方法实现虚拟存储器。段式管理把一个进程的虚拟地址空间设计成二维结构,即段号(段号:段内偏移)的形式。前面己经谈到,与页式管理编译程序产生一维连续地址不同,段式管理系统中的编译程序编译形成多个段及段的名字或编号,各个段号之间无顺序关系。与页式管理页长度相同不一样,段的长度是不同的,每个段定义一组逻辑上完整的程序或数据。例如,在DOS操作系统中,一个程序内部被分为了正文段、数据段、堆栈段等。每个段是一个首地址为O并连续的一维线性空间您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第四章—b 分页与分段存储管理.ppt38页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:10 &&
第四章—b 分页与分段存储管理
你可能关注的文档:
··········
··········
作业的分段结构 以段为单位进行主存分配,每一个段在主存中占有连续的空间,但各个段之间可以离散的存放在主存不同区域中。 2.段表 在分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到内存中不同的分区中。在系统中为每个进程建立一张段映射表,简称为“段表”。每个段在表中占有一表项,在其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度,如下图所示。进程在执行中,通过查段表来找到每个段所对应的内存区。可见,段表实现了从逻辑段到物理内存区的映射。 内存空间 0
(MAIN) 0 15K
(X) 1, 7K
8K (S) 3, 10K 作业空间 段 表
MAIN) 0 0 15K 段号 段长 基址 (X) 1 0 0 1 7K (D) 2 2 0 8K 3 (S) 3 0 10K
10K 150K 3.地址变换机构 段表寄存器 越界中断 逻辑地址 段号
基址 0 1 2 3 段表始址
段表长度 TL 段号S 位移量w
40K 7K 80K 8K 120K 10K
150K 物理地址 80k+100 物理地址:段的基址+段内地址(位移量) 为了实现从逻辑地址到物理地址的变换功能,系统中设置了段表寄存器,用于存放段表始址和段表长度。在进行地址变换时,系统将逻辑地址中的段号S与段表长度TL进行比较。若 S≥TL,表示段号太大,访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存中的起始地址,然后再检查段内地址d是否超过该段的段长SL。若超过,即 d≥SL,同样发出越界中断信号;若未越界,则将该段的基址与段内地址w相加,得到要访问的内存物理地址。
4 分页与分段的区别 相似之处: 都采用离散
正在加载中,请稍后...内存分段机制与分页机制
内存分段机制与分页机制
(一):逻辑地址(Logical Address)&
& & & & 指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。
(二):线性地址(Linear Address)&
& & & & 是逻辑地址到物理地址变换之间的中间层。程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。
(三):物理地址(Physical Address)&
& & & &指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
(四):虚拟内存(Virtual Memory)
& & & &指计算机呈现出要比实际拥有的内存大得多的内存量。因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。拆东墙,补西墙,在Linux0.11内核中,给每个程式(进程)都划分了总容量为64MB的虚拟内存空间。因此程式的逻辑地址范围是0xx4000000。有时我们也把逻辑地址称为
虚拟地址。因为和虚拟内存空间的概念类似,逻辑地址也是和实际物理内存容量无关的。逻辑地址和物理地址的“差距”是0xC0000000,是由于虚拟地址-&线性地址-&物理地址映射正好差这个值。这个值是由操作系统指定的。机理 逻辑地址(或称为虚拟地址)到线性地址是由CPU的段机制自动转换的。如果没有开启分页管理,则线性地址就是物理地址。如果开启了分页管理,那么系统程式需要参和线性地址到物理地址的转换过程。具体是通过设置页目录表和页表项进行的。
段选择符为16位。为了方便查找段选择符,CPU提供了段寄存器来存放段选择符。段寄存器有cs, ss, ds, es, fs, gs(为16位),主要的有cs:代码段寄存器。包含程序指令的段;ss:栈段寄存器。指向当前程序栈的段。ds:数据段。指向静态数据或者全局数据段。段选择符的字段如下图:
TI表示段描述符存放在GDT还是存放在LDT,0表示存放在GDT。1存放在LDT。&INDEX表示的是选择索引号。就是用此索引号来在GDT中检索相应的段描述符。&
RPL(requested privilege level)表示的是请求者的特权级。
2全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此积存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。GDTR中存放的是GDT在内存中的基地址和其表长界限。GDTR是一个长度为48bit的寄存器,内容为一个32位的基地址和一个16位的段限。其中32位的基址是指GDT在内存中的地址。
3局部描述符表LDT(Local Descriptor Table)局部描述符表可以有若干张,每个任务可以有一张。我们可以这样理解GDT和LDT:GDT为一级描述符表,LDT为二级描述符表。LDT本身同样是一段内存,也是一个段,所以它也有个描述符描述它,这个描述符就存储在GDT中,对应这个描述符也会有一个选择符,LDTR装载的就是这样一个选择符。cpu在GDT中寻址LDT时,也需要使用选择符。LDTR是局部描述符寄存器,由一个可见的16位寄存器(存储段选择符)和一个不可见的描述符寄存器组成(描述符寄存器实际上是一个不可见的高速缓冲区)。当选择符被装入段寄存器时,cpu会自动将其对应的描述符装入描述符寄存器。系统任务切换时,LDT切换,而GDT不切换(因为真个系统只有一个GDT),这时新任务的LDT描述符的选择子就被装入到LDTR中。LDT不包含在GDT中。GDT中只是包含了LDT描述符(一个指向LDT起始地址的指针)。
注:IA-32为LDT的入口地址也提供了一个寄存器LDTR,因为在任何时刻只能有一个任务在运行,所以LDT寄存器全局也只需要有一个。如果一个任务拥有自身的LDT,那么当它需要引用自身的LDT时,它需要通过lldt指令将其LDT的段描述符装入此寄存器。lldt指令与lgdt指令不同的时,lgdt指令的操作数是一个32-bit的内存地址,这个内存地址处存放的是一个32-bit
GDT的入口地址,以及16-bit的GDT Limit。而lldt指令的操作数是一个16-bit的选择子,这个选择子主要内容是:被装入的LDT的段描述符在GDT中的索引值
若给定一个逻辑地址是 a:b ,根据逻辑地址的a(段选择符)的T1位确定是选择GDT还是LDT。
a、若是T1位选择GDT,根据GDTR找到GDT的基址,根据a的 3~15位确定它的段描述符X在GDT中的位置(GDTR即基址+a的3-15bit即相对位置):确定段描述符X,再根据段描述符提取出其中包含的段基址信息,段基址+b(段内偏移),最终确定线性地址。
b、若是T1位选择LDT,根据GDTR找到GDT的基址,根据LDTR的高13位确定它的LDTX描述符在GDT中的位置(GDTR基址+LDTR13bit即相对位置):确定LDTX描述符。LDTX描述符可以确定LDT的基址(LDTX描述符确定LDT表在内存中的起始位置),再根据段选择符a确定的相对位置,可以确定LDT中的私有段描述符Y。接下来同上面的:再根据段描述符提取出其中包含的段基址信息,段基址+b(段内偏移),最终确定线性地址。
每个任务都有自己的页目录和页表. 在处理器中有个控制寄存器CR3, 存放着当前任务页目录的物理地址, 故又叫做页目录基址寄存器(Page Directory Base Register: PDBR). 每个任务都有自己的TSS,
其中就包括了CR3寄存器域, 存放了任务自己的页目录物理地址. 当任务切换时, 处理器切换到新任务开始执行, 而CR3寄存器的内容也被更新, 以指向新任务的页目录位置. 相应的, 页目录又指向一个个的页表, 这就使得每个任务都只在自己的地址空间内运行. 从下图可以看出, 页目录和页表也是普通的页, 混迹于全部的物理页中. 它们和普通页的不同支持仅仅在于功能不一样. 当任务撤销之后, 它们和任务所占用的普通页一样会被回收, 并分配给其他任务.
我的热门文章
即使是一小步也想与你分享操作系统中分段和分页有什么区别和联系?(用自己的话说哈)_百度知道温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
有强烈的好奇心,富有挑战和竞争意识,勤奋、能吃苦,
自我激励,学习认真,有很好的自学能力,
有很好的团队精神和协作精神,良好的沟通、协调能力,有责任感。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(3074)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'分页和分段的主要区别',
blogAbstract:'1:页是信息的物理单位,分也是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好的满足用户的需要。2:页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于系统所编写的程序,通常是编译程序在对源程序迳行编译时根据信息的性质来划分的。3:分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需要利用一个记忆符即可表示一个地址;而分段的作业地址是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址!',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'有强烈的好奇心,富有挑战和竞争意识,勤奋、能吃苦,\r\n自我激励,学习认真,有很好的自学能力,\r\n有很好的团队精神和协作精神,良好的沟通、协调能力,有责任感。',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 内存分段与分页 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信