首页 > 系统相关 >简单了解内存管理

简单了解内存管理

时间:2024-03-19 15:34:24浏览次数:29  
标签:操作系统 MMU 简单 了解 内存 寄存器 进程 虚拟内存

虚拟内存

操作系统需要管理的就是各个进程的内存,对于进程,需要存储代码、堆、栈等信息,如果让程序员直接来操控物理内存管理进程的话,难度会更大,需要考虑进程在哪个位置分配、会不会冲突等问题,那么操作系统提供了虚拟内存给程序员使用,背后的实现这些脏活累活都交给操作系统去完成了,对于虚拟内存,有一些追求的目标:

  • 透明:每个进程看上去都有自己的内存,从0地址开始

  • 效率:在虚拟内存转换到物理内存的时候兼顾时间(TLB哈希表)和空间(多级页表懒加载)

  • 保护:每个进程是隔离的

除了硬件的底层实现,同时也需要有一些上层的策略(如可用内存如何管理、内存不够哪些内存可以释放)

硬件的地址转换

硬件的地址转换也可以叫做虚拟内存和物理内存的联系:物理内存 == 虚拟内存 + 基址寄存器的值,界限寄存器用来保证访问不越界。

这两个寄存器是CPU的重要部分,具体来说是CPU的内存管理单元MMU的重要部分,MMU是操作系统在进程上下文切换用来临时保存将要执行的进程的信息,而对于首次运行的进程,需要从进程列表(保存所有的进程信息)中的进程结构PCB拿出进程信息恢复到MMU,然后返回用户态执行进程。

对于越界访问的进程,界限寄存器会判断并跳转到内核态的异常处理程序。

分段

对于进程内部的虚拟内存,栈和堆之间有很大一块空闲空间,我们可以通过分段把这块空闲空间放到进程外部,把进程内存细分为几个段(如代码段、堆段、栈段),每个段有自己独立的基址寄存器和界限寄存器,也就是说MMU里面有多个寄存器对,进程上下文切换的时候需要恢复多个寄存器对。

我们如何才能知道访问到哪个段?还是这个:物理内存 == 虚拟内存 + 基址寄存器的值。将虚拟地址切割,前两位表示哪个段(对应使用哪个寄存器对),后几位表示段内偏移量,还有几位表示保护位(规定进程的访问权限,用于进程共享时检查)。

标签:操作系统,MMU,简单,了解,内存,寄存器,进程,虚拟内存
From: https://blog.csdn.net/xtrans/article/details/136801581

相关文章

  • Rust Rocket简单入门
    目录简介helloworld常用功能动态路径多个片段(segments)静态文件服务器简单WebAPI示例添加依赖实现接口接口测试参考链接简介Rust中最知名的两个web框架要数Rocket和Actix了,Rocket更注重易用性,Actix则更注重性能。这里只是了解一下Rust下的WebAPI开发流程,就学一下最简单的Rock......
  • .NET 内存碎片化分析
    一:背景1.讲故事上个月有位朋友wx找到我,说他的程序存在内存泄漏问题,寻求如何解决?如下图所示:从截图中可以看出,这位朋友对windbg的操作还是有些熟悉的,可能缺乏一定的实操经验,所以用了几个命令之后就不知道怎么排查下去了。既然找到我,那就以我的个人经验在他的dump上继续分析......
  • 数据在内存中的存储
    目录前言一、整数在内存中的存储二、大小端字节序和字节序判断1、什么是大小端?2、为什么有大小端?3、练习三、浮点数在内存中的存储前言本章我们学习一下数据在内存中是如何存储的,包含整数在内存中的存储、大小端字节序和字节序判断、浮点数在内存中的存储三个部分......
  • uniapp 云开发省钱之调整函数执行内存大小
    我这个5块钱一个月的服务空间配置:现在还只有少量的用户和自己测试之用,目前消耗的情况:云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云函数使用量了。看了下云函数使用量的计费方式,发现云函数的使用消耗跟......
  • cuda从入门到精通(六)共享内存和循环分块实现CUDA矩阵乘
    本文系转载,出处:https://mp.weixin.qq.com/s/1w1WFPoUEvVECsurqmvJDw在CUDA编程中,共享内存和循环分块(looptiling)是两种常见的优化策略,它们可以帮助我们提高矩阵乘法的性能。共享内存(SharedMemory):在GPU中,每个线程块(block)都有自己的共享内存。与全局内存相比,共享内存的访问......
  • uniapp 云开发省钱之调整函数执行内存大小
    我这个5块钱一个月的服务空间配置: 现在还只有少量的用户和自己测试之用,目前消耗的情况: 云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云函数使用量了。看了下云函数使用量的计费方式,发现云函数的使用消耗......
  • linux内存释放
    1、查看缓存  free-m     total            总物理内存  used            已使用内存  free            未使用内存  shared             应用程序共享内存  b......
  • UI自动化关键字驱动的简单设计思路
    步骤一:定义关键字首先,我们定义一些与登录功能相关的关键字,如:打开页面:用于打开指定的Web页面。输入文本:用于在输入框中输入文本。点击按钮:用于模拟点击按钮的动作。验证文本:用于验证页面上是否显示指定的文本。步骤二:设计测试用例接下来,我们设计一个登录功能的测试用例。这......
  • AI换脸神器A kool全面解析:超简单1分钟操作,创意爆棚,商业前景广阔!
    大家好,今天我要给大家介绍一款超级好用的AI换脸工具-Akool。这款工具不仅简单易用,而且在数字营销领域有着广泛的应用,比如定制写真、影视换脸、虚拟网红、短剧出海等等。听起来是不是很神奇呢?接下来,我就带大家一起了解一下这款神奇的AI换脸工具。一、Akool简介Akool是一......
  • ASP.NET Web Api 中 Grpc 的简单使用
    服务端添加Nuget包dotnetaddpackageGrpc.AspNetCore编写Protobuf文件syntax="proto3";optioncsharp_namespace="GrpcGreeter";packagegreet;//Thegreetingservicedefinition.serviceGreeter{//SendsagreetingrpcSayHello(Hell......