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

  • Post author:
  • Post category: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中运行,它们共享系统中的各种硬、软件资源。



分时操作系统:

在操作系统中釆用分时技术就形成了分时系统。所谓分时技术就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。



实时操作系统:

为了能在某个时间限制内完成某些紧急任务而不需时间片排队,诞生了实时操作系统。



版权声明:本文为liwenjie0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。