欢迎来到天天文库
浏览记录
ID:48030026
大小:426.00 KB
页数:24页
时间:2020-01-13
《Linux存储管理Linux memory management.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linuxmemorymanagementi386保护模式的分段与分页Linux分页线性地址空间分布用户地址空间内核地址空间空闲物理内存管理内核物理内存分配接口共享存储Intelx86保护模式的地址映射段选择子16bits段内偏移32bits页内偏移12bits物理地址32bits页目录索引10bits页表索引10bits逻辑地址线性地址物理地址GDT、LDTpgd、pte……Intelx86的分段描述符索引13bitsGDT/LDT1bit段选择子访问特权级2bits段内偏移32bits段基地址32bits段描述符
2、8bytes+线性地址32bits段界限20bitsGDT…………Linux在i386上的分页线性地址物理地址32bitspmd_t*dir+页帧首地址20bits<>PMD_SHIFT)&(PTRS_PER_PMD-1))pgdpte存在位读写位用户态/核心态访问位表示是否采用写透方式
3、表示是否启用高速缓存访问位已写标志位页大小,4K(0)或4M(1),只适用于页目录表项页目录表项和页表项Linux的线性地址空间分配4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区线性地址从0x00000000到0xBFFFFFFF的3G为用户和内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程
4、的页目录项,因此页目录项不一致的情况是有的Linux的线性地址空间分配Linux的线性地址空间分布Memorymappedregion:File-mappingSharedlibrarieskernelcode/data/stackMemorymappedregionforsharedlibrariesruntimeheap(viamalloc)programtext(.text)initializeddata(.data)uninitializeddata(.bss)stackforbidden0%espproce
5、ssVMbrk0xc0physicalmemorysameforeachprocessprocess-specificdatastructures(pagetables,taskandmmstructs)kernelVM.data.textpdemand-zerodemand-zerolibc.so.data.textLinux的用户地址空间分布例:#includeintz=0;/*进程的数据段中*/intmain(){int*a=0;/*进程的用户栈中*/intpid=getpid();if(pi
6、d=fork()){/*父进程执行这里的代码*/a=(int*)malloc(100*sizeof(int));/*父进程的堆空间,runtimedata*/z=pid;printf(“z1=%d”,z);}else{/*子进程执行的代码*/a=&z;*a=pid;printf(“z2=%d”,z);}printf(“alldone,pid=%d”,pid);return1;}利用/proc查看进程的用户地址空间文件映射举例#include#include#in
7、clude#include#include/*mmap.c-aprogramthatusesmmaptocopyitselftostdout*/intmain(){structstatstat;inti,fd,size;char*bufp;/*openthefile&getitssize*/fd=open("./mmap.c",O_RDONLY);fstat(fd,&stat);size=stat.st_size;/*mapthefiletoanew
8、VMarea*/bufp=mmap(0,size,PROT_READ,MAP_PRIVATE,fd,0);/*writetheVMareatostdout*/write(1,bufp,size);}用户地址空间管理-虚存段VMALinux的用户地址空间分布进程描述符中的structmm_struct*mm用来管理已分配给该进程的线性地址空间每一
此文档下载收益归作者所有