zoukankan      html  css  js  c++  java
  • 22 操作系统-页式内存管理 上

     

    参考

    https://blog.51cto.com/13475106/category6.html及狄泰软件相关课程

    A.段式内存管理

    1.指的是一段连续的内存空间
    2.段式内存管理-程序的各个部分相对独立(数据段,代码段),早期x86处理器无法通过一个寄存器访问所有内存单元,解决早期程序运行的重定位问题
    段式内存管理的应用,在x86系列的处理器中,硬件对段式内存管理进行了直接支持;另外,段式内存管理也可以使用纯软件实现,内存单元地址=段首地址+段内偏移地址

    B.段式内存管理在C语言中的实现

    1.数组的本质:一片连续的内存
    2.数组名:数组的起始内存地址
    3.数组的元素的访问
    4.第i个元素
    Q:操作系统只使用段式内存管理是否足够?--需求
    软硬件技术的发展
    1.硬件技术:计算器部件独立化(硬件接口相同,可任意组装),计算机配置差异化(各部件硬件参数不同)
    2.软件技术:应用程序处理的问题越来越复杂,应用程序运行需要的资源越来越多(物理内存可能无法满足)
    此时出现的问题是,当应用程序的规模越大时,会导致多数时候无法全部加载进入内存,会出现问题,需要提出方法进行解决

    C.解决方案-按段加载(局部性原理)

    只将当前程序运行需要的段加载进内存,当某个段不再需要使用时,立即从内存中移除。但是按段加载会带来一些其它的问题,比如段的大小不确定,可能大于实际的物理内存,段加载需要具体的长度信息,导致效率不高。
    由此提出的新的解决方法-内存分页
    1.页指的是固定大小的内存片(4KB)
    2.每一个内存由多个页组成
    3.页是进行内存管理的基本单位
    操作系统-页式内存管理

    D.进阶虚拟存储技术

    1.实模式下所使用的是物理地址空间
    2.保护模式下所使用的是偏移地址空间
    3.不同应用程序所使用的内存空间的分离采用分页管理
    4.程序运行需要的内存大于实际物理内存时分页加载
    进阶虚拟存储技术(内存分页的意义)
    虚拟内存空间(逻辑地址):程序在执行时内部使用的内存空间
    物理内存空间(物理地址):物理机器所配置的实际内存空间,逻辑地址需要进行转换才能得到对应的物理地址

    E.页式内存管理中的地址

    地址=页号+页内偏移
    逻辑地址=逻辑页号+页内偏移
    物理地址=物理页号+页内偏移
    地址转换时仅变更页号即可,页内偏移不变
    逻辑地址到物理地址的映射


    操作系统-页式内存管理
    页式内存管理中的关键操作

     


    1.页请求-访问一个逻辑地址时,对应的页不在内存中,从外存中将目标页加到内存中,之后更新页表
    2.页交换-页请求时发现物理内存不足,需要将暂时不用的页移除,首先决定并选择需要移除的页;将选中页中的所有数据写入外存,更新页表,重新进行页请求
    操作系统-页式内存管理

    小结

    1.内存分段能够解决一定问题,但无法保证程序的移植性
    2.根据程序运行的局部性原理,可进一步对内存进行分页
    3.页指的是固定大小的内存片(4KB)
    4.页的引入使得程序的逻辑地址于内存的物理地址彻底分离
    5.操作系统的内存管理是以页为基本单位完成的

  • 相关阅读:
    Django 模版当中使用中文 UnicodeDecodeError at / 问题
    sql中索引不会被用到的几种情况
    Django安装
    分享一个webapi接口性能测试的工具
    orleans 2.0 进阶之自定义持久化储存
    centos7 .net core 使用supervisor守护进程,可以后台运行
    将.net core 发布到Linux上的一些坑
    .net core 部署在Linux系统上运行的环境搭建总结
    .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录
    基于Ace Admin 的菜单栏实现
  • 原文地址:https://www.cnblogs.com/lh03061238/p/14187605.html
Copyright © 2011-2022 走看看