本來LZ是打算好好研究一下JVM源碼的,,不過想來想去,LZ覺得應(yīng)該先了解計算機(jī)系統(tǒng)的原理,再去研究JVM源碼的精妙,。因此LZ決定潛下心來好好研究下計算機(jī)系統(tǒng)原理,這是一個漫長的過程,,因為《深入理解計算機(jī)系統(tǒng)》這本書很厚,,而且這種書一般看起來速度不會太快。因此LZ打算做好每一個階段的記錄,,有興趣的猿友可以跟著LZ一起看下,,了解計算機(jī)系統(tǒng)的運(yùn)行原理其實是很有必要的。
計算機(jī)的組成
計算機(jī)是由硬件和軟件組成的,,這兩個部分共同協(xié)作完成程序的運(yùn)行,。這兩部分如何協(xié)作完成程序的運(yùn)行,是本系列的重點(diǎn),。
信息的表示
信息的表示說到底就是位加上下文,。舉個小例子,比如11011101這一串二進(jìn)制,,在表示整數(shù)的時候它表示221,,但是如果放在JAVA的class文件當(dāng)中,它可能代表一個JVM的指令,。
程序的編譯
對于一個簡單的C語言程序來說,,一般要經(jīng)過預(yù)處理器、編譯器,、匯編器和鏈接器的處理,,才能被翻譯成一段可執(zhí)行的二進(jìn)制文件。
比如對于一個簡單的C語言程序,,如下,。
#include <stdio.h>
int main()
{
printf("hello,world\n");
}
我們保存在hello.c當(dāng)中。
程序的運(yùn)行
程序的運(yùn)行由解釋器負(fù)責(zé),,它將逐個解釋最終生成的二進(jìn)制文件并執(zhí)行,。
計算機(jī)的硬件組成
首先,,我們來看下計算機(jī)中硬件的大致分布。
其中有幾個非常重要的部分,,一一看下都是什么作用,。
總線:貫穿整個系統(tǒng)的是一組電子管道(其實就是傳輸數(shù)據(jù)的線路),也就是總線,??偩€傳送的是字,字的大小與系統(tǒng)相關(guān),,比如在32位操作系統(tǒng)當(dāng)中,,一個字是4個字節(jié)。
I/O設(shè)備:I/O設(shè)備是系統(tǒng)與外部聯(lián)系的通道,。I/O設(shè)備(鍵盤,、鼠標(biāo)、顯示器等)由控制器(USB控制器)或者適配器(圖形適配器,,也就是顯卡)與I/O總線相連,,兩者的區(qū)別在于一個是主板上的芯片組,一個是主板插槽上的卡,。
主存:它是計算機(jī)中的一個臨時存儲設(shè)備,在處理器執(zhí)行程序的時候,,主存就是臨時存放數(shù)據(jù)的地方,。物理上來說,它是由動態(tài)隨即存取存儲器芯片組成,,邏輯上來說,,它是一組連續(xù)的字節(jié)數(shù)組,每一個字節(jié)都有唯一的地址,。
處理器:全稱中央處理單元,,是解釋存儲在主存中指令的引擎。處理器的核心是一個程序計數(shù)器,,它在整個計算機(jī)運(yùn)行的期間都會指向一個主存中的一個內(nèi)存地址,,而地址當(dāng)中則是一個計算機(jī)指令。處理器所做的,,就是不停的執(zhí)行程序計數(shù)器所指向的每一條指令,。處理器所做的操作是圍繞主存、寄存器文件以及算術(shù)/邏輯單元進(jìn)行的,,這里面處理器做的最多的動作就是加載(從主存將數(shù)據(jù)復(fù)制到寄存器),、存儲(從寄存器將數(shù)據(jù)復(fù)制到主存)、操作(將兩個寄存器的內(nèi)容復(fù)制到算術(shù)/邏輯單元進(jìn)行操作,,結(jié)果會再次復(fù)制到寄存器)以及跳轉(zhuǎn)(改變程序計數(shù)器當(dāng)中的內(nèi)容),。
處理器當(dāng)中提到的是指令集結(jié)構(gòu),,不過實際當(dāng)中指令集的實現(xiàn)是非常復(fù)雜的,這么做的目的是為了加速CPU的運(yùn)算速度,。我們可以這樣去區(qū)分指令集機(jī)構(gòu)以及微體系結(jié)構(gòu),,指令集結(jié)構(gòu)是指令集的抽象描述,而微體系結(jié)構(gòu)則是這個抽象描述的某一個具體實現(xiàn),,類似于JAVA虛擬機(jī)與JAVA虛擬機(jī)實現(xiàn)的關(guān)系,。
本章小結(jié)
計算機(jī)是由軟件與硬件組成的,而硬件又包括了總線,、I/O設(shè)備,、主存以及處理器,其中信息是由位以及上下文表示的,,而信息則是從I/O設(shè)備以位的形式通過總線進(jìn)入主存,,然后由處理器從主存將信息取出處理。
一個程序的執(zhí)行,,是經(jīng)歷了預(yù)處理器,、編譯器、匯編器以及鏈接器的處理之后,,才最終成為可執(zhí)行的文件,。當(dāng)程序成為可執(zhí)行文件時就已經(jīng)保存在了磁盤上,具體的執(zhí)行過程在下一章再總結(jié),。