震天建设集团网站,代码网站建设,北京设计公司logo,做海报设计的网站为什么要有内存管理
为什么要对内存进行管理#xff0c;需要解决什么问题#xff1f;
要回答这个问题#xff0c;首先我们需要明白#xff1a;进程运行时#xff0c;需放在内存才能运行。比如在执行一个程序时#xff0c;需将该程序的相关数据与指令装入内存才能运行。…为什么要有内存管理
为什么要对内存进行管理需要解决什么问题
要回答这个问题首先我们需要明白进程运行时需放在内存才能运行。比如在执行一个程序时需将该程序的相关数据与指令装入内存才能运行。但是内存是有限的如果多个进程同时运行就会出现内存不够用的情况。操作系统这时就帮我们做出抉择并决定当前内存中应该存放哪几个进程以及存放在内存中的什么位置。
总的来说需要对内存进行管理的原因是内存空间有限不能无限使用。引入内存管理能够解决的问题进程在内存空间中怎么放什么时候该放哪个进程进入内存。这一过程由操作系统帮助管理。
以上内容原文链接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 需要去检查当前访问的地址是否越界了。 方法二采用重定位寄存器和界地址寄存器进行越界检查。重定位寄存器中存放的是进程的起始物理地址界地址寄存器存放的是进程最大逻辑地址。 本章总结