段页结合物理内存

发布时间:2026/7/30 13:30:28
段页结合物理内存 引言实际的内存到底是如何管理是段存储还是页存储。上文详细讲解了段页储存感兴趣请阅读https://blog.csdn.net/weixin_52748928/article/details/163102020?spm1011.2124.3001.6209其实操作系统采用的是段页结合的方式来管理内存的。对程序员来说是内存是但是对操作系统来说内存是页减少内存碎片。笔者持续更新Java 技术栈的知识个人的语雀笔记Object.N · 语雀https://www.yuque.com/objectn实际管理内存段、页同时存在段面向用户/页面向硬件。提出了虚拟内存这个概念用户看到的是内存是分段的由虚拟内存映射到对应内存的页中这样即避免了内存的碎片也给用户提供了方便管理的内存。地址重新定位通过虚拟内存中映射获得对应的基址然后拿到基地址去找对应的页。每个进程由独立的段表页表内存的换入和换出使用换入换出来实现虚拟内存如果有4G 内存给用户的感觉就是有4G的内存。但是实际的物理内存没有这么多。因此我们要换入即可用的内存可能没有4G但是分配的内存有可以在使用时把要使用的加载进来不用的内存页换出。只要加载和换出的速度够快感觉上就是你有4G的空间。关于内存换出的细节当内存调用时发现没到到对应的页缺页这时去加载磁盘中的数据到一块空的内存中然后继续执行把加载进来的地址通过总线发送给cpu。这就是换入的大体过程。换出算法min页面置换选最远将使用的页淘汰是最优方案 。但是MIN需要知道将来发生的事说以没法实际使用LRU页面置换选最近最长一段时间没有使用的 页淘汰(最近最少使用)。使用LRU 准确实现无论使用时间戳或者使用页码栈实现起来资源消耗都很大。因此就有了LRU 的近似的实现。LRU近似实现-将时间计数变为是和否每次访问一页时 硬件自动设置一位为1否则是0,淘汰该位为0的。这种算法叫 Clock。有可能会所有的R1,这样算法就会退化为FIFO。为了解决这个问题应该加入一个指针定时清除。cpu颠簸系统内进程增多》每个进程 的缺页率增大》缺页率增大到一 定程度进程总等待调页完成》CPU利用率降低》进程进一步增 多缺页率更大…解决方案限制进程的数量为进程设置合理的内存swap in换入 swap out换出swap分区管理swap分区是操作系统内核会将内存中暂时不活跃的数据如进程的堆、栈等匿名内存数据移出至 Swap 空间从而为当前运行的程序腾出内存当需要这些数据时再将其从 Swap 换入内存。一张图总结