进程相关概念

75 阅读2分钟

4月「掘金·日新计划」第4天

一、概念

1.1 什么是程序,什么是进程

  1. 程序是静态的,编译完的文件就是程序

  2. 进程是程序的一次执行

    程序跑起来了

1.2 如何查看系统中有哪些进程

  1. ps指令 -aux,使用grep过滤
  2. top指令 类似任务管理器

1.3 什么是进程标识符

  1. 非负整数ID,叫pid

  2. getpid获取进程号 getppid获取父进程号

  3. 进程0,交换进程swapper,idle进程,空闲进程,死循环,进程调度 进程1,init进程,kernel_init函数 进程2,守护进程,kthreadd函数,守护内核,保证内核正常工作

  4. init进程:

    1. 打开控制台文件/dev/console,得到3文件描述符,就是012,后面的所有进程都有这3描述符
    2. 内核态下进程1,挂载根文件系统
    3. 用户态下进程1,执行用户态的init程序

1.4 什么叫父进程,子进程

  1. a创建b进程,a就是父进程
  2. init进程是所有进程的父进程 所以都默认有,文件描述符012

1.5 c程序存储空间如何分配

  1. 进程运行起来后,系统会分配一段内存给进程。从低地址到高地址分配:正文,初始化数据,未初始化数据,堆,栈,命令行参数和环境变量

    fork后:正文共享,数据写时拷贝

  2. 分别分配:

    1. 代码段:正文(main里除了变量的代码,只读)
    2. 数据段:全局变量,非0初始化数据,main函数里在栈
    3. bss段,ZI段:全局变量,未初始化,0初始化
    4. :malloc申请的空间
    5. :调用子函数使用的空间,包括变量(局部)
  3. 从源码到可执行程序的步骤:预编译、编译、链接、strip(把可执行程序中的符号信息给拿掉)

  4. 给段命名就是为了在链接脚本中用段名来让段站在合适的位置

    代码段(.text),数据段(.data),bss段(.bss)