Linux加载一个应用程序的过程总结

Linux加载应用进程的过程主要涉及以下几个关键步骤:

  1. fork()系统调用 :当一个可执行文件需要被加载时,操作系统首先通过bash调用fork()系统调用创建一个新进程。这个新进程是父进程的一个副本,包括代码段、数据段和堆栈等。

  2. execve()系统调用 :新进程创建后,会调用execve()系统调用来执行指定的ELF文件。execve()是一个内核级系统调用,它负责将新的可执行文件加载到内存中,并替换当前进程的地址空间。

  3. 参数检查与复制 :在execve()之后,内核会进行一些参数的检查和复制工作,以确保新进程能够正确运行。这包括将用户空间的文件名指针拷贝到内核中,以及准备其他必要的资源。

  4. 文件处理与格式识别 :接下来,内核会调用do_execve()函数开始真正的文件处理过程。在这个过程中,内核会根据ELF文件的格式(如魔数)来确定文件的类型,并调用相应的装载处理方式。对于ELF文件,其装载处理过程称为load_elf_binary()

  5. 内存映射与初始化:在确定了文件类型后,内核会对ELF文件进行映射,包括代码、数据和只读数据等部分。同时,内核还会初始化ELF进程环境,设置系统调用的返回地址为ELF可执行文件的入口点。

  6. 执行新程序 :当所有准备工作完成后,内核会将系统调用的返回地址修改为被加载的ELF程序的入口地址。这样,当sys_execve()系统调用从内核态返回到用户态时,eip寄存器就直接跳转到ELF程序的入口地址,新的程序开始执行。

总的来说,Linux加载应用进程的过程是一个复杂而精细的操作,涉及多个系统调用和内核函数的协作。这个过程确保了新进程能够正确地继承父进程的资源,并在独立的环境中运行新的可执行文件。

参考:进程管理(七)--进程的加载_进程加载的是什么-CSDN博客

相关推荐
小白银子7 分钟前
零基础从头教学Linux(Day 43)
linux·运维·服务器·nginx
The star"'16 分钟前
Nginx 服务器
运维·服务器·nginx
慌糖26 分钟前
自动化接口框架搭建分享-pytest第三部分
运维·自动化·pytest
迎風吹頭髮38 分钟前
UNIX下C语言编程与实践12-lint 工具使用指南:C 语言源代码语法与逻辑错误检查实战
服务器·c语言·unix
迎風吹頭髮39 分钟前
UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例
服务器·c语言·unix
迎風吹頭髮1 小时前
UNIX下C语言编程与实践5-C 语言编译器 cc(gcc/xlc)核心参数解析:-I、-L、-D 的使用场景与实例
服务器·c语言·unix
weixin_307779131 小时前
通过AWS IAM Policy Simulator进行权限验证和模拟测试
运维·系统安全·aws·安全架构·安全性测试
安审若无1 小时前
PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接
linux·运维·数据库
9毫米的幻想1 小时前
【Linux系统】—— 环境变量
linux·服务器·c语言·c++
失因2 小时前
Docker 容器与镜像
java·运维·spring cloud·docker·容器