【问题标题】:Parallelism on a single processor system单处理器系统上的并行性
【发布时间】:2015-10-04 16:38:45
【问题描述】:

我们能否在单处理器系统上应用并行概念。例如,如果我们有两个进程 A 和 B 并且它们彼此独立,它们是否可以同时得到处理(执行),如果可以,如何处理?您能否解释一下接下来的执行周期。

【问题讨论】:

  • 是的,通过时间共享和上下文切换
  • 嗯,不。它们不能同时执行。它们是串行执行的。可能只是语义。
  • 我从这个问题中得到的是他误解了 B 将在 A 完成后开始。我认为 OP 正在考虑这一点。我说得对吗@Ashish
  • 即使在多核 CPU 上,如果独立线程都需要同时访问主存或其他一些公共资源(如数据总线),也可以将它们序列化。在我使用的一种架构上,高精度时钟硬件位于慢速 I2C 总线的末端。访问它需要很长时间,并且两个发出请求的线程都非常明显地被序列化了!

标签: concurrency parallel-processing operating-system computer-architecture


【解决方案1】:

如果只有一个处理器,它们就不能同时运行。如果您有一个多线程或多进程环境,它将对每个进程和/或线程进行时间切片。在任何给定时间只有一个会运行,并且每个 context switch 都有开销。

“上下文切换”的确切含义在使用中差异很大,通常是指“线程切换或进程切换”或“仅进程切换”,其中任何一种都可以称为“任务切换”。更精细地,可以区分线程切换(给定进程内的两个线程之间的切换)、进程切换(两个进程之间的切换)、模式切换(域交叉:给定线程内的用户模式和内核模式之间的切换)、寄存器切换、堆栈帧切换和地址空间切换(内存映射切换:将虚拟内存更改为物理内存映射)。上下文切换的计算成本根据它所需要的具体内容而有很大差异,从对轻量级用户进程的子例程调用稍多一点到非常昂贵,尽管通常远低于保存或恢复进程映像的成本。

在一个有趣的历史记录中,在 Windows 流行之前,甚至有用于 MS-DOS 的多线程库。同一时代的许多大型机和小型机也采用了该技术。

【讨论】:

  • 值得补充的是,时间片实际上可能很长——可能是 60 毫秒,具体取决于操作系统。这足够短,以至于对人类来说似乎是同时执行的,但在现代计算机上却是很长的时间。
  • 所以当我们有一个分叉的进程时,它会产生它的子进程,理论上说它的子进程(产生的进程)是同时执行的,那么在单处理器环境中如何工作呢?假设 S1 和 S2 是从进程 S 产生的,那么理论上 S1 和 S2 同时执行并说它们加入以启动进程 S3。那么这里如何同时执行 S1 和 S2 呢?我希望现在很清楚。请参考链接作为更清晰的示例 [链接] (nob.cs.ucdavis.edu/classes/ecs251-2000-01/sync-1.gif)。谢谢
  • 如果有一个 CPU,每个进程都会被时间分片到那个物理 CPU 上。这些过程轮流进行。
【解决方案2】:

具有类似并行性的概念称为单处理器多任务处理。我们必须明白,当我们有一个核心时,这意味着无论系统中有多少进程(任务),一次只能执行一个。

但是如果一个进程有线程,那么所有的线程都会被一一分配给cpu,用户会觉得进程的所有线程都在运行。

【讨论】:

  • But if a process have threads, all the threads will be assigned to cpu one by one 对于具有多个进程但只有一个 CPU,或者具有 N 个进程和 M 个 CPU 且 N > M 的系统也是如此(现在您的计算机上可能就是这种情况)。
  • @Eric 我的意思是,当我们有一个核心时,在 1 个时间单位内只会执行一个任务,但是如果核心数 > 1,那么可以在 1 中执行的任务数时间单位将等于核心数。
  • 我不是不同意你的观点,只是补充一些信息。
【解决方案3】:

cpu是要在进程之间切换的,在OS中称为上下文切换。 上下文切换有不同的方法,例如: 循环,优先队列 以上方法将决定哪个进程将使用cpu。 但是cpu不能同时被两个进程使用。 预先 OS 任务调度程序负责将进程分配给 cpu。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2011-10-16
    相关资源
    最近更新 更多