精华内容
下载资源
问答
  • 段页式存储

    2014-03-31 11:00:00
    几乎每一本将操作系统原理的书籍都会谈及内存管理方法的段页式存储。以前看书都是看的云里雾里!原因就是还没有懂INTEL指令,不知道页式存储有什么作用。国内教材有个最大的弊病就是,作者通常先将概念,然后再将...

    几乎每一本将操作系统原理的书籍都会谈及内存管理方法的段页式存储。以前看书都是看的云里雾里!原因就是还没有懂INTEL指令,不知道页式存储有什么作用。国内教材有个最大的弊病就是,作者通常先将概念,然后再将如何运用,很少去提及概念是如何被提出来!为什么非要提出这样一个概念。

    除非你已经被一个问题困扰到茶饭不思、辗转难眠,否则你绝对不会明白一个新的概念对你有多大的作用

    分段还是分页

    分段还是分页其实不是两个不同的概念!分段,其中心思想是将程序分成若干的逻辑段,每个段实现什么功能,提供什么资源。这个其实和后来面向对象的类的思想没有任何区别,仅仅是表现不一样罢了。在过去编程时,将程序分为若干逻辑段(数据段,32位代码段,16位代码段等),然后通过设置CS来实现段之间的跳转。这种方式使得程序在设计期间逻辑清晰。但是这种方式,程序是一个线性的指令集合,某些时候,人们需要同时执行两个任务,采用分段需要频繁的切换CS,这样造成很大的性能损耗。INTEL为了满足这种能够新增加一组寄存器 CR0、1、2、3来实现任务跳转。这个使用同样一个逻辑地址就能定位为不同的物理地址,如下图

                                image

    对于同样一个逻辑地址10000,可以使用不同的分页转换,将逻辑地址转化为不同的物理地址!

    注:分段和分页并不是对立的两个概念,分页其实建立在分段的基础之上!

    如何分页

    请思考如下一个数学题

    y=f(x)    {x的定义域为[0,π/2]}  ,找到一个函数使得f(x)的值域为[0,1]?

    如果你学过三角函数马上就会想到 f(x)=sin(x) 

    用在分页机制里,该数学题变为了

    y=f(x)    {x的定义域为[0,4.4M] 用4.4M的虚拟地址范围 },找到一个函数使得f(x)的值域为[0,4G]---32位CPU内存寻址范围?

    解析:

    这里当然可以使用一个函数来实现这种扩展,但是在计算机里面,没有使用函数,而是使用索引的方式来表示一个更大的范围,所谓索引,就是新华字典里面的查询页!一本字典那么厚,但是可以使用几页查询页就能找到字典里面的任何一个字!

    在INTEL x86CPU保护模式里,一页通常值为4K(4K=2的12次方,需要12位来表示页内偏移地址),所以4G就是1M(1M=2的20次方)个4K,1M个页索引。这样一个物理地址就可以转化为

    20位页索引+12位页内:需要用1M个索引项去记录每一页的属性!INTEL为了减小1M这个值,又将1M索引再次来个索引,将1M个索引按照1K个索引为1段,总共就是1K段!这样一个屋里地址就转化为:

    10位页索引的索引+10位页索引+12位页内偏移地址,使用两级索引来表示一个地址,地址转换过程如下:

    image

    10位页索引的所有集合(1M个索引)有个专门的名字:页表,表中的每一项也就是每一个索引叫做页表项PTE(page table entry)

    10位页索引的索引的所有集合(1K个)有个专门的名字:页目录表,表中的每一项也就是每一个索引的索引叫做页目录表项PDE(page directory entry)

    有一点值得强调,页表项和页目录表项不仅仅只有索引,只是上面为了理解简单而省略一些信息,他们都有各种的属性!

    每个项需要4个字节,总共就需要 4*1K(1K个页目录表项)+4*(1M个页表项) = 4.4M!

    实际上启动分页的过程,也就是将在内存中初始化f(x)的一个过程!具体而言就是在内存中为每一个物理页做索引,加属性的过程!

    当这些信息都被正确的在内存中初始化完毕之后,最重要的一步,就可以将信息的首地址复制给CR3,然后将CR0最高位设置为1就表示启动了分页机制!

    分页还是不分页,分段还是不分段,保护模式还是实模式追索到源头其实就是对CPU指令集的一个应用,CPU提供了某些功能,然后由此编写的操作系统就启用这些功能!所以不是操作系统多么牛逼,而是处理器多么厉害

    分页有多厉害

    详细解读一下这句话:将信息的首地址复制给CR3。

    CPU在将一个给定的虚拟地址进行地址转换的时候,首先是寻找CR3给定的页目录地址,找到之后,然后按照那个目录地址开始一级级的转换,这里你可能就会问,那是不是我随便给定一个CR3地址,那不是同一个地址会被转换为随便一个位置哦?是啊,就有这么牛逼!不同的页目录,就有不同的地址,操作系统实现的多任务,虚拟地址空间就是通过设置不同的CR3来实现!现在是否能够明白windows操作系统的每个进程寻址空间呢?在虚拟地址框架下,不管你如何寻址,你肯定找不到别人进程的代码,除非你改变CR3的值!

    此时你看看下面这张图:

    image

    是不是觉得浅显易懂了呢?

    image

     

    最后附上一段代码,摘抄自《一个操作系统的实现》

    ; 启动分页机制 --------------------------------------------------------------
    SetupPaging:
        ; 为简化处理, 所有线性地址对应相等的物理地址.
    
        ; 首先初始化页目录
        mov    ax, SelectorPageDir    ; 此段首地址为 PageDirBase
        mov    es, ax
        mov    ecx, 1024        ; 共 1K 个表项
        xor    edi, edi
        xor    eax, eax
        mov    eax, PageTblBase | PG_P  | PG_USU | PG_RWW
    .1:
        stosd
        add    eax, 4096        ; 为了简化, 所有页表在内存中是连续的.
        loop    .1
    
        ; 再初始化所有页表 (1K 个, 4M 内存空间)
        mov    ax, SelectorPageTbl    ; 此段首地址为 PageTblBase
        mov    es, ax
        mov    ecx, 1024 * 1024    ; 共 1M 个页表项, 也即有 1M 个页
        xor    edi, edi
        xor    eax, eax
        mov    eax, PG_P  | PG_USU | PG_RWW
    .2:
        stosd
        add    eax, 4096        ; 每一页指向 4K 的空间
        loop    .2
    
        mov    eax, PageDirBase
        mov    cr3, eax
        mov    eax, cr0
        or    eax, 80000000h
        mov    cr0, eax
        jmp    short .3
    .3:
        nop
    
        ret
    ; 分页机制启动完毕 ----------------------------------------------------------

     

    转载于:https://www.cnblogs.com/pavkoo/p/3635278.html

    展开全文
  • 目录页式存储管理段式存储管理分页和分段存储管理的主要区别段页式存储管理 页式存储管理 1. 基本原理 页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一块,并对它们加以顺序编号,如0#块、1#块...

    页式存储管理

    1. 基本原理

    页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一,并对它们加以顺序编号,如0#块、1#块等等。与此对应,用户程序的逻辑地址空间划分成大小相等的若干,同样为它们加以顺序编号,从0开始,如第0页、第1页等。 页的大小与块的大小相等。
    分页式存储管理的逻辑地址由两部分组成:页号和页内地址。其格式为:
    在这里插入图片描述

    2. 存储空间的分配与去配
    分页式存储管理把主存空间划分成若干块,以块为单位进行主存空间的分配。由于块的大小是固定的,系统可以采用一张主存分配表来记录已分配的块、尚未分配的块以及当前剩余的空闲块总数。最简单的办法可用一张“位示图”来记录主存的分配情况。
    例如主存的用户区被划分成512块,则可用字长为32位的16个字的位示图来构成一张主存分配表,位示图中的每一位与一个物理块对应,用0/1表示对应块的占用标志(空闲/已占用),另用一个字节记录当前系统的剩余空闲块总数。
    在这里插入图片描述
    进行主存分配时,首先查看空闲块总数是否能够满足作业要求,若不能满足,则不进行分配;若能满足,则从位示图中找出为“0”的位,并且将其占用标志置为“1”,并从空闲块总数中减去本次占用的块数,按找到的位计算出对应的块号,建立该作业的页表,并把作业装入对应的物理块中。
    由于每一块的大小相等,在位示图中查找到一个为“0”的位后,根据它所在的字号、位号,按如下公式可计算出对应的块号:
    块号=字号×字长+位号
    当一个作业执行结束时,则应该收回作业所占的主存块。根据归还的块号计算出该块在位示图中对应的位置,将占用标志修改为“0”,同时把归还块数加入到空闲块总数中。假定归还块的块号为i,则在位示图中对应的位置为:
    字号=[ i / 字长 ], 位号=i mod 字长
    其中[ ]表示对i除以字长后取其整数,而mod表示对i除以字长后取其余数部分。

    3. 页表与地址转换
    在分页式存储管理系统中,允许将作业的每一页离散地存储在主存的物理块中,但系统必须能够保证作业的正确运行,即能在主存中找到每个页面所对应的物理块。为此,系统为每个作业建立了一张页面映像表,简称页表。页表实现了从页号到主存块号的地址映像。作业中的所有页(0~n)依次地在页表中记录了相应页在主存中对应的物理块号。页表的长度由进程或作业拥有的页面数决定。
    在这里插入图片描述
    调度程序在选择作业后,将选中作业的页表始址送入硬件设置的页表控制寄存器中。地址转换时,只要从页表寄存器中就可找到相应的页表。当作业执行时,分页地址变换机构会自动将逻辑地址分为页号和页内地址两部分,以页号位索引检索页表,如果页表中无此页号,则产生一个“地址错”的程序性中断事件;如果页表中有此页号,则可得到对应的主存块号,再按逻辑地址中的页内地址计算出欲访问的主存单元的物理地址。因为块的大小相等,所以
    物理地址=块号×块长+页内地址
    在这里插入图片描述

    4. 总结

    • 目的
      减少分区管理的“碎片”,提高内存利用率。
    • 实现原理
      各个进程的虚拟空间被划分为若干个长度相等的页,并为各页加以编号,如第0页、第1页等 ;
      内存空间也按相同的页大小划分为存储块,称为(物理)块或页框(frame), 也同样为它们加以编号,如0#块、1#块等等。
      为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻接的物理块中。
      采用页表进行页和块的一一对应。
      在这里插入图片描述

    段式存储管理

    用户编制的程序是由若干组成的:一个程序可以由一个主程序、若干子程序、符号表、栈以及数据等若干段组成。每一段都有独立、完整的逻辑意义,每一段程序都可独立编制,且每一段的长度可以不同。
    段式存储管理支持用户的分段观点,具有逻辑上的清晰和完整性,它以段为单位进行存储空间的管理。

    1. 原理
    每个作业由若干个相对独立的段组成,每个段都有一个段名,为了实现简单,通常可用段号代替段名,段号从“0”开始,每一段的逻辑地址都从“0”开始编址,段内地址是连续的,而段与段之间的地址是不连续的。
    其逻辑地址由段号和段内地址两部分所组成:
    在这里插入图片描述

    2. 空间的分配与去配
    分段式存储管理是在可变分区存储管理方式的基础上发展而来的。在分段式存储管理方式中,以段为单位进行主存分配,每一个段在主存中占有一个连续空间,但各个段之间可以离散地存放在主存不同的区域中。为了使程序能正常运行,即能从主存中正确找出每个段所在的分区位置,系统为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一个表项,记录该段在主存储器中的起始地址和长度。段表实现了从逻辑段到主存空间之间的映射。
    在这里插入图片描述
    如果在装入某段信息时找不到满足该段地址空间大小的空闲区,则可采用移动技术合并分散的空闲区,以利于大作业的装入。
    当采用分段式存储管理的作业执行结束后,它所占据的主存空间将被回收,回收后的主存空间登记在空闲分区表中,可以用来装入新的作业。系统在回收空间时同样需要检查是否存在与回收区相邻的空闲分区,如果有,则将其合并成为一个新的空闲分区进行登记管理。
    段表存放在主存储器中,在访问一个数据或指令时至少需要访问主存两次以上。为了提高对段表的存取速度,通常增设一个相联寄存器,利用高速缓冲寄存器保存最近常用的段表项。

    3. 地址转换与存储保护
    段式存储管理采用动态重定位方式装入作业,作业执行时通过硬件的地址转换机构实现从逻辑地址到物理地址的转换工作,段表的表目起到了基址寄存器和限长寄存器的作用,是硬件进行地址转换的依据。
    在这里插入图片描述

    分页和分段存储管理的主要区别

    分页和分段系统都采用离散分配主存方式,都需要通过地址映射机构来实现地址变换,有许多相似之处。但两者又是完全不同的。具体表现如下。

    • 页是信息的物理单位,是系统管理的需要而不是用户的需要;而段则是信息的逻辑单位,它含有一组意义相对完整的信息,分段是为了更好地满足用户的需要。
    • 页的大小固定且由系统决定,因而一个系统只能有一种大小的页面;而段的长度却不固定,由用户所编写的程序决定,通常由编译程序对源程序进行编译时根据信息的性质来划分。
    • 分页式作业的地址空间是一维的,页间的逻辑地址是连续的;而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的。

    段页式存储管理

    段式存储管理支持了用户的观点,但每段必须占据主存储器的连续区域,有可能需要采用移动技术汇集主存空间,为此,兼用分段和分页的方法,构成可分页的段式存储管理,通常被称为是“段页式存储管理”。段页式存储管理兼顾了段式在逻辑上的清晰和页式在管理上方便的优点。

    1. 原理
    用户对作业采用分段组织,每段独立编程,在主存空间分配时,再把每段分成若干个页面,这样每段不必占据连续的主存空间,可把它按页存放在不连续的主存块中。
    段页式存储管理的逻辑地址格式如下:
    在这里插入图片描述
    段页式存储管理为每一个装入主存的作业建立一张段表,且对每一段建立一张页表。段表的长度由作业分段的个数决定,段表中的每一个表目指出本段页表的始址和长度。页表的长度则由对应段所划分的页面数所决定,页表中的每一个表目指出本段的逻辑页号与主存物理块号之间的对应关系。
    在这里插入图片描述

    2. 地址转换机制
    执行指令时,地址机构根据逻辑地址中的段号查找段表,得到该段的页表始址,然后根据逻辑地址中的页号查找该页表,得到对应的主存块号,由主存块号与逻辑地址中的页内地址形成可访问的物理地址。如果逻辑地址中的段号超出了段表中的最大段号或者页号超出了该段页表中的最大页号,都将形成“地址越界”的程序性中断事件。
    可以看出,由逻辑地址到物理地址的变换过程中,需要三次访问主存,第一次是访问主存中的段表,获得该段对应页表的始址,第二次是访问页表,获得指令或数据的物理地址,最后再按物理地址存取信息。
    在这里插入图片描述

    3. 特点

    • 每一段分为若干页,再按页式管理,页间不要求连续;
    • 用分段方法分配管理作业或进程,用分页方法分配管理内存;
    • 兼有段式和页式管理的优点,系统复杂性和开销增大.
    展开全文
  • 王道的说法 ...段页式存储,3次: 第一次:访问内存中的段表查到页表的起始地址 第二次:访问内存中的页表找到页帧号,形成物理地址 第三次:得到物理地址后,再一次访问内存,存取指令或者数...

    王道的说法

    页式存储2次

    第一次,访问内存中的页表,利用逻辑地址中的页号查找到页帧号,与逻辑地址中的页内偏移拼接形成物理地址;

    第二次:得到物理地址后,再一次访问内存,存取指令或者数据。

    段式存储2次(同上)

    段页式存储3次

    第一次:访问内存中的段表查到页表的起始地址

    第二次:访问内存中的页表找到页帧号,形成物理地址

    第三次:得到物理地址后,再一次访问内存,存取指令或者数据

    多级页表若页表划分为N级,则需要访问内存N+1次。若系统有快表,则在快表命中时,只需访问1次内存即可

     

    引入快表

    因为把页表放在内存中,至少需要访问两次内存才能存取一条指令或者数据(一次得到物理地址地址,一次存取),比较慢;

    为此在地址变换机构中增设了一个具有并行查找能力的高速缓冲寄存器-快表(全局只有一个,不在内存中!!!)

    用来存放当前访问的若干页表项(比较小,只能存放部分页表项)

    • 若快表命中,则可直接得到页帧号,与页内偏移拼接成物理地址后访问内存,进行指令或者数据的存取。(只需访问一次内存)
    • 若快表不命中,则需去内存中访问页表,形成物理地址后,再一次访问内存进行指令或者数据的存取。(需要访问两次内存)

    注:1.读出页表项后,应将其存入快表,以便下次使用,快表已满则需用算法置换;

          2.有些处理机是先查快表,快表不命中再去查内存,有些则是快表和内存同时查找,快表

    命中就终止内存查找。

         3.在内存中查找页表时,对比页表项的状态位,看该页是否调入了内存,若没有调入内存则产生一个缺

    页中断,请求外存把该页调入内存。

    展开全文
  • https://blog.csdn.net/yilongdashi/article/details/82707022 存储管理之页式、段式、段页式存储 以及 优缺点

    https://blog.csdn.net/yilongdashi/article/details/82707022

    存储管理之页式、段式、段页式存储 以及 优缺点

    展开全文
  • 页式存储: ...段页式存储: 先查段表,通过段号确定页表地址。找到页表之后,通过页号确定内存块号地址(页框)因为每个段大小不一样,要判断页号是否越界。然后通过偏移地址在块内找到要找到信息。 ...
  • 段页式存储管理

    2007-12-27 14:04:19
    段页式存储管理段页式存储管理段页式存储管理段页式存储管理
  • 页式存储 如果说内存是4G,用户已使用2G,如果要运行2G以上的程序是不行的,哪怕是1G都够呛。因为在内存空间很容易就会被打碎,虽然空闲区有2G大,但未必有连续的1G内存。为了解决这个问题,就有了页式存储。 把用户...
  • 转:存储管理之页式、段式、段页式存储 首先看一下“基本的存储分配方式”种类:         1. 离散分配方式的出现    由于连续分配方式会形成许多内存碎片,虽可通过“紧凑”功能将碎片合并,但会付出...
  • 段页式存储管理地址转换 广工操作系统实验三
  • 页式存储 逻辑地址 = 页号 + 页内地址(这个划分由系统自动完成) ...段页式存储 逻辑地址 = 段号 + 段内地址 段内地址 = 页号 + 页内地址 段号还是为了查段表,但此时得到说是该段对应页表所...
  • 段页式存储管理方式

    2021-05-30 19:40:47
    段页式存储管理方式即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
  • 页式存储-地址转换访问2次内存,第一次是页表,第二次是真正的物理内存。二级页表,访问3次内存两个例子的形式讲解逻辑地址到物理地址的转换:(1)页系统页表: 页号: 0 1 2 3 4 5 块号: 3 5 x 4 1 2每页2KB 计算逻辑...
  • 段页式存储管理方式详解

    千次阅读 2020-05-12 15:34:32
    段页式存储管理方式详解分段存储方式引入目的:基本原理分段段表地址变换机构信息保护信息共享分页与分段的主要区别:段页式存储管理方式引入原因:基本原理段表与页表地址变换机构 分段存储方式 引入目的: 满足用户在...
  • 请求段页式存储管理是建立在段页式存储管理基础上的一种段页式虚拟存储管理。 根据段页式存储管理的思想,请求段页式存储管理首先按照程序自身的逻辑结构,将其划分为若干个不同的分段,在每个段内则按页的大小划分...
  • 页式,段式,段页式存储的虚拟地址空间维数问题

    千次阅读 多人点赞 2018-07-28 01:11:46
    页式存储是一维的,段式存储是二维的,段页式存储也是二维的。 其次,要注意的是: 这是由存储管理方式的特点决定的,跟逻辑地址的结构没有关系。   站在程序员的角度,你想操作一个内存地址, (1)页式存储...
  • 一. 段式存储管理(一) 概述(二) 段的划分(三) 分段式管理的优势(四) 分段式管理的数据结构1. 进程段表2. 系统段表3. 空闲段表(五) 地址变换(六) 硬件支持(七) 优缺点(八) 分页和分段的比较二. ...
  • https://blog.csdn.net/tristacrystal/article/details/84028834 https://blog.csdn.net/yilongdashi/article/details/82707022
  • 一直认为,段页式存储是一个软件概念,将软件分为各个不同的段来进行管理,通过划分页面进行内存分配,使用实际的物理内存空间。 今天一个同事提到了硬件的段页式管理的概念,感觉这个角度很好,以前从来没考虑过还...
  • 段页式存储管理+例题

    2021-04-29 11:07:11
    例:在一个采用段页式存储管理的系统中,页的大小为1KB。某个正在执行的作业情况如下: (1)请给出将逻辑地址(2,3500)转换成物理地址的过程; (2)计算出上述逻辑地址对应的物理地址的值。 二级目录 三级目录 ....
  • 段页式存储管理方式即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。右图示出了一个作业的地址空间和地址结构。
  • 段页式存储管理思想

    2017-05-23 11:32:00
    分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。 在段页式存储管理系统中,作业的地址...
  • 软件设计师系列视频 段页式存储1 段页式存储2 段页式存储3
  • 软件设计师系列视频 段页式存储1 段页式存储2 段页式存储3

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,187
精华内容 474
关键字:

段页式存储