Linux采用存储管理方式,Linux存储管理-Read.DOC

Linux存储管理-Read

第四章 Linux存储管理

Linux操作系统采用了请求式分页虚拟存储管理方法。 系统为每个进程提供了4GB的虚拟内存空间。各个进程的虚拟内存彼此独立。

§4.1 进程虚存空间的管理

一.内核空间和用户空间

进程运行时能访问的存储空间只是它的虚拟内存空间。对当前该进程而言只有属于它的虚拟内存是可见的。

在进程的虚拟内存包含着进程本身的程序代码和数据。

进程在运行中还必须得到操作系统的支持。进程的虚拟内存中还包含着操作系统内核。

Linux把进程的虚拟内存分成两部分,内核区和用户区。

操作系统内核的代码和数据等被映射到内核区。

进程的可执行映像(代码和数据)映射到虚拟内存的用户区。

进程虚拟内存的内核区的访问权限设置为0级,用户区为3级。

内核访问虚存的权限为0级,而进程的访问权限为3级

Linux运行在x86时,进程的虚拟内存为4GB。

进程虚存空间的划分在系统初始化时由GDT确定,

它定义在/arch/i386/kernel/head.S文件中:

.quad 0x0000000000000000 /* NULL 描述符 */

.quad 0x0000000000000000 /* 未使用*/

.quad 0xc0c39a000000ffff /* 内核代码段1GB在0xc0000000 */

.quad 0xc0c392000000ffff /* 内核数据段1GB在0xc0000000 */

.quad 0x00cbfa000000ffff /* 用户代码段3GB在0*/

.quad 0x00cbf2000000ffff /* 用户数据段3GB在0*/

.quad 0x0000000000000000 /* 未使用 */

.quad 0x0000000000000000 /* 未使用 */

.fill 2*NR_TASKS,8,0/* 各个进程LDT描述符和TSS描述符的空间 */

Linux的存储管理主要是管理进程虚拟内存的用户区。

进程虚拟内存的用户区分成代码段、数据段、堆栈

以及进程运行的环境变量、参数传递区域等。

每一个进程,用一个mm_struct结构体来定义它的虚存用户区。

mm_struct结构体首地址在任务结构体task_struct成员项mm中:

struct mm_struct *mm;

mm_struct结构定义在/include/linux/schedul.h中。

struct mm_struct {

int count;

pgd_t * pgd;

unsigned long context;

unsigned long start_code, end_code, start_data, end_data;

unsigned long start_brk, brk, start_stack, start_mmap;

unsigned long arg_start, arg_end, env_start, env_end;

unsigned long rss, total_vm, locked_vm;

unsigned long def_flags;

struct vm_area_struct * mmap;

struct vm_area_struct * mmap_avl;

struct semaphore mmap_sem;

};

pgd 为指向进程页目录表的指针。

context 是进程上下文的地址。

start_code, end_code, start_data, end_data

分别为代码段、数据段的首地址和终止地址。

start_stack 是进程堆栈的首地址。

arg_start, arg_end, env_start, env_end

分别为参数区、环境变量区的首地址和终止地址。

二.进程的虚存区域

一个虚存区域是虚存空间中一个连续的区域,在这个区域中的信息具有相同的操作和访问特性。每个虚拟区域用一个vm_area_struct结构体进行描述.它定义在/include/linux/mm.h中:

struct vm_area_struct {

struct mm_struct * vm_mm;

unsigned long vm_start;

unsigned long vm_end;

pgprot_t vm_page_prot;

unsigned short vm_flags;

short vm_avl_height;

struct vm_area_struct * vm_avl_left;

stru

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值