2012-10-24 156 views
1

我真的很好奇。我是一名Python程序員,這個問題讓我覺得很難過:你寫了一個操作系統。你如何運行它?它必須以某種方式運行,這種方式是在另一個操作系統內?如何操作系統...運行...沒有一個操作系統運行?

應用程序如何運行而不在OS中?您如何告訴計算機運行C語言,並在屏幕上執行這些命令(如果沒有要運行的操作系統)?

它是否與UNIX內核有關?如果是這樣,一個unix內核,或者一般的內核?

我確定操作系統比這更復雜,但它是如何工作的?知道這件事真的很棒!

謝謝。

+0

也許最好問這裏:http://programmers.stackexchange.com/ –

+0

@PlazmotechBinary我實際上並沒有專門討論這個問題,我是在談論20個以前的問題,你問過沒有接受的答案。 – jozefg

+0

@jozefg我已經通過了這些問題,結果發現有一些我實際記得使用的,我投票使用了小箭頭,但忘記檢查,因爲他們的反應速度,它說:「請檢查20分鐘「或什麼的,然後我再次開始編程,忘掉它。 DERP。 –

回答

1

事實上,你可以寫一個程序沒有安裝操作系統。事實上,在您的電腦上已經有一個程序在您的操作系統啓動之前運行時沒有操作系統。事實上有兩個。首先是你的BIOS。

的IBM PC體系結構是一個家庭的架構,它採用的BIOS來啓動計算機之一。並非所有體系結構都具有BIOS。 iPhone例如直接引導到引導程序。實際上,大多數「現代」體系結構都沒有BIOS,而是直接引導到引導加載程序。這種方式實際上在概念上更簡單。

是電腦的BIOS需要的其實僅僅是一個歷史遺留問題。原來的IBM BIOS實際上是加載DOS的基本引導程序。現代BIOS仍然是引導程序..加載引導程序。

大多數PC BIOS都是專有的。它們允許製造商在將控制權交給引導加載程序之前初始化定製/專有硬件。這使得可以寫入自舉程序,而不必擔心操作系統映像位於閃存驅動器,USB拇指驅動器,SD卡,磁盤,DVD等上的天氣。引導加載程序只會看到已被初始化的磁盤BIOS。

的開機下一階段是引導程序。 IBM PC架構需要引導加載程序的原因是,BIOS通常設計爲將CPU設置爲運行DOS。現代操作系統要求CPU配置稍有不同。另外,現代操作系統內核(內核是操作系統的實際核心可執行代碼,例如管理內存,CPU等)往往是大型的野獸,通常大於4MB,比大多數BIOS設計加載的要大得多。所以BIOS加載一個小的啓動加載程序,然後加載實際的操作系統。再次,這只是由於IBM在20世紀80年代設計原始PC架構時作出的決定而必需的。像iPhone或PS3這樣的現代建築不會這樣做。他們直接引導到引導程序。

引導加載程序是必須要解決的雞和蛋的問題:加載你需要從磁盤中讀取操作系統。要從磁盤讀取,您需要使用由OS加載的設備驅動程序。爲了打破這種循環依賴性,人們編寫了基本上非常簡單的啓動加載程序,這些操作系統僅用於運行一個程序(操作系統)並理解如何從磁盤(或SD卡或網絡等)讀取數據。

這將我們帶到解決您問題的部分。如果你已經寫了一個操作系統,你如何加載它?你可以通過配置你的bootloader來加載它。 Windows帶有一個不太靈活的引導程序。它理解如何加載Windows,但這就是它。您可以安裝開放源碼引導程序,如GrubBurg,它們也瞭解如何加載其他操作系統。

引導機器的基本概念其實很簡單。這是可怕的細節。但是,如果您真的對操作系統的工作方式感興趣,那麼最終它是非常有益的。另外,如果你對這些東西感興趣,我建議環顧四周,除了IBM PC之外的其他架構,比如使用EFI的Mac硬件,而不是傳統的BIOS或Linksys路由器,這些路由器可以直接從引導加載程序或嵌入式平臺運行單個程序的Arduinos可以在沒有操作系統的情況下直接在CPU上編譯。

+0

Oooh!太好了!感謝您的迴應!當我從學校回來時,我會讀一讀。 –

0

您需要一個操作系統來執行內存虛擬化和仲裁訪問硬件。由於操作系統可以完全訪問內存和硬件,因此不需要運行操作系統。大多數程序從操作系統獲得的服務,操作系統本身必須提供自身或必須從硬件獲得。

+0

對,但是,如果我在哪裏「寫」和操作系統,我該如何運行該腳本而沒有地方運行它?我將如何運行沒有說OS的腳本。 –

+0

我不關注。你想寫一個腳本或一個操作系統?如果你正在編寫一個操作系統,那麼你的操作系統 - 提供你需要的服務 - 就是硬件。硬件 - >操作系統 - >應用程序 –

0

運行任何軟件的都是某種CPU,一塊電子電路,硬件。

無論軟件是OS還是其他類型的程序,CPU都不在乎。它只是在可能的情況下運行它(例如,直到所述軟件導致不可恢復的錯誤迫使CPU進入某種奇怪的狀態或者簡單地重置)。

上電時,CPU開始執行它在內存中某個位置找到的任何代碼。該位置既可以在CPU中硬連線,也可以由CPU電路外部配置,或者通過軟件編程。哪一個取決於CPU以及整個設備的設計。

並非所有程序都需要在CPU上運行的操作系統。操作系統就是這樣一個程序的一個很好的例子。如果每個操作系統都需要另一個操作系統,你會如何阻止這種無限遞歸? :)但它不是唯一的一個。

許多電子設備,特別是非常簡單的電子設備,如數字時鐘,沒有任何操作系統。

關於操作系統運行在另一個操作系統上的唯一時間,是當你有虛擬化時。但我不會在這個答案中去那裏。

一個操作系統只需要它的基本功能,如調度,線程/進程同步,內存分配等,或者完成所有或大部分設備I/O本身,並隱藏操作系統中運行的程序的硬件特性, IOW,允許便攜式程序。您在Python中編寫print 123,並且在任何與Python兼容的操作系統(=可用的操作系統)中都可以打印123,而不考慮顯示器,其分辨率以及可能存在於不同計算機和不同操作系統中的許多其他差異。如果通用操作系統沒有提供一些通用的功能(以及一些或多或少的通用API),例如控制檯和文件I/O以及內存管理,那麼Python將無法使用它們,這些操作系統不會是一般的首先是爲了達到目的。

操作系統內核是操作系統的核心。它大部分的低層和骯髒的工作,處理:

  • 中斷處理
  • 線程/進程的調度和同步
  • 內存管理
  • 東西都

有時候這是足夠的操作系統功能,在這種情況下,操作系統和內核之間沒有任何區別,它們在這裏是相同的東西。

如果OTOH需要更多的東西,例如很多的靈活性,支持不同的設備,一些代碼來管理所有這些和一些特殊的文件系統驅動程序,網絡和TCP/IP協議棧等,那麼僅僅一個簡單的(可能只是相對簡單的)內核是不夠的,它需要更多的東西,這就是你開始區分操作系統和內核併到達OS = kernel + extras的地方。您使用的文本編輯器,即使它與您的操作系統一起提供,也不是其中的一種,它是一個常規程序,不需要與操作系統捆綁在一起,但爲了方便起見,它可能是。

UNIX是OS的一個示例。還有更多,最着名的是Linux和Windows。

你應該得到自己的一些書上的計算機體系結構和組織學計算機的一般工作原理。這裏面就有,它是如何放在一起是什麼,發生了什麼引擎蓋下,等

相關問題