内存的管理(1)

简介: 内存的管理

取指令——译码——执行——返存

计组课我们学过cpu真正读指令并非是从内存中读入,而是从cache读和存,再由cache进行取指或返存,因为cpu指令周期比内存周期速度快很多,cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一步动作。

我们上一章看过用户进程的地址、虚地址(逻辑地址)和物理地址的地址码

我们回顾一下

用户进程

虚地址

 

内核模式代码混合使用虚拟,逻辑和物理寻址。每种设备使用多少取决于底层硬件和操作系统。

 

保护操作系统和用户进程

 

内存管理的目的

 

地址转化解决的问题

我们发现虚拟地址可能会是重复的,比如两三个进程的地址都是从0开始,但我们都知道物理地址等于基址加逻辑地址

 

一个所有进程的逻辑地址集合叫做逻辑地址空间

地址转换的时机

我们分析一下一个程序的的执行周期

源代码编译(汇编)成目标代码

目标代码需要将其他的目标代码等链接起来形成可加载的模块(可执行代码)

加载一些系统库变成二进制文件\镜像

 

那么逻辑地址是何时转化物理地址呢?

汇编语句中有一条在内存中取指令,那么我们要取址就需要访问地址,操作系统先访问虚拟地址(变址寄存器),加上基址寄存器中的基址得到物理地址,从而取得想要的数据。

但这个前提是加载程序前我们必须要知道基址

 

缺点:我们的进程空间是无法被移动的(只可以是连续的)

当然只要当我们程序运行时逻辑地址才会被替换成物理地址进行寻址

比如说我们执行call调用的时候

所以当我们运行之前就需要得到进程运行的准确的基址

 

上面我们提到的换算所需要的单元叫做MMU

 

曾经的电脑时直接访问物理内存的,现在考虑到安全性和物理内存空间太大才换成这个方式

连续的内存分配机制

这里提到的内存连续性,我们需要关注的是对进程内存的定位、回收、保护。

 

固定大小分区

内存的分区的大小是固定的,需要系统进行调度

相关文章
|
6月前
|
存储 监控 算法
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
119 0
|
4月前
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
239 0
|
4月前
|
存储 监控 算法
Java中如何管理内存?
【7月更文挑战第10天】Java中如何管理内存?
58 2
|
5月前
|
监控 算法 Java
Python中管理内存
Python中管理内存
|
5月前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
47 5
|
5月前
|
监控 算法 Java
使用Python的垃圾回收机制来管理内存
使用Python的垃圾回收机制来管理内存
|
5月前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
63 2
|
5月前
|
存储 缓存 监控
深入解析Elasticsearch的内存架构与管理
深入解析Elasticsearch的内存架构与管理
深入解析Elasticsearch的内存架构与管理
|
5月前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
54 4