zoukankan      html  css  js  c++  java
  • 操作系统--存储管理3

    -----段式内存分配-----
    1.概念
    一种顺应用户视角的内存管理机制;程序由多段代码、数据组成。
    段是自然的逻辑单元
    2.段式管理机制
    # 将一个逻辑地址划分为两部分:段号和段内偏移量
    # 段表:以段号为索引下标,将其映射到二维的物理地址
    # 段表项内容:基地址+界限(段的开头+段的长度)存储在寄存器中
    地址转化:先把段的偏移量和界限比较,超过则是非法访问,
    若符合,根据基地址+界限:可以找到这个段在内存中的地址
    #内存包含:通过在段表项设置保护位;来达到内存保护的功能
    #内存共享:共享的基本单位是段:要共享的段,在段表的位置相同
    3.段式分配注意的事情:
    # 段的长度可变(区别于页),也面临动态分配和外部/内部碎片

    ----段页式内存分配----
    1.概念:将逻辑地址划分为3部分:段号;页面;页内偏移
    2.地址转换过程:先根据段号找到页面;在根据页面找到页桢;完成地址转换

    ----虚拟存储管理--是对非连续内存分配的延续------
    1.虚拟存储的提出原因?
    计算机中多进程导致内存空间不足;常见的解决办法:
    * 覆盖技术--程序内部模块之间
    目标:在可以在较小的内存中运行较大的程序
    方法:1.依据程序的逻辑,将程序划分为若干功能独立的模块;将不会
    同时执行的模块共享一块内存区域
    2.将模块分为常用模块--常驻内存;可选模块在用的时候加载内存
    3.不存在相互调用关系的模块为一组,可以放在共享内存中
    缺点:需要程序员划分功能模块,定义覆盖方式,增加编程难度
    执行时间也会增加

    * 交换技术:增加正在运行的程序的内存(连续分配OS负责--进程之间)
    方法:将现在等待的进程换出内存,为其他运行进程提供空间
    换入换出的基本单位是进程:换出与换入
    交换的时机:只有当内存不够/有不够的可能性的时候
    交换区的大小:外存的大小;换入后:采用动态地址映射
    * 虚拟存储技术:每个进程部分装入,其他部分放外村;
    按照需求OS负责将其装入。【延续非连续分配】
    *局部性原理:程序执行过程一个比较短的时期,所执行的指令地址和
    指令的操作数地址,分别局限在一定的区域;
    局部性原理分类
    时间局部性:指令执行/数据访问和下次执行/访问都集中在小的时间间隔
    这个为虚拟存储性能提供了前提。
    空间局部性:当前指令和临近的几条指令,当前访问数据和临近的数据访问
    都集中在一个较小的区域:循环/数组
    分支局部性:一条指令的两次执行,很可能跳转到相同的物理位置。
    可以任务程序的执行集中在某个区域里面;进而就可以确定将进程的那些指令
    放到内存里面。本质就是确定进程常用的指令,将不常用放外存。
    注意:局部性原理从理论上保证虚拟存储技术可以实现。
    局部性特征是和程序的结构相关
    在编写程序的时候,尽量编写可以提高程序局部性的结构
    2.虚拟存储的基本概念
    思路:将程序常用加载到内存,不常用的放在外存
    原理:装载的时候将需要执行的页面/段放入内存
    CPU要访问的不在内存的时候,CPU通知操作系统将相应的页面
    加载进内存
    注意:如果当前的内存已满,就涉OS进行页面/或段的置换操作
    实现方式:虚拟页式存储、虚拟段式存储
    虚拟存储技术基本特征:
    * 不连续性:虚拟地址空间使用非连续;物理内存分配非连续
    * 大用户空间:提供给用户的虚拟内存大于实际内存
    * 部分交换:对进程部分的页面进行置换
    虚拟存储的技术支持;
    * 硬件:地址映射
    * 操作系统提供页面置换操作

    3.虚拟页式存储
    概念:页式存储分配+按需调页+页面置换算法
    思路:当用户进程加载进内存运行,只装入部分页面,就启动程序运行
    在执行的过程中就会出现缺页异常;操作系统处理该异常;就是进行
    页面装入/页面置换。
    注意:虚拟页式存储页表项结构
    逻辑页号+访问位+修改位+保护位+驻留位+物理页帧
    驻留位:表示该页面是否在内存中
    修改位:表示内存中的页面是否被修改(驻留位有效)
    修改过:置换的时候需要写回外存
    未修改过:置换的时候新的页面直接覆盖该页面
    访问位:表示该页面是否被访问过:用于页面置换算法
    保护位:表示可以对该页面进行的操作--读写
    * CPU访问内存--存在三种访问的可能:
    页面已经装入内存,有对应的页帧,CPU完成操作
    非法页面引用;产生异常
    合法页面引用,但是页面不再内存,把页面装入内存
    注意:假如物理内存占满,需要进行页面的置换算法。
    * 缺页中断及响应
    引起缺页面中断,操作系统相应这个中断:
    # 操作系统查找内核数据结构判断以下2种情况:
    是合法的,但是页面不再内存中
    是非法的--进程终止
    # 操作系统查找系统内核数据结构,找出一个空闲的页帧
    # 把页面从外存换入内存的空闲的页帧--页面置换算法
    注意:内存已满,需要判断换出的页面是否被修改:
    # 更新内核数据结构,更新进程页表
    # 将进程页表中该项有效位值:定为v
    # 缺页中断程序返回
    # 重新执行引起中断的那条指令
    只有进程真正需要的页面才会被装入内存,不使用就直接放在外存里面

    * 虚拟页式存储中的外存管理
    应能方便的在外存中找到具体的页面内容
    根据不同类别的页面选择存储的位置
    代码段:可执行的二进制文件
    动态加载的共享程序段:动态调用库文件
    其他段:交换空间
    * 虚拟页式存储的性能
    有效的存储访问时间:和缺页率相关
    * 全局置换和局部置换
    全局置换:在所有在内存的页面中选择一个页面换出
    局部置换:仅仅在进程自己所属的页面中选择一个页面换出

  • 相关阅读:
    html和css基础
    Chrome的插件使用
    04
    03
    MySQL的下载与安装(超完整)
    IDEA运行单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    IDEA 快捷键合集
    IDEA + Spring的安装以及入门案例创建(超详细)
    Java NullPointerException异常的原因
    Eclipse 显示 错误:找不到或无法加载主类
  • 原文地址:https://www.cnblogs.com/sun1993/p/7745444.html
Copyright © 2011-2022 走看看