程序工作流程(Linux)

2020-04-29

程序的工作流程:高级语言 -> 编译器 -> 低级语言指令 -> 系统管理运行程序 <—> 硬件。


1. 程序工作流程

高级语言 -> 编译器 -> 低级语言指令 -> 系统加载运行


1.1. 编译加载


1.2. 启动退出

程序启动退出流程

图片来源: 《UNIX 环境高级编程》7.3.2 atexit函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// glibc - start.c
static void
start1 (ARG_DUMMIES argc, argp)
     DECL_DUMMIES
     int argc;
     char *argp;
{
  char **argv = &argp;

  /* The environment starts just after ARGV.  */
  __environ = &argv[argc + 1];

  /* If the first thing after ARGV is the arguments
     themselves, there is no environment.  */
  if ((char *) __environ == *argv)
    /* The environment is empty.  Make __environ
       point at ARGV[ARGC], which is NULL.  */
    --__environ;

  /* Do C library initializations.  */
  __libc_init (argc, argv, __environ);

  /* Call the user program.  */
  exit (main (argc, argv, __environ));
}

1.3. 运行时

程序运行流程


2. 进程虚拟内存

进程一般不允许直接访问物理内存,系统通过虚拟内存方式管理进程内存。

进程地址空间

图片来源 《深入理解计算机系统》8.2.3 私有地址空间

图片来源:《深入理解计算机系统》- 第九章 - 虚拟内存


3. 参考