标签:linux操作系统 根据 移位 start bsp sort detail 理解 并且
虚拟内存
http://www.cnblogs.com/feng9exe/p/6379686.html
来理解一下虚拟地址映射的过程:拿到一个虚拟地址,根据已有的vm_area_struct看这个虚拟地址是否属于某个vm_area_struct
所以虚拟页的三种状态的实际含义如下:
mmap要么映射到一个后备文件,要么映射到一个匿名文件。操作系统分配物理内存时实际用到了匿名文件的mmap。
2. vm_page_prot 表示这个区域的页的访问权限
http://blog.csdn.net/xu3737284/article/details/12710217
linux操作系统是通过sys_exec对可执行文件进行映射以及读取的,有如下几步:
1.创建一组vm_area_struct
2.圈定一个虚拟用户空间,将其起始结束地址(elf段中已设置好)保存到vm_start和vm_end中。
3.将磁盘file句柄保存在vm_file中
4.将对应段在磁盘file中的偏移值(elf段中已设置好)保存在vm_pgoff中;
5.将操作该磁盘file的磁盘操作函数保存在vm_ops中
http://blog.csdn.net/al_xin/article/details/38590931
一个具体区域结构包含下面的字段:
http://blog.csdn.net/chen98765432101/article/details/54881652
缩写解释:
VA:虚拟地址
VPN:虚拟页号
PTE:页表项
PTEA:页表项地址
PA:物理地址
DATA:数据
MMU:内存管理单元
TLB:地址翻译缓冲器
设置存储器层次结构主要是为了缓存低速的存储器。主存是对磁盘等设备的缓存,cache是对主存的缓存,tlb是对主存页表的缓存。
http://www.cnblogs.com/feng9exe/p/6379650.html
struct mm_struct
{
struct vm_area_struct *mmap; /* list of VMAs */
struct rb_root mm_rb;
struct vm_area_struct *mmap_cache; /* last find_vma result */
...
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
...
};
struct vm_area_struct
{
struct mm_struct *vm_mm; /* The address space we belong to. */
unsigned long vm_start; /* Our start address within vm_mm. */
unsigned long vm_end; /* The first byte after our end address
within vm_mm. */
....
/* linked list of VM areas per task, sorted by address */
struct vm_area_struct *vm_next;
....
/* describe the permissable operation */
unsigned long vm_flags;
/* operations on this area */
struct vm_operations_struct * vm_ops;
struct file * vm_file; /* File we map to (can be NULL). */
} ;
标签:linux操作系统 根据 移位 start bsp sort detail 理解 并且
原文地址:http://www.cnblogs.com/feng9exe/p/7281297.html