Operating system 操作系统-进程

Operating system 操作系统-进程,operating-system,Operating System,这些都是真的吗?为什么? 在UNIX/Linux系统中,子进程继续执行与其父进程相同的程序。 上下文切换比模式切换更昂贵 进程可以直接访问硬盘上的数据,而无需内核参与 任何两个进程都可以使用普通(未命名)管道进行通信 在UNIX/Linux系统中,子进程继续执行与其父进程相同的程序 大多数情况下是这样的,因为fork()的工作方式(通常孩子稍后调用exec(),但这只发生在稍后)。但这并不一定总是正确的(例如,您可以使用posix_spawn()来启动进程,或者在C中使用普通的system())

这些都是真的吗?为什么?

在UNIX/Linux系统中,子进程继续执行与其父进程相同的程序。 上下文切换比模式切换更昂贵

进程可以直接访问硬盘上的数据,而无需内核参与

任何两个进程都可以使用普通(未命名)管道进行通信

在UNIX/Linux系统中,子进程继续执行与其父进程相同的程序

大多数情况下是这样的,因为
fork()
的工作方式(通常孩子稍后调用
exec()
,但这只发生在稍后)。但这并不一定总是正确的(例如,您可以使用
posix_spawn()
来启动进程,或者在C中使用普通的
system()

上下文切换比模式切换更昂贵

信息太少,无法确定这是否属实。例如,“上下文切换”可能意味着从用户空间切换到内核空间,或从“内核上下文”切换到“IRQ上下文”,或。。。同样,“模式开关”可以是任何东西(视频模式开关?权限级别更改?)。我只能说,一些被称为上下文开关的东西比一些被称为模式开关的东西更贵,而一些则更便宜

进程可以直接访问硬盘上的数据,而无需内核参与

大部分都是假的。唯一可能的情况是,如果您扩展“硬盘驱动器”的定义,将NVRAM作为持久存储;但即使在这种情况下,我也不确定Linux是否支持将NVRAM直接映射到用户空间(还没有)

任何两个进程都可以使用普通(未命名)管道进行通信


否。如果您随机选择任意两个流程并希望它们通过进行通信。如果是管道,那么它很可能对任何人都没有任何意义(例如,想象一下,将数字化声音从一个进程发送到一个CRON守护进程,而这个进程并不期待它)。流程必须设计为协调管道端点的创建,并就其角色(即发送方,即接收方)达成一致,并就通过管道传输的数据所使用的协议达成一致(仅仅发送/接收原始字节并不是通信,正如听力与听力/理解不同一样)。

过程的上下文在PCB中表示

调用fork()后有两种可能:

  • 父级和子级同时执行
  • 父级等待直到子级终止
父级可以通过调用wait()系统调用等待子级终止,或者父级可以继续执行

->孩子经常通过exec()系统调用在自己内部启动一个新的、不同的程序

模块化:

程序->进程->线程

因此,线程切换比上下文切换容易,因为同一进程的线程具有相同的地址空间

进程可以通过“互斥”和“信号量”访问代码的关键部分,即共享资源

这些进程可以通过“进程间通信”相互通信。 1.共享数据 2.消息传递