精华内容
下载资源
问答
  • 基本分页存储管理方式中关于逻辑地址和物理地址的转换(操作系统)
    万次阅读 多人点赞
    2018-06-04 21:34:09
    分析页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。若给定逻辑地址A,页面的大小为L,则页号p和页内地址d可按照下式求得:

     p=int [A/L]d=A mod L

    其中,int是取整函数(取数值的整数部分),mod是取余函数(取数值的余数部分)。


    页表的作用是实现从页号到物理块号的地址映射。以逻辑地址的页号检索页表,得到该页的物理块号;同时将页内地址d直接送入物理地址寄存器的块内地址字段中。这样物理块号和块内地址拼接成了实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。

      所以物理地址的计算公式为:

      物理地址=块的大小(即页的大小L)′块号f+页内地址d

    例子:若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。


    解:

    本题中,为了描述方便,设页号为p,页内位移为d,则:

    (1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。


    (2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100=1124。


    (3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。


    (4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012 mod 1024=916。因页号超过页表长度,该逻辑地址非法。


    更多相关内容
  • 操作系中分页管理总的逻辑地址到物理地址的映射转换算法 C语言
  • 一、连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,...基本的分页存储管理方式不具备页面对换功能,也不支持实现虚拟存储器功能,它需要把每个作业全部装入内存后才能运行。 三、页面 分页存储管理是将

    一、连续分配方式缺点

    连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价。

    二、离散分配方式

    离散分配方式思想:将进程直接分散地装入到许多不相邻接的分区中。
    1.如果离散分配的基本单位是页----------》分页存储管理方式
    2.如果离散分配的基本单位是段----------》分段存储管理方式
    基本的分页存储管理方式不具备页面对换功能,也不支持实现虚拟存储器功能,它需要把每个作业全部装入内存后才能运行。

    三、页面

    分页存储管理是将一个进程的逻辑地址空间划分为若干个大小相等的片,这些片称之为页面,并编号第0页,第1页。。。同时,我们还把内存空间也划分为与页面大小相同的若干个存储快,称为块或叶框,也进行编号0#,1#…之后我们为进程分配内存时,即是将进程的若干个页分别映射装入到可以不相邻的块中去。由于这里进程的最后一页往往装不满块而会形成不可利用的碎片,我们称之为业内碎片。

    四、页面大小

    很明显,页面大小过小可使得内存碎片变小,减少内存碎片总空间,提高内存利用率,但缺点是:每个进程由此会占用更多页面,导致进程页表过长,占用大量内存(页表也是要耗费内存的),。而且还降低了页面切换的效率。而页面过大,可以减少页表长度,提高页面切换效率,但内存碎片增大。

    在页面大小选择适中,一般为2的幂,通常为512B~8KB。

    五、页面地址结构

    页号(P)+位移量(W)
    位移量W也称呼为页内地址或页内偏移量,对于特定机器,其页面地址结构时确定的,给定逻辑地址空间中的地址A,页面大小L,则页号P=int(A/L)
    页内地址W=A%L
    比如:系统页面大小为1KB,A=2170B,可得
    页号P=A/L=2170/1024=2
    页内地址=A%L=122

    六、页表

    在分页系统里,允许将进程各个页面离散存储在内存的不同物理块中,为了保证进程的正常运行,需要能在内存中找个每个页面所对应的物理块,于是系统得为进程建立一张页面映射表,以方便查找页面对应的地址,这张表叫做页表,进程地址空间内的所有页(0~n)都将通过页表映射到块号,进程执行时,只要通过查找页表,就可知道每页在内存中的物理块号。总而言之,页表作用就是实现从页号到物理块号的地址映射。

    例题:
    例1:
    一分页存储管理系统中逻辑地址长度为16位,页面大小为4KB字节,现有一逻辑地址为2F6AH,且第0,1,2,页依次存放在物理块5,10,11中,则相应的物理地址是多少?
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    例2:
    在这里插入图片描述
    解题过程:

       首先要知道页式存储管理的逻辑地址分为两部分:页号和页内地址。物理地址分为两部分:
    

    关系为:
    逻辑地址= 页号+页内地址

    物理地址= 块号+页内地址;

    **分析:**已知:用户编程空间共32个页面,2ˆ5 = 32 得知页号部分占5位,由“每页为1KB”,1K=210,可知内页地址占10位。

    由“内存为16KB”,2^4=16得知块号占4位。

    逻辑地址0A5C(H)所对应的二进制表示形式是:0000101001011100,后十位1001011100是页内地址,

    00010为为页号,页号化为十进制是2,在对照表中找到2对应的物理块号是11,11转换二进制是1011,即可求出物理地址为10111001011100,化成十六进制为2E5C;

    即则逻辑地址0A5C(H)所对应的物理地址是2E5C;

    例3:
    十进制逻辑地址转物理地址
    在这里插入图片描述
    在这里插入图片描述
    地址转换步骤:
    地址转换步骤
    当逻辑地址为16进制、八进制、二进制时,
    第一步:把逻辑地址转为二进制;

    第二步:按页的大小分离出页号和页内偏移量( 高位部分为页号,低位部分为页内偏移量 )

    第三步:根据题意产生页表;

    第四步:将逻辑地址的页内偏移量直接复制到物理地址的页内偏移量上
    ( 即:逻辑地址的页内偏移量 = 物理地址的页内偏移量 )

    第五步:以逻辑地址的页号查页表,查出物理地址的帧号,再把帧号转为二进制,复制到物理地址的的帧号上,从而得出物理地址。

    当逻辑地址为十进制时,
    第一步:求出逻辑地址的页号 = 逻辑地址 / 页面大小

    第二步:求出页内偏移量 = 逻辑地址 % 页面大小
    (“%”表示取余,只取余数,不取商)

    第三步:根据题意产生页表;

    第四步:以逻辑地址的页号查页表,查出物理地址的帧号

    第五步:求出物理地址 = 帧号 * 页面大小 + 页内偏移

    网易校招笔试题

    对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少?

    解法1:
    0X0005F123这个地址对应的十进制是:389411B

    页面大小8KB=8192B

    页号=389411/8192=47页

    页内偏移=389411%8192=0X00001123

    解法2:
    将地址转换为二进制:0X000….0101 111 1 0001 0010 0011

    8KB=2^13,即后13为页内偏移量即0X00001123

    0101111=47

    参考文章:
    分页存储管理方式
    逻辑地址到物理地址的转换

    展开全文
  • 完成逻辑地址转换成相应的物理地址的过程。 1、建立一张位示图,用来模拟内存的分配情况,利用随机数产生一组0和1的数对应内存的使用情况。 2、输入块(页)的大小,通过模拟位示图为本作业分配内存空间建立相应的...
  • 今天在学习OS的内存管理内容时,看到了如下所示逻辑地址介绍。(内容为22年王道书P156) 看到这种形式之后,我产生了一定的疑惑:逻辑地址难道不是一个数值吗?为什么是这种表的形式? 问题分析与解决 根据王道视频...

    问题引出

    今天在学习OS的内存管理内容时,看到了如下所示逻辑地址介绍。(内容为22年王道书P156)
    看到这种形式之后,我产生了一定的疑惑:逻辑地址难道不是一个数值吗?为什么是这种表的形式?
    请添加图片描述

    问题分析与解决

    根据王道视频中关于地址的二进制表示的补充讲解,以及如下所示两个公式的启发,我突然有所领悟:

    页号=逻辑地址/页面长度
    页内偏移量=逻辑地址%页面长度

    回忆起二进制的除法和余数运算法则:如果页面长度是 2 n 2^n 2n的话,那么通过二进制除法即为移位n次!那么移位后的数即为商——页号,那些被移位掉的数即为余数——偏移量。

    发现了这个巧妙的设计之后再回去看那张图,瞬间茅塞顿开,确实是十分巧妙

    附1:页面长度是 2 n 2^n 2n时的好处

    1. 方便上面逻辑地址的计算,不赘述
    2. 当物理地址也刚好是相同位数二进制表示时,根据逻辑地址–>页号–>内存块号,再将二进制表示的内存块号和二进制表示的页内偏移量拼接起来,即为最终物理地址在这里插入图片描述

    附2:求逻辑地址A对应的物理地址流程

    查页表
    块号*内存块大小
    相加
    相加
    逻辑地址
    页号P
    页面偏移量W
    块号
    物理内存中的起始地址
    物理地址
    展开全文
  • 1. 物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)...

    本文内容转载自:http://www.cnblogs.com/felixfang/p/3420462.html

    1. 物理地址和逻辑地址

    物理地址加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。

    逻辑地址CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。

    为什么会有这两种地址?

    个人觉的原因在于逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观,例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。另外,有了逻辑地址这个概念,才能使用虚拟内存技术。

    2. Paging,分页内存管理方案

    (1) 分页的最大作用就在于:使得进程的物理地址空间可以是非连续的。

    物理内存被划分为一小块一小块,每块被称为帧(Frame)。分配内存时,帧是分配时的最小单位,最少也要给一帧。在逻辑内存中,与帧对应的概念就是页(Page)。

    逻辑地址的表示方式是:前部分是页码后部分是页偏移。

    例如,已知逻辑空间地址为2^m个字节(也就是说逻辑地址的长度是m位),已知页大小是2^n字节。那么一共可以有2^(m-n)个页。因此页码部分会占m-n位,之后的n位,用来存储页偏移。

    举个例子, 页大小为4B,而逻辑内存为32B(8页),逻辑地址0的页号为0,页号0对应帧5,因此逻辑地址映射为物理地址5*4+0=20。逻辑地址3映射物理地址5*4+3=23。逻辑地址13(4*3+1,页号为3,偏移为1,因此帧号为2),映射到物理地址9。

    采用分页技术不会产生外部碎片(内存都被划分为帧),但可能产生内部碎片(帧已经是最小单元,因此帧内部可能有空间没有用到)。

    按概率计算下来,每个进程平均可有半个帧大小的内部碎片。

    (2) 页表的硬件实现

    上一小节中写到页表是逻辑地址转化到物理地址的关键所在。那么页表如何存储?

    每个操作系统都有自己的方法来保存页表。绝大多数都会为每个进程分配一个页表。现在由于页表都比较大,所以放在内存中(以往是放在一组专用寄存器里),其指针存在进程控制块(PCB)里,当进程被调度程序选中投入运行时,系统将其页表指针从进程控制块中取出并送入用户寄存器中。随后可以根据此首地址访问页表。

    页表的存储方式是TLB(Translation look-aside buffer, 翻译后备缓冲器)+内存。TLB实际上是一组硬件缓冲所关联的快速内存。若没有TLB,操作系统需要两次内存访问来完成逻辑地址到物理地址的转换,访问页表算一次,在页表中查找算一次。TLB中存储页表中的一小部分条目,条目以键值对方式存储。

    (3) 页表的数据结构

    a.

    今年是2013年,现有的笔记本电脑,内存地址空间一般为2^32字节以上。对于具有32位逻辑地址空间的计算机系统,如果系统的页大小为4KB(2^12B),那么页表可以拥有2^(32-12)个,也就是一百多万个条目,假设每个条目占有4B,那每个进程都需要4MB的物理地址空间来存放页表本身。而且,页表本身需要分配在连续内存中。

    为此,Hierarchical Paging(层次化分页)被提出,实际上就是将页号分为两部分,第一部分作为索引,第二部分作为页号的偏移。

    以一个4kb页大小的32位系统为例。一个逻辑地址被分为20位的页码和12位的页偏移。因为要对页表进行再分页,所以该页号可分为10位的页码和10位的页偏移。这样一个逻辑地址就表示如下形式:

     

    地址转换过程如下:

     

    地址由外向内转换,因此此方法也被称为forward-mapped page table(向前映射表)

    b. Hashed Page Tables 哈希页表

    处理超过32位地址空间的常用方法是使用hashed page table(哈希页表),并以虚拟页码作为哈希值。哈希页表的每一条目都包括一个链表的元素,这些元素哈希成同一位置。每个元素有三个域:虚拟页码,所映射的帧号,指向链表中下一个元素的指针。

    个人看来,哈希页表的地址转换方式,实际上是Chaining(链接)方式,也就是一种哈希函数的溢出处理方式(另一种溢出处理方式叫做Open Addressing,开放寻址),具体过程如下:

    逻辑地址需要大于32bit的地址空间来表示,但是操作系统仍只有32bit来表示地址。此时人们便想到虚拟页地址,虚拟地址可以在32bit表示范围之内,然后利用哈希函数完成逻辑地址到虚拟地址的映射,由于虚拟地址更少,哈希函数会出现溢出,这里使用Chaining来解决溢出。

    逻辑地址中的页号(下图中的p)经过哈希函数的计算,算出虚拟地址中的页号,根据虚拟页号可以在哈希表中以O(1)方式寻址,用p与链表中的每一个元素的第一个域相比较。如果匹配,那么相应的帧号就用来形成物理地址。如果不匹配,就对链表中的下一个节点进行比较,以寻找一个匹配的页号。

    c. Inverted page table 反向页表

    时间关系,这段暂时略过。

    3. Segmentation,分段内存管理方案

    采用分页内存管理有一个不可避免的问题:用户视角的内存和实际内存的分离。设想一段main函数代码,里面包含Sqrt函数的调用。按照编写者的理解,这段代码运行时,操作系统应该分配内存给:符号表(编译时使用),栈(存放局部变量与函数参数值),Sqrt代码段,主函数代码段等。这样,编写者就可以方便地指出:"函数sqrt内存模块的第五条指令",来定位一个元素。而实际上,由于采用Paging的管理方式,所有的一切都只是散落在物理内存中的各个帧上,并不是以编写者的理解来划分模块。

    Segmentation的内存管理方式可以支持这种思路。逻辑地址空间由一组段组成。每个段都有名字和长度。地址指定了段名称和段内偏移。因此用户通过两个量来指定地址:段名称和偏移。段是编号的,通过段号而非段名称来引用。因此逻辑地址由有序对构成:

     <segment-number,offset>(<段号s, 段内偏移d>)

    段偏移d因该在0和段界限之间,如果合法,那么就与基地址相加而得到所需字节在物理内存中的地址。因此段表是一组基地址和界限寄存器对。

     

    例如下图,有5个段,编号0~4,例如段2为400B开始于位置4300,对段2第53字节的引用映射成位置4300+53=4353。而段0字节1222的引用则会触发地址错误,因为该段的仅为1000B长(界限为1000)。

    4. 合并分段和分页的管理方案

    在现有的Intel兼容计算机(x86)上,采用的内存管理方案是分段和分页合并的管理方案。

    在这个方案中,逻辑地址,如前一节中所说,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量]。

    这样的逻辑地址转换的过程是怎样呢?如下图所示:

    CPU要执行一条引用了内存地址的指令时,转换过程就开始了。第一步是把逻辑地址转换成线性地址。但是,为什么不跳过这一步,而让软件直接使用线性地址(或物理地址呢?)原因主要是因为:

    (1) Intel的更新是渐进式而非革命式,新的处理器需要兼容和保留过往的设置。具体的原因,博文Memory Translation and Segmentation (http://blog.csdn.net/drshenlei/article/details/4261909) 中讲的较为清楚。

    (2) 如上节所说,采用段内存管理,可以跟方便地进行地址保护(同一类型的地址逻辑地址在一起)。

    下面讲逻辑地址到线性地址的部分。

    在IBM OS/2 32位版本的操作系统,和Intel 386的环境下。操作系统采用的内存分配方式就是分段和分页合并的方式。

    逻辑地址的实际上是一对<选择符,偏移>。

    选择符的内容如下:

    从左开始,13位是索引(或者称为段号),通过这个索引,可以定位到段描述符(segment descriptor),而段描述符是可以真正记载了有关一个段的位置和大小信息, 以及访问控制的状态信息。段描述符一般由8个字节组成。由于8B较大,而Intel为了保持向后兼容,将段寄存器仍然规定为16-bit(尽管每个段寄存器事实上有一个64-bit长的不可见部分,但对于程序员来说,段寄存器就是16-bit的),那么很明显,我们无法通过16-bit长度的段寄存器来直接引用64-bit的段描述符。因此在逻辑地址中,只用13bit记录其索引。而真正的段描述符,被放于数组之中。

    这个内存中的数组就叫做GDT(Global Descriptor Table,全局描述表),Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址。程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此寄存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。

    除了GDT之外,还有LDT(Local Descriptor Table,本地描述表),但与GDT不同的是,LDT在系统中可以存在多个,每个进程可以拥有自己的LDT。LDT的内存地址在LDTR寄存器中。

    在之前图中的TI位,就是用来表示此索引所指向的段描述符是存于全局描述表中,还是本地描述表中。=0,表示用GDT,=1表示用LDT。

    RPL位,占2bit,是保护信息位,还没有仔细了解过这一块,暂时先不写。

    找到,段描述符后,加上偏移量,便是线性地址。转换过程如下:

    在Intel 386的环境下,线性地址转换为物理地址的过程,和第二节分页式内存管理中,层次分页中,逻辑地址转换为物理地址的方法类似。如下图。

     

    Intel 80386的地址转换全过程如下图:

     


    展开全文
  • 基本概念: 页框/内存块:将内存空间分为大小相等的分区,每个分区就是一个...从而实现逻辑地址到物理地址的转换。 如图: 接下来看具体的实现过程: 1.在进程未调度时,PCB中会存放页表始址和页表长度(多少个页表项
  •  (1)逻辑地址需要多少二进制位表示?  (2)物理地址需要多少二进制位表示?  它由两个部分组成:前一部分表示该地址所在页面的页号p;后一部分表示页内地址(页内位移)d。页号的地址位数决定了页的多少,...
  • 分页存储逻辑地址转物理地址

    千次阅读 多人点赞 2017-07-03 09:34:24
    分页存储逻辑地址转物理地址:例如:已知某个分页系统,页面大小为1K(即1024字节),某一个作业有4个页面,分别装入到主存的第3、4、6、8块中,求逻辑地址2100对应的物理地址。解: 第一步:求逻辑地址的页号 = 2100...
  • 【计算】分页存储逻辑地址转物理地址

    万次阅读 多人点赞 2018-08-02 14:53:22
    分页存储逻辑地址转物理地址: 例题:已知某个分页系统,页面大小为1K(即1024字节),某一个作业有4个页面,分别装入到主存的第3、4、6、8块中,求逻辑地址2100对应的物理地址。 页号 物理块号 0 3 1 ...
  • 之前软考写写题目,关于地址这里的题目是会写了,但是也仅限于题目会写,于是准备把操作系统系统性的过一遍,然后到了这里的位置有一点疑惑,对逻辑地址作用于分页管理这里有点疑惑,于是就在这里学一下写下心得。...
  • 文章目录分页分段段页Linux内存管理 分页 分段 段页 Linux内存管理
  • 页:将一个进程的逻辑地址空间分成若干个大小相等的片 页框:将物理内存空间分成与页大小相同的若干个存储块 分页存储:将进程中的若干页分别装入多个可以不相邻的页框中 页内碎片:进程最后一页一般装...
  • 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间...
  • 物理地址和逻辑地址 物理地址: 加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0 开始一直到可用物理内存的最高端。这些数字被北桥(Norbridge chip)...
  • 请求分页虚拟存储管理技术是把作业地址空间的全部信息存放在磁盘上。当作业被选中运行时,先把作业的开始几页装入主存并启动运行。为此在为作业建立页表时,应说明哪些页已在主存,哪些页不在主存。
  • 分析页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。若给定逻辑地址A,页面的大小为L,则页号p和页内地址d可按照下式求得:  p=int [A/L]d=A mod L  其中,int是取整函数(取...
  • 分页存储管理逻辑地址到物理地址的转换过程解析首先要知道,物理地址=块号+页内地址 逻辑地址=页号+页内地址所以物理地址和逻辑地址后面部分是相同的,即都为页内地址。下面以一个例子说明如何由逻辑地址求物理...
  • 分页逻辑实现

    千次阅读 2020-02-21 11:06:08
    分页简介 用来将数据分割成多个部分来分页面展示。 什么时候用? 数据量达到一定的时候,就需要使用分页来进行数据分割。要不然可能会面临以下问题: 客户端一次性显示太多数据会影响到用户的体验,比如很难找到...
  • 专业资料 实验二 设计一个分页内存管理的地址转换器 班级14级2班 姓名侯XX 学号201442060* 实验目的 用C/C++/JAVA实现分页内存管理中的逻辑地址转换成物理地址的过程 二实验内容 1输入 随机输入某页式系统的页面大小...
  • 基本分页存储管理方式~
  • 分页存储管理逻辑地址到物理地址的转换过程解析
  • 首先回顾一下分页机制中逻辑地址的结构:页号:页内偏移量 再来回顾一下分段机制中逻辑地址的结构:段号:段内偏移量   针对上面的问题,老羊快跑这里给大家简单解释一下。 假设有一段程序,在没有采用分段机制...
  • 完成逻辑地址转换成相应的物理地址的过程。 1、建立一张位示图,用来模拟内存的分配情况,利用随机数产生一组0和1的数对应内存的使用情况。 2、输入块(页)的大小,通过模拟位示图为本作业分配内存空间建立相应的...
  • 通过内存分段和内存分页管理虚拟地址和物理地址之间的关系。 虚拟地址是通过段表与物理地址进⾏映射的,分段机制会把程序的虚拟地址分成 4 个段, 每个段在段表中有⼀个项,在这⼀项找到段的基地址,再加上偏移量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,681
精华内容 33,872
关键字:

分页管理逻辑地址