硬件結(jié)構(gòu)框架
??PC中最重要的三個部件分別是CPU,內(nèi)存,I/O控制器;基于C或者匯編語言寫底層程序時,需要了解這三部分(對于更高級的程序語言,比如java等是基于一個抽象的虛擬機進行編程的,物理機器的相關(guān)細節(jié)甚至包括操作系統(tǒng)都通過虛擬機進行了屏蔽).
三個部件的組織形式.
??早期的PC,CPU和內(nèi)存的工作頻率基本一致,并且也沒有太多的IO設(shè)備,所以所有設(shè)備通過一條總線掛在一起,如下圖:

??后來由于CPU頻率不斷提升,導(dǎo)致內(nèi)存頻率跟不上CPU的頻率,所以產(chǎn)生了和內(nèi)存頻率(即CPU的外頻)一樣的系統(tǒng)總線,同時圖形設(shè)備也需要和CPU以及內(nèi)存進行大量的數(shù)據(jù)交換.另外相對于這些高速設(shè)備還有一些低速設(shè)備,比如磁盤,USB等設(shè)備.如果這些設(shè)備和前面一樣直接連接在一條總線上,硬件設(shè)計就會很復(fù)雜,所以對總線進行了分級設(shè)計,就是南北橋設(shè)計.南橋用于高速設(shè)備,基于PCI結(jié)構(gòu),北橋用于低速設(shè)備,基于ISA結(jié)構(gòu).如下圖:

操作系統(tǒng)
操作系統(tǒng)的作用:
- 管理硬件資源,最大限度的有效利用硬件資源,通過提供進程等機制;
- 為應(yīng)用程序提供統(tǒng)一的應(yīng)用程序接口,即API(Application Programming Interface);
- 屏蔽硬件的差異性;
很多復(fù)雜性的工程問題,都可以通過分層的思想來降低復(fù)雜度。操作系統(tǒng)也是類似。操作系統(tǒng)和應(yīng)用軟件以及硬件的關(guān)系如下圖:

發(fā)展過程:
- 多道程序,監(jiān)控硬件資源一旦閑置就啟用新的等待程序,缺點是調(diào)度策略粗糙;
- 早期的分時系統(tǒng),程序執(zhí)行過程中主動讓出硬件資源一段時間,供其他程序運行,但這個讓出是應(yīng)用程序主動讓出,而不是被動。這是的操作系統(tǒng)只負責(zé)讓出后,加載新的程序;
- 多任務(wù)系統(tǒng),有了進程和優(yōu)先級的概念,搶占執(zhí)行,目前的操作系統(tǒng)都是基于多任務(wù)的,比如:Linux,windows NT等。
CPU的大小端模式
大小端模式是CPU的硬件屬性,Inter是小端模式,一般嵌入式是大段模式。大段模式和小段模式的CPU,存放數(shù)據(jù)方式如下:

對于32bit數(shù)據(jù)0x12345678,的實際存放如上圖,16bit數(shù)據(jù)類似,但是8bit數(shù)據(jù)沒有區(qū)別。也就是說:
小端模式,低地址存放低有效位,更符合邏輯;
大段模式,低地址存放高有效位,查看內(nèi)存更為方便,因為內(nèi)存低地址在前面。
函數(shù)調(diào)用過程
IA32中用程序棧來支持函數(shù)(過程)調(diào)用,棧主要特性是“后進先出”的一個單向隊列,只能對棧頂進行操作,數(shù)據(jù)壓入棧頂,彈出棧頂?shù)臄?shù)據(jù)。并且在IA32中,棧頂是低地址,棧底是高地址,esp寄存器永遠指向棧頂。如下為一個棧的原始結(jié)構(gòu):
用pushl %eax,將%eax寄存器中的內(nèi)容壓入棧中(注意pushl是32bit壓棧),執(zhí)行效果如下:

對于上面的單個壓棧指令pushl %eax,實際上等同于,下面兩條指令:
subl $4,%esp ;棧頂指針%esp = %esp-4
movl %eax,(%esp) ;數(shù)據(jù)移動
popl出棧指令,與壓棧指令的過程剛好相反。