程序員需要了解的硬核知識之操作系統(tǒng)入門
對于程序員來說,最莫大的榮耀莫過于自己的軟件被大多數(shù)人使用了吧。
歷史文章請戳
程序員需要了解的硬核知識之內(nèi)存
程序員需要了解的硬核知識之CPU
程序員需要了解的硬核知識之二進制
程序員需要了解的硬核知識之磁盤
程序員需要了解的硬核知識之壓縮算法
本篇文章作為操作系統(tǒng)的入門文章,可能入門都算不上吧,畢竟操作系統(tǒng)太龐大和復雜了。本篇文章主要帶你了解一下我們常用的操作系統(tǒng)環(huán)境。
操作系統(tǒng)環(huán)境
程序中包含著運行環(huán)境這一內(nèi)容,可以說 運行環(huán)境 = 操作系統(tǒng) + 硬件 ,操作系統(tǒng)又可以被稱為軟件,它是由一系列的指令組成的。我們不介紹操作系統(tǒng),我們主要來介紹一下硬件的識別。
我們肯定都玩兒過游戲,你玩兒游戲前需要干什么?是不是需要先看一下自己的筆記本或者電腦是不是能肝的起游戲?下面是一個游戲的配置(懷念一下 wow)
圖中的主要配置如下
操作系統(tǒng)版本:說的就是應用程序運行在何種系統(tǒng)環(huán)境,現(xiàn)在市面上主要有三種操作系統(tǒng)環(huán)境,Windows 、Linux 和 Unix ,一般我們玩兒的大型游戲幾乎都是在 Windows 上運行,可以說 Windows 是游戲的天堂。Windows 操作系統(tǒng)也會有區(qū)分,分為32位操作系統(tǒng)和64位操作系統(tǒng),互不兼容。
處理器:處理器指的就是 CPU,你的電腦的計算能力,通俗來講就是每秒鐘能處理的指令數(shù),如果你的電腦覺得卡帶不起來的話,很可能就是 CPU 的計算能力不足導致的。想要加深理解,請閱讀博主的另一篇文章:程序員需要了解的硬核知識之CPU
顯卡:顯卡承擔圖形的輸出任務,因此又被稱為圖形處理器(Graphic Processing Unit,GPU),顯卡也非常重要,比如我之前玩兒的劍靈開五檔(其實就是圖像變得更清晰)會卡,其實就是顯卡顯示不出來的原因。
內(nèi)存:內(nèi)存即主存,就是你的應用程序在運行時能夠動態(tài)分析指令的這部分存儲空間,它的大小也能決定你電腦的運行速度,想要加深理解,請閱讀博主的另一篇文章 程序員需要了解的硬核知識之內(nèi)存
存儲空間:存儲空間指的就是應用程序安裝所占用的磁盤空間,由圖中可知,此游戲的最低存儲空間必須要大于 5GB,其實我們都會遺留很大一部分用來安裝游戲。
從程序的運行環(huán)境這一角度來考量的話,CPU 的種類是特別重要的參數(shù),為了使程序能夠正常運行,必須滿足 CPU 所需的最低配置。
CPU 只能解釋其自身固有的語言。不同的 CPU 能解釋的機器語言的種類也是不同的。機器語言的程序稱為 本地代碼(native code),程序員用 C 等高級語言編寫的程序,僅僅是文本文件。文本文件(排除文字編碼的問題)在任何環(huán)境下都能顯示和編輯。我們稱之為源代碼。通過對源代碼進行編譯,就可以得到本地代碼。下圖反映了這個過程。
Windows 操作系統(tǒng)克服了CPU以外的硬件差異
計算機的硬件并不僅僅是由 CPU 組成的,還包括用于存儲程序指令的數(shù)據(jù)和內(nèi)存,以及通過 I/O 連接的鍵盤、顯示器、硬盤、打印機等外圍設備。
在 WIndows 軟件中,鍵盤輸入、顯示器輸出等并不是直接向硬件發(fā)送指令。而是通過向 Windows 發(fā)送指令實現(xiàn)的。因此,程序員就不用注意內(nèi)存和 I/O 地址的不同構成了。Windows 操作的是硬件而不是軟件,軟件通過操作 Windows 系統(tǒng)可以達到控制硬件的目的。
不同操作系統(tǒng)的 API 差異性
接下來我們看一下操作系統(tǒng)的種類。同樣機型的計算機,可安裝的操作系統(tǒng)類型也會有多種選擇。例如:AT 兼容機除了可以安裝 Windows 之外,還可以采用 Unix 系列的 Linux 以及 FreeBSD (也是一種Unix操作系統(tǒng))等多個操作系統(tǒng)。當然,應用軟件則必須根據(jù)不同的操作系統(tǒng)類型來專門開發(fā)。CPU 的類型不同,所對應機器的語言也不同,同樣的道理,操作系統(tǒng)的類型不同,應用程序向操作系統(tǒng)傳遞指令的途徑也不同。
應用程序向系統(tǒng)傳遞指令的途徑稱為 API(Application Programming Interface)。Windows 以及 Linux 操作系統(tǒng)的 API,提供了任何應用程序都可以利用的函數(shù)組合。因為不同操作系統(tǒng)的 API 是有差異的。所以,如何要將同樣的應用程序移植到另外的操作系統(tǒng),就必須要覆蓋應用所用到的 API 部分。
鍵盤輸入、鼠標輸入、顯示器輸出、文件輸入和輸出等同外圍設備進行交互的功能,都是通過 API 提供的。
這也就是為什么 Windows 應用程序不能直接移植到 Linux 操作系統(tǒng)上的原因,API 差異太大了。
在同類型的操作系統(tǒng)下,不論硬件如何,API 幾乎相同。但是,由于不同種類 CPU 的機器語言不同,因此本地代碼也不盡相同。
FreeBSD Port 幫你輕松使用源代碼
不知道你有沒有這個想法:“既然 CPU 不同會導致本地代碼不同,那為何不將源代碼直接發(fā)送給程序呢?”這確實是一種解決辦法,Unix 系列的 FreeBSD 操作系統(tǒng)就使用了這種方式。
Unix 系列操作系統(tǒng) FreeBSD 中,存在一種名為 Ports 的機制。該機制能夠結合當前運行環(huán)境的硬件環(huán)境來編譯應用的源代碼,進而得到可以運行的本地代碼。如果目標應用的源代碼在硬件上找不到,Ports 就會自動使用 FTP 連接到相應站點下載代碼。
全球有很多站點都提供適用于 FreeBSD 的應用源代碼。通過使用 Ports 可以利用的程序源代碼,大約有 16000 種。根據(jù)不同的領域進行分類,可以隨時使用。
FreeBSD 上應用的源代碼,大部分是用 C 語言來標注的,C 編譯器可以結合 FreeBSD 的運行環(huán)境來生成合適的本地代碼。
FTP( File Transfer Protocol) 是連接到互聯(lián)網(wǎng)上的計算機之間的傳送文件的協(xié)議。
可以使用虛擬機獲取其他環(huán)境
即使不通過應用程序的移植,在同一個操作系統(tǒng)上仍然可以使用其他的操作系統(tǒng),那就是使用 虛擬機軟件。虛擬機(Virtual Machine)指通過軟件的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。在實體計算機中能夠完成的工作在虛擬機中都能夠?qū)崿F(xiàn)。
提供相同運行環(huán)境的 Java 虛擬機
總算是提到大 Java 了, Java 大法好,除了虛擬機的方法之外,還有一種方法能夠提供不依賴于特定硬件和操作系統(tǒng)的程序運行環(huán)境,那就是 Java。
大家說的 Java 其實有兩層意思,一種是作為編程語言的 Java;一種是作為程序運行環(huán)境的 Java。Java 與其他語言相同,都是通過源代碼編譯后運行的。不過,編譯后生成的不是特定 CPU 使用的本地代碼,而是名為字節(jié)代碼 的程序。直接代碼的運行環(huán)境就稱為 Java 虛擬機(Java Virtual Machine)。Java 虛擬機是一邊把 Java 字節(jié)代碼逐一轉換為本地代碼一邊在運行著。
程序運行時,將編譯后的字節(jié)代碼轉換為本地代碼,這樣的操作看上去有些迂回,但由此可以實現(xiàn)相同的字節(jié)碼可以在不同的操作系統(tǒng)環(huán)境下運行。
想象一下,你開發(fā)完成的應用部署到 Linux 環(huán)境下,是不是什么都不用管?
Windows 有專門的 Windows 虛擬機,Macintosh 有 Macintosh 專門的虛擬機。從操作系統(tǒng)來看,Java虛擬機就是一個應用,從運行環(huán)境上來看,Java 虛擬機就是運行環(huán)境。
BIOS 和引導
最后對一些比較基礎的部分做一些補充說明。程序的運行環(huán)境,存在著名為 BIOS(Basic Input/Output System)的系統(tǒng)。BIOS 存儲在 ROM 中,是預先內(nèi)置在計算機主機內(nèi)部的程序。BIOS 除了鍵盤、磁盤和顯卡等基本控制外,還有引導程序的功能。引導程序是存儲在啟動驅(qū)動器啟示區(qū)域的小程序。操作系統(tǒng)的啟動驅(qū)動器一般硬盤。不過有時也可能是 CD-ROM 或軟盤。
電腦開機后,BIOS 會確認硬件是否正常運行,沒有異常的話會直接啟動引導程序。引導程序的功能是把在硬盤等記錄的 OS 加載到內(nèi)存中運行。雖然啟動應用是 OS 的功能,但 OS 不能啟動自己,是通過引導程序來啟動的。
文章參考:
《程序是怎樣跑起來的》第七章
關注公眾號后臺回復 191106 即可獲得《程序是怎樣跑起來的》電子書
Windows 開發(fā)者
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。