linux内核完全注释课件第十章.ppt

linux内核完全注释课件第十章.ppt

ID:59416609

大小:186.50 KB

页数:40页

时间:2020-09-19

linux内核完全注释课件第十章.ppt_第1页
linux内核完全注释课件第十章.ppt_第2页
linux内核完全注释课件第十章.ppt_第3页
linux内核完全注释课件第十章.ppt_第4页
linux内核完全注释课件第十章.ppt_第5页
资源描述:

《linux内核完全注释课件第十章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux操作系统内核分析湘潭大学信息工程学院内存布局内核模块高速缓存ram主内存main_memory_startmemory_end在main.c中(P65第121行)main_memory_start的最小值可能是1Mmemory_end的最大值可能是16Mbuffer_memory_end主内存界限定义在memory.c(P335第43行)#defineLOW_MEM0x100000#definePAGING_MEMORY(15*1024*1024)#definePAGING_PAGES(

2、PAGING_MEMORY>>12)物理页面要管理物理页面,必须知道以下属性是否被分配被多少个对象共同使用存取权限(可写、只读)是否被访问过是否被修改过硬件支持,参见书P330图10-4内存管理数据结构记录下物理页面的被引用次数。0该页面还没有被分配分配次数=n该页面被分配,被n个进程使用内存管理数据结构在memory.c(P335第57行)staticunsignedcharmem_map[PAGING_PAGES]={0,};内核模块第0页1M第1页第2页第3页mem_map数组的每一个数组元

3、素记录每一页的分配次数物理页面开始地址与映射数组下标从物理页面开始地址到数组下标#defineMAP_NR(addr)(((addr)-LOW_MEM)>>12)//P335第46行从数组下标到物理页面开始地址数组下标<<12+LOW_MEM内存管理模块的接口内存管理模块中断/异常管理模块内核其它模块进程管理模块get_free_pagefree_pagecopy_page_tablesfree_page_tablespage_fault初始化模块mem_init内存管理初始化内核模块1M0000

4、00000000mem_map数组高速缓冲虚拟盘主内存10010010010010010010000000内存管理初始化定义在memory.c(P344第399行)voidmem_init(longstart_mem,longend_mem)参数:start_mem——主内存的开始位置end_mem——主内存的结束位置voidmem_init(longstart_mem,longend_mem){inti;HIGH_MEMORY=end_mem;for(i=0;i

5、)mem_map[i]=USED;i=MAP_NR(start_mem);end_mem-=start_mem;end_mem>>=12;while(end_mem-->0)mem_map[i++]=0;}全局变量主内存开始页面对应的数组下标分配物理页面unsignedlongget_free_page(void)定义在memory.c(P335第63行)作用:分配一个物理页面返回:可以分配一个物理页面则返回物理页面的开始地址,否则返回0分配物理页面算法unsignedlongget_free_p

6、age(void){registerunsignedlong__resasm("ax");__asm__("std;repne;scasbt""jne1ft""movb$1,1(%%edi)t""sall$12,%%ecxt""addl%2,%%ecxt""movl%%ecx,%%edxt""movl$1024,%%ecxt""leal4092(%%edx),%%edit""rep;stoslt""movl%%edx,%%eax""1:":

7、"=a"(__res):"0"(0),"i"(LOW_MEM),"c"(PAGING_PAGES),"D"(mem_map+PAGING_PAGES-1));return__res;}scasb把al中的值与edi所指向的内存单元的值进行比较,比较完后根据DF标志把edi的值加1(DF=0)或减1(DF=1)010000mem_mapediedi1回收物理页面voidfree_page(unsignedlongaddr)定义在memory.c(P335第89行)作用:回收一个物理页面参数:addr

8、——要回收的物理页面的开始地址voidfree_page(unsignedlongaddr){if(addr=HIGH_MEMORY)panic("tryingtofreenonexistentpage");addr-=LOW_MEM;addr>>=12;if(mem_map[addr]--)return;mem_map[addr]=0;panic("tryingtofreefreepage");}回收页面并不把页面清0,清0工作放在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。