欢迎来到天天文库
浏览记录
ID:21542533
大小:456.00 KB
页数:24页
时间:2018-10-19
《linux存储管理11011》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linuxmemorymanagementi386保护模式的分段与分页Linux分页线性地址空间分布用户地址空间内核地址空间空闲物理内存管理内核物理内存分配接口共享存储本资料由-大学生创业
2、创业
3、创业网http://www.chuangyw.com/提供资料在线代理
4、网页代理
5、代理网页
6、http://www.dailiav.com减肥药排行榜
7、淘宝最好的减肥药
8、什么减肥药效果最好
9、减肥瘦身药
10、http://pigproxy.cnIntelx86保护模式的地址映射段选择子16bits段内偏移32bits页内
11、偏移12bits物理地址32bits页目录索引10bits页表索引10bits逻辑地址线性地址物理地址GDT、LDTpgd、pte……Intelx86的分段描述符索引13bitsGDT/LDT1bit段选择子访问特权级2bits段内偏移32bits段基地址32bits段描述符8bytes+线性地址32bits段界限20bitsGDT…………Linux在i386上的分页线性地址物理地址32bitspmd_t*dir+页帧首地址20bits<12、索引10bits#definePMD_SHIFT22#definePTRS_PER_PMD1#definepmd_index(address)(((address)>>PMD_SHIFT)&(PTRS_PER_PMD-1))pgdpte存在位读写位用户态/核心态访问位表示是否采用写透方式表示是否启用高速缓存访问位已写标志位页大小,4K(0)或4M(1),只适用于页目录表项页目录表项和页表项Linux的线性地址空间分配4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面13、映射区、专用页面映射区和系统保留映射区线性地址从0x00000000到0xBFFFFFFF的3G为用户和内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程的页目录项,因此页目录项不一致的情况是有的Linux的线性地址空间分配Linux的线性地址空间分布Memorymappedregion:File-mappingSharedlibrarieskernelcode14、/data/stackMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstruc15、ts)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.textLinux的用户地址空间分布例:#includeintz=0;/*进程的数据段中*/intmain(){int*a=0;/*进程的用户栈中*/intpid=getpid();if(pid=fork()){/*父进程执行这里的代码*/a=(int*)malloc(100*sizeof(int));/*父进程的堆空间,runtimedata*/z=pid;printf(“16、z1=%d”,z);}else{/*子进程执行的代码*/a=&z;*a=pid;printf(“z2=%d”,z);}printf(“alldone,pid=%d”,pid);return1;}利用/proc查看进程的用户地址空间文件映射举例#include#include#include#include#include/*mmap.c-aprogramthatusesmmaptoc17、opyitselftostdout*/intmain(){structstatstat;inti,fd,size;char*bufp;/*openthefile&getitssize*/fd=open("./mmap.c",O_RDONLY);fstat(fd,&stat);size=stat.st_size;/*mapthefiletoanewVMarea*/bufp=mmap(0,size,PROT_READ,MAP_PR
12、索引10bits#definePMD_SHIFT22#definePTRS_PER_PMD1#definepmd_index(address)(((address)>>PMD_SHIFT)&(PTRS_PER_PMD-1))pgdpte存在位读写位用户态/核心态访问位表示是否采用写透方式表示是否启用高速缓存访问位已写标志位页大小,4K(0)或4M(1),只适用于页目录表项页目录表项和页表项Linux的线性地址空间分配4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面
13、映射区、专用页面映射区和系统保留映射区线性地址从0x00000000到0xBFFFFFFF的3G为用户和内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程的页目录项,因此页目录项不一致的情况是有的Linux的线性地址空间分配Linux的线性地址空间分布Memorymappedregion:File-mappingSharedlibrarieskernelcode
14、/data/stackMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espprocessVMbrk0xc0physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstruc
15、ts)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.textLinux的用户地址空间分布例:#includeintz=0;/*进程的数据段中*/intmain(){int*a=0;/*进程的用户栈中*/intpid=getpid();if(pid=fork()){/*父进程执行这里的代码*/a=(int*)malloc(100*sizeof(int));/*父进程的堆空间,runtimedata*/z=pid;printf(“
16、z1=%d”,z);}else{/*子进程执行的代码*/a=&z;*a=pid;printf(“z2=%d”,z);}printf(“alldone,pid=%d”,pid);return1;}利用/proc查看进程的用户地址空间文件映射举例#include#include#include#include#include/*mmap.c-aprogramthatusesmmaptoc
17、opyitselftostdout*/intmain(){structstatstat;inti,fd,size;char*bufp;/*openthefile&getitssize*/fd=open("./mmap.c",O_RDONLY);fstat(fd,&stat);size=stat.st_size;/*mapthefiletoanewVMarea*/bufp=mmap(0,size,PROT_READ,MAP_PR
此文档下载收益归作者所有