linux存储器管理

linux存储器管理

ID:40559906

大小:416.00 KB

页数:36页

时间:2019-08-04

linux存储器管理_第1页
linux存储器管理_第2页
linux存储器管理_第3页
linux存储器管理_第4页
linux存储器管理_第5页
资源描述:

《linux存储器管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux存储器管理一、linux存储器管理概述Linux的设计目标是支持绝大多数主流的CPU,而很多CPU使用的是RISC体系结构,并没有分段机制(采用虚拟分页存储管理方法),所以2.6版内核只有在80x86结构下才使用分段,而且只是象征性地使用了一下:所有Linux进程仅仅使用四种段来对指令和数据寻址。运行在用户态的进程使用所谓的用户代码段和用户数据段。类似地,运行在内核态的所有Linux进程都使用一对相同的段对指令和数据寻址:它们分别叫做内核代码段和内核数据段。下表显示了这四个重要段的段描述符字段的值:段BaseLimitDPL用户代码段0x000000000xf

2、ffff3用户数据段0x000000000xfffff3内核代码段0x000000000xfffff0内核数据段0x000000000xfffff0相应的段描述符由宏__USER_CS,__USER_DS,__KERNEL_CS,和__KERNEL_DS分别定义。例如,为了对内核代码段寻址,内核只需要把__KERNEL_CS宏产生的值装进cs段寄存器即可。注意,与段相关的线性地址(段内地址)从0开始,达到232-1的寻址限长。这就意味着在用户态或内核态下的所有进程可以使用相同的逻辑地址。所有段基址都是0x00000000,这可以得出另一个重要结论,那就是在Linux下逻

3、辑地址与线性地址是一致的,即逻辑地址的偏移量字段的值与相应的线性地址的值总是一致的。如前所述,CPU的当前特权级(CPL)反映了进程是在用户态还是内核态,并由存放在cs寄存器中的段选择符的RPL字段指定。只要当前特权级被改变,一些段寄存器必须相应地更新。例如,当CPL=3时(用户态),ds寄存器必须含有用户数据段的段选择符,而当CPL=0时,ds寄存器必须含有内核数据段的段选择符。类似的情况也出现在ss寄存器中。当CPL为3时,它必须指向一个用户数据段中的用户栈,而当CPL为0时,它必须指向内核数据段中的一个内核栈。当从用户态切换到内核态时,Linux总是确保ss寄存器

4、装有内核数据段的段选择符。当对指向指令或者数据结构的指针进行保存时,内核根本不需要为其设置逻辑地址的段选择符,因为cs寄存器就含有当前的段选择符。例如,当内核调用一个函数时,它执行一条call汇编语言指令,该指令仅指定它逻辑地址的偏移量部分,而段选择符不用设置,其隐含在cs寄存器中了。因为“在内核态执行”的段只有一种,叫做代码段,由宏_KERNEL_CS定义,所以只要当CPU切换入内核态时足可以将__KERNEL_CS装载入cs。同样的道理也适用于指向内核数据结构的指针(隐含地使用ds寄存器)以及指向用户数据结构的指针(内核显式地使用es寄存器)。二、linux进程的虚

5、存区域361.内核空间和用户空间l进程运行时能访问的存储空间只是它的虚拟内存空间。对当前该进程而言只有属于它的虚拟内存是可见的。l在进程的虚拟内存包含着进程本身的程序代码和数据。l进程在运行中还必须得到操作系统的支持。进程的虚拟内存中还包含着操作系统内核。lLinux把进程的虚拟内存分成两部分,内核区和用户区。l操作系统内核的代码和数据等被映射到内核区。l进程的可执行映像(代码和数据)映射到虚拟内存的用户区。l进程虚拟内存的内核区的访问权限设置为0级,用户区为3级。l内核访问虚存的权限为0级,而进程的访问权限为3级Linux运行在x86时,进程的虚拟内存为4GB。进程虚

6、存空间的划分在系统初始化时由GDT确定,它定义在/arch/i386/kernel/head.S文件中:.quad0x0000000000000000/*NULL描述符*/.quad0x0000000000000000/*未使用*/.quad0xc0c39a000000ffff/*内核代码段1GB在0xc0000000*/.quad0xc0c392000000ffff/*内核数据段1GB在0xc0000000*/.quad0x00cbfa000000ffff/*用户代码段3GB在0x00000000*/.quad0x00cbf2000000ffff/*用户数据段3GB在

7、0x00000000*/.quad0x0000000000000000/*未使用*/.quad0x0000000000000000/*未使用*/.fill2*NR_TASKS,8,0/*各个进程LDT描述符和TSS描述符的空间*/Linux的存储管理主要是管理进程虚拟内存的用户区。进程虚拟内存的用户区分成代码段、数据段、堆栈以及进程运行的环境变量、参数传递区域等。2.linux描述进程虚拟地址空间的数据结构(1)进程虚拟地址空间mm_struct结构每一个进程,用一个mm_struct结构体来定义它的虚存用户区。该结构体首地址在进程的任务

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

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

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