這個是我自編的C語言教材的第一章,主要分兩個部分,一個是計算機組成及工作原理,一個是信息的數(shù)字化.有什么不足的,大家可以補充,也可以提些建議.
第一章計算機和數(shù)據(jù)的存儲
第一節(jié) 了解計算機
很奇怪的一件事,現(xiàn)在的C語言教材,一上來就是變量,表達式,一點也不提計算機原理方面的事,把C語言當作語言,數(shù)學來學,只是生硬的列出一些語法規(guī)則,學生們難以理解,只好死記硬背,沒有把握住本質(zhì)的東西,也就無法隨心所欲,其實C語言是一門非常好學的語言,核心的語法規(guī)則是非常少的,而且都是和計算機息息相關(guān),所以必須要學習好計算機的一些基礎,掌握好計算機的基礎知識對學習C語言至關(guān)重要,對將來其它語言的編程都極其有益,C語言還有一個優(yōu)點,就是寫法非常簡潔明了,和c++,java,C#,javascript等語言有著非常相似的書寫方式,所以學好C語言,可以輕松的過渡到大量其它編程語言。講完C以后,將陸續(xù)推出java ,C#,C++,javascript,ruby,python等,不過都是在此教程的基礎之上進行,所以C語言乃基礎之基礎,想要學編程,強烈建議從C語言開始。
下面開始了解計算機。
按照馮諾依曼的理論,計算機含有5個部分,運算器、控制器、存儲器、輸入和輸出設備。現(xiàn)在我們通常把運算器、控制器和在一起,稱為CPU(中央處理器),存儲器就是我們說的內(nèi)存和硬盤,輸入設備就是鼠標,鍵盤等,輸出設備主要是顯示器、打印機、繪圖儀等。
其中CPU和內(nèi)存最關(guān)鍵,CPU是執(zhí)行指令的部件,內(nèi)存是一些連續(xù)的存儲單元,用來存儲指令和數(shù)據(jù),每個單元可以存8位二進制數(shù),也稱為1個字節(jié),計算機里存儲器都是以字節(jié)為單位的,在描述網(wǎng)絡速度的時候通常以位為單位,大家注意區(qū)別。CPU要執(zhí)行的指令就存在內(nèi)存里,CPU按照指定順序連續(xù)地執(zhí)行內(nèi)存中的指令,這就是馮諾依曼體系的基本工作原理。
什么是指令,就是一些二進制的數(shù),比如10010001是一條加法指令,10011011是一條存儲指令,CPU遇見不同的指令就會完成不同的操作,CPU能夠執(zhí)行的指令是生產(chǎn)廠家生產(chǎn)時就設計好的,比如8086基本指令有70條,那么CPU就只認識這70條指令,CPU在不斷升級,除了運行速度加快還會增加一些新的指令,CPU的指令分三大類:傳送,計算,跳轉(zhuǎn),其實我們的編程語言也就能完成這些功能。其中傳送主要是管理存儲器,管理數(shù)據(jù)如何存儲,是最重要的,計算比較簡單,主要是數(shù)學計算,跳轉(zhuǎn)讓計算機有了智能。
什么是數(shù)據(jù),數(shù)據(jù)可以是要計算的數(shù)字,也可以是一篇文章,一幅畫,一首歌,這些東西必須先存到內(nèi)存里,才能讓CPU傳送到顯卡,聲卡,我們才能聽見看見。在內(nèi)存里指令和數(shù)據(jù)是分開存放的,我們在編寫程序時用到的內(nèi)存通常是指存儲數(shù)據(jù)用的數(shù)據(jù)區(qū),在一條指令里,往往也分操作碼和操作數(shù),操作數(shù)也是一種數(shù)據(jù),只不過它是指令的一部分,存儲在指令區(qū),這種數(shù)據(jù)稱為操作數(shù),以后也會用到。
什么是程序,程序就是由一批指令和數(shù)據(jù)組合在一起構(gòu)成的二進制數(shù)據(jù)集。但如果要用二進制來寫程序,那估計肯定有人罵街了,我們通常用能看懂的字母和阿拉伯數(shù)字來寫程序,第一種被發(fā)明的編程語言叫匯編語言,它給每個二進制指令都給起了一個英文名字,叫做助記碼,我們用助記碼寫起程序來要好看多了,但是CPU是看不懂的,我們必須把它重新翻譯回二進制的才行,我們管這個叫編譯,這個工作起初是手工完成的,后來有人發(fā)明了軟件可以自動翻譯,就出現(xiàn)了編譯器,用匯編語言寫程序比起用二進制進步了一大步,可效率還是很低,于是新的語言--高級語言出現(xiàn)了,據(jù)說是先有了A語言,又有了B語言,最后出現(xiàn)了C語言,由于其優(yōu)秀的品質(zhì),PK掉了同時代的眾多語言,直到現(xiàn)在還廣為流傳。
有些人還有些迷惑,三大件之一的硬盤怎么還沒出場,其實已經(jīng)出場了,我們寫好的源程序都要存儲到硬盤上,編譯好的可執(zhí)行程序也要存儲到硬盤上,內(nèi)存是RAM,掉電就內(nèi)容沒有了,與之對應的是ROM,永久保存,存儲器還有另一種分類方法:隨機存儲和線性存儲,隨機存儲就是我們在訪問的時候沒有搜索的過程,只要說出地址,立即訪問,線性存儲有一個查找的過程,告訴哪個柱面,扇區(qū),磁道,通過電機旋轉(zhuǎn)找到后才能訪問數(shù)據(jù),CPU只能訪問隨機存儲器,所以內(nèi)存必須是隨機存儲器,光盤,硬盤都屬于線性存儲,只能用來做外部存儲器,現(xiàn)在比較流行的閃盤屬于隨機存儲器,可它還是ROM,既可以當內(nèi)存,也可以當外存。
硬盤上保存的有一個非常重要的程序,叫做操作系統(tǒng),其實,操作系統(tǒng)是由眾多的程序文件和數(shù)據(jù)文件組成的,沒有操作系統(tǒng)我們是很難與電腦溝通的,操作系統(tǒng)負責管理整個內(nèi)存,把系統(tǒng)需要執(zhí)行的程序加載到內(nèi)存里并執(zhí)行,這就是機器啟動的過程,用鼠標雙擊一個可執(zhí)行程序,操作系統(tǒng)就會到硬盤將其取出,加載到內(nèi)存,這就是程序加載過程,我們上邊說的程序就是這樣被加載到內(nèi)存中,才能由CPU來執(zhí)行,除了管理內(nèi)存,操作系統(tǒng)還監(jiān)視著每個程序的執(zhí)行情況,出現(xiàn)異常情況結(jié)束程序,如果內(nèi)存不夠了,操作系統(tǒng)會先把一部分內(nèi)存里的東西搬到硬盤上,等用的時候再搬回來,硬盤上的這塊地方被稱為虛擬內(nèi)存,使用虛擬內(nèi)存來回移動數(shù)據(jù)本來就浪費時間,再加上硬盤的讀取速度較慢,所以就機器就顯得很慢,加大物理內(nèi)存,少使用虛擬內(nèi)存對計算機的性能有很大的提高。除此之外,操作系統(tǒng)的另一項重要功能就是硬盤上文件的管理,不同的操作系統(tǒng)對硬盤進行管理的方式都不一樣,這個管理方式叫做文件系統(tǒng),按道理說一臺Linux的機器,掛了一塊Windows系統(tǒng)下使用的硬盤,是無法對它進行讀取,但是已經(jīng)有人開發(fā)了Linux下訪問Windows文件系統(tǒng)的軟件,因此可以識別,并進行讀取,但是反過來就不行了,除非有人開發(fā)了相應的軟件才可以。
總結(jié):
1. 計算機的核心部件:CPU和內(nèi)存
2. CPU執(zhí)行指令,內(nèi)存中存儲二進制的指令和數(shù)據(jù)
3. 可執(zhí)行程序由指令和數(shù)據(jù)構(gòu)成,寫程序時使用高級語言,經(jīng)過編譯,連接后生成可執(zhí)行的程序。
4.線性存儲與隨機存儲,ROM和RAM,硬盤,操作系統(tǒng)