计算机基础- -操作系统环境
計算機基礎- -操作系統環境
文章目錄
- 計算機基礎- -操作系統環境
- 一、操作系統環境
- 二、Windows操作系統克服了CPU以外的硬件差異
- 三、不同操作系統的API差異性
- 四、FreeBSD Port幫你輕松使用源代碼
- 五、可以使用虛擬機獲取其他環境
- 提供相同運行環境的Java虛擬機
- 六、BIOS和引導
- 七、操作系統功能的歷史
- 八、把操作系統放在第一位
- 九、系統調用和編程語言的移植性
- 十、操作系統和高級編程語言使硬件抽象化
- 十一、Windows操作系統的特征
- 1.32位操作系統
- 2.通過API函數集來提供系統調用
- 3.提供采用了GUI的用戶界面
- 4.通過WYSIWYG實現打印輸出
- 5.提供多任務功能
- 6.提供網絡功能和數據庫功能
- 7.通過即插即用實現設備驅動的自動設定
一、操作系統環境
- 程序中包含著運行環境這一內容,可以說運行環境=操作系統+硬件,操作系統又可以被稱為軟件,它是由一系列的指令組成的。
我們不介紹操作系統,我們主要來介紹一下硬件的識別。我們肯定都玩兒過游戲,你玩兒游戲前需要干什么?是不是需要先看一下自己的筆記本或者電腦是不是能肝的起游戲?
圖中的主要配置如下:
- 操作系統版本:說的就是應用程序運行在何種系統環境,現在市面上主要有三種操作系統環境,Windows、Linux和Unix, 一般我們玩兒的大型游戲幾乎都是在Windows上運行, 可以說Windows是游戲的天堂。Windows操作系統也會有區分, 分為32位操作系統和64位操作系統, 互不兼容。
- 處理器:處理器指的就是CPU, 你的電腦的計算能力, 通俗來講就是每秒鐘能處理的指令數, 如果你的電腦覺得卡帶不起來的話, 很可能就是CPU的計算能力不足導致的。
- 顯卡:顯卡承擔圖形的輸出任務, 因此又被稱為圖形處理器(Graphic Processing Unit, GPU)顯卡也非常重要
- 內存:內存即主存,就是你的應用程序在運行時能夠動態分析指令的這部分存儲空間,它的大小也能決定你電腦的運行速度。
- 存儲空間:存儲空間指的就是應用程序安裝所占用的磁盤空間,由圖中可知,此游戲的最低存儲空間必須要大于5GB,其實我們都會遺留很大一部分用來安裝游戲。
從程序的運行環境這一角度來考量的話, CPU的種類是特別重要的參數, 為了使程序能夠正常運行,必須滿足CPU所需的最低配置。
- CPU只能解釋其自身固有的語言。不同的CPU能解釋的機器語言的種類也是不同的。
- 機器語言的程序稱為本地代碼(native code) , 程序員用C等高級語言編寫的程序,僅僅是文本文件。文本文件(排除文字編碼的問題)在任何環境下都能顯示和編輯。我們稱之為源代碼。通過對源代碼進行編譯,就可以得到本地代碼。
下圖反映了這個過程:
二、Windows操作系統克服了CPU以外的硬件差異
- 計算機的硬件并不僅僅是由CPU組成的, 還包括用于存儲程序指令的數據和內存,以及通過I/O連接的鍵盤、顯示器、硬盤、打印機等外圍設備。
- 在WIndows軟件中, 鍵盤輸入、顯示器輸出等并不是直接向硬件發送指令。而是通過向Windows發送指令實現的。
因此, 程序員就不用注意內存和I/O地址的不同構成了。Windows操作的是硬件而不
是軟件, 軟件通過操作Windows系統可以達到控制硬件的目的。
三、不同操作系統的API差異性
接下來我們看一下操作系統的種類。同樣機型的計算機,可安裝的操作系統類型也會有多種選擇。
例如:AT兼容機除了可以安裝Windows之外, 還可以采用Unix系列的Linux以及FreeBSD(也是一種Unix操作系統) 等多個操作系統。
- 當然,應用軟件則必須根據不同的操作系統類型來專門開發。CPU的類型不同,所對應機器的語言也不同,同樣的道理,操作系統的類型不同,應用程序向操作系統傳遞指令的途徑也不同。
- 應用程序向系統傳遞指令的途徑稱為API(Application Programming Interface) 。Windows以及Linux操作系統的API, 提供了任何應用程序都可以利用的函數組合。
- 因為不同操作系統的API是有差異的。所以, 如何要將同樣的應用程序移植到另外的操作系統, 就必須要覆蓋應用所用到的API部分。
- 鍵盤輸入、鼠標輸入、顯示器輸出、文件輸入和輸出等同外圍設備進行交互的功能, 都是通過API提供的。
- 這也就是為什么Windows應用程序不能直接移植到Linux操作系統上的原因, API差異太大了。
- 在同類型的操作系統下, 不論硬件如何, API幾乎相同。但是, 由于不同種類CPU的機器語言不同,因此本地代碼也不盡相同。
四、FreeBSD Port幫你輕松使用源代碼
- 不知道你有沒有這個想法:“既然CPU不同會導致本地代碼不同, 那為何不將源代碼直接發送給程序呢?”這確實是一種解決辦法,Unix系列的FreeBSD操作系統就使用了這種方式。
- Unix系列操作系統FreeBSD中, 存在一種名為Ports 的機制。該機制能夠結合當前運行環境的硬件環境來編譯應用的源代碼,進而得到可以運行的本地代碼。如果目標應用的源代碼在硬件上找不到, Ports就會自動使用FTP連接到相應站點下載代碼。
- 全球有很多站點都提供適用于FreeBSD的應用源代碼。通過使用Ports可以利用的程序源代碼, 大約有16000種。根據不同的領域進行分類,可以隨時使用。
- FreeBSD上應用的源代碼, 大部分是用C語言來標注的,C編譯器可以結合FreeBSD的運行環境來生成合適的本地代碼。
FTP(FileTransfer Protocol) 是連接到互聯網上的計算機之間的傳送文件的協議。
五、可以使用虛擬機獲取其他環境
- 即使不通過應用程序的移植,在同一個操作系統上仍然可以使用其他的操作系統,那就是使用虛擬機軟件。
- 虛擬機(Virtual Machine) 指通過軟件的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。在實體計算機中能夠完成的工作在虛擬機中都能夠實現。
提供相同運行環境的Java虛擬機
-
除了虛擬機的方法之外, 還有一種方法能夠提供不依賴于特定硬件和操作系統的程序運行環境, 那就是Java。
-
大家說的Java其實有兩層意思, 一種是作為編程語言的Java; 一種是作為程序運行環境的Java。
-
Java與其他語言相同, 都是通過源代碼編譯后運行的。不過, 編譯后生成的不是特定CPU使用的本地代碼,而是名為字節代碼的程序。直接代碼的運行環境就稱為Java虛擬機(Java VirtualMachine) 。Java虛擬機是一邊把Java字節代碼逐一轉換為本地代碼一邊在運行著。
-
程序運行時,將編譯后的字節代碼轉換為本地代碼,這樣的操作看上去有些迂回,但由此可以實現相同的字節碼可以在不同的操作系統環境下運行。
想象一下, 你開發完成的應用部署到Linux環境下, 是不是什么都不用管?
- Java應用在虛擬機上運行Windows有專門的Windows虛擬機, Macintosh有Macintosh專門的虛擬機。
- 從操作系統來看,Java虛擬機就是一個應用, 從運行環境上來看, Java虛擬機就是運行環境。
六、BIOS和引導
-
程序的運行環境, 存在著名為BIOS(Basic Input/Output System) 的系統。BIOS存儲在ROM中,是預先內置在計算機主機內部的程序。
-
BIOS除了鍵盤、磁盤和顯卡等基本控制外, 還有引導程序的功能。引導程序是存儲在啟動驅動器啟示區域的小程序。操作系統的啟動驅動器一般硬盤。不過有時也可能是CD-ROM或軟盤。
-
電腦開機后, BIOS會確認硬件是否正常運行, 沒有異常的話會直接啟動引導程序。引導程序的功能是把在硬盤等記錄的OS加載到內存中運行。雖然啟動應用是OS的功能,但OS不能啟動自己,是通過引導程序來啟動的。
-
利用計算機運行程序大部分都是為了提高處理效率。例如, Microsoft Word這樣的文字處理軟件, 是用來提高文本文件處理效率的程序, Microsoft Excel等表格計算軟件, 是用來提高賬本處理效率的程序。
-
這種為了提高特定處理效率的程序統稱為應用
-
程序員的工作就是編寫各種各樣的應用來提高工作效率,程序員一般不編寫操作系統,但是程序員編寫的應用離不開操作系統,
下面我們就針對Windows操作系統來說明一下操作系統和應用之間的關系。
七、操作系統功能的歷史
- 操作系統其實也是一種軟件,任何新事物的出現肯定都有它的歷史背景,那么操作系統也不是憑空出 現的,肯定有它的歷史背景。
- 在計算機尚不存在操作系統的年代,完全沒有任何程序,人們通過各種按鈕來控制計算機,這一過程非常麻煩。
- 于是,有人開發出了僅具有加載和運行功能的監控程序,這就是操作系統的原型。
- 通過事先啟動監控程序,程序員可以根據需要將各種程序加載到內存中運行。雖然仍舊比較麻煩,但比起在沒有任何程序的狀態下進行開發,工作量得到了很大的緩解
- 隨著時代的發展,人們在利用監控程序編寫程序的過程中發現很多程序都有公共的部分。
- 例如,通過鍵盤進行文字輸入,顯示器進行數據展示等,如果每編寫一個新的應用程序都需要相同的處理的話,那真是太浪費時間了。
- 因此,基本的輸入輸出部分的程序就被追加到了監控程序中。初期的操作系統就是這樣誕生了
- 初期的操作系統=監控程序+基本的輸入輸出程序
- 類似的想法可以共用,人們又發現有更多的應用程序可以追加到監控程序中,比如硬件控制程序,程語言處理器(匯編、編譯、解析)以及各種應用程序等,結果就形成了和現在差異不大的操作系統,也就是說,其實操作系統是多個程序的集合體
匯編語言是一種低級語言,也被稱為符號語言。
匯編語言是第二代計算機語言,在匯編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。用一些容易理解 和記憶的字母, 單詞來代替一個特定的指令,
比如:用ADD代表數字邏輯上的加減, MOV代表數據傳遞等等,通過這種方法,人們很容易去閱讀已經完成的程序或者理解程序正在執行的功 能,對現有程序的bug修復以及運營維護都變得更加簡單方便
八、把操作系統放在第一位
- 對于程序員來說,程序員創造的不是硬件,而是各種應用程序,但是如果程序員只做應用不懂硬件層面的知識的話,是無法成為硬核程序員的
- 在操作系統誕生之后,程序員不需要在硬件層面考慮問題,所以程序員的數量就增加了。哪怕自稱對硬件一竅不通的人也可能制作出一個有模有樣的程序。
- 不過,要想成為一個全面的程序員,有一點需要清楚的就是,掌握硬件的基本知識,并借助操作系統進行抽象化,可以大大提高編程效率。
下面就看一下操作系統是如何給開發人員帶來便利的, 在Windows操作系統下, 用C語言制作一個具有表示當前時間功能的應用:
- 讀者可以自行運行程序查看結果,我們主要關注硬件在這段代碼中做了什么事情
- 通過time_t tm, 為time_t類型的變量申請分配內存空間;
- 通過time(&tm) , 將當前的日期和時間數據保存到變量的內存空間中
- 通過printf”%s\n”, c time(&tm) ) , 把變量內存空間的內容輸出到顯示器上。
- 應用的可執行文件指的是, 計算機的CPU可以直接解釋并運行的本地代碼, 不過這些代碼是無法直接控制硬件的,事實上,這些代碼是通過操作系統來間接控制硬件的。
- 變量中涉及到的內存分配情況,以及time() 和printf(這些函數的運行結果, 都不是面向硬件而是面向操作系統的。操作系統收到應用發出的指令后,首先會對該指令進行解釋,然后會對時鐘IC和顯示器用的I/O進行控制。
九、系統調用和編程語言的移植性
- 操作系統控制硬件的功能,都是通過一些小的函數集合體的形式來提供的。這些函數以及調用函數的行為稱為系統調用,也就是通過應用進而調用操作系統的意思。
在前面的程序中用到了 printf以及 time()函數,這些函數內部也封裝了系統調用。
-
C語言等高級編程語言并不依存于特定的操作系統, 這是因為人們希望不管是Windows操作系統還是Linux操作系統都能夠使用相同的源代碼。
-
因此,高級編程語言的機制就是,使用獨自的函數名,然后在編譯的時候將其轉換為系統調用的方式(也有可能是多個系統調用的組合)。
-
也就是說,高級語言編寫的應用在編譯后,就轉換成了利用系統調用的本地代碼。
-
不過,在高級語言中也存在直接調用系統調用的編程語言,不過,利用這種方式做成應用,移植性并不友好。
移植性:移植性指的是同樣的程序在不同操作系統下運行時所花費的時間,時間越少證明移植性 越好。
十、操作系統和高級編程語言使硬件抽象化
- 通過使用操作系統提供的系統調用,程序員不必直接編寫控制硬件的程序,而且,通過使用高級編程語言,有時也無需考慮系統調用的存在,系統調用往往是自動觸發的,操作系統和高級編程語言能夠使硬件抽象化,這很了不起。
下面讓我們看一個硬件抽象化的具體實例
-
上述代碼使用C編寫的程序,fputs()是用來往文件中寫入字符串的函數,fclose()是用來關閉文件的函數。
-
磁盤就如同樹的年輪,磁盤的讀寫是以扇區為單位的,通過磁道來尋址,如果直接對硬件讀寫的話,那么就會變為通過向磁盤用的I/O指定扇區位置來對數據進行讀寫了。
-
但是, 在上面代碼中, 扇區壓根就沒有出現過傳遞給fopen()函數的參數, 是文件名My File.txt和指定文件寫入的w。
-
傳遞給fputs) 的參數, 是往文件中寫入的字符串”你好”和fp, 傳遞給fclose)的參數,也僅僅是fp
-
也就是說磁盤通過打開文件這個操作,把磁盤抽象化了,打開文件這個操作就可以說是操作硬件的指令。
-
下面讓我們來看一下代碼清單中fp的功能, 變量fp中被賦予的是fopen) 函數的返回值, 該值被稱為文件指針。
-
應用打開文件后,操作系統就會自動申請分配用來管理文件讀寫的內存空間。內存地址可以通過fopen() 函數的返回值獲得。
-
用fopen打開文件后, 接下來就是通過制定的文件指針進行操作, 正因為如此, fputs() 和fclose() 參數中都制定了文件指針。
由此我們可以得出一個結論,應用程序是通過系統調用,磁盤抽象來實現對硬盤的控制的。
十一、Windows操作系統的特征
- Windows操作系統是世界上用戶數量最龐大的群體, 作為Windows操作系統的資深用戶, 你都知道Windows操作系統有哪些特征嗎?
- Windows操作系統有兩個版本:32位和64位
- 通過 API函數集成來提供系統調用
- 提供了采用圖形用戶界面的用戶界面
- 通過WYSIWYG實現打印輸出, WYSIWYG其實就是What You See Is What
You Get, 值得是顯 示器上顯示的圖形和文本都是可以原樣輸出到打印機打印的。 - 提供多任務功能,即能夠同時開啟多個任務
- 提供網絡功能和數據庫功能 通過即插即用實現設備驅動的自設定
1.32位操作系統
- 這里表示的32位操作系統表示的是處理效率最高的數據大小。Windows處理數據的基本單位是32 位。
- 這與最一開始在MS-DOS等16位操作系統不同,因為在16位操作系統中處理32位數據需要兩次,而32位操作系統只需要一次就能夠處理32位的數據, 所以一般在windows上的應用, 它們的最高能夠處理的數據都是32位的。
- 比如, 用C語言來處理整數數據時, 有8位的char類型, 16位的short類型, 以及32位的long類型三個選項, 使用位數較大的long類型進行處理的話, 增加的只是內存以及磁盤的開銷, 對性能影響不大。
現在市面上大部分都是64位操作系統了,64位操作系統也是如此。
2.通過API函數集來提供系統調用
-
Windows是通過名為 API 的函數集來提供系統調用的。API是聯系應用程序和操作系統之間的接口,全稱叫做Application Programming Interface, 應用程序接口。
-
當前主流的32位版Windows API也稱為Win32API, 之所以這樣命名, 是需要和不同的操作系統進行區分, 比如最一開始的16位版的Win16API, 和后來流行Win64API
-
API通過多個DLL文件來提供, 各個API的實體都是用C語言編寫的函數。所以, 在C語言環境下,使用API更加容易, 比如API所用到的MessageBox()函數, 就被保存在了Windows提供的user 32.dll這個DLL文件中。
3.提供采用了GUI的用戶界面
- GUI(Graphical UserInterface) 指得就是圖形用戶界面, 通過點擊顯示器中的窗口以及圖標等可視化的用戶界面
- 舉個例子:Linux操作系統就有兩個版本, 一種是簡潔版, 直接通過命令行控制硬 件,還有一種是可視化版,通過光標點擊圖形界面來控制硬件。
4.通過WYSIWYG實現打印輸出
-
WYSIWYG指的是顯示器上輸出的內容可以直接通過打印機打印輸出。
-
在Windows中, 顯示器和打印機被認作同等的圖形輸出設備處理的, 該功能也為WYSIWYG提供了條件。
-
借助WYSIWYG功能, 程序員可以輕松不少。最初, 為了是現在顯示器中顯示和在打印機中打印, 就必須分別編寫各自的程序, 而在Windows中, 可以借助WYSIWYG基本上在一個程序中就可以做到顯示和打印這兩個功能了。
5.提供多任務功能
- 多任務指的就是同時能夠運行多個應用程序的功能, Windows是通過時鐘分割技術來實現多任務功能 的。
- 時鐘分割指的是短時間間隔內,多個程序切換運行的方式。在用戶看來,就好像是多個程序在同時 運行,其底層是 CPU時間切片,這也是多線程多任務的核心。
6.提供網絡功能和數據庫功能
-
Windows中, 網絡功能是作為標準功能提供的。數據庫(數據庫服務器) 功能有時也會在后面追加。
-
網絡功能和數據庫功能雖然并不是操作系統不可或缺的,但因為它們和操作系統很接近,所以被統稱為中間件而不是應用。意思是處于操作系統和應用的中間層,操作系統和中間件組合在一起,稱為系統軟件。
-
應用不僅可以利用操作系統,也可以利用中間件的功能。
-
相對于操作系統一旦安裝就不能輕易更換,中間件可以根據需要進行更換,不過,對于大部分應用來說,更換中間件的話,會造成應用也隨之更換,從這個角度來說,更換中間件也不是那么容易。
7.通過即插即用實現設備驅動的自動設定
- 即插即用(Plug-and-Play) 指的是新的設備連接(plug) 后就可以直接使用的機制,新設備連接計算機后,計算機就會自動安裝和設定用來控制該設備的驅動程序,設備驅動是操作系統的一部分,提供了同硬件進行基本的輸入輸出的功能。
鍵盤、鼠標、顯示器、磁盤裝置等,這些計算機中必備的硬件的設備驅動,一般都是隨操作系統一起安裝的。
有時DLL文件也會同設備驅動文件一起安裝。這些DLL文件中存儲著用來利用該新追加的硬件API,通過API, 可以制作出運行該硬件的心應用
總結
以上是生活随笔為你收集整理的计算机基础- -操作系统环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基础- -认识磁盘
- 下一篇: 计算机基础- -认识汇编