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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

存储器为什么比较重要?

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

存储器的组成

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

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

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的用户态或核心态工作方式相结合的保护方式

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166927.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何用 JavaScript 下载文件

    如何用 JavaScript 下载文件简介我们知道,下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的url来实现下载功能,但是这种用户体验非常不好。幸好,HTML5里面为  标签添加了一个 download 的属性,我们可以轻易的利用它来实现下载功能,再也不需要用以前的笨办法了。原理我们先看看 download 的使用方法:

    2022年5月6日
    42
  • Kubernetes各版本对应支持的docker版本列表

    Kubernetes各版本对应支持的docker版本列表Kubernetes主要做Docker的容器化管理,总结一下如何查看k8s对应支持的docker版本的方法。在GitHub可以查看所有Kubernetets版本信息:https://github.com/kubernetes/kubernetes/releases截止2019.08.09最新的版本支持信息:Kubernetes1.15.2–>Docker版本1.13…

    2022年10月30日
    0
  • plsqldev使用指南_plsql配置文件在哪儿

    plsqldev使用指南_plsql配置文件在哪儿plsqldev的配置plsqldev的安装需要这两个,可以在网上下载注意问题:1、Path变量中添加client的路径2、并且在plsqldev上配置这两个的路径,不需要登录,直接取消然后就可以进去这个了,然后点工具,首选项3、然后是新建目录,在这下面新建一个文件,里面写着这个文件的路径,以及数据库地址以及端口的配置4、tnsnames.ora的写法…

    2022年10月24日
    0
  • 股指期货跨期套利策略优化_股指期现套利策略盈亏

    股指期货跨期套利策略优化_股指期现套利策略盈亏股指期货跨期套利策略概述:本文章介绍使用同一标的不同交割日的股指期货的价差进行跨期套利的策略。本文由JoinQuant量化课堂推出,难度为进阶(下),深度为level-0。​作者:swlaw编辑

    2022年8月6日
    4
  • OCP-1Z0-051-名称解析-文章12称号

    OCP-1Z0-051-名称解析-文章12称号

    2022年1月12日
    50
  • XML注释快捷键

    XML注释快捷键eclipse中编辑java或C/C++文件时,注释的快捷键均为”CTRL+/”,编辑xml文件时,该快捷键无效。eclipseXML注释:CTRL+SHIFT+/撤销注释:CTRL+SHIFT+\傻傻的手动输入好几个月了,偶然google下,真有这个快捷键……

    2022年8月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号