linux内核—从可执行文件到进程启动

本文介绍了Linux内核如何将可执行文件转化为进程启动的过程。内容涉及可执行文件的ELF格式、进程的虚拟地址空间、页表、进程创建时的内存布局以及进程执行时的页框分配和缺页中断处理。详细阐述了从创建task_struct到动态加载程序内容的全过程。

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

本文参考: https://www.jianshu.com/p/84d96a6385b0
https://zhuanlan.zhihu.com/p/148426554?from_voters_page=true
https://www.cnblogs.com/qscfyuk/p/11697816.html
https://www.cnblogs.com/icecri/p/4438351.html

一、概念

1.可执行文件
可执行文件属于elf文件,进程加载程序就是加载可执行文件,可执行文件包含很多section,如以代码段为代表的权限为可读可执行的段;以数据段和BSS段位代表的权限为可读可写的段;以只读数据段位代表的权限为只读的段,进程创建时所加载的程序信息即为这些部分。Linux中保存节的时候是以“页”为单位的(物理内存也同样是分页的,他们一一对应,一页一般是4096字节,也就是4k),不够一页的也要占用一页的空间;
ELF可执行文件默认加载到内存0x8048000这个位置,从这个位置开始加载。前面加载ELF可执行文件的头部信息,但因不同文件大小不同,程序的实际入口为:0x8048x00,图例为0x8048300,也就是说这个位置是程序的实际入口地址,即刚加载过可执行文件的进程(一个进程加载了新的可执行文件之后,开始执行的入口点),就是从这个地方开始执行

elf文件相关详见:https://www.cnblogs.com/qscfyuk/p/11697816.html

2.进程虚拟地址空间
每个进程都有自己4G(32位系统)的虚拟地址空间,实际上并不是每个进程在磁盘或内存上有这么大空间,而是进程的可寻址空间为4G(32位系统,寻址范围为0x0000 0000~0xFFFF FFFF)
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值