-1

我們可以在單處理器系統上應用並行性的概念嗎?比方說,如果我們有兩個進程A & B,它們是彼此獨立的,它們是否可以同時被關心(執行),如果是的話如何?你能否就後續的執行週期進行解釋。單處理器系統上的並行性

+1

是通過時間共享和上下文切換 – shami

+0

嗯,沒有。它們不能同時執行。它們被串行執行。可能只是語義。我從這個問題中得到的 –

+0

是他誤解B將在A完成後開始。我認爲OP正在考慮這個。我是對的@Ashish – shami

回答

3

如果只有一個處理器,它們不能同時運行。如果您有多線程或多進程環境,它將對每個進程和/或線程進行時間分割。在任何給定的時間只有一個會運行,並且每個context switch都有開銷。

「上下文切換」的確切含義顯著在用法而變化,最經常是指「線程切換或過程開關」或「只過程開關」,其任一者可作爲一個「任務開關」被稱爲。更精細的是,可以區分線程切換(在給定進程內切換兩個線程),進程切換(在兩個進程之間切換),模式切換(域交叉:在給定線程內在用戶模式和內核模式之間切換)堆棧幀開關和地址空間開關(內存映射開關:將虛擬內存更改爲物理內存映射)。上下文切換的計算成本取決於其精確需要的計算成本,從輕量級用戶進程的子例程調用到非常昂貴的,但通常比保存或恢復過程映像少得多。

有趣的是,在Windows開始流行之前,甚至有多線程庫可用於MS-DOS。許多來自同一時代的大型機和迷你電腦也採用了這種技術。

+0

值得一提的是,時間片實際上可能相當長 - 大概60ms,具體取決於操作系統。這足以讓執行看起來像人類同時進行,但在現代計算機上很長一段時間。 – bazza

+0

因此,當我們有一個分叉的進程時,它產生了它的孩子,理論上說它是兒童(產生的進程)同時執行,那麼在單個處理器環境中如何工作呢?說S1和S2是從一個過程S產生的,那麼理論上S1和S2同時執行並且說他們加入以開始一個過程S3。那麼在這裏如何同時執行S1和S2?我希望現在很清楚。請參考該鏈接作爲更清晰的例子[鏈接](http://nob.cs.ucdavis.edu/classes/ecs251-2000-01/sync-1.gif)。謝謝 –

+0

如果有一個CPU,則每個進程都被時間片分割到該物理CPU上。這些過程輪流進行。 –

0

具有類似並行性的概念稱爲單處理器的多任務處理。我們必須明白,當我們有一個核心時,這意味着無論系統中有多少進程(任務),一次只能執行一個進程(任務)。

但是如果一個進程有線程,所有的線程都會被一個一個地分配給cpu,用戶會有進程所有線程都在運行的印象。

+0

'但是如果一個進程有線程,所有的線程都將被分配到cpu中。對於具有多個進程但只有一個CPU的系統,或者具有N個進程和M個CPU的系統也是如此,其中N> M(現在可能就是您電腦上的情況)。 –

+0

@Eric我的意思是,當我們有一個核心時,只有一個任務將以1個時間單位執行,但是如果核心數量> 1,那麼可以以1個時間單位執行的任務數量等於數量的核心。 – Ritesh

+0

我不反對你,只是增加一些信息。 –

0

cpu將在進程之間切換。它在OS中稱爲上下文切換。 有不同的上下文切換方法,如: 循環,優先級隊列 上述方法將決定哪個進程將使用cpu。 但是cpu不能一次被兩個進程使用。 提前OS任務調度程序負責將進程分配給cpu。