首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
Linux操作系统内核指导——虚拟存储
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2007-07-06  

虚拟地址由操作系统维护,由MMU可以进行转换。扩大了内存空间分页管理,把内存分为页和页桢,大小一样,一个在磁盘,一个在内存。页表就像一个函数,输入是页号,输出是页桢号。

页表可以是多级页表,可以用TLB(Translation Lookaside Buffer)缓存。速度和成本介于内存和寄存器。

页表项禁止缓存,访问位,保护位,修改位,存在位——页桢号。

页面置换最优算法,先进先出和最近最少使用 (Leaset Recently Used)。

Linux 虚拟内存的管理

1.缺省页面大小8K,每一个进程维护自己的一张页表。所以,不同进程的虚拟地址可能一样。

2.虚拟地址:0x2194 ——> 因为页面大小0x2000,所以此地址在页面1处。页内偏移地址是0x194如果页1映射为页桢4,那么它的物理地址是0x8000+0x194=0x8194.

3.换页,paging ondemand

4.交换 thrashing LRU

5.Linux 总假定处理器支持三级页表结构,PGD, PMD, PTE在Intel X86的微机上,linux表结构只有两级 PGD, PTE (PMD 只有一个表项)。

6.每当启动一个新线程,linux都会为它分配一个task_struct结构体,内含ldt(local descriptor table),tss(task state segment),mm等内存管理信息。其中,mm_struct结构体,包含了用户进程中的存储相关的信息。

7.vma程序执行时,并把执行映像调入进程虚拟地址空间中,共享库也是。但是,实际上没有进入到物理内存中。

在mm_struct,包含一些指向vm_area_struct数据结构描述了虚拟内存的起始与结束位置,进程对此内存区域的权限以及一组内存操作。所以,操作系统对虚拟内存的管理,就是对这个数据结构的管理。而且,vma不是一个是一组,所以需要通过红黑树算法来进行管理,分配和取消。

8.页面分配,用Buddy算法来进行,内存分配代码在free_area数组维护的链表中寻找一个满足要求,同时又尽可能小的空闲块分割的同时,剩余的进行再分配。

9.asmlinkage do_page_fault(struct pt_regs *regs, unsigned long error_code);编译器不要使用寄存器,而是使用堆栈来传递参数当MMS发现错误了,就调用这个函数。当缺页时,CPU把会发生缺页异常的地址拷贝到cr2控制寄存器中,然后进入缺页异常的处理过程。

 

handle_fault_mm()->handle_pte_fault()->do_no_page()->do_swap_page()

如果发生异常时的系统状态EFLAGS的中断位置位,那么在保存了cr2之后便可以允许终端发生,底层过程调用sti指令开中断。


 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·Linux系统内核研究之可执行文件
·Linux操作系统的内核模块全面解
·关于Linux内核版本稳定性能测试
·Linux系统内核:修改TCP/IP调优参
·借助异常表处理Linux内核态缺页
·Linux内核空间保护与空间数据传
·编译Linux操作系统的内核讲解
·Linux系统内核网络参数意义以及
·SYN Cookie原理以及在Linux系统
·Linux内核和核心OS组件的测试与
·Linux操作系统动态函式库讲解(
·Linux系统内核模块函数调用及命

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!