《Linux内核设计与实现》读书笔记—进程管理

本文是《Linux内核设计与实现》的读书笔记,主要探讨了Linux中的进程管理,包括进程的概念、状态、创建、终结,以及独特的线程实现机制。通过fork()和exec()创建进程,内核通过PID标识进程,线程在Linux中被视为共享资源的进程。进程终结由do_exit()完成,涉及地址空间、信号、记账等资源的释放。

进程

  1. 进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间,一个或多个执行线程,存放全局变量的数据段。
  2. 每个线程都拥有一个独立的线程栈,线程寄存器和程序计数器。

  1. 一般会在栈顶创建一个结构体struct Thread_Info,该数据结构中保存指向进程描述符task_struct的指针。
  2. 内核通过一个唯一的进程标识符PID来 标识每个进程
  3. 一个进程必然处于五种进程状态中的一种:TASK_RUNNING,RASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE,_TASK_TRACED,TASK_STOPPED
  4. 当一个程序执行系统调用陷入了内核空间时,此时内核是在"代表该用户进程执行"并处于进程上下文中。与之相对的,当程序执行过程中发生了异常中断,中断处理程序并"不会代表任何进程执行",此时不存在进程上下文。
  5. Linux系统中所有进程都是PID为1的Init进程的后代。Init进程的进程描述符是作为init_task的静态变量分配的。

进程创建

  1. 与其他的操作系统提供的产生(spawn)进程的机制不同。Linux将创建进程和执行分解到了两个单独的函数fork()和exec()去执行。
  2. fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID,PPID和某些资源和统计量(例如刮起的信号)。
  3. exec()函数负责读取可执行文件并将其载入地址空间开始运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值