为什么init进程会创建不同的进程?为什么不能创建不同的线程?

时间:2014-02-19 19:51:12

标签: multithreading process operating-system

众所周知,init进程是第一个正在执行的进程,并导致创建进一步不可避免的进程。现在,问题是,主要关注的问题可能是导致init进程的问题创建进程而不是线程。

2 个答案:

答案 0 :(得分:0)

听起来你在谈论大多数Unix系统是如何启动的。那么,让我们暂时忘掉init并询问,为什么任何进程会创建另一个进程而不是创建另一个进程?

拥有一个操作系统的全部意义在于允许不同的“程序”共存并共享硬件而不会互相破坏。根据定义,线程存在于同一地址空间中。除了以线程彼此协作的方式编写代码之外,没有办法保护一个线程的数据结构不被同一进程中的另一个线程破坏。进程中的线程始终是同一“程序”的一部分。

Unix init进程产生其他进程,因为Unix系统中的许多服务都是由不同的程序提供的。那为什么呢?部分原因是历史原因。当Unix是新手时,没有人听说过“线程”。而且,它是组织彼此无关的组件的便捷方式。编写ssh守护程序的人不必担心它是否与cron守护程序完美匹配。由于它们是独立的程序,因此操作系统会自动隐藏它们/保护它们,就像它隐藏/保护用户程序一样。

答案 1 :(得分:0)

主要问题是同一地址空间中的线程不受其他线程的保护。但是,如果存在这样的保护(如在Java中),则使用线程而不是进程是有意义的。

我知道至少有一个操作系统,其中所有系统活动都是由单个系统进程中的线程执行的 - 一个用于Elbrus1 and 2计算机(现代Elbruses由Linux运行)。这是可能的,因为标记的内存架构,继承自Burrows机器。可能Burrows机器就是这样工作的。

相关问题