当前位置: 首页 > 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的开源软件,提供了一个简单易用的语言和工具集,使得自动化管…...

3大核心策略!Langchain-Chatchat RAG语义匹配效率提升实战指南

3大核心策略!Langchain-Chatchat RAG语义匹配效率提升实战指南 【免费下载链接】Langchain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatch…...

GLM-OCR系统资源优化:C盘清理与显存高效利用技巧

GLM-OCR系统资源优化:C盘清理与显存高效利用技巧 你是不是也遇到过这种情况:兴致勃勃地部署好GLM-OCR,准备大展身手,结果没跑几天,系统就弹窗提示“C盘空间不足”,或者程序运行越来越慢,甚至直…...

千问3.5-2B辅助MATLAB科学计算:算法实现与结果可视化脚本生成

千问3.5-2B辅助MATLAB科学计算:算法实现与结果可视化脚本生成 1. 科研计算的新助手 作为一名经常使用MATLAB的科研工作者,你是否遇到过这样的困扰:明明知道要解决什么数学问题,却卡在代码实现环节?或者花了大量时间调…...

Claude Code智能体与CasRel模型协作:自动化数据标注流水线

Claude Code智能体与CasRel模型协作:自动化数据标注流水线 1. 引言 做关系抽取项目,最头疼的是什么?十有八九的工程师会告诉你:是数据标注。传统的人工标注,不仅耗时费力,成本高昂,而且面对复…...

效率翻倍:利用Streamlit界面快速A/B测试,找到最佳转换参数组合

效率翻倍:利用Streamlit界面快速A/B测试,找到最佳转换参数组合 1. 为什么需要参数A/B测试 在2.5D转真人的图像转换任务中,参数组合的选择直接影响最终效果。传统的命令行工具需要反复修改配置文件并重启服务,效率极低。而Anythi…...

[具身智能-228]:OpenCV的主要功能

OpenCV(Open Source Computer Vision Library)被誉为计算机视觉领域的“瑞士军刀”。它是一个基于 BSD 许可发行的开源库,提供了超过 2500 个优化算法,涵盖了从底层像素处理到高层视觉理解的完整技术链路。结合最新的技术资料&…...

文章标题:专业ASIC FPGA IP加密代码解密工具

专业 ASIC FPGA IP 加密代码解密工具 支持 Xilinx Vivado IP 解密,包括 ip、vp、iip、vip、dw、rtl、run 包等;还支持解密 Verilog、VHDL、SystemVerilog(sv、svp、svh、svi)等多种语言,能够解密所有加密文件 解密工具…...

2025届学术党必备的六大AI论文助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek身为人工智能写作工具,于学术论文撰写里能够起到辅助方面的作用&#xf…...

第25课:让 Qt 从 GPIO 子系统一路进阶到平台驱动与设备树控制

本节路线图 为什么这一课要把三种GP → 先从GPIO子系统开始: → 再进一步:平台驱动让LE 小猫提醒 这节有分区、烧录或删除类操作,先确认盘符和路径,再按回车。 猫头鹰提示 编译前先对齐目标架构和工具链名字,别让主机程序和板卡程序搞混。 上一课我们已经把 Qt 和字符驱动…...

**发散创新:基于Python的本体推理与知识表示实战解析**在人工智能和语义网技术飞速发展的今天,**知识表

发散创新:基于Python的本体推理与知识表示实战解析 在人工智能和语义网技术飞速发展的今天,知识表示(Knowledge Representation) 已成为构建智能系统的底层核心能力之一。它不仅决定了系统对现实世界的理解深度,还直接…...