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

(学习笔记-内存管理)虚拟内存

单片机是没有操作系统的,每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的CPU是直接操作内存的[物理地址]

在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本不可能的,这两个程序会立刻崩溃。

操作系统如何解决这个问题?

这里的关键问题是这两个程序都引用了绝对物理地址,而这正是我们要避免的

我们可以把进程所使用的地址[隔离]起来,即让操作系统为每个进程分配独立的一套[虚拟地址],互不干涉。但是有一个前提:每个进程都不能访问物理地址,至于虚拟地址最终怎么落到物理内存里,对进程来说是透明的,操作系统已经把这些都安排的明明白白了。

操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来

如果程序要访问虚拟地址的时候,由操作系统转换不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,就不会冲突了。

于是就引入了两种地址的概念:

  • 程序使用的内存地址叫做 虚拟内存地址
  • 实际存在硬件里面的空间地址叫做 物理内存地址

操作系统引入虚拟内存,进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存:

 操作系统如何管理虚拟地址和物理地址之间的关系?

主要有两种方式:内存分段和内存分页

http://www.lryc.cn/news/99158.html

相关文章:

  • JVM理论(七)性能监控与调优
  • 复现YOLOv8改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!
  • LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片
  • vue动态引入静态资源
  • perl 强制覆盖拷贝文件
  • C语言每日一题之整数求二进制1的个数
  • AcWing 4443.无限区域
  • 2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)
  • 【Rabbitmq】报错:ERROR CachingConnectionFactory Channel shutdown: channel error;
  • el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?
  • RocketMQ 行业分享
  • 物联网场景中的边缘计算解决方案有哪些?
  • 【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标
  • 【数据结构】实验七:字符串
  • 排序算法、
  • rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard
  • vue、vuex、vue-router初学导航配合elementui及vscode快捷键
  • Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR
  • MySQL数据库分库分表备份(shell脚本)
  • 建造者设计模式go实现尝试
  • 创建交互式用户体验:探索JavaScript中的Prompt功能
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:基础知识]
  • OpenPCDet调试出现的问题
  • 【业务功能篇58】Springboot + Spring Security 权限管理 【下篇】
  • VBA技术资料MF34:检查Excel自动筛选是否打开
  • spring扩展点
  • Skin Shader 使用自动生成的Thickness
  • Docker中的网络
  • SRS开源代码框架,协程库state-threads的使用
  • 【QT 网络云盘客户端】——登录界面功能的实现