• 学习内存管理分段、分页 四


    1。操作系统最大的功能就是管理功能,管理进程调度、管理内存、管理文件系统、管理I/O,...。其中最核心的功能是进程管理,但管理的基础是内存管理,只有把内存管理好了,才能使进程在这个广阔的舞台上自由表演。

    2。系统工作模式有三种:实模式、保护模式、虚拟8086模式,其中保护模式又分为:分段保护模式、分段分页保护模式,不同模式下的物理内存管理方式不同。

    3。分段保护模式(segmentation):
    为了管理好内存,把内存分而治之,划分成小块,这样易于才易于管理。如何划分呢?分段保护模式是把物理内存分段,分成一段一段的区域,每段大小固定/不固定,每段都有不同的用途,这就需要对每个段进行描述,以记录该段有哪些属性或特点,这样在使用该段时才能操作正确。对每个段的描述信息放在“段描述符”中,所有的“段描述符”统一放在一起组成系统的“段描述符表”。“段描述符表”分为“全局描述符表GDT”,“中断描述符表IDT”,“局部描述符表LDT”。当操作系统要访问内存中的某一个段时,先在描述符表中找到该段的描述符,这样就知道了该如何使用该内存段了。简言之,分段是对物理内存分段划分,GDT,LDT,IDT是操作系统使用物理内存的参照依据。

    4。段页保护模式(paging):
    这是在分段保护模式的基础上,再加上分页功能。把以前的对物理内存的分段改为对虚拟地址空间的分段,把4G的虚拟地址空间分段,段信息仍保存在GDT,LDT,IDT中。然后把物理内存分页,用二级页表结构来描述和记录物理内存分页后的各个页的信息。当使用物理内存时就参照二级页表。

    5。使用分页机制的目的:
    (1)当系统内存被分成许多凌乱的块时,分页机制可以建立一个大而连续的内存空间映象,程序员不用操心和管理这些分散的内存块。
    (2)页地址变换建立在段变换基础上,任何分页机制的保护措施并不会取代段变换的保护措施,而只是进行更进一步的检查操作。
    (3)分页机制增强分段的性能。

    6。虚拟内存
    实现虚拟内存的手段是使用“需求加载Load on demand”和“页换入换出”。所谓的“需求加载”是指:运行一个磁盘上的文件时,操作系统为新进程创建4G线形地址空间,并为其环境参数和命令行参数分配和映射一定数量的物理页,此外并没有给执行程序分配其他任何物理内存页面,也没有从磁盘文件中加载代码和数据。但是,一旦程序从设定的入口点(mian函数)开始运行,就会立刻引起CPU产生一个缺页中断,此时内核中的缺页处理程序才会根据引起缺页异常的具体线形地址把磁盘文件中相关的代码和数据从文件系统中加载到物理内存页面中,并定位到进程逻辑地址中指定的页面位置。这种仅在需要时才加载执行文件中页面的方法称为需求加载技术或需求分页(demand paging)技术。
    “页换入和换出”是指:当CPU要寻址的指令或数据不在缓存和物理内存中时,通过需求加载技术把页面加到物理内存,但此时如果物理内存已被全部占用,则必须把物理内存中最近不使用的页面换出到磁盘中,以腾出空间给新页面,这种现在就称为页换入和换出。

    7。何时产生GDT,LDT,IDT、二级页目录结构,以及它们位于物理内存的什么位置?
    在引导启动程序head.s中初始化GDT,IDT和二级页表,它们放在物理内存从地址0x0开始的地方。head.s代码执行完后的物理内存布局如下图:

    posted on 2010-04-15 02:42 大龙 阅读(1078) 评论(3)  编辑 收藏 引用

  • 相关阅读:
    C#.NET中现在用的SqlHelper操作方法集合【收藏版】
    SQLHelper.cs的经典代码收集
    ASP.NET数据格式的Format DataFormatString
    asp.net操作 httpcookie
    项目开发中我所用到的SQL收集
    GridView的dataformatstring设置
    jQuery事件处理: 别再乱用“return false”了
    非常不错的空白占位符“    ”
    Hello World
    VSFlexGrid 控件属性方法一览
  • 原文地址:https://www.cnblogs.com/sier/p/5676462.html
Copyright © 2020-2023  润新知