资源描述:
《操作系统课程设计报告--Linux系统存储器管理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、计算机操作系统课程设计Linux系统存储器管理专业计算机科学与技术学号4090111姓名窦威提交日期2012-1-6成绩电子信息系1.设计目的及要求1.1熟悉linux操作系统的存储管理方式1.2对Linux的存储管理做全面的分析2.设计内容及步骤2.1内核空间和用户空间进程运行时能访问的存储空间只是它的虚拟内存空间。对当前该进程而言只有属于它的虚拟内存是可见的。在进程的虚拟内存包含着进程本身的程序代码和数据。进程在运行中还必须得到操作系统的支持。进程的虚拟内存中还包含着操作系统内核。Linux把进程的虚拟内存
2、分成两部分,内核区和用户区。操作系统内核的代码和数据等被映射到内核区。进程的可执行映像(代码和数据)映射到虚拟内存的用户区。进程虚拟内存的内核区的访问权限设置为0级,用户区为3级。内核访问虚存的权限为0级,而进程的访问权限为3级进程虚存空间的划分在系统初始化时由GDT确定,它定义在/arch/i386/kernel/head.S文件中:.quad0x0000000000000000/*NULL描述符*/.quad0x0000000000000000/*未使用*/.quad0xc0c39a000000ffff/*
3、内核代码段1GB在0xc0000000*/.quad0xc0c392000000ffff/*内核数据段1GB在0xc0000000*/.quad0x00cbfa000000ffff/*用户代码段3GB在0x00000000*/.quad0x00cbf2000000ffff/*用户数据段3GB在0x00000000*/.quad0x0000000000000000/*未使用*/.quad0x0000000000000000/*未使用*/.fill2*NR_TASKS,8,0/*各个进程LDT描述符和TSS描述符的
4、空间*/Linux的存储管理主要是管理进程虚拟内存的用户区。进程虚拟内存的用户区分成代码段、数据段、堆栈以及进程运行的环境变量、参数传递区域等。每一个进程,用一个mm_struct结构体来定义它的虚存用户区。mm_struct结构体首地址在任务结构体task_struct成员项mm中:structmm_struct*mm;mm_struct结构定义在/include/linux/schedul.h中。structmm_struct{intcount;pgd_t*pgd;unsignedlongcontext;u
5、nsignedlongstart_code,end_code,start_data,end_data;unsignedlongstart_brk,brk,start_stack,start_mmap;unsignedlongarg_start,arg_end,env_start,env_end;unsignedlongrss,total_vm,locked_vm;unsignedlongdef_flags;structvm_area_struct*mmap;structvm_area_struct*mmap_a
6、vl;structsemaphoremmap_sem;};pgd为指向进程页目录表的指针。context是进程上下文的地址。start_code,end_code,start_data,end_data分别为代码段、数据段的首地址和终止地址。start_stack是进程堆栈的首地址。arg_start,arg_end,env_start,env_end分别为参数区、环境变量区的首地址和终止地址。2.2进程的虚存区域一个虚存区域是虚存空间中一个连续的区域,在这个区域中的信息具有相同的操作和访问特性。每个虚拟区域用
7、一个vm_area_struct结构体进行描述.它定义在/include/linux/mm.h中:structvm_area_struct{structmm_struct*vm_mm;unsignedlongvm_start;unsignedlongvm_end;pgprot_tvm_page_prot;unsignedshortvm_flags;shortvm_avl_height;structvm_area_struct*vm_avl_left;structvm_area_struct*vm_avl_rig
8、ht;structvm_area_struct*vm_next;structvm_area_struct*vm_next_share;structvm_area_struct*vm_prev_share;structvm_operations_struct*vm_ops;unsignedlongvm_offset;structinode*vm_inode;unsignedlongvm_