• 存储管理-存储管理的功能


    存储管理-存储管理的功能

    存储器为什么比较重要?

    存储器是计算机系统的重要资源之一。任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。

    存储器的组成

    • 内存:存由顺序编址的块组成,每块包含相应的物理单元
    • 外存

    内存外存的信息交换式谁控制的?

    CPU控制相应的输入输出设备实现外存与内存信息的交换。

    C语言.c源程序文件变成.exe可执行文件的过程

    预编译->编译->汇编->链接

    预编译

    1.删除所有#define,展开所有宏定义;
    2.处理所有条件预编译指令,如#if,#ifdef,#elif,#else,#endif;
    3.处理#include预编译指令,将被包含的文件插入到该预编译指令的位置(该过程是递归进行的);
    4.删除所有注释(实际上是被替换为一个空格);
    5.添加行号和文件名标识;
    6.保留所有#pragma编译器指令。

    编译过程

    (编译之后生成.s文件)将预处理完的文件进行一系列的词法分析,语法分析,语义分析以及优化产生相应的汇编代码文件。

    汇编过程

    汇编之后生成.o文件,可重定位目标文件)将汇编代码转化成机器可以识别的指令。

    链接过程(重要的步骤,涉及地址和空间的分配)

    (链接之后生成.exe文件,可执行目标文件)合并多个可重定位目标文件生成可执行目标文件,需要完成的工作包括:地址和空间的分配;符号决议;重定位。

    虚拟存储器

    为什么要有虚拟存储器?

    内存虽然访问速度快,但是太小了,而外存访问速度慢但是好处是空间大。引出问题,怎么相互弥补一下呢?不经常访问的数据和程序放到外存中去,只有在需要的时候才调入内存中。

    虚拟存储器是干什么用的?

    1.当物理内存不够用的时候,在硬盘上也就是外存开辟一块空间当内存用,但是这块内存不是内存条提供的,所以叫虚拟内存。
    例子:玩游戏的时候,你电脑内存1G,如果没有虚拟内存的话是没办法玩的,但是有了虚拟内存就可以玩了

    2.执行程序尽管向操作系统申请内存,而不管内存够不够用,好像有无限的内存一样

    3.编译链接程序
    什么是编译链接程序?源程序要由编译程序编译成CPU可以执行的代码,链接程序要把一个进程的不同程序段链接起来来让程序跑起来.

    4.为进程提供虚拟空间

    虚拟存储器的定义

    进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储器(virtual store或virtual memory)。

    虚拟存储器的特点

    1.虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每个进程中互相关连信息的相对位置
    2.每个进程拥有自己的虚拟存储器,且虚拟存储器的容量由计算机的地址结构和寻址方式确定的,直接寻址时,如果CPU的有效地址长度为16位,则其寻址范围为0到64K
    3.要实现虚拟存储器到物理存储器的变换,必须有相应的硬件支
    4.每个进程都拥有自己的虚存,且每个虚存的大小不受实际物理存储器的限制
    5.内存只能存放经常被访问的程序和数据段,访问或在某一段时间内不会被访问的信息。进程执行过程中需要这些信息时,从外存中自动调入主存

    地址变换

    虚拟地址映射到物理地址涉及两个问题一个是分区问题,一个是虚拟空间的划分,另外一个是地址映射

    虚拟空间的分区

    虚拟空间的划分与计算机系统结构有关。一般划分为系统空间和进程空间两个部分,进程空间分为程序区和控制区

    地址映射

    把虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址

    静态地址重定位

    静态地址重定位在虚拟空间程序执行之前由装配程序完成地址映射工作

    特点:

    • 对于虚拟空间内的指令或数据来说,静态地址重定位只完成一个首地址不同的连续地址变换
    • 所有待执行的程序必须在执行之前完成它们之间的链接

    优点:不需要硬件支持。
    缺点:无法实现虚拟存储器;必须占用连续的内存空间,并且难以做到程序和数据的共享。

    动态地址重定位

    动态地址重定位在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。

    特点:动态重定位依靠硬件地址变换机构完成

    优点:

    • 可以对内存进行非连续分配
    • 动态重定位提供了实现虚拟存储器的基础
    • 有利于程序段的共享

    地址重定位机构需要一个(或多个)基地址寄存器BR和一个(或多个)程序虚拟地址寄存器VR。指令或数据的内存地址MA与虚拟地址的关系为:MA=(BR)+(VR)

    内外存数据传输控制

    目的

    实现内存扩充

    过程

    内存和外存之间必须经常地交换数据,即将执行的程序和数据段调入内存,处于等待状态的程序和数据段调出内存

    基本控制方法

    用户自己控制:

    覆盖:
    1.要求用户清楚地了解程序的结构,并指定各程序段调入内存的先后次序
    2.覆盖技术不能实现虚拟存储器

    操作系统控制

    交换(swapping)方式

    1.交换方式由操作系统把那些在内存中处于等待状态的进程换出内存,而把那些等待事件已经发生、处于就绪态的进程换入内存
    2.交换方式一般不进行部分交换,每次交换除去常驻内存部分后的整个进程
    3.交换方式能完成内存扩充任务,但不能实现进程大小不受内存容量限制的虚拟存储器

    请求调入(on demand)方式和预调入(on prefetch)方式

    请求调入方式是在程序执行时,如果所要访问的程序段或数据段不在内存中,则操作系统自动地从外存将有关的程序段和数据段调入内存

    预调入由操作系统预测在不远的将来会访问到的程序段和数据段部分,并在它们被访问之前选择适当的时机调入内存

    请求调入方式和预调入方式可以实现进程大小不受内存容量限制的虚拟存储器

    内存的分配与回收

    存储管理模块要为每一个并发执行的进程分配内存空间。另外,当进程执行结束之后,存储管理模块要及时回收该进程所占用的内存资源,以便给其他进程分配空间

    策略:
    (1) 分配结构:登记内存使用情况,供分配程序使用的表格与链表。例如内存空闲区表、空闲区队列等。
    (2) 放置策略:确定调入内存的程序和数据在内存中的位置。这是一种选择内存空闲区的策略。
    (3) 交换策略:在需要将某个程序段和数据调入内存时,如果内存中没有足够的空闲区,由交换策略确定内存中的哪些程序段和数据段调出内存,以便腾出足够的空间。
    (4) 调入策略:外存中的程序段和数据段什么时间按什么样的控制方式进入内存。调入策略与内外存数据交换的控制方式有关。
    (5) 回收策略:回收策略包括两点,一是回收的时机,二是调整回收空闲区和已存在空闲区。

    内存信息的共享与保护

    共享

    在多道程序设计环境下,内存中的许多用户或系统程序和数据段可供不同的用户进程共享。这种资源共享将会提高内存的利用率

    保护

    内存信息保护方法有硬件法、软件法和软硬件结合三种:

    上下界保护法是一种常用的硬件保护法

    为每个进程设置一对上下界寄存器,分别放置被保护程序和数据段的起始地址和终止地址。
    程序执行过程中,对内存进行访问操作时首先进行访址合法性检查,即检查重定位后的内存地址是否在上、下界寄存器规定的范围之内。
    在规定的范围之内,访问是合法的;否则是非法的,并产生访址越界中断。

    保护键法也是一种常用的存储保护法
    为每一个被保护存储块分配一个单独的保护键。在程序状态字中设置相应的保护键开关字段,不同进程赋予不同的开关代码与被保护的存储块中的保护键匹配。保护键可设置成对读写同时保护或只对读、写进行单项保护。

    保护键0对2K到4K的存储区进行读写同时保护的,保护键2对4K到6K的存储区进行写保护。

    如果开关字与保护键匹配或存储块未受到保护,则访问该存储块是允许的,否则将产生访问出错中断。

    界限寄存器与CPU的用户态或核心态工作方式相结合的保护方式

    在这种保护模式下,用户态进程只能访问界限寄存器规定范围内的内存部分,核心态进程可以访问整个内存地址空间

  • 相关阅读:
    [python] 类组合与聚合关系
    [python] 伪私有属性,防止变量名冲突
    [vim] 配置文件之常用命令模式
    [VIM] 编辑器---多行注释和取消注释及多行复制和黏贴
    [Visual Studio Code] 执行python
    [C] 编译器codeblocks安装注意
    字符串全排列
    集合全量子集提取
    random函数详解
    Solr常用命令总结
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11898096.html
Copyright © 2020-2023  润新知