Linux教程

详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系

本文主要是介绍详细剖析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的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!