2015-10-26 112 views
2

我剛剛正在學習操作系統,我從班上的講義中偶然發現了這個問題。在我們的課程中,我們將流程定義爲執行中的程序,我知道操作系統本身就是一個程序。所以通過這個定義,OS是一個過程。操作系統是一個過程嗎?

同時處理可以向內或向外通過上下文切換,這恐怕是該OS管理和手柄進行切換。但是,如果操作系統本身沒有運行,它會處理什麼?

此外,如果它是一個過程,並在OS具有與其相關聯的過程控制塊?

有這個網站,我看着一個老問題,但我覺得如果答案是不夠清晰勾勒真正爲什麼OS是/不是一個過程,所以我想我會再問這裏。

+0

但是,當它沒有運行時,操作系統本身會是什麼? - 沒有。這幾乎是一個理想的狀態 - 用戶線程/進程正在使用所有CPU執行,而操作系統使用無。 –

回答

2

首先,一個操作系統是多個部分。核心片是內核,它是而不是的一個進程。它是運行流程的框架。在實踐中,一個過程不僅僅是一個「執行中的程序」。在具有MMU的系統上,進程通常在其自己的虛擬地址空間中運行。然而,內核通常映射到全部進程。它永遠在那裏。操作系統的

其他輔助部件存在,使其usuable。操作系統可能有它作爲管理的一部分運行的進程。例如,Linux有許多獨立調度任務的內核線程。但是這些對於操作系統的操作通常並不重要。

+0

好吧,這是有道理的。我只有一個問題 - 爲什麼內核不是一個過程? – Enis

+2

進程需要至少一個線程。一個線程需要一個堆棧。操作系統內核沒有。它只是一個狀態機器,所有線程/進程都會調用CPU磁盤,KB,網絡等受管資源。內核不會自行工作 - 只有在用戶線程/進程調用它或硬件請求服務時纔會進入該進程。 –

2

簡短的回答:第

這裏的一樣好 「操作系統」 的定義爲任何:

https://en.wikipedia.org/wiki/Operating_system

操作系統(OS)是管理計算機 系統軟件硬件和軟件資源併爲 計算機程序提供通用服務。操作系統是計算機系統中軟件系統的一個組成部分。應用程序通常需要一個 操作系統才能運行。

即使是「系統級流程」(如Linux上的「初始化」,或在Windows「的svchost.exe」)依靠的「操作系統」上......但不是自己操作系統。

+0

我已經習慣了OS = Kernel + Utility程序(工具鏈,編輯器,計算器等)的定義。這不包括init(或systemd)過程嗎? – Downvoter

+0

當然,我會接受的。按照這個定義,「操作系統」絕對是!=「一個過程」。 「操作系統」甚至不是「一套過程」。正確?但是,我個人認爲說「Linux操作系統是內核」更有用。原因如下:http://stackoverflow.com/questions/3403938/whats-the-relation-between-a-linux-os-and-a-kernel – paulsm4

+0

好的,是的,那很清楚。謝謝。 – Downvoter

0

它更像是靈魂爲身體(硬件),如果你願意。 這只是一個進程,而不是一個運行系統中用戶進程所需的(內核)進程。 PID 0是爲內核/用戶進程的其餘部分提供調度程序/交換功能的所有進程的父代,但它不是唯一的進程。這些內核進程(藉助內核驅動程序)爲用戶進程提供訪問者功能(通過系統調用)。

0
  1. 這取決於你所呼叫的「操作系統」。
  2. 這取決於你在說什麼操作系統。

即使在內核模式下,也可能面臨過分簡化的風險,大多數人稱之爲「操作系統」的操作系統通常是由用戶進程執行的。通過中斷,陷阱或故障進入內核。

要執行上下文切換,通常要麼是進程導致進入內核模式的錯誤(比如寫入磁盤)。在內核模式下,進程意識到它必須等待,以便通過將上下文切換到另一個進程來實現。另一種常見的方式是定時器引起中斷,迫使進程進入內核模式。然後該過程確定下一步應該執行哪些操作,並切換進程上下文。

某些操作系統確實有自己的內核進程,但它的功能越來越少。

大多數操作系統的組件都有自己的進程。

2

同意上面/下面的一些評論。

操作系統不是一個進程。然而,設計中的幾個變體卻給出了相反的錯覺。

例如:如果您正在運行FreeRTOS,那麼就沒有獨立的OS地址空間和進程地址空間這樣的事情,每一件事都作爲一個單獨的進程運行,FreeRTOS框架提供了允許同步不同任務的API 。

操作系統只是一組API(系統調用)和實用程序,有助於實現多處理,資源共享等。例如:schedule()是處理多處理能力的核心OS函數, OS。

從這個意義上說,OS不是一個過程。儘管它附着在CPU上運行的每個進程中,否則該進程將如何使用OS的API。