【问题标题】:Why the init process creates different processes?Why cannot it create different threads? [closed]为什么init进程创建不同的进程?为什么不能创建不同的线程? [关闭]
【发布时间】:2014-03-20 09:32:37
【问题描述】:

众所周知,init 进程是第一个正在执行的进程,它会导致创建更多不可避免的进程。现在的问题是,导致 init 进程的主要问题可能是什么创建进程而不是线程。

【问题讨论】:

  • 不清楚你在说什么。是操作系统吗?哪一个?
  • @AlexeiKaigorodov 我说的是 UNIX 操作系统。
  • 仅显示多数接近投票的原因。我的问题是“有关通用计算硬件和软件的问题对于 Stack Overflow 来说是题外话,除非它们直接涉及主要用于编程的工具。您可以通过 Super User 获得帮助。”这个问题是关于操作系统架构的。 Stack Overflow 是关于编程的。

标签: multithreading process operating-system


【解决方案1】:

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

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

【讨论】:

  • 您能否详细说明“标记内存架构”?...传统的 UNIX 架构和“标记内存架构”有什么区别?
  • 每个内存字都有标签位,描述字的类型,不能构造对内存的任意引用。引用也有“大小”字段,在访问数组时会检查该字段。 “标记的内存架构”可以很容易地用谷歌搜索。
  • 谢谢你,@Alexeikaigorodov
【解决方案2】:

听起来您在谈论大多数 Unix 系统是如何启动的。好吧,让我们暂时忘记 init 并问,为什么 any 进程会创建另一个进程而不是创建另一个线程?

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

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

【讨论】:

  • 即使我也这么想...但只是想澄清一下自己。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多