Linux下的进程2——进程的内存映像,进程PCB,task_struct详解

本文详细介绍了Linux下进程的内存映像,包括程序转化为进程的步骤和内存布局。进程的内存布局分为文本段、数据段、堆和栈。此外,还深入解析了进程控制块(PCB),阐述了PCB中包含的内容,如进程标识符、处理机状态信息、调度信息和控制信息,并具体解释了Linux系统中task_struct结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的内存映像

  Linux下C程序生成主要由四个步骤组成: 

  • 预编译
  • 编译
  • 汇编
  • 链接

      编译器gcc经过预编译,编译,汇编三个步骤将源程序文件转换成目标文件。
      如果程序有多个目标文件或程序中使用了库函数,则编译器还需要将所有目标文件及所需的库文件链接起来,最后生成可执行程序。
      当程序执行时,操作系统可将可执行程序复制到内存中.
      程序转为进程通常需要以下步骤:

  • 内核将程序读入内存,为程序分配内存空间

  • 内核为该进程保存PID及相应的状态信息,把进城放到运行队列中等待执行。程序转化为进城后就可被操作系统的调度程序执行了。
      进程的内存映像是指内核在内存中如何存放可执行程序文件。
      在将程序转化为进程的过程中,操作系统将可执行程序从硬盘复制到内存中,其布局如下:
      这里写图片描述

      进程映像的位置依赖于使用的内存管理方案。
    可执行程序与进程内存映像的不同之处在于:

  • 可执行程序位于磁盘中而内存映像位于内存

  • 可执行程序没有堆栈,因为程序被加载到内存中才会分配堆栈
  • 可执行程序虽然也有未初始化数据段但他并不被存储在位于硬盘中的可执行文件中。
  • 可执行程序是静态的,不变的,而内存映像随着程序的执行是在动态变化的,比如数据段随着程序的执行要存储新的变量值,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值