我只是想知道,我們可以在沒有操作系統的機器上執行程序嗎?軟件可以在裸機上執行嗎?
此外,我聽說Linux內核是用C語言編寫的,內核在啓動時運行,所以我只是想知道一臺計算機在沒有首先編譯的情況下如何理解語言?
我只是想知道,我們可以在沒有操作系統的機器上執行程序嗎?軟件可以在裸機上執行嗎?
此外,我聽說Linux內核是用C語言編寫的,內核在啓動時運行,所以我只是想知道一臺計算機在沒有首先編譯的情況下如何理解語言?
維基百科:
當計算機第一次開機時,它不具有在ROM或RAM的操作系統。計算機必須首先執行一個存儲在ROM中的小程序,以及訪問操作系統程序和數據加載到RAM中的非易失性設備所需的最小數據。 啓動加載到RAM中的這個序列的小程序被稱爲引導加載程序,引導程序或引導加載程序。這個小引導加載程序的唯一工作是加載其他數據和程序,然後從RAM中執行。
計算機可以理解Linux內核,因爲它已經被編譯並存儲(通常)在磁盤上。引導程序爲計算機提供足夠的功能來將預編譯的內核加載到內存中。
您不需要加載整個操作系統來在計算機上運行程序,就可以編寫啓動加載程序來啓動已編譯的程序。您將無法訪問任何可使程序員更輕鬆的操作系統調用。
引導程序*是*「軟件」。 – dmckee
linux內核可能用C編寫,它仍然被編譯爲機器碼。而且這是啓動時執行的機器代碼
您也可以編寫在啓動過程中運行的軟件。這樣您就可以製作自己的自定義操作系統,或者製作自己的定製軟件,該軟件可以直接在沒有操作系統的情況下運行但要小心,操作系統爲你提供了許多功能,你必須自己做。像驅動程序支持,磁盤IO例程,網絡堆棧,多任務和內存管理等事情你必須自己做。
最後:我不認爲人們不喜歡這麼多,如果他們必須重新啓動他們的機器才能運行你的軟件。所以我會寫一個操作系統......它讓你和用戶的生活更輕鬆。
用戶可以使用虛擬化(事實上,許多DRM支持者被不依賴主機操作系統 - 「可信計算」計劃的想法所誘惑)。 –
但是,當然,你不能完全信任硬件...... DRM是不可能的。 –
這就是說,像windows這樣的每一個操作系統都是一個軟件??那麼在創建操作系統前的一天呢?還有一個bootloader是否需要用匯編低級語言編寫? – caramel1995
總之,是的。
Linux仍然是一個運行在裸機上的機器代碼軟件程序。雖然您可以在沒有操作系統的情況下執行軟件程序,但您的程序需要實現用於與計算機中的各種硬件對話的所有代碼 - 例如,將數據輸出到顯示器,解釋來自鍵盤/鼠標/網卡等的輸入(一些非常低級別的東西由計算機組件中的固件實現,但其餘的程序必須實現)。這使得你編寫一些完全沒有操作系統的東西非常耗時和困難。
是的,現在已經用於幾KB內存的小型微控制器。
該程序通常用C語言編寫並在其他計算機上編譯(稱爲交叉編譯),然後作爲二進制數據加載到控制器的閃存中。
什麼是操作系統,如果不是運行在「裸機」上的軟件?巫毒?XD
不知道巫術,但Windows *絕對會在某處沿線做某種巫術。 –
只要看看前32名者任何遊戲控制檯。它們幾乎全部缺少啓動代碼,只需從插入的盒式磁帶直接啓動即可。
微調:雖然有些控制檯缺乏任何形式的內部ROM,包括有史以來最出色的遊戲控制檯(Atari 2600),但說「幾乎所有」都是不準確的。 Intellivision,Odyssey2,Bally Astrocade和Atari 7800都在32位時代之前,並且有一個內部啓動ROM(所有啓動程序都從內部ROM執行代碼,即使在確認盒式磁帶存在之前某些內存已經跳到了磁帶盒空間) – supercat
1st:當然。你並不需要一個操作系統來燒一些週期。
如果您想要加載或存儲文件或數據,您可能需要某種操作系統支持,但可以直接調用BIOS函數: 從鍵盤讀取鍵,寫入某個屏幕或LED或串行接口。 只有當你想運行多個程序,或從外部對中斷處理, 衝突的ressources或這樣,那麼你會迫切需要的操作系統。
第二:內核編譯成機器代碼,這是在引導過程中執行。運行內核時不涉及 C. C只能幫助編寫內核或任何應該運行的程序(如果在內核或「裸機」中)。
理論上,你可以通過另一臺機器上的十六進制編輯器打造引導程序。
對於可以啓動Linux或Windows的機器,沒有任何關係。它需要一個BIOS。 –
@nobugz:是什麼讓你認爲BIOS *不是*「軟件」?我的意思是,大多數BIOS芯片都是易碎的,所以我可以重寫它,如果我真的想... – dmckee
這就是我的觀點。 「裸」的相反。 –