进程地址空间

目录

一、进程的地址空间有多大?

二、在PCB中是怎么描述进程地址空间的?(进程的虚拟地址空间布局)


一进程的地址空间大小

        ——32位机器为4GB,64位机器为64GB或1TB:

        进程的地址空间随体系结构设计的进步而不断发生变化:早期机器为32位,采用32位地址线寻址,对应设计进程的虚拟地址为【0,2^32】,对应16进制寻址范围【0x0,0xffffffff】,也即经典的4GB;目前机器为64位字长,机器寻址空间上升到【0,2^64】,但进程的地址却没有上升64位,这个空间过于巨大了,目前主流的是采用36位或40位寻址模式,虚拟地址为【0,2^36】、【0,2^40】,对应16进制为【0x0,0xfffffffff】、【0x0,0xfffffffffff】,也即64GB和1TB

——进程虚拟地址空间布局

        ——PCB中设置了内存描述符,用以描述进程整体的虚拟地址空间。内存描述符包含多个子域,共同描述了进程的虚拟地址空间。关键的为以下四种:

  • pgd(指向进程对应的虚拟页表),多级页表时页表呈链式结构
  • mmap(指向不同类型的线性虚拟区链表结构的表头),虚拟区是连续的,虚拟区少时采用这种简单结构
  • mm_rb(指向不同类型的线性虚拟区红黑树结构的根节点),虚拟区多时采用这种结构,便于查找
  • [xxx_start,xxx_end](指向代码、堆、栈等区域起点、终点),维护代码段、数据段、堆区、栈区、参数变量区

        以4GB大小为例,整体上,进程地址空间被划分为1GB的内核空间和3GB的用户空间,用户空间包含有不同类型的虚拟区,由vm_area_struct结构体描述:自顶向下依次为环境变量区、命令行参数区、栈(向下生长)、共享区、堆(向上生长)、未初始化数据段、初始化数据段、代码段(包含字符常量和代码);内核空间用于存放内核代码与数据,由vm_struct结构体描述,常涉及的结构为内核栈和系统调用内核代码。

        为直观示意,以linux系统为例,系统进程描述符为task_struct,内存描述符为task_struct,按照上述描述组织而成的结构如下图所示

                附图链接:进程地址空间结构https://kdocs.cn/l/conmSVVybvtz 

        含作者水印,需要请联系~

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值