码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
分页存储的原理——非连续存储分配
文章目录
为什么需要分页存储
分页存储管理的重要概念
如何实现地址转换
如何知道页面在内存中的起始地址?
为什么页表项的页号是隐含的
为什么需要分页存储
我们发现我们的连续分配内存在支持多道程序的时候,会出现一些问题
固定分区 会产生大量的内部碎片,还可能存在进程太大,放不进去
动态分区:会产生大量的外部碎片,虽然可以通过紧凑技术来处理,但是紧凑的时间代价很高
将我们的进程拆分成一个个部分,再把这三个部分分别放到分区中,这些分区不要求连续
思想:把内存拆分为一个个相等的小分区,再按照分区的大小把进程拆分成一个个小部分,把进程的一个个小部分放到内存的一个个分区
分页存储管理的重要概念
页框
也就是我们将内存空间分为一个个相等的分区的一个基本单位
页面
将用户进程的地址空间分为一个个与页框大小相等的一个个区域
各个页面不必须要连续存放,也不必按照先后顺序来,
因为分页就是为了实现不连续存储
如何实现地址转换
在我们的连续分配内存中,第三中的动态装入方式,我们装入内存的时候,进程中的地址是逻辑地址,在真正需要运行的时候,利用重定位寄存器来将对应的逻辑地址到物理地址的转换
而我们的分页存储也是采用动态装入方式
从逻辑地址到物理地址的转换
我们要知道我们对应的逻辑地址
所在的页面是哪个 在所在页面的相对位置
所在页面在内存中哪个页框,和对应的物理地址——通过页表知道
为什么页面大小一般设为2的整数次幂?
因为我们的地址在计算机中是以二进制存储的,所以将页面的大小设置为2的次方字节
这样计算机很容易得到对应的页面,和页内地址
如何知道页面在内存中的起始地址?
把这种数据结构称为页表,操作系统为每个进程建立一个页表
进程的没一页对应一个页表项
每个页表项有页号和块号组成——形参内存的页框到进程的页面的映射
为什么
页表
项的页号是隐含的
因为我们的页表中页表项是按顺序连续地存放在内存中,所以该页表在内存的起始地址是X,那么X* 3 * M的地址一定存着我们M号页对应的页表项
所以我们的页表项不需要存储对应的页号信息,只需要存在对应的块号就行
相关阅读:
华为云HECS云服务器docker环境下安装nacos
基本语法(三)
Windows上使用client-go远程访问安装在本地WMware上的Linux虚拟机里的minikube
【Vue】路由vue-Router
【torch.nn.init】初始化参数方法解读
终于知道Kafka为什么这么快了!
SpringBoot项目打包与运行
深度学习_12_softmax_图片识别优化版代码
自动控制原理3.5---线性系统的稳定性分析
关于使用STM32CubeMx配置串口出现的一些问题
原文地址:https://blog.csdn.net/qq_50985215/article/details/127651435
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号