>

Five core module of Linux

  1. Process Scheduling
  2. Memory Management
  3. Filesystem
  4. Communication between Processes
  5. Networking

Linux 进程的管理与调度

5个互斥状态
state 域能够取 5 个互为排斥的值。系统中的每个进程都必然处于以上所列进程状态中的一种。

状态 描述
TASK_RUNNING 表示进程要么正在执行,要么正要准备执行(已经就绪),正在等待 cpu 时间片的调度
TASK_INTERRUPTIBLE 进程因为等待一些条件而被挂起(阻塞)而所处的状态。这些条件主要包括:硬中断、资源、一些信号……,一旦等待的条件成立,进程就会从该状态(阻塞)迅速转化成为就绪状态TASK_RUNNING
TASK_UNINTERRUPTIBLE 意义与 TASK_INTERRUPTIBLE 类似,除了不能通过接受一个信号来唤醒以外,对于处于 TASK_UNINTERRUPIBLE 状态的进程,哪怕我们传递一个信号或者有一个外部中断都不能唤醒他们。只有它所等待的资源可用的时候,他才会被唤醒。这个标志很少用,但是并不代表没有任何用处,其实他的作用非常大,特别是对于驱动刺探相关的硬件过程很重要,这个刺探过程不能被一些其他的东西给中断,否则就会让进城进入不可预测的状态。
TASK_STOPPED 进程被停止执行,当进程接收到SIGSTOP、SIGTTIN、SIGTSTP或者SIGTTOU信号之后就会进入该状态
TASK_TRACED 表示进程被 debugger 等进程监视,进程执行被调试程序所停止,当一个进程被另外的进程所监视,每一个信号都会让进程进入该状态。

进程状态 TASK_UNINTERRUPTIBLE 和 TASK_INTERRUPTIBLE 都是睡眠状态。

Linux Kernel 2.6.25 引入了一种新的进程睡眠状态,
TASK_KILLABLE 当进程处于这种可以终止的新睡眠状态中,它的运行原理类似于 TASK_UNINTERRUPTIBLE,只不过可以响应致命信号。

进程标识符(PID)

1
2
pid_t pid;
pid_t tgid;

在Linux系统中,一个线程组中的所有线程使用和该线程组的领头线程(该组中的第一个轻量级进程)相同的 PID,并被存放在tgid成员中。只有线程组的领头线程的pid成员才会被设置为与tgid相同的值。注意,getpid()系统调用返回的是当前进程的 tgid 值而不是 pid 值。

https://blog.csdn.net/gatieme/article/details/51383272

CPU

关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。

进程间通信方式

  • 管道
  • 共享内存
  • TCP socket
  • unix domain socket

同步原语

  • 锁 spinlock, shared_lock

可重入/不可重入