4月「掘金·日新计划」第4天
一、概念
1.1 什么是程序,什么是进程
-
程序是静态的,编译完的文件就是程序
-
进程是程序的一次执行
程序跑起来了
1.2 如何查看系统中有哪些进程
- ps指令 -aux,使用grep过滤
- top指令 类似任务管理器
1.3 什么是进程标识符
-
非负整数ID,叫pid
-
getpid获取进程号 getppid获取父进程号
-
进程0,交换进程swapper,idle进程,空闲进程,死循环,进程调度 进程1,init进程,kernel_init函数 进程2,守护进程,kthreadd函数,守护内核,保证内核正常工作
-
init进程:
- 打开控制台文件/dev/console,得到3文件描述符,就是012,后面的所有进程都有这3描述符
- 内核态下进程1,挂载根文件系统
- 用户态下进程1,执行用户态的init程序
1.4 什么叫父进程,子进程
- a创建b进程,a就是父进程
- init进程是所有进程的父进程 所以都默认有,文件描述符012
1.5 c程序存储空间如何分配
-
进程运行起来后,系统会分配一段内存给进程。从低地址到高地址分配:正文,初始化数据,未初始化数据,堆,栈,命令行参数和环境变量
fork后:正文共享,数据写时拷贝
-
分别分配:
- 代码段:正文(main里除了变量的代码,只读)
- 数据段:全局变量,非0初始化数据,main函数里在栈
- bss段,ZI段:全局变量,未初始化,0初始化
- 堆:malloc申请的空间
- 栈:调用子函数使用的空间,包括变量(局部)
-
从源码到可执行程序的步骤:预编译、编译、链接、strip(把可执行程序中的符号信息给拿掉)
-
给段命名就是为了在链接脚本中用段名来让段站在合适的位置
代码段(.text),数据段(.data),bss段(.bss)