簡體   English   中英

操作系統實際上是做什么的?

[英]What Does an OS Actually Do?

操作系統到底能做什么? 我知道操作系統可以用例如C ++編程,但是我以前認為C ++程序必須在操作系統下運行嗎? 有人可以解釋並給出鏈接嗎? 預先感謝,ell

操作系統是代碼(用戶代碼)和硬件之間的一層。

操作系統負責管理物理組件,並為您提供一個簡單的(希望)API來構建。 它處理運行哪些程序,何時運行,誰先運行,如何處理內存,誰獲取內存,視頻繪圖以及所有這些好東西。

例如,制作GUI時,您無需告訴OS(或窗口管理器)來制作窗口,而不是將每一位發送給監視器。 然后,您告訴它在窗口中放置一個按鈕。 然后,操作系統會處理繪制窗口,移動窗口,移動按鈕(但將其保留在窗口中的位置)。

現在,您可以使用C ++編程操作系統,但這並不容易。 您必須開發內核,然后開發一種與硬件接口的方法,然后將該接口提供給您的用戶及其程序。

因此,從本質上講,操作系統可以處理軟件到硬件的接口並管理您的物理資源。 C ++程序可以在操作系統中運行,或者在足夠工作的情況下可以自己運行,甚至可以成為操作系統。

實際上,C ++標准本身在這個問題上有話要說。 §1.4/ 7:

定義了兩種實現:托管和獨立。 對於托管實施,此國際標准定義了可用庫的集合。 獨立的實現是一種可以在不借助操作系統的情況下執行的實現,並且具有一組實現定義的庫,其中包括某些語言支持庫(17.4.1.3)。

在17.4.1.3中

獨立的實現具有實現定義的標頭集。 該集合至少應包括以下標頭,如表13所示:

Table 13—C++ Headers for Freestanding Implementations
_______________________________________________
 Subclause Header(s)
 18.1 Types    <cstddef>   
 18.2 Implementation properties    <limits>
 18.3 Start and termination    <cstdlib>
 18.4 Dynamic memory management    <new>
 18.5 Type identification  <typeinfo>  
 18.6 Exception handling   <exception> 
 18.7 Other runtime support    <cstdarg>   

標頭提供的版本至少應聲明函數abort(),atexit()和exit()(18.3)。

這些頭文件定義常量或為編譯器提供基本支持。 實際上,在操作系統完成一些初始化之前,某些語言功能將丟失,例如newcatch

操作系統實際上只是一個運行其他程序並為它們管理硬件資源的程序。

如果您真的很想了解內部原理,建議您閱讀《 了解Linux內核 》一書。

當然, http://en.wikipedia.org/wiki/Operating_system

操作系統是計算機上的軟件,它管理不同程序使用其硬件的方式,並調節用戶控制計算機的方式。 操作系統幾乎可以在包含具有多個程序的計算機的任何設備上找到-從蜂窩電話和視頻游戲機到超級計算機和Web服務器。 一些用於個人計算機的流行現代操作系統包括Microsoft Windows,Mac OS X和Linux(另請參見:操作系統列表,操作系統比較)。

我的意思是對操作系統的描述,它在何時何地執行的工作以及為什么遠遠超出了本網站恕我直言的答案。

操作系統,更具體地說是其內核,是用諸如C之類的語言開發的。它像其他程序一樣被編譯為機器代碼。 主流操作系統和您用C編寫的某些代碼之間的主要區別是C代碼將通過操作系統的CPU調度程序在分時運行。 還應考慮操作系統首先運行,並且能夠設置這樣一種環境,使其完全控制和限制其啟動的所有內容。 還請記住,系統調用是進程如何與OS通信的方式,所有內容都只是可以在該類型其他任何處理器上運行的典型機器指令。

任何主流操作系統都提供的一些關鍵功能:

  • CPU Scheduler-將加載一個進程,允許它在有限的時間內運行,然后重新開始控制,重新獲得控制權並允許其他進程運行(無論是內核任務還是其他進程,通常是內核任務具有優先權)
  • 內存管理-您運行的任何應用程序都沒有確切的內存地址,因為這很容易更改。 所有進程都將在虛擬內存中運行,並且操作系統會將虛擬內存(例如:0x41000 +)轉換為物理地址。 (再次,它經常提到抽象硬件)
  • 文件系統- 各種
  • 資源-任何類型的設備都被視為資源。 進程可以請求訪問資源。 (奇怪的是,在當今時代,沒有主流操作系統具有防止資源死鎖的機制。)
  • 安全性-這是通過角色完成的。 每個過程在嚴格的限制內運行非常重要。 這是操作系統提供的另一種抽象。

操作系統只是一種軟件,它是您的硬件和軟件之間的接口。 它對該硬件進行了抽象,使其更易於使用。 例如,您不必在程序中讀取鍵盤狀態即可檢查用戶是否按下了按鍵。 您可能會認為它是很多磚塊放在一起並堆疊在一起,從硬件的精確視圖到非常抽象的視圖(例如,從位,窗口或按鈕等)

您不必使用特定語言來編寫操作系統,但是出於效率和便利性的考慮,大多數都用C編寫。 前提是您已在操作系統上安裝了正確的庫,然后可以使用任何語言進行編程(您自己的應用程序)。

對於操作系統的職責沒有“明確的”定義。 它可能包括以下內容:

  • 內存管理
  • 設備和驅動程序
  • 文件系統
  • 進程和線程
  • 系統調用

簡而言之,OS是一個使用戶能夠以相對簡單的方式控制計算機硬件的程序

從編程的角度來看,操作系統主要提供抽象 從CPU和內存管理的細節中抽象出來,從處理硬件設備的細節中抽象出來,從網絡協議堆棧的細節中抽象出來。

操作系統提供了更高級別的編程接口,通常跨多個操作系統進行了標准化,例如POSIX對所有Unix風格都進行了標准化。

閱讀問題后,我明白了您要問的問題。 您要問的是C / C ++程序是否需要操作系統才能運行。 答案是不。 AC / C ++是將人類語言轉換為機器語言的編譯器。 它不需要特定的操作系統。 但是,如果您使用Visual Studio進行編譯,則生成的可執行機器代碼只能在Windows上運行。

特別地,C / C ++代碼通常是可移植的,因為如果您有用於操作系統的編譯器,則可以對其進行編譯,並且它將像這樣運行。 但是,有時您具有機器特定的代碼(或操作系統特定的代碼),例如Windows應用程序使用的基於Windows的界面無法移植到另一個操作系統。 我能想到的一些示例就像目錄操作通常不可移植,並且通常取決於您所使用的操作系統。 但是,大多數文件操作(如fopen)都是可移植的。

操作系統有點不同。 它需要不同類型的編譯器,並且需要不同的加載方式。 大多數操作系統都是用C / C ++制作的,然后由編譯器進行編譯,然后再進行分發。 例如,Microsoft用C / C ++編寫Windows 95,他們將其放入編譯器,然后將生成的可執行代碼刻錄到CD-ROM中,然后將其出售給您,然后將磁盤放入其中,它將復制生成的可執行代碼到您的機器上,然后使用它。

他們沒有給您源代碼,然后您的計算機將其編譯。 通常是他們給您生成的可執行文件。

基本上,操作系統是在其中運行所有其他程序的程序。 它實際上是計算機啟動時開始運行的第一個程序。 這樣,它控制所有硬件,並充當網守,讓其他程序訪問該硬件。 它還控制(或至少應該)在其下運行的所有程序-它們何時啟動,如何停止以及可以訪問哪些資源。 您可以將其稱為“主控制程序”

術語“操作系統”在應用於PC時,通常是指一種現代的“受保護的內存”操作系統,它不僅提供基本的系統服務,而且還提供完整的用戶界面:

  • 內核,設備驅動程序和提供內存保護的系統服務,不會干擾彼此內存的任務以及作為進程內執行單元的線程的組合,以及線程和任務與每個對象進行通信的方式的組合實際上,其他資源以及訪問諸如PC硬盤之類的存儲設備上的包含文件的共享資源(如包含文件的文件系統)實際上是操作系統的核心。

  • 該操作系統頂部的“外殼”可能與DOS上的“ command.com”文本命令提示符一樣簡單(還記得“ C:> _“?),也可能與Windows Shell(包括其控制面板)一樣復雜。 。

有時,“ Linux發行版”包含的內容遠不止一個操作系統,而是用一個單一名稱(例如Ubuntu)非正式地引用,因此操作系統(例如linux內核和標准庫)與僅隨該操作系統一起提供的應用程序(Linux上的Gnome和KDE環境)是非常灰色的。

要了解操作系統的真正含義,一種好方法是閱讀Tannenbaum關於操作系統的書之一。 我相信他會詳細展示其“ minix”內核的實現。 另一本書是“ Linux Kernel Internals”。 如果您可以處理此類書籍中的技術細節,那么您可以真正理解操作系統的“內核”,然后開始理解該內核周圍的各個層。

我不知道主要用C ++編寫的一種商業或開源操作系統。 這種系統級編程通常是將純ANSI C和匯編語言/機器語言混合使用。 低級匯編位通常與諸如處理中斷,初始化硬件和啟動系統之類的任務有關。 在擁有堆,堆棧和有效的虛擬內存系統之前,您將不希望使用C ++對象,甚至不希望使用某些C功能(例如malloc)。 您的資源和設計必須受到性能標准的約束,並且任何形式的額外開銷(甚至是語義開銷)都應該受到譴責。

最近,Linus Torvalds著名地侮辱了C ++,並在郵件列表中描述了為什么他永遠不會將其用於Linux內核。 但是,我相信C ++會在通常是“純C”天堂的領域中取得進展。 例如,Gnu GCC團隊終於願意現在允許C ++進入GCC代碼庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM