虚拟地址空间及内存管理方式
程序地址空间:进程的虚拟地址空间
1.通过代码演示两个进程中变量地址相同,但是数据不同---进程中访问的地址都是虚拟地址
2.虚拟地址空间:操作系统向进程通过mm_struct结构体描述的一个虚假的,线性的地址空间(空有地址编号,不具备存储)
虚拟地址空间,可以让进程依然使用连续的虚拟地址,通过页表映射之后,实现数据在物理内存上的存储,提高内存利用率。
每个进程都有一个虚拟地址空间,有一个页表,通过页表可实现内存访问控制--进一步提高进程的独立性。
操作系统通过虚拟地址空间,给每一个进程都虚拟描述一个完整的,独立地址空间。
页表主要功能:映射虚拟地址与物理地址的关系/提供内存访问控制.
程序地址空间中有一个代码段--只读的?不能修改 页表有很多信息,除了当前的映射关系之外,访问权限标志位。
页表如何实现通过虚拟地址访问物理地址?--MMU
内存管理方式:分页式内存管理/分段式内存管理/段页式内存管理
分布式内存管理的虚拟地址组成:页号+页内偏移
页号:页表中页表项的编号
页内偏移:具体一个变量首地址相较于内存页起始位置的偏移量
计算公式:物理内存块号*物理内存块大小(就是页面大小)+虚拟地址中的页内偏移=物理地址
假设物理内存4G,页大小4096字节.4096*1024*1024/4096=2^20个内存页编号。
意味着页号所占的位--2^20,虚拟地址的高20位都是页号,低12位就是页内偏移
32位操作系统---寻址空间大小为32位
例如:页面大小2048,内存大小2G,有一个虚拟地址,十进制表示为4528,根据下面页表计算物理地址:
2G/2048=2^20--高位页号 通过页表得知块号=2 , 2^31 低11位
4528/页大小=2=页号
4528%2048=页内偏移=432
0号页面0~2047 1号页面2048~4095 2号页面4096
物理地址为:2*2048+页内偏移=4528
4528十进制换成3731H十六进制,用二进制可表示为0x00000000 00000000 00110111 00110001
前20位为页号3,后12位为731H(页内偏移),页号3对应的块号为5,物理地址为5731H(可以直接块号换,但是要注意进位的问题)
分页式内存管理的优点:将物理内存分块管理,可以让进通过页表映射之后,实现数据在物理内存上的里三十存储,提高内存利用率。
分段式内存管理:地址组成:段号+段内偏移 段表 段号-物理段起始地址
使程序员对内存的管理更加方便,内存空间分为了代码段,初始化全局段...;什么变量就在什么段申请地址
段页式管理:地址组成:段号+段内页号+页内偏移 +段表+段内页表 (在每一个分段内,又采用分页式管理)
段表:段号-段内页表起始地址
每个分段都有一个页表,通过地址中的段号,找到段表项,通过段表项中段内页表起始地址找到自己的页表
页表:页号-物理块号
通过地址中的段内页号,在这个页表中找到页表项,通过页表项中的物理块号+页内偏移得到最终物理地址。
3种内存管理方式的优点:
分页式:提高内存利用率
分段式:便于程序员/编译器内存管理
段页式:集合分页式和分段式
缺页中断:
重要:什么样的数在内存不够用的时候应该被交换出去?
LRU算法:最久未使用--内存中最久没有被访问过的数据
虚拟地址空间及内存管理方式相关推荐
- 操作系统--内存管理方式
"碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...
- 操作系统的内存管理方式
操作系统的内存管理方式有三种:分段式.分页式.段页式. 首先介绍分段式: 概念:将地址空间进行分段,代码段/数据段/堆/栈/参数/环境变量.根据使用一个空间的性质,在不同的分段,分配虚拟地址,有助于编 ...
- python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析
本文主要向大家介绍了Python语言入门之内存管理方式和垃圾回收算法解析,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在列表,元组,实例,类,字典和函数中存在循环引用问题.有 ...
- 终于明白那些年知其然而不知其所以然的iOS内存管理方式
终于明白那些年知其然而不知其所以然的iOS内存管理方式 前言 从我开始学习iOS的时候,身边的朋友.网上的博客都告诉我iOS的内存管理是依靠引用计数的,然后说引用计数大于1则对象保存在内存的堆中而引用 ...
- C++内存管理方式——new/delete
目录 C++内存管理方式 new/delete操作内置类型 new/delete操作自定义类型 C++保留malloc和free的原因 new.delete和malloc.free的区别 new.de ...
- python基于值的自动内存管理方式是什么_Python采用的是基于值得自动内存管理方式。(2.0分)_学小易找答案...
[多选题]下列有关关键绩效指标表述正确的是( ) [单选题]上级和员工之间以持续沟通来预防和解决员工实现绩效时可能发生的各种问题的过程,这是绩效管理的( )环节 [单选题]下列有关双因素理论的描述中, ...
- python采用的是基于_Python采用的是基于____的内存管理方式
Python采用的是基于____的内存管理方式 答:值 中国大学MOOC: 四大基本设计原则是 答:对齐.重复.亲密.对比 下列不属于软件调试技术的是 答:集成测试法 短视频类APP在11点至12点. ...
- Objective-C入门解读与内存管理方式
Objective-C入门 Objective-C入门(A First Look at Objective-C) 转自: http://www.fish888.com/Objective-C-t684 ...
- python基于值的内存管理方式_python内存管理方式以及深拷贝,浅拷贝
简单开篇,手绘结尾 1.pip常用工具命令: $pip download packagename==version #下载指定版本模块,但是不安装 $pip freeze>requirement ...
最新文章
- SLAVE为什么一直不动了
- mysql bc_正则表达式——MySQL搜索过滤
- java实现itchat_GitHub - Xiazki/itchat4j: wechatbot 的java实现,简单搭建了基本框架和实现了扫码登陆,具体网页微信api请参考...
- 中科院等发布《2019研究前沿》
- gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
- cordova 安装ssl证书_超详细cordova环境配置(windows)及实例
- 【leetcode】Majority Element
- php 数组中连续的数字,php数组中最近的次要数字
- nand flash和nor flash区别_从闪存的发展历史看,eMMC与NAND Flash有什么区别与联系?...
- paddlehub 使用体验-视频抠图_乘风破浪的姐姐_人美路子野 2020-08-13
- 万字雄文前瞻丨区块链及隐私计算在传统企业中的技术认知与进阶思考
- log2n怎么算计算机公式,log函数运算公式是什么
- linux下利用图形化工具合并分区
- 2022年抗癌行业研究报告
- GZIP压缩和解压缩不删除原始文件
- 原生小程序 申请小程序 - 发布流程
- 旅游网站java项目模板_基于jsp的旅游网站sx-JavaEE实现旅游网站sx - java项目源码...
- 该如何选择手机群控系统,小白必看,防进深坑。
- 云仓系统开发云商系统模式详解
- python字体描边_Android为TextView添加字体库和设置描边的方法
热门文章
- 解决python报错写入文件 io.UnsupportedOperation: not writable
- emacs mysql_使用Emacs作为MySQL的客户端
- checkbox 选中_纯CSS修改checkbox复选框样式
- c# xls 复制一行_编写干净的C#代码技巧
- Git--生成公钥和私钥并添加gitlab访问权限
- WebsSocket
- HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
- PHP 规划(收藏的一些好博文)
- [jqGrid]关于loadonce:true后trigger(reloadGrid)无效,loadonce:false后无法翻页的问题(来自stackoverflow)...
- python创建虚拟环境_Python学习笔记:创建Python开发Web程序的虚拟环境