分享
分享赚钱 收藏 举报 版权申诉 / 24

类型Linux存储管理.ppt

  • 上传人:hyngb9260
  • 文档编号:7802379
  • 上传时间:2019-05-26
  • 格式:PPT
  • 页数:24
  • 大小:426KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Linux存储管理.ppt
    资源描述:

    1、Linux memory management,i386保护模式的分段与分页 Linux分页 线性地址空间分布 用户地址空间 内核地址空间 空闲物理内存管理 内核物理内存分配接口 共享存储,Intel x86保护模式的地址映射,段选择子16bits,段内偏移32bits,页内偏移12bits,物理地址32bits,页目录索引10bits,页表索引10bits,逻辑地址,线性地址,物理地址,GDT、LDT,pgd、pte,Intel x86的分段,描述符索引13bits,GDT/LDT 1bit,段选择子,访问特权级 2bits,段内偏移32bits,段基地址32bits,段描述符8bytes,

    2、+,线性地址32bits,段界限20bits,GDT,Linux在i386上的分页,线性地址,物理地址32bits,pmd_t * dir,+,页帧首地址 20bits PAGE_SHIFT,页内偏移12bits,页目录索引10bits,页表索引10bits,#define PMD_SHIFT 22 #define PTRS_PER_PMD 1 #define pmd_index(address) (address) PMD_SHIFT) & (PTRS_PER_PMD-1),pgd,pte,存在位,读写位,用户态/核心态访问位,表示是否采用写透方式,表示是否启用高速缓存,访问位,已写标志位,

    3、页大小,4K(0)或4M(1),只适用于页目录表项,页目录表项和页表项,Linux的线性地址空间分配,4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区 线性地址从0x00000000到0xBFFFFFFF的3G为用户和内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问 因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程的页目录项,因此页目录项不一致的情况是有的,Linux的线性地址空间分配,Linux的线性地址空间分布,

    4、Memory mapped region:File-mappingShared libraries,Linux的用户地址空间分布,例: #include int z = 0; /*进程的数据段中*/ int main() int *a = 0; /*进程的用户栈中*/int pid = getpid();if (pid = fork() /*父进程执行这里的代码*/a = (int *) malloc(100*sizeof(int);/*父进程的堆空间,runtime data*/z = pid; printf(“z1 = %dn”, z); else /*子进程执行的代码*/a = ,利用/

    5、proc查看进程的用户地址空间,文件映射举例,#include #include #include #include #include /* mmap.c - a program that uses mmap to copy itself to stdout */ int main() struct stat stat;int i, fd, size;char *bufp;/* open the file ,用户地址空间管理虚存段VMA,Linux的用户地址空间分布,进程描述符中的struct mm_struct *mm用来管理已分配给该进程的线性地址空间 每一个连续的线性地址区间由一个vm_

    6、area_struct管理,简称vma mm中的vma按地址排序由线性链表连接起来,当vma的数量相当大的时候启用avl树,与线性链表同时管理vma以提高访问效率 随着vma的动态改变,vma之间存在归并和拆分等操作 分配vma并不立即分配页帧,物理映射区最大为896M,如果实际物理内存不足896M,则该区与实际物理内存大小相等 两个隔离区的作用是防止越界造成的致命损害,Linux的内核地址空间分布,物理区,虚存区,816M 隔离区,8K隔 离区,高端映射区,固定映射区,保留区,线性地址0xC0000000,Linux的物理内存映射,一般情况下,对物理内存的访问可通过预映射机制方便的实现,Li

    7、nux保留了128M的虚拟内存映射区,因此最多可以有1G-128M=896M的物理内存直接映射到0xC0000000开始的一段内核空间中 当物理内存大于896M时,超过物理区的那部分内存称为高端内存,内核在存取高端内存时必须将它们映射到高端页面映射区,长度为4M的高端内存映射区正好占用1帧页表所表示的物理内存总量,它可以缓冲1024个高端页面的映射,0X001000(4K) swapper_pg_dir 核心态访问空间的页目录0X002000(8K) pg00X003000(12K) bad_pages0X004000(16K) bad_pg_table0X005000(20K) floppy

    8、_track_buffer0X006000(24K) kernel_code+textFREE0X0A0000(640K RESERVED0X100000(1M) pg_tables(4K)swap_cache_memmem_mapbitmapFREE,0X000000(0K) Empty_Zero_Page 由mem_init初始化,初始化后的物理内存分布,物理页管理(mem_map表),typedef struct page /* 物理页描述字 */struct page *next, *prev; /* 由于搜索算法的约定,这两项必须首先定义 */struct inode *inode;

    9、 /* 若该页帧的内容是文件,则inode和offsetunsigned long offset; /* 指出文件的inode和偏移位置 */struct page *next_hash;atomic_t count; /* 访问此页帧的进程记数,大于1表示由多个进程共享 */unsigned flags; /* atomic flags, some possibly updated asynchronously */unsigned dirty:16, /* 页帧修改标志 */age:8; /* 页帧的年龄,越小越先换出 */struct wait_queue *wait;struct pa

    10、ge *prev_hash;struct buffer_head * buffers; /* 若该页帧作为缓冲区,则指示地址 */unsigned long swap_unlock_entry;unsigned long map_nr; /* 页帧在mem_map表中的下标,page-map_nr = page - mem_map */ mem_map_t;mem_map_t * mem_map = NULL; /* 页帧描述表的首地址 */ mem_map_t大小:64字节,故1M的内存需要1M/64=16K=4pages的空间存放描述字,空闲物理页管理,bitmap表 在物理内存低端,紧跟

    11、mem_map表的bitmap表以位示图方式记录了所有物理内存的空闲状况。与mem_map一样,bitmap在系统初始化时由free_area_init()函数创建(mm/page_alloc.c)。与一般性位图不同,bitmap表分割成NR_MEM_LISTS组。 buddy算法将空闲内存管理为一对对的伙伴;(2k)页面大小,伙伴算法与空闲物理页位图,bitmaps:位图,标识2k大小的内存块对(一对伙伴)的状态: 0:都空闲或都忙;如果都空闲,在它们作为一块更大的空闲块出现在下一个free_area的bitmaps中。 1:其中一块忙,一块空闲。,内存分配的三种内核接口,_get_free

    12、_pages:从buddy system中申请大小为2k个page的连续的物理页帧,分配内核空间的物理映射区中的一段连续的线性地址 kmalloc(kfree):从slab cache中申请连续的物理内存,通常用于专用对象 vmalloc(vfree):申请线性地址连续的内存空间,分配内核空间的虚拟内存映射区中的一段连续的线性地址,而实际对应的物理地址可以是不连续的,为检测越界,vmalloc的区域之间是有空洞的,且为保证效率,页面不会被swap out,共享存储,linux的共享存储沿用了SYSV IPC机制。进程利用共享存储进行通讯时,先向内核申请一个共享存储段。成功后把它添加(attac

    13、h)到自己的地址空间,然后象使用普通存储器一样使用它。 共享存储限制:一个共享存储段的大小限制:SHMMAX:4M, SHMMIN:1byte(实际是一个page大),系统中允许的共享存储段的个数限制:SHMMNI:4096。系统中允许的共享存储段占总页面数:SHMALL:2M个页面这些参数可以由超级用户修改,如: echo 2048 /proc/sys/kernel/shmmni共享存储管理系统调用:shmget,shmat,shmdt,shmctl,shm_server.c #include #include #include #include #define SHMSZ 27 main(

    14、)char c; int shmid; key_t key; char *shm, *s; key = 5678; if (shmid = shmget(key,SHMSZ,IPC_CREAT|0666) 0) perror(“shmget“); exit(1); if (shm = shmat(shmid,NULL,0)=(char *)-1) perror(“shmat“); exit(1); s = shm; for (c = a; c = z; c+)*s+ = c; *s = NULL; while (*shm != *)sleep(1);exit(0);,Example: IPC

    15、using shared memory,shm_client.c /* shm-client - client program to demonstrate shared memory. */ #include #include #include #include #define SHMSZ 27 main() int shmid;key_t key;char *shm, *s;key = 5678; if (shmid = shmget(key, SHMSZ, 0666) 0) perror(“shmget“); exit(1); if (shm = shmat(shmid, NULL, 0) = (char *) -1) perror(“shmat“); exit(1); for (s = shm; *s != NULL; s+)putchar(*s); putchar(n); *shm = *;exit(0); ,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Linux存储管理.ppt
    链接地址:https://www.docduoduo.com/p-7802379.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开