读核日记(七) --linux的内存管理机制(1)

2016-01-29 19:45 5 1 收藏

读核日记(七) --linux的内存管理机制(1),读核日记(七) --linux的内存管理机制(1)

【 tulaoshi.com - Linux 】

 

内存管理是一个操作系统必不可少.并且.非常重要的一环.linux的成功.和它优秀的内存管理联系非常密切.因为一个系统的高效性欲稳定性往往决定于它的内存管理机制.我项很多人吃过dos下640k 的苦吧.

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

前面我们介绍了386保护模式.从今天起我们将在此基础上,分析linux的虚拟存储管理,对每个程序员来说.他们都希望有无穷大的快速的内存,然而,现阶段是不可能的,况且,无穷大与快速本身就可能矛盾

为了解决无穷大.linux 引入了虚拟存储系统,为了解决快速,linux 引入了cache ,交换机制等等,以使的存储系统,在容量上接近硬盘,速度上接近cache.(当然,我认为这是存储系统的实际目的).

Linux 的内存管理采取的是分页机制.它的设计目的是分时多任务.linux 可同时处理256个任务(这应该与某个变量来定义,一时想不起来).同时它采用了两级饱和机制来分别内核进程与用户进程.

在386 保护模式的0-4G 的线性虚拟地址中,3-4G 是留给内核进程的.而0-3G分给用户进程.内核在内核空间的寻址不同于用户进程在用户空间的寻址.因为内核是在启动时装入内存的.说以它可以直接吧地址映射到3G 以上.用户若想访问内核就不许通过swapper_pg_div 中的指针来得到页表.

相反,用户进程,在用户空间的寻址是通过所用户页目录中的指针得到用户的页表.并通过页表的指针直接指向相应的物理内存.

Linux虚拟内存的实现,需要几种不同的机制来实现:

地址映射机制

内存的分配与回收

请页机制

交换机制

内存共享机制

在具体的读源码之前.我们先根据我们以前学过的操作系统知识.和C语言等知识.来考虑一下,这几个机制如何实现.现自己设计一下.在看别人是怎样实现的.找到自己想不到.或者对效率空间有损的地方.这样才有进步.我不止一次的说.操作系统的某一部分,就起实现来说,非常简单.它的难点是如何将大量的功能集成出一个kernerl.

地址映射机制,说白了,就是在虚拟内存与物理内存上的一个桥梁.它要做的事情可能就是通过几个不同的表.把虚拟地址转换成物理地址,把物理地址转化虚拟地址.

我们以前说过.因为有系统与用户之分,它必须也要有不同的数据结构.为了解决速度等问题.它会有一个硬件的缓冲区

对于它的数据结构.我们可以先想一下.如虚拟地址的信息,虚拟地址在那个区域等等

至于请页机制,更好理解.因为linux是页式存储的.因此必然会存在空白页和使用页.既然是页.就必然会存在页溢出.页无效(是不是在win98 下经常出现类似错误,当然linux的内存管理不可能和windows一样,可基本道理相同).因此.在每一个页出错.或者该页存不下多余的数据时.就要要求内核分配新的页面

同时.当时用fork() 产生一个新的进程时.也需要分配新的叶面.这一部分大概讲的就是进程如何向内和描述自己需要怎么样的和多少页

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

在我们学习<<数据结构是我们学了,很多内存分配方式,如首次拟和.最佳拟和,最差拟和等等.但是我们可以想象.linux 大概不会用他们.那就一定是伙伴系统了.因此我们可以对于伙伴系统的分配,回收的基本算法.回想一下.这样在读者一部分源码时,回有意象不到的收获.

至于交换机制.我们也可以现想一想.内存中总与很多使用者的页.如果这些也已经把所有的页都用完了.再分配时必须把其中的某些页释放.释放那些页,需要考虑.如最近不用页.近期少用页,等等都可以在考虑之中.

这个算法,大概就是计算内存中使用的页,什么时候可以换处.说白了就是为所有的使用页计算一个”权”,而这个”权”就决定了他什么时候被释放以换如它的内容.需要想的是对于经常使用的页.可以把它放入cahe.(尽管这一部分对程序员是透明的,但我们应该理解他的原理).

最后的一部分共享内存,我想和我门初学linux编程时,进程通讯里面的共享内存没有区别.大概也就是在它的数据结构中加入可以允许不同进程访问的tag 就行了.

以上,只是我们对linux的内存管理机制的猜测,需要我们做的工作就是具体的读源码.更正不正确的猜想.同时学习别人的实际思路.

从下篇日记开始.我们将分别讲解这几部分的实现

 

来源:http://www.tulaoshi.com/n/20160129/1510057.html

延伸阅读
众所周知,Java语言最明显的优势在于用它设计的程序可以广泛地运行于互联网上所有安装了VM解释器的计算机上。然而,如今JAVA之所以在市场上如此流行,还得益于它的另一卖点:它提供了安全可靠和使用方便的存储治理机制。这是部分编程人员将它与其前身C++语言对比后所得出的结论。本文将针对两种语言的内存(以对象为单位)使用机制,...
如果你现在想安装一套Linux,又不想随着Linux发行版本的版本号,不停的格式化系统,重新安装,或者升级安装。那么,最适合你的只有LFS、Debian和Gentoo。 本文尝试对Debian、Gentoo的包管理机制进行比较,并由此得出了几个有趣的结论。本文对于Debian、Gentoo的包管理,主要谈缺陷和不足,并且尝试提出解决方法。最后,本人水平有限,失误、不...
标签: SQLServer
在改进SQL Server 7.0系列所实现的安全机制的过程中,Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行全面地管理。按照本文介绍的步骤,你可以为SQL Server 7.0(或2000)构造出一个灵活的、可管理的安全策略,而且它的安全性经得起考验。 一、验证方法选择 本文对验证(authen...
标签: 服务器
详解Linux系统内存寻址的分页机制   分页机制在段机制之后进行,以完成线性物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。 硬件中的分页 分页机制由CR0中的PG位启用。如PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为物理地址。如PG=0,禁用分页机制...
Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要非常清楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成,贴出一些以前学习过的一个很好的文章。与大家共享!以下主要说明Swap和Buffer Cache机制 Linux支持虚拟内存(virtual memory),虚拟内存是指使用磁盘当作RAM的扩展,...

经验教程

598

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部