程序的工作流程:高级语言 -> 编译器 -> 低级语言指令 -> 系统管理运行程序 <—> 硬件。
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. 运行时
图片来源:《Linux Performance and Tuning Guidelines》
2. 进程虚拟内存
用户进程一般不允许直接访问物理内存,系统通过虚拟内存方式管理进程内存。
图片来源 《深入理解计算机系统》8.2.3 私有地址空间
图片来源:《深入理解计算机系统》- 第九章 - 虚拟内存
3. 参考
- 《深入理解计算机系统》
- 《UNIX 环境高级编程》
- linux下同一个进程的不同线程之间如何共享虚拟地址空间?
- 【os浅尝】话说虚拟内存~