软考笔记--操作系统-内存管理

任何程序和数据都必须占用内存空间后才能执行,因此,内存管理的好坏直接影响整个操作系统的性能。操作系统的任务之一是尽可能地方便用户使用和提高内存的利用率。同时,内存管理也是多道程序设计系统的关键支撑。内存管理的功能主要包括以下几个方面:

  1. 内存空间的分配与回收。
  2. 配合硬件进行地址转换工作,把用户使用的逻辑地址转换成处理器能访问的物理地址。
  3. 内存空间的共享与保护,使得若干个进程能够同时访问公共程序所占的内存区,同时能够防止多个程序在执行中互相干扰,并保护区域内的信息不被破坏。
  4. 当内存容量不足时,操作系统要采取某种措施,在不改变实际内存容量的前提下,借助大容量的外存来解决内存不够用的问题。

一.地址变换 

 用户的程序通常使用高级语言编写的,这个称为源程序。源程序不能被计算机直接执行,而是需要通过编译程序或汇编程序编译获得目标程序。目标程序的地址不是内存的实际地址,一般将目标程序的地址单元称为逻辑地址。程序运行的时候,它将被装入内存地址空间的某些部分,此时程序和数据的实际地址一般不可能与原来的逻辑地址一样,将内存中的实际存储单元称为物理地址。物理地址的总体构成了用户实际程序运行的物理地址空间,它是由存储器地址总线扫描出来的空间,其大小取决于实际安装的内存容量。

为了保证程序的正确运行,必须将程序和数据的逻辑地址转换为物理地址,这一工作称为地址转换。地址转换的公式表示为:物理地址=起始的物理地址+逻辑地址。

地址转换通常有两种方式,静态转换和动态转换

静态转换是指在作业装入时由作业装入程序实现地址转换。其特点是容易实现,无需增加硬件地址变化机构,缺点是:它要求为每一个程序分配一个连续的存储区,在程序执行期间不能移动,难以做到程序和数据的共享,内存利用率低。

动态转换是指在程序执行过程中,CPU访问程序和数据之前实现地址转换。在多道程序系统中,可以用的内存空间常常被许多进程共享,程序员编程时事先不可能知道程序执行时的位置,而且必须允许程序因对换或空间搜集而被移动,这些现象都需要程序的动态重定位。动态转换的优点是程序可以在内存中移动,程序移动后,只要将新的内存区域的首地址放进基址寄存器就可以了,动态转换方式容易实现程序的共享,有可能提供虚拟存储空间。

二.分区存储管理

分区管理是支持多道程序运行的最简单的一种内存管理方式,主要有固定分区,可变分区,可重定位分区和多重分区四种方式。

1.固定分区

固定分区也称为静态分区,是在作业装入之前,内存就被划分为若干个分区。划分工作可以由系统管理员完成,也可以由操作系统完成。一旦划分完成,在系统运行期间不再重新划分。

固定分区的主要优点是实现技术简单,适用于作业的大小和多少事先都比较清楚的系统中,其缺点是由于每个分区只能存放一个作业,所以内存的利用率不高,内存碎片多。

2.可变分区

可变分区也称为动态分区,是指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,形成一个新的分区,且分区大小正好等于该作业的大小。可变分区中分区的大小和分区的个数都是可边的,而且是根据作业的大小动态划分的。这种内存管理技术是固定分区的改进,可以获得较大的灵活性,提高了内存利用率。

可变分区在分配时,首先找到一个足够大的空闲分区(自由分区),即这个空闲区的大小比作业要求的要大,系统则将这个空闲分区分成两个部分,一部分成为己分配的分区,剩余的部分仍作为空闲区。

几种可变分区选择自由分区的分配策略

(1)首次适应算法。从空闲区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。

(2)最佳适应算法。它从全部空闲区中找出能满足作业要求的,且最小的空闲区,这种方法能是碎片尽量小。

(3)最坏适应算法。从所有未分配的分区中挑选最大的且大于和等于作业大小的分区给要求的作业,空闲区按由大到小排序,每次查找从链头开始。

在针对存储空间利用情况的三种策略中,首次适应算法可能比最佳适应算法好,而首次适应算法和最佳适应算法一定比最坏适应算法好。

1.可重定位分区

可重定位分区分配是解决存储器碎片问题的简单有效的方法,基本思想是在适当的时候,把零散的空白区合并为一个大的空白分区,称为拼接,其实现方式是移动某些已分配区域中的信息,使所有的分配都紧挨着存储器的一端,而空白区在另一端。

2.多重分区

多重分区的思想是为一个作业分配一个以上的分区,允许一个作业在其运行过程中动态地申请附加存储空间,该空间不必和已有的作业分区相连接。多重分区的有点是便于使用共享子程序或者数据,缺点是需要较多的硬件支持,管理也比较复杂。

3.存储器保护

分区方式允许多道程序在内存中同时允许,因此,必须解决存储器保护问题。常用的方法有界地址保护和设置存储键保护。

 三.段页式存储管理

1.页式存储管理

在分页存储管理中,页帧可以是连续的,也可以是不连续的。系统为每道作业建立一张页映射表(称为页表),记录相应页在内存中对应的页帧号。这种管理方式消除了可变分区中紧致存储空间所带来的开销,同时,又能实现内存信息共享和虚拟存储技术。

在分页存储管理中,地址结构由两部分组成,分别是页号和页内位移(页内地址)。地址变换机构的基本任务是利用页表把用户程序中的逻辑地址变换成内存中的物理地址。

2.段式存储管理

段式存储管理按用户作业中的自然段来划分逻辑空间,每段占用连续的地址空间,其逻辑地址是二维的,由段号和段内地址组成。系统为每个作业建立一张段表,记录该段在内存中的起始地址和段长,各段可以存放在内存不同的分区中,段的分配与回收与可变分区存储管理相同。段式存储管理的地址转换采用动态重定位方式,地址转换机构取出逻辑地址的段号和段内地址,根据段号检索段表,找到该段对应的表目,将该段的起始地址与段内地址相加得到绝对地址。段式存储管理也存在二次访存问题,可以通过增设快表来解决。

段式存储管理和分页存储管理相似之处与区别

相同点:都采用离散分配方式来提高内存利用率,都要通过地址变换机构来实现地址变换。不同点: ( 1 ) 分页是一个单一的线性地址空间,分段作业地址空间是二维的。 ( 2 ) 页是信息的物理单位,大小固定,分页活动是用户看不见的,分页的目的是为了提高内存的利用率;段是信息的逻辑单位,其长度不定,分段是用户可见的活动,分段的目的是为了更好地满足用户的需要。( 3 ) 分页存储管理实现单段式虚拟存储系统,而段式存储管理实现多段式虚拟存储系统。

3.段页式存储管理

段页式存储管理的基本思想是将段式存储管理与分页存储管理结合起来,正好克服了各自存在的一些问题。段页式存储管理将作业分成若干段,每个段分成若干页,每段赋给一个段名,为了实现地址转换,必须为每个作业配置一张段表和若干页表。内存的分配与回收以页为单位进行。作业的逻辑是二维的,包括段号和段内地址,其中段内地址又包含页号和页内地址两部分。

四.虚拟存储管理

虚拟存储管理基本原理:应用程序在运行之前不必全部装入内存,仅需当前运行到的那部分程序和数据装入便可启动程序的运行,其余部分仍然驻留在外存储上。当要执行的指令或访问的数据不在内存时,再由操作系统通过请求调入功能将它们调入内存。这样可以使一个大的用户程序能够在较小的内存空间中运行,从用户的角度看,该系统具有的内存容量比实际的内存容量要大的多。将这种具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统称为虚拟存储系统。

1.局部性原理

虚拟存储管理能够在作业信息不全部装入内存的情况下保证作业正确运行,是利用了程序执行时的局部性原理。局限性原理是指程序在执行时呈现局部性规律,即在一个较短的时间内,程序的执行仅仅局限于某个部分。响应地,它所访问的存储空间也仅仅局限于某个区域。

2.工作集

在虚拟存储管理中,可能会出现这种情况,即对于刚被替换出去的页,立即又要被访问,需要将它调入,因无空闲内存又要替换另一页,而后者是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重时导致系统瘫痪,这种现象称为抖动现象。防止抖动现象有多种办法,例如,采取局部替换策略、引入工作集算法和挂起若干进程等。工作集是指在某段时间间隔内,进程实际要访问的页面的集合。引入虚拟内存后,程序只需有少量的内存就可运行,但为了使程序有效地运行,较少产生缺页,必须使程序的工作集全部在内存中。

3.页面置换算法

当内存中没有空闲页面,而又有程序和数据需要从外存中装入内存运行时,就需要从内存中选出一个或多个页面淘汰出去,以便新的程序和数据装入运行,良好的页面置换算法应该淘汰那些被访问概率最低的页,并将它移除内存。

(1)随机淘汰算法。无法确定那些页被访问的概率高低时,随机选择某个页面淘汰。

(2)轮转算法。按照内存页面的编号,循环换出内存中一个可以换出的页。

(3)先进先出FIFO。选择在内存驻留时间最长的一页淘汰。

(4)最近最久未使用算法LRU。当需要淘汰某一页时,选择离当前最近的一段时间内最久没有使用过的页先淘汰。

(5)最近没有使用页面責换算法(N U R )。在需要置换某一页时,从那些最近的一个时期内未被访问的页任选一页置换。

(6)最优置换算法。选择那些永久不使用的,或者在最长时间内不再被访问的页面置换出去。

(7)时钟页面替换算法(Clock)。使用页表中的引用位,将作业已调入内存的页面构成循环队列,用一个指针指向循环队列中的下一个将被替换的页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 读取ini文件示例

一般使用一个相关win32 api的封装类&#xff1b;我用的如下&#xff1b; using System; using System.Runtime.InteropServices; using System.Text;namespace DotNet.Utilities {/// <summary>/// INI文件读写类。/// </summary>public class INIFile{public str…

【总结】Linux命令中文帮助手册

1. 为什么要总结Linux命令中文帮助手册 Linux 官方并不提供中文的 help、man 帮助手册。网络上已有的前人翻译过的中文手册版本比较老&#xff0c;且翻译存在误差。从记忆角度来看&#xff0c;Linux 很多命令都不一定记得住详细的用法&#xff0c;易遗忘&#xff0c;缺少经验总…

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C#)

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里使用OpenCV实现相机图像的显示联合OpenCV实现相机图像的显示测试演示图 工业相机通过使用OpenCV实现…

Databend x HuggingFace,海量数据,随心分析

作者&#xff1a;尚卓燃&#xff08;PsiACE&#xff09; 澳门科技大学在读硕士&#xff0c;Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE HuggingFace 是目前全球最流行的 AI 社区&#xff0c;推动数据科学家和企业在模型、数据…

Numpy的学习 第一课 了解以及使用

1.输入模式 1.编辑模式 绿色2.命令模式 蓝色 2.运行 直接输入jupyter notebook 3.文档注释 查看函数帮助文档命令 help(函数) 单问号与多问号 单问号显示文档 多问号显示文档代码 3.shifttab 显示参数 4.运行外部文件 %run 路径,可绝对可相对 这里运行了就相当于方法了,或者…

VRPSolverEasy:支持VRP问题快速建模的精确算法Python包

文章目录 前言一步步安装免费版主要模块介绍1. depot point2. customer point3. links4. vehicle type VRPTW 算例数据说明模型建立输出求解状态及结果 前言 VRPSolverEasy 是用于车辆路径问题&#xff08;VRP&#xff09;的最先进的分支切割和定价算法求解器1&#xff0c;它的…

某国产沙盒游戏的启动器逆向

游戏近期改变了登录方式&#xff0c;于是把之前的研究成果分享一下研究仅供学习交流&#xff0c;如有侵权请联系删除 抓包 启动启动器&#xff0c;输入账号密码&#xff0c;点击登录&#xff0c;抓包得到一些信息 接口 1 https://wskacchm.mini1.cn:14100/login/auth_secur…

DataFrame的基本使用--学习笔记

1&#xff0c;DataFrame的基本使用 DSL方法–DataFrame方法 其中包括的方法有&#xff1a;select(),selectExpr(),groupby()/groupBy() where ,orderBy(),sort(),limit(),withColumn(), from pyspark.sql import SparkSession#创建ss对象ss SparkSession.builder.getOrCreat…

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数&#xff1f; 我…

【第二十二节】变量与运算符-位运算符

运算符运算<<左移>>右移>>>无符号右移&与运算|或运算^异或运算~取反运算 位运算符详细信息 <<空位补0&#xff0c;被遗弃的高位丢弃&#xff0c;空缺位补0>>被移位的二进制最高位为0&#xff0c;右移后&#xff0c;空缺位补0&#xff0…

Fine-tuning:个性化AI的妙术

在本篇文章中,我们将深入探讨Fine-tuning的概念、原理以及如何在实际项目中运用它,以此为初学者提供一份入门级的指南。 一、什么是大模型 ChatGPT大模型今年可谓是大火,在正式介绍大模型微调技术之前,为了方便大家理解,我们先对大模型做一个直观的抽象。 本质上,现在…

存储任意类型

code /* * c17 std::any */#include <cstdint> #include <cstring> #include <cstdlib> #include <iostream> #include <thread> #include <chrono>namespace lxz {// T不为指针时 template<typename T> struct Data {Data(): data…

运用分布式锁 redisson

导入依赖 根据springboot版本不同自行选择版本 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.3</version> </dependency> 创建客户端 Beanpublic R…

面试的忌讳,你中了几枪?

面试是职场旅程中的一个重要环节&#xff0c;它不仅是求职者展示自己的一个舞台&#xff0c;也是企业寻找合适人才的一个过程。在这个过程中&#xff0c;有几个常见的误区需要特别注意。 夜郎自大 很多仗着自己有几年的工作经验&#xff0c;总觉得自己技术牛逼&#xff0c;面…

QT第六天

要求&#xff1a;使用QT绘图&#xff0c;完成仪表盘绘制&#xff0c;如下图。 素材 运行效果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen>QT_BEGIN_NAMESPACE name…

网络端口映射和端口转发的区别和联系

目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …

跨平台兼容,无限可能:Apple Remote Desktop for Mac让远程控制更简单

Apple Remote Desktop for Mac是一款远程桌面管理软件&#xff0c;提供了一系列强大的功能&#xff0c;让用户可以轻松地管理和控制远程计算机。以下是该软件的一些主要功能和特点&#xff1a; 实时远程访问和控制&#xff1a;使用Apple Remote Desktop&#xff0c;用户可以在…

跟着pink老师前端入门教程-day05

七、CSS的引入方式 根据CSS样式书写的位置&#xff08;或者引入的方式&#xff09;&#xff0c;CSS样式表可以分为三大类 1. 行内样式表&#xff08;行内式&#xff09; 内部样式表&#xff08;内嵌样式表&#xff09;是写到HTML页面内部&#xff0c;将所有的CSS代码抽取出…

【Proteus仿真】【Arduino单片机】智能助眠机系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器闹铃模块、LCD1602显示模块、心率血氧模块、ADC模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器采…

HackTheBox - Medium - Linux - Mentor

Mentor Mentor 是一台中等难度的 Linux 机器&#xff0c;其路径包括在到达 root 之前在四个不同的用户之间切换。使用可暴力破解的社区字符串扫描“SNMP”服务后&#xff0c;会发现用于“API”端点的明文凭据&#xff0c;该端点被证明容易受到盲目远程代码执行的影响&#xff…