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

    存储器功能需求

    容量足够大
    速度足够快
    信息永久保存
    多道程序并行

    实际存储器体系

    三级存储体系
    Cache( 快, 小, 贵) +内存( 适中)+辅存( 慢, 大, 廉)

    基本原理:

    1. 当内存太小不够用时,用辅存来支援内存。
    2. 暂时不运行的模块换出到辅存上,必要时再换入内存。

    换出/换入需要解决的问题:

    访问地址有变时如何找到正确的地址?
    ---->地址重定位(地址重映射)
    辅存上的映像 换入到内存时,需要重新确定目标数据的正确地址,更新地址。

    多道程序并行带来的问题

    1. 共享
      代码和数据共享,节省内存
    2. 保护
      不允许内存中的程序相互间非法访问

    存储管理的功能

    1)地址映射
    2)虚拟存储
    3)内存分配
    4)存储保护

    地址映射

    定义

    把程序中的地址(虚拟地址,虚地址,逻辑地址)变换成真实的内存地址(实地址,物理地址)的过程。
    注:虚拟地址, 虚地址, 逻辑地址 : 线性地址 ,0开始
    地址重定位,地址重映射
    源程序-逻辑地址-物理地址

    方式

    1. 固定地址映射
    2. 静态地址映射
    3. 动态地址映射

    1.固定地址映射

    定义

    编程或编译时确定逻辑地址和物理地址映射关系。

    特点

    1. 程序加载时必须放在指定的内存区域。
    2. 容易产生地址冲突,运行失败。
    3. 不能适应多道环境

    2.静态地址映射

    定义

    程序装入时由操作系统完成逻辑地址到物理地址的映射。
    保证在运行之前所有地址都绑定到主存。
    运行之前已经完成地址映射。

    映射过程

    逻辑地址:VA(Virtual Addr. )
    装入基址:BA(Base Addr.)
    物理地址:MA(Memory Addr.)
    MA = BA + VA

    特点

    1. 程序运行之前确定映射关系
    2. 程序装入后不能移动
      注:如果移动必须放回原来位置
    3. 程序占用连续的内存空间

    3.动态地址映射

    定义

    在程序执行过程中把逻辑地址转换为物理地址。
    例如:MOV AX, [500] ;访问500单元时执行地址转
    换程序在执行过程中临时地连续执行转换操作。

    映射过程

    逻辑地址:VA(Virtual Addr. )
    装入基址:BA(Base Addr.)
    物理地址:MA(Memory Addr.)
    MA = BA + VA

    实现动态地址映射的思路

    通过硬件实现

    CPU引用指令中主存地址时先进行重定位,再将重定位以后的地址值作为主存的引用地址。

    重定位寄存器
    • 进程装入主存时不做任何修改
    • 重定位寄存器作为进程运行现场的一部分。
      注:进程换入进入运行态时,重定位寄存器要恢复。
    连续的进程空间能否用几个不连续的物理块存放?

    按段编译,虚拟地址格式:段+段内位移
    不同段放入不同的物理块
    每个段维护一个段寄存器(/重定位寄存器)即可
    段式存储分配技术

    特点

    1. 程序占用的内存空间可动态变化
      若程序移动及时更新基址BA
    2. 程序不要求占用连续的内存空间
      需要记录每段放置的基址BA
    3. 便于多个进程共享代码
      共享代码作为独立的一段存放

    缺点

    1. 硬件支持(MMU:内存管理单元)
    2. 软件复杂

    存储扩充(也叫虚拟存储)

    解决的问题

    1)程序过大或过多时,内存不够,不能运行;
    2)多个程序并发时地址冲突,不能运行;

    问题1的解决方法 ( 虚拟存储的基本原理 )

    借助辅存在逻辑上扩充内存,解决内存不足

    过程:

    1. 迁入:将要运行的部分装入内存(迁入)
    • 把在辅存存放的部分临时按需调入内存。
    1. 迁出:把当前不运行的部分暂时存放在辅存上
    • 尽量腾出足够的内存供进程正常运行。

    前提

    • 短时间内进程不运行的部分往往占大部分,尤其是大进程。

    用户体验了“ 足够大的线性内存”—虚拟内存

    程序局部性原理

    时间局部性

    • 一条指令或数据,会在较短时间内被重复访问
      例如:循环语句

    空间局部性

    • 任一内存单元及其邻近单元会在短时间内被集中访问
    • 短时间内,CPU对内存的访问往往集中在一个较小区域内
      例如:表,数组的操作

    结论:

    • 程序在一个有限的时间段内访问的代码和数据往往集中在有限的地址范围内。因此,一般情况下,把程序的一部分装入内存在较大概率上足够让其运行。

    实现虚拟存储的前提

    • 足够的辅存
    • 适当容量的内存
    • 地址变换机构

    虚拟存储的应用

    • 页式虚拟存储
    • 段式虚拟存储

    内存分配功能

    • 为程序运行分配足够的内存空间
    • 需要解决的问题
    1. 分配策略
    • 在众多个请求者中选择哪一个请求者的原则
    1. 放置策略
    • 程序调入内存时将其放置在哪个/哪些内存区
    • 全部分配或部分分配(即按需分配/存储扩充)?
    1. 调入策略
    • 何时把要运行的代码和要访问的数据调入内存?
    1. 淘汰策略
    • 迁出(/淘汰)哪些代码或数据以腾出内存空间。

    存储保护功能

    • 保证在内存中的多道程序只能在给定的存储区域内活动并互不干扰 。
    1. 防止访问越界
    2. 防止访问越权

    保护方法

    1. 界址寄存器
    • 在CPU中设置一对下限寄存器和上限寄存器存放程序在内存中的下限地址和上限地址
    • 程序访问内存时硬件自动将目的地址与下限寄存器和上限寄存器中存放的地址界限比较,判断是否越界。
    • 基址寄存器和限长寄存器
    • 适于连续物理分区中的情形
    1. 存储键保护
    • 适于不连续物理分块的情形,也可用于共享中的权限。
  • 相关阅读:
    ActiveMQ持久化机制
    ActiveMQ的使用
    ActiveMQ解释
    Linux CentOS安装Tomcat
    nginx使用Keepalived
    Session共享解决方案
    Spring框架AOP使用扩展
    Myabtis测试(二)错题整理分析
    初识Spring及打印机案例
    MyBatis注解
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/13992526.html
Copyright © 2011-2022 走看看