事實上電腦只認識0與1,記錄的數據也是隻能記錄0與1,因此電腦經常使用的數據是二進制的。可是咱們人類經常使用的數值運算是十進制,文字方面則有很是多的語言,經常使用的語言就有中文(又分正體與簡體中文)、英文等。那麼電腦如何記錄與顯示這些數值/文字呢?就得要經過一系列的轉換才能夠!下面咱們就來談談數值與文字的編碼系統!數據庫
早期的電腦使用的是利用通電與否的特性的真空管,若是通電就是1,沒有通電就是0,後來沿用至今,咱們稱這種只有0/1的環境爲二進制,英文稱爲binary。所謂的十進制指的是逢十進一位,所以在個位數歸爲零而十位數寫成1。因此所謂的二進制,就是逢二就前進一位的意思。瀏覽器
那二進制怎麼用呢?咱們先以十進制來解釋好了。若是以十進制來講,3456的意義爲:網絡
3456=3x103+4x102+5x101+6x100架構
特別注意:「任何數值的零次方爲1」因此100的結果就是1。一樣的,將這個原理帶入二進制的環境中,咱們來解釋一下1101010的數值轉爲十進制的話,結果以下:函數
1101010=1x26+1x25+0x24+1x23+0x22+1x21+0x20=64+32+0x16+8+0x4+2+0x1=106工具
二進制是電腦基礎中的基礎!瞭解了二進制後,八進位、十六進制就依此類推!那麼知道二進制轉成十進制後,那若是有十進制數值轉爲二進制的環境時,該如何計算?剛剛是乘法,如今則是除法!咱們一樣的使用十進制的106轉成二進制來測試一下:性能
最後的寫法就如同上面的箭頭,由最後的數字向上寫,所以可獲得1101010的數字!這些數字的轉換系統是很是重要的,由於電腦的加減乘除都是使用這些機制來處理的!學習
事實上文字文件也是被記錄爲0與1,而這個文件的內容要被取出來查閱時,必需要通過一個編碼系統的處理才行。所謂的「編碼系統」能夠想成是一個「字碼對照表」,他的概念有點像下面的圖示:測試
當咱們要寫入文件的文字數據時,該文字數據會由編碼對照表將該文字轉成數字後,再存入文件當中。一樣的,當咱們要將文件內容的數據讀出時,也會通過編碼對照表將該數字轉成對應的文字後,再顯示到屏幕上。編碼
英文編碼表爲ASCII系統,這個編碼系統中, 每一個符號(英文、數字或符號等)都會佔用1Bytes的記錄,所以總共會有28=256種變化。
中文字當中的編碼系統早期最經常使用的就是big5這個編碼表。每一箇中文字會佔用2Bytes,理論上最多能夠有216=65536,亦即最多可達6萬多箇中文字。可是由於big5編碼系統並不是將全部的位都拿來運用成爲對照,因此並不是可達這麼多的中文字碼的。目前big5僅定義了一萬三千多箇中文字,不少中文利用big5是沒法成功顯示的。
big5碼的中文字編碼對於某些數據庫系統來講是頗有問題的,某些字碼例如「許、蓋、功」等字,因爲這幾個字的內部編碼會被誤判爲單/雙引號,在寫入還不成問題,在讀出數據的對照表時,經常就會變成亂碼。不僅中文字,其餘非英語系國家也經常會有這樣的問題出現啊!
爲了解決這個問題,由國際組織ISO/IEC跳出來制訂了所謂的Unicode編碼系統,咱們經常稱呼的UTF8或萬國碼的編碼。由於這個編碼系統打破了全部國家的不一樣編碼,所以目前網際網絡社會大多朝向這個編碼系統在走。
目前的電腦系統將軟件分爲兩大類,一個是系統軟件,一個是應用程序。但咱們仍是得要了解一下什麼是程序,尤爲是機器程序,瞭解了以後再來探討一下爲何現今的電腦系統須要「操做系統」這玩意兒呢!
電腦只認識0與1,並且電腦最重要的運算與邏輯判斷是在CPU內部,而CPU實際上是具備微指令集的。所以,須要CPU幫忙工做時,就得要參考微指令集的內容,而後撰寫讓CPU讀的懂的指令碼給CPU執行,這樣就可以讓CPU運行了。
不過這樣的流程有幾個很麻煩的地方,包括:
機器只認識0與1,所以必需要學習直接寫給機器看的語言!須要瞭解全部硬件的相關功能函數,由於程序必需要寫給機器看,固然要參考機器自己的功能,而後針對該功能去撰寫程序碼。
例如,你要讓DVD影片可以放映,那就得要參考DVD光驅的硬件信息才行。萬一你的系統有比較冷門的硬件,光是參考技術手冊可能會昏倒。
每一個CPU都有獨特的微指令集,一樣的,每一個硬件都有其功能函數。所以,爲A電腦寫的程序,理論上是沒有辦法在B電腦上面運行的!並且程序碼的修改很是困難!由於是機器碼,並非人類看的懂得程序語言!
由於這樣的程序必需要針對硬件功能函數來撰寫,若是已經開發了一支瀏覽器程序,想要再開發文件管理程序時,仍是得從頭再參考硬件的功能函數來繼續撰寫。
那怎麼解決啊?爲了解決這個問題,電腦科學家設計出一種讓人類看的懂得程序語言而後創造一種「編譯器」來將這些人類可以寫的程序語言轉譯成爲機器能看懂得機器碼,如此一來咱們修改與撰寫程序就變的容易多了!目前常見的編譯器有C、C++、Java、Fortra等等。機器語言與高階程序語言的差異以下所示:
從上面的圖示能夠看到高階程序語言的程序碼是很容易閱讀的!在這樣的環境下仍是要考慮總體的硬件系統來設計程序!
舉例來講,當你須要將運行的數據寫入內存中,你就得要自行分配一個內存區塊出來讓本身的數據可以填上去,因此你還得要了解到內存的位址是如何定位的。爲了要克服硬件方面總是須要重複撰寫控制碼的問題,因此就有操做系統(Operating System,OS)的出現了!
如同前面提到的,在早期想要讓電腦執行程序就得要參考一堆硬件功能函數,而且學習機器語言纔可以撰寫程序。同時每次寫程序時都必需要從新改寫,由於硬件與軟件功能不見得都一致之故。那若是我可以將全部的硬件都驅動,而且提供一個發展軟件的參考接口來給工程師開發軟件的話,那發展軟件不就變的很是的簡單了?那就是操做系統啦!
操做系統(Operating System,OS)其實也是一組程序,這組程序的重點在於管理電腦的全部活動以及驅動系統中的全部硬件。那麼操做系統的功能就是讓CPU能夠開始判斷邏輯與運算數值、讓內存能夠開始載入/讀出數據與程序碼、讓硬盤能夠開始被存取、讓網卡能夠開始傳輸數據、讓全部周邊能夠開始運行等等。總之,硬件的全部動做都必需要經過這個操做系統來達成。核心程序所放置到內存當中的區塊是受保護的!而且開機後就一直常駐在內存當中。
既然硬件都是由核心管理,那麼若是要開發軟件的話,天然就得要去參考這個核心的相關功能!如此一來不是從本來的參考硬件函數變成參考核心功能,仍是很麻煩啊!爲了解決這個問題,操做系統一般會提供一整組的開發接口給工程師來開發軟件!工程師只要遵照該開發接口那就很容易開發軟件了!
舉例來講,咱們學習C程序語言只要參考C程序語言的函數便可,不須要再去考慮其餘核心的相關功能,由於核心的系統調用接口會主動的將C程序語言的相關語法轉成核心能夠了解的任務函數,那核心天然就可以順利運行該程序了!
若是咱們將整個電腦系統的相關軟/硬件繪製成圖的話,他的關係有點像這樣:
電腦系統主要由硬件構成,核心程序主要在管理硬件,提供合理的電腦系統資源分配(包括CPU資源、內存使用資源等等),所以只要硬件不一樣(如x86架構與RISC架構的CPU),核心就得要進行修改才行。而因爲核心只會進行電腦系統的資源分配,因此在上頭還須要有應用程序的提供,使用者纔可以操做系統的。
爲了保護核心,而且讓程序設計師比較容易開發軟件,所以操做系統除了核心程序以外,一般還會提供一整組開發接口,那就是系統調用層。軟件開發工程師只要遵循公認的系統調用參數來開發軟件,該軟件就可以在該核心上運行。軟件與核心有比較大的關係,與硬件關係則不大!硬件也與核心有比較大的關係!至於與使用者有關的,那就是應用程序!
只要可以讓計算機硬件正確無誤的運行,那就算是操做系統了。因此說,操做系統其實就是核心與其提供的接口工具。
簡單的說,上面的圖示能夠帶給咱們下面的概念:
操做系統的核心層直接參考硬件規格寫成,因此同一個操做系統程序不可以在不同的硬件架構下運行。舉例來講,我的電腦版的Windows8.1不能直接在ARM架構(手機與平板硬件)的電腦下運行。
操做系統只是在管理整個硬件資源,包括CPU、內存、輸入輸出設備及文件系統文件。若是沒有其餘的應用程序輔助,操做系統只能讓電腦主機準備穩當(Ready)!並沒有法運行其餘功能。
應用程序的開發都是參考操做系統提供的開發接口,因此該應用程序只能在該操做系統上面運行,不能夠在其餘操做系統上面運行。
既然核心主要是在負責整個電腦系統相關的資源分配與管理,那咱們知道其實整部電腦系統最重要的就是CPU與內存,所以,核心至少也要有這些功能的:
①系統調用接口(System call interface)
這是爲了方便程序開發者能夠輕易的經過與核心的溝通,將硬件的資源進一步的利用,因而須要有這個簡易的接口來方便程序開發者。
②程序管理(Process control)
一部電腦可能同時間有不少的工做跑到CPU等待運算處理,核心這個時候必需要可以控制這些工做,讓CPU的資源做有效的分配才行!另外,良好的CPU調度機制(就是CPU先運行那個工做的排列順序)將會有效的加快總體系統性能!
③內存管理(Memory management)
控制整個系統的內存管理,這個內存控制是很是重要的,由於系統全部的程序碼與數據都必需要先存放在內存當中。一般核心會提供虛擬內存的功能,當內存不足時能夠提供內存交換(swap)的功能。
④文件系統管理(Filesystem management)
文件系統的管理,例如數據的輸入輸出(I/O)等等的工做啦!還有不一樣文件格式的支持啦等等,若是核心不認識某個文件系統,那麼將沒法使用該文件格式的文件!
例如:Windows 98就不認識NTFS文件格式的硬盤。
⑤設備的驅動(Device drivers)
就如同上面提到的,硬件的管理是核心的主要工做之一,固然囉,設備的驅動程序就是核心須要作的事情!好在目前都有所謂的「可載入模塊」功能,能夠將驅動程序編輯成模塊,就不須要從新的編譯核心!
驅動程序能夠說是操做系統裏面至關重要的一環!硬件但是持續在進步中!包括主板、顯卡、硬盤等等。
操做系統一般會提供一個開發接口給硬件開發商,讓他們能夠根據這個接口設計能夠驅動他們硬件的「驅動程序」,如此一來,只要使用者安裝驅動程序後,天然就能夠在他們的操做系統上面驅動新的硬件了
由上圖咱們能夠獲得幾個小重點:
操做系統必需要可以驅動硬件,如此應用程序纔可以使用該硬件功能;通常來講,操做系統會提供開發接口,讓開發商製做他們的驅動程序;
要使用新硬件功能,必需要安裝廠商提供的驅動程序才行;驅動程序是由廠商提供的,與操做系統開發者無關。
因此,若是你想要在某個操做系統上面安裝一張新的顯卡,那麼請要求該硬件廠商提供適當的驅動程序吧!
由於驅動程序仍然是依據操做系統而開發的,因此,給Windows用的驅動程序固然不能使用於Linux的環境下了。
應用程序是參考操做系統提供的開發接口所開發出來軟件,這些軟件可讓使用者操做,以達到某些電腦的功能利用。
舉例來講,辦公室軟件(Office)主要是用來讓使用者辦公用的;影像處理軟件主要是讓使用者用來處理影音數據的;瀏覽器軟件主要是讓使用者用來上網瀏覽用的等等。
須要注意的是,應用程序是與操做系統有關係的,如同上面的圖示當中的說明。所以,若是你想要購買新軟件,請務必參考軟件上面的說明,看看該軟件是否可以支持你的操做系統!
舉例來講,若是你想要購買線上遊戲光盤,務必參考一下該光盤是否支持你的操做系統,例如是否支持Windows XP/Windows Vista/MAC/Linux等等。
咱們拿常見的微軟公司的產品來講明。Windows 8.1,Office 2013之間的關係。
Windows 8.1是一套操做系統,他必須先安裝到我的電腦上面,不然電腦沒法開機運行;Windows7與Windows8.1是兩套不一樣的操做系統,因此能在Win7上安裝的軟件不見得可在Win8.1上安裝;Windows8.1安裝好後,就只能擁有不多的功能,並無辦公室軟件;Office2013是一套應用程序,要安裝前必需要了解他能在哪些操做系統上面運行。
上一篇:計算機基礎(二)