资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划linux,存储管理,报告(共5篇)操作系统实验报告院别:XXXXXX班级:XXXXXX学号:XXXXXX姓名:稻草人实验题目:内存管理实验一、实验目的1、通过本次试验体会操作系统中内存的分配模式;2、掌握内存分配的方法;3、学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;4、掌握内存回收过程及实现方法;5、学会进行内存的申请释放和管理;二、实验内容附源代码:/*宏定义*/#include#include#include#definePROCESS_NAME_LEN32/*进程名称的最大长度*/#defineMIN_SLICE10/*最小碎片的大小*/#defineDEFAULT_MEM_SIZE1024/*默认内存的大小*/#defineDEFAULT_MEM_START0/*默认内存的起始位置*/*内存分配算法*/#defineMA_FF1#defineMA_BF2#defineMA_WF3intmem_size=DEFAULT_MEM_SIZE;/*内存大小*/intma_algorithm=MA_FF;/*当前分配算法*/intflag=0;intalgorithm;/*设置内存大小标志*/staticintpid=0;/*初始pid*/*描述每一个空闲块的数据结构*/structfree_block_typeintsize;intstart_addr;structfree_block_type*next;/*指向内存中空闲块链表的首指针*/structfree_block_type*free_block;/*每个进程分配到的内存块的描述*/structallocated_blockintpid;intsize;intstart_addr;charprocess_namePROCESS_NAME_LEN;structallocated_block*next;/*进程分配内存块链表的首指针*/structallocated_block*allocated_block_head=NULL;structallocated_block*find_process(intid)structallocated_block*p;voidswap(int*p,int*q)inttemp;temp=*p;*p=*q;*q=temp;return;p=allocated_block_head;while(p!=NULL)if(p-pid=id)returnNULL;returnp;voiddo_exit()exit(0);/*初始化空闲块,默认为一块,可以指定大小及起始地址*/structfree_block_type*init_free_block(intmem_size)structfree_block_type*fb;fb=(structfree_block_type*)malloc(sizeof(structfree_block_type);if(fb=NULL)printf(Nomemn);returnNULL;fb-size=mem_size;fb-start_addr=DEFAULT_MEM_START;fb-next=NULL;returnfb;/*显示菜单*/display_menu()printf(n);printf(1-Setmemorysize(default=%d)n,DEFAULT_MEM_SIZE);printf(2-Selectmemoryallocationalgorithmn);printf(3-Newprocessn);printf(4-Terminateaprocessn);printf(5-Displaymemoryusagen);printf(0-Exitn);/*设置内存的大小*/set_mem_size()intsize;if(flag!=0)/防止重复设置printf(Cannotsetmemorysizeagainn);return0;printf(Totalmemorysize=);scanf(%d,&size);if(size0)mem_size=size;free_block-size=mem_size;flag=1;return1;/*按FF算法重新整理内存空闲块链表*/rearrange_FF()structfree_block_type*tmp,*work;printf(RearrangefreeblocksforFFn);tmp=free_block;while(tmp!=NULL)work=tmp-next;while(work!=NULL)if(work-start_addrstart_addr)/*地址递增*/swap(&work-start_addr,&tmp-start_addr);swap(&work-size,&tmp-size);work=work-next;tmp=tmp-next;/*按BF最佳适应算法重新整理内存空闲块链表*/rearrange_BF()structfree_block_type*tmp,*work;printf(RearrangefreeblocksforBFn);tmp=free_block;while(tmp!=NULL)work=tmp-next;while(work!=NULL)if(work-sizetmp-size)/*地址递增*/swap(&work-start_addr,&tmp-start_addr);swap(&work-size,&tmp-size);work=work-next;tmp=tmp-next;鲁东大学信息与电气工程学院XXXX学年第二学期操作系统课程论文课程号:2XX81任课教师田生文成绩正文摘要:Linux是一种自由和开放源码的类Unix操作系统。Linux实现了基于虚拟页式存储管理的虚拟存储,在i386结构的机器上,每个用户任务的虚拟地址空间都可达到4GB。Linux的存储管理使用了三层页表来处理逻辑地址到物理地址的转换,分别是PGD、PMD和PT。Linux将存储管理分为物理内存管理、内核内存管理、虚拟内存管理、内核虚拟内存管理和用户级内存管理。正文:1物理内存管理:物理内存管理以页为单位,记录、分配和回收物理内存,物理内存管理使用Buddy算法。空闲物理内存单元的管理Linux物理内存管理使用Buddy算法实现。其物理页面的信息由mem_map_t结构描述,系统中的所有物理页面由一个mem_map_t类型的数组mem_map来表示。该数组的每一项都代表物理内存的一个页面,该叔祖的大小由实际的物理内存大小决定。mem_map_t结构的定义参考linuxincludelinuxLinux内核定义了free_area数组记录系统中的当前空闲物理内存单元。每一项都是一个free_area_struct结构,描述了一组由相同大小的空闲物理页块构成的双向链表。另外,Linux使用全局变量_free_pages来跟踪系统中的空闲物理内存页面的总数,该变量的值等于free_area数组中空闲页的总数。使用该变量,Linux可以知道系统物理内存的使用状况,当空闲的物理内存页面树立低于某个指标时,Linux将唤醒内核交换守护进程kswapd,让其尽可能回收一些物理内存。物理页的分配所有物理内存的分配和释放必须针对连续的物理内存。因此,Buddy酸法将内存划分成2的i次方页大小的连续的页块,每一组有相同的i值。并且将同一组的空闲页块链接成一个双向链表然后将所有链表的头节点组成一个数组。分配空间时,首先要在页块大小相应的空闲页块链中找到一块空间来返回给调用者,如果在这个链里没有找到合适的空间分配,则到free_area数组中的下一个元素的空闲链中去查找,直至找到能够分配的空间。物理页的释放内存管理系统,在分配空间时将大页块都划分成了小页块,这使得系统中的页块都越变越小,这对于分配大块内存是不利的。为了避免产生大量的内存碎片,内存管理系统在物理页释放时,应该斤可能地将小页块合并成大页块。物理内存管理评价为了内存对齐,Buddy算法往往会分配一些多余的内存空间给用户,这对提供内存利用率是不利的;但是Buddy算法避免了内存碎片的产生,避免了内存紧抽的开销,mm_struct是描述进程虚拟地址空间的最高层的数据结构,一个mm_struct就代表一个独立进程的虚拟内存空间。该结构中记录了实现任务管理的进程模型所需要的内存管理相关的全部信息,如:?进程的也目录的位置进程的代码、数据、堆栈、堆、环境变量、入口参数等在虚拟地址空间中的存效率很高。2内核内存管理:内核内存管理主要负责为各种内核数据结构分配空间,其大小一般较小。如果使用以页为单位的物理内存管理则浪费较大,为此Linux专门提供了使用Slab算法的内核内存管理。3虚拟内存管理:在物理内存管理的基础上,使用请求调页机制和交换机制,为系统中的每个进程都提供高达4GB的虚拟内存空间。页表的管理一个页表入口标识一个物理页,它包含了物理页的大量信息,如该页是否有效、该页的读写权限等。最重要的是页表入口给出了物理页的页框号,根据这个物理页框号就可以找到这个物理页的实际起始物理地址。为了操作系统的可移植性,Linux使用三级页表来存储虚拟地址转换为物理地址映射关系。一级页表只占用一个页,其中存放了二级页表的入口指针,记为PGD;二级页表中存放了三级页表的入口的指针,记为pmd;在三级页表中每个项都是一个页表入口。在Linux的X86版本中,只使用了两极页表,即第一级和第三级,在Intel系列CPU中,一个物理页面大小是4KB,而每个页表项大小是4字节。因此,每个物理页面可以包含1024个页表项,则在X86平台上,每个进程的地址空间为1024*1024*4KB=4GB大小。虚拟存储空间的管理在Linux系统中,主要使用了3个层次的数据结构page、mm_struct和vm_area_struct来表示进程的虚拟地址空间。最底层的page结构描述了一个物理页桢及其页内消息的相
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号