CXD Linux Engineer

Linux中的进程与线程

2015-08-15

进程

计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。一个进程就是一个正在执行程序的实例。

  • 一个进程表包含的字段:

progress

线程

在传统操作系统中,每个进程有一个地址空间和一个控制线程,现代操作系统中经常存在同一个地址空间中准并行多个控制线程的情形,这些线程就像(差不多)分离的进程(共享地址空间除外)。

  • 下图第一列给出了进程中的所有线程共享内容,第二列给出了每个线程自己的内容:

thread

僵死进程

该进程已经结束了,但是其父进程没有调用wait4()系统调用。为了父进程能够获知它的消息,子进程的进程描述符仍然被 保留着,一旦父进程调用了wait4()。进程描述符就会被释放。

孤儿进程

父进程在子进程之前退出,此时子进程就成为了孤儿进程。Linux是给孤儿进程在当前线程组内找一个线程作为父亲,如果不行就让init作为他们的父进程。

进程上下文

当一个程序执行了系统调用或者发生了某个异常,他就陷入了内核空间。此时,我们称内核“代表进程执行”并处于进程上下文中。

线程在Linux中的实现

从内核的角度来说,他没有线程这个概念,Linux把所有的线程都当做进程来实现,内核并没有准备特别的调度算法或是定 义特别的数据结构来表征线程。线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的 task_struct(进程描述符),所有在内核中,他看起来就像一个普通的进程 (只是该进程和其他一些进程共享某些资源,如地址空间)。


下一篇 GCC常见属性

Comments

Content