当前位置: 首页 > news >正文

操作系统原理 —— 内存管理的概念(十八)

为什么要有内存管理

为什么要对内存进行管理,需要解决什么问题?

要回答这个问题,首先我们需要明白:进程运行时,需放在内存才能运行。比如在执行一个程序时,需将该程序的相关数据与指令装入内存才能运行。但是内存是有限的,如果多个进程同时运行,就会出现内存不够用的情况。操作系统这时就帮我们做出抉择,并决定当前内存中应该存放哪几个进程,以及存放在内存中的什么位置。

总的来说,需要对内存进行管理的原因是:内存空间有限,不能无限使用。引入内存管理能够解决的问题:进程在内存空间中怎么放,什么时候该放哪个进程进入内存。这一过程由操作系统帮助管理。

以上内容原文链接:https://blog.csdn.net/qq_40359223/article/details/122218539

内存管理它又做了哪些事呢? 一共分了四个部分,我们接着往下看:

内存空间的分配和回收

首先内存管理主要做的事就是内存空间的分配和回收,在一个操作系统中,内存中同时存放了很多个进程,操作系统要怎么记录哪些内存被分配出去了?哪些又是空闲的状态? 开启一个新的进程,又该分配到内存中哪一块? 进程结束之前分配的内存空间又该如何回收?

这些问题都是由操作系统内存管理来实现,具体在这个章节中不详细展开来讲,只是讨论操作系统内存管理需要做哪些事。

内存空间的扩充

内存管理第二个要做的事就是对内存空间的扩充,假设目前一台操作系统它的运行内存只有 4GB 大小,但是运行了很多个程序,比如假设:QQ 使用了 500M 内存、QQ 飞车占用了 3G内存,QQ 音乐又占了 1 GB,从数据上来看,这三个进程所需要的运行内存相加是超过了计算机中 4 GB 的内存,那为什么他们三个软件还能够同时执行呢?

这个就是虚拟技术,操作系统需要提供某种技术从逻辑上对内存空间进行扩充,这也是内存管理的一部分。

地址转换

地址转换这个就比较抽象,先问大家一个问题,在多个程序运行环境下,操作系统中会有很多个程序并发的执行,也就是说会有很多个程序需要同时放到内存中,那么,如何区分各个程序的数据时放在什么地方呢?

这个就和酒店道理一样,酒店每个房间都会有编号,内存中每一个小房间叫做存储单元,如果计算机按字节编址,则每一个存储单元大小为1字节,即 8 个bit,内存地址从1开始,每一个地址对应一个存储单元。

程序经过编译、链接后生成的指令中,对应的是内存的逻辑地址,而并非内存存储空间的物理地址,所以程序在执行过程中,是需要将逻辑地址,转换成对应的物理地址,才能够最终获取到想要的数据。

那么如何将指令的逻辑地址转换为物理地址呢?

我们先来看这张图:
在这里插入图片描述

当程序员写的代码经过编译、链接,最后转入模块到内存,在这个转入的时候,就可以做地址转换,

地址转换三种方式:

1、绝对转入:在编译的时候,如果知道程序将放到内存中哪个位置,编译程序将产生绝对地址的目标代码。

在这里插入图片描述

2、可重定位转入(静态重定位)
编译、链接后的装入模块的地址都是从 0 开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址,可根据内存的当前情况,将装入模块装入到内存的适当位置,装入时对地址进行 “重定位”,将逻辑地址变换为物理地址。
在这里插入图片描述

3、动态运行时转入(动态重定位)

编译、链接后的装入模块的地址都是从 0 开始的,装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址,这种方式需要一个重定位寄存器的支持。
在这里插入图片描述

内存保护

什么是内存保护? 在内存中同时装入了多个程序,每个程序都有属于自己的内存空间。假设进程 2 可以访问、修改进程 1 的内存空间内容,你们觉得这个合理吗? 如果可以那岂不是很不安全,病毒程序就可以随意读取和篡改其他程序内容了,所以有两种机制做到内存保护:

方法一:在 CPU 设置一对上、下限寄存器,存放进程上限、下限地址,进程的指令要访问某个地址的时候,CPU 需要去检查当前访问的地址,是否越界了。

在这里插入图片描述

方法二:采用重定位寄存器和界地址寄存器进行越界检查。重定位寄存器中存放的是进程的起始物理地址,界地址寄存器存放的是进程最大逻辑地址。

在这里插入图片描述

本章总结

在这里插入图片描述

相关文章:

操作系统原理 —— 内存管理的概念(十八)

为什么要有内存管理 为什么要对内存进行管理,需要解决什么问题? 要回答这个问题,首先我们需要明白:进程运行时,需放在内存才能运行。比如在执行一个程序时,需将该程序的相关数据与指令装入内存才能运行。…...

GPT-4国内怎么用

GPT-4是OpenAI推出的最新的生成式AI模型,作为ChatGPT的进化版,它在回答准确性、识图能力、生成歌词和创意文本等方面有了显著的提升。然而,由于网络限制,国内用户无法直接访问官方网站。那么,GPT-4在国内如何使用呢&am…...

搭建LightPicture开源免费图床系统「公网远程控制」

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章:【搭建私人图床】使用LightPicture开源…...

shell编程lesson06

流控制 while 和 until 循环 #!/bin/bash# while-count:display a series of numbersi1 while [ $i -le 5 ];doecho $ii$((i1)) done echo "Finished!"while命令的语法结构如下: while commands;do commands;done 我们可以使用while循环改进上一节中的…...

国内免费可用的ChatGPT网页版

ChatGPT 一、ChatGPT是个啥?二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是Generative、Pre-trained、Transformer的缩写,表示“预训练语言模型”&#xff0…...

用同样的关键词测试不同的人工智能

测试词汇:用“电商、接口、店群”写一篇关于API接口的推广软文 返回结果: 人工智能1: 电商行业已经进入了全面数字化转型的时代,而API接口技术正是数字化转型的重要组成部分。随着移动端、小程序等终端越来越普及,A…...

shell变量类型含义 长方形面积计算 截取相应字段方法

1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) 1)截取网站访问的协议 …...

Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic

目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…...

提前进入行业顶尖阵营:高性能计算实习的竞争优势

如今就业越来越内卷,尤其是计算机行业更是如此。加上GPT以及大模型的加持,各大企业纷纷降本增效,普通程序员逐渐失去竞争力。想要在竞争激烈的就业市场中脱颖而出,提前进入行业顶尖阵营是一个明智的选择。而高性能计算实习将为您提…...

Java程序设计入门教程--标识符和关键字

目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。简单地说,标识符就是一个名字。 2. 标识符命名规则 (1)大小…...

国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化

IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下,测试成本可能占到器件总成本的40%左右。为了降低测试成本,可以优化测试程序并研发多工位测试。同时,必须平衡良品率和测试时间,以实现最佳的成本控制。本篇文章纳米软…...

BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory (轻量级) 和ApplicationContext(高级特性和框架)是Spring的两大核心接口,都…...

js的BOM对象中的window、location使用

说明:BOM的全称是Browser Object Model,浏览器对象模型,有Window(浏览器窗口)、Navigator(浏览器)、Screen(屏幕)、History(历史记录)和Location&…...

DAY 68 redis高可用的主从复制、哨兵、cluster集群

Redis 高可用 什么是高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服…...

leetcode 1209 学会删除字符串

删除字符串的经典kotlin操作: val mTemp (temp.text).replace(Regex("℃"),"") 以下是题目! 1209. 删除字符串中的所有相邻重复项 II 提示 中等 174 相关企业 给你一个字符串 s,「k 倍重复项删除操作」将会从 s…...

JavaScript6

一、概念 ES6是JavaScript语言的标准。 新特性:let和const命令、变量的解构赋值、字符串函数对象数组等扩展。 环境准备:需要安装NodeJs。 二、新特性 1、let let命令用来声明变量。他的用法类似var,但所声明的变量,只在let命令…...

轻松安装Redis:不用担心配置问题

一、Centos安装Redis 1.安装 EPEL 源 Redis 不在 CentOS 官方仓库中,需要安装 EPEL 源才能访问到 Redis 软件包。运行以下命令安装 EPEL 源: sudo yum install epel-release 2.安装 Redis 使用以下命令安装 Redis: sudo yum install re…...

ChatGPT学习研究总结

目录 ChatGPT研究总结 一、程序接入用途不大 二、思考:如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料(来源网络) (1)一文读懂ChatGPT模型原理 (2)MATLAB科研图像处理——…...

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举?二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…...

Ansible介绍

文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具,可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件,提供了一个简单易用的语言和工具集,使得自动化管…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...