内存管理之用户空间

本文详细介绍了Linux系统中32位平台的内存划分,其中用户空间占据3GB,由mm_struct和vm_area_struct结构描述。内存描述符用于整个用户空间的描述,而虚拟内存区域(VMA)则针对不同内存区间进行管理。进程用户空间在创建时涉及mm_struct、vm_area_struct及页目录的建立,而虚存映射通过exec()系统调用实现,包括共享和私有映射。VMA区域包括代码、数据、堆和栈,各自具有不同的权限和特性。
摘要由CSDN通过智能技术生成

32 位的平台上,线性地址空间为固定的 4GB,并且由于采用了保护机制,Linux内核将这 4GB 分为两部分,线性地址较高的 1GB(0xC0000000 到 0xFFFFFFFF )为共享的内核空间;而较低的 3GB 为每个进程的用户空间。由于每个进程都不能直接访问内核空间,而是通过系统调用间接进入内核,因此所有的进程都共享内核空间。而每个进程都拥有各自的用户空间,各个进程之间不能互相访问彼此的用户空间。

这里写图片描述

一个进程的用户地址空间主要由两个数据结构来描述。一个是 mm_struct 结构,它对进程的整个用户空间进行描述,简称内存描述符;另一个是 vm_area_struct 结构,它对用户空间中各个区间( 代码区、数据区等 )进行描述。

进程用户空间的描述

内存描述符

每个进程只有一个 mm_struct 结构,在每个进程的 task_struct 结构中,有一个指向该结构的指针。

struct mm_struct {
    struct vm_area_struct *mmap;        /* list of VMAs */
    struct rb_root mm_rb;

    pgd_t * pgd;            //页目录基址

    atomic_t mm_users;  //记录正在使用该地址空间的进程数目
    atomic_t mm_count;  //记录mm_struct 结构体被引用的次数。
//如果当前地址空间只被两个进程共享,那么该值为1,mm_users为2

    int map_count;      //虚拟内存区的个数

    spinlock_t page_table_lock;     /* Protects page tables and some counters */
    struct rw_semap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值