详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
2021/8/4 7:07:04
本文主要是介绍详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
进程状态之间的关系:
1.分段式内存管理:
分段:进程地址空间按照逻辑关系将自身划分为若干个段,每个段都有自己的段名,从0开始编址。
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段不相邻。
组成:段号--段号的位数决定每个进程最多可分为几段。
段内地址--段内地址位数决定每个段最大长度是多少
段表:一张映射表,是为了程序正常运行,从物理内存中找到逻辑段的存放位置。
2.分页式内存管理
将虚拟地址空间和物理内存划分为大小相同的页面,linux下4K。
虚拟地址由两部分组成:页号(20位)+页内偏移(12位)
地址翻译(通过查页表):虚拟地址->通过映射->物理地址
页表:从虚拟页面到物理页面的映射,内存管理单元MMU依赖于页表。
缓存禁止 访问位 修改位 保护标识区 在内存否 物理页面号
分页系统的优点与缺点:
优点:不产生外部碎片,内存空间可以不连续,可页面共享。
缺点:页表很大,占用大量内存空间。
缺页中断处理:
若CPU发出的虚拟地址对应的页面不在物理内存,就会产生一个缺页中断。
缺页中断处理就是将需要的虚拟页面找到并加载到内存中。
页面置换算法:
页面置换:在缺页中断下,若内存无多余空间,就需要置换一个页面。为了降低随后发生缺页中断的次数。
算法:随机更换算法、先进先出算法、第二次机会算法、时钟算法、最优更换算法、NRU(最近未使用)算法、LRU(最近少使用)算法、工作集算法、工作集始终算法。
NRU算法:
选择一个最近时间内没有被访问过的页面置换。实现方式是利用页面的访问和修改位。基于程序访问的时空局域性。
缺点:在同一类页面无法分辨哪一类被访问的时间近。
LRU算法:基于过去的数据预测未来。不仅考了是否用过,还考虑最近使用频率。
LRU算法的实现必须以某种方式记录每个页面被访问的次数。有2种方式,一种是页表记录项增加计数域,一种是链表将所有页面链接起来。最近被使用的页面在链表头,最近未被使用的放在链表尾。在每次页面访问时对这个链表进行更新,使其保持最近被使用的页面在链表头。
3.段页式内存管理:
先按照程序分段,再按照程序分页,内存页和段页大小一样。
段页式逻辑地址由段号、页号、页内地址、(页内偏移量)组成
段表和段式存储不一样:段式里面是段长和段初始地址。段页式中是页表长度和页表存放块号。页表是一样的。
一个进程一个段表,可能对应多个页表。
段号--段号的位数决定每个进程最多可分为几段。
页号位数绝对每个段最大有多少页
页内偏移量绝对页面大小、内存块大小是多少。
若系统按字节寻址,则段号16位,每个进程最多有2^16=64K个段
页号占4位,每个段最多有2^4=16页
页内偏移占12位,每个页面/每个内存块大小为2^12=4096=4K
例题:在请求分页存储管理方案中,若某用户空间为16个页面,页长1KB,现有页表如下,则逻辑地址0A1F(H)所对应的物理地址为(0E1FH )。
解析:
地址偏移量=逻辑地址%页面大小(1024)=0A1F(H)(2591)%1024=543
页号=逻辑地址/页面大小=2591/1024=2
查页表得到块号为3,
故物理地址=3*1024+543=3615=0E1F(H)
操作系统类型:除了单道批处理,都可执行多个程序
单道批处理系统:系统对作业的处理是成批进行的,但内存中始终保持一道作业。
多道批处理系统:允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。
分时操作系统:在操作系统中釆用分时技术就形成了分时系统。所谓分时技术就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。
实时操作系统:为了能在某个时间限制内完成某些紧急任务而不需时间片排队,诞生了实时操作系统。
这篇关于详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法
- 2024-08-21【Linux】gnome桌面环境切换KDE Plasma
- 2024-08-19如何安装 VMware Tools (macOS, Linux, Windows)
- 2024-08-15Linux部署Scrapy教程:入门级指南