linux虚拟内存机制

        内核在CPU的4G线性地址空间上为进程分配连续空间后,会专门有一个机制(数据结构)M用来保存管理哪些进程占用了哪些线性地址空间。
         这样,若内存大的情况下,会像uc/os II 那样运行,也不用在进程切换时反复覆盖内存的数据,每个进程享用自己实际的物理内存空间,互不干扰; 
        但若进程占用资源多,而内存较小的情况下,在进程切换时,上面的那个机制就会把活动少的进程A所用的线性地址空间(对应的物理内存空间置为无用(即腾出紧缺的物理内存空间,一般情况下,内核会把这部分中间数据拷贝到硬盘的一个专门缓存的地方-------交换分区,以备下次B运行时能把先前运行的中间数据找回来,这个是必须的,因为一个进程的资源不只是在硬盘上不会改变的代码部分,还有变量变化的数据,不要忘记),腾给下一个进程B使用(这时B的线性空间和A原来的线性空间没有关系);这样以后那个活动少的进程A要运行的时候通过机制M就会发现它自己原来的线性空间(也即先前运行时的其自己的物理内存环境)被占用了,这样,该机制M再分配一个新的线性空间给进程B去运行,当然分配后第一时间先清零所分配的线性空间,让B去缺页重新从文件系统搬运相关代码页等到物理内存中。
      ------------2013年6月19日13:12:16  再参照13.1.1节中的注释,linux的内存管理还是挺简单的,用户空间和内核空间的内存分配很自然-----------内核通过MMU控制(软件为机制M)自己的空间,把后来的用户空间的内存映射到固定的地方,并保护内核自己的空间免受用户的非法改动,这是linux关于进程的的横向的一个分割线;     linux的纵向分割线---------用户进程通过软件中断调用(系统调用)内核中的设备驱动程序,由于非常快,实际上和“uc/os II的进程调用驱动”没什么区别, 只不过通过这个系统调用接口(POSIX规范)使类UNIX间的应用程序更加具有可移植性

你可能感兴趣的:(linux虚拟内存机制)