惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
M
MIT News - Artificial intelligence
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
F
Fortinet All Blogs
博客园 - 聂微东
U
Unit 42
Martin Fowler
Martin Fowler
腾讯CDC
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky

个人博客

leetcode经典动态规划解题报告 Netty启动原理 web安全基础知识一 SpringBoot自动配置原理 跟踪SpringMVC请求过程 Netty之ChannelHandler 负载均衡的实现方式与算法 Netty之ByteBuf Netty线程模型 fork()与写时复制 fork()与写时复制 Linux内核设计与实现读书笔记一 Dubbo小知识点总结 MyBatis的使用回顾 Dubbo集群容错 Dubbo服务调用过程 InnoDB的锁 SpringBoot启动原理 Maven和Git命令的一些总结 高可用Redis:Redis Cluster
段页式内存管理
zofun · 2020-05-15 · via 个人博客

段页式内存管理

文章导航

内存管理需要解决的问题

内存管理无非就是解决三个问题:

  • 如何使进程的地址空间隔离
  • 如果提高内存的使用效率
  • 如何解决程序运行时的重定位问题

现在的内存管理方案就是引入虚拟内存这一中间层。虚拟内存位于程序和物理内存之间,程序只能看见虚拟内存,不能直接访问物理内存。每个程序都有自己独立的虚拟地址空间,这样就做到了进程地址空间的隔离

引入了虚拟地址技术后,我们需要解决如何将虚拟地址映射到物理地址。这主要有分段和分页两种技术。

分段机制

这种方法的基本思路是将程序所需要的内存地址空间大小的虚拟空间映射到某个物理地址空间。

YsDYaq.png

分段机制使得每个进程具有独立的进程地址空间,保证了地址空间的隔离性。同时它也解决了程序重定位的问题,因为程序始终是在虚拟地址空间下运行的。

分段机制同样也存在许多的问题,因为它映射的粒度太大,是以程序为单位的,如果内存不足,那么只能换出整个程序。这样内存的使用效率就很低。

分页机制

分页机制就是将内存地址空间分为若干各很小的固定大小的页,每一页的大小由内存来决定。这样映射的粒度更小了,根据局部性原理,我们只需要在内存中保存少部分的页,大部分的页都可以换到磁盘中去。

YssggO.png

页式存储管理能够有效的提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享

段页式管理

段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。

Ys6kfP.png

在段页式系统中,作业的逻辑地址分为三部分:段号、页号和页内偏移量。

Ys6R7d.png

为了实现地址变化,系统为每个进程维护了一个段表,每个分段又有一个页表。段表中包含段号、页表长度和页表的起始地址。页表中包含页号和块号。系统还有一个段表寄存器,存储段表的起始地址和段表长度。

在进行地址变化式,通过段表查到页表的起始地址,然后再通过页表查到物理块的地址。

Ysco5R.png