?? linuxkernel.htm
字號:
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Memory(</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>內存</FONT><FONT SIZE=3>)</LI></P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">所有系統都具有分級的內存結構,由位于不同級別的速度和容量不同的內存組成。</P>
<P ALIGN="JUSTIFY">最快的內存是高速緩存存儲器,就象它的名字暗示的一樣</FONT><FONT SIZE=3>-</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>用于臨時存放或緩存主內存的內容。這種內存非常快但是比較昂貴,因此多數處理器芯片上內置有少量的高速緩沖存儲器,而大多數高速緩存存儲器放在系統主板上。一些處理器用一塊緩存內存同時緩存指令和數據,而另一些處理器有兩塊緩存內存</FONT><FONT SIZE=3>-</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>一個用于指令,另一個用于數據。</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>處理器有兩個內置的內存高速緩存存儲器:一個用于數據(</FONT><FONT SIZE=3>D-Cache</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>),另一個用于指令(</FONT><FONT SIZE=3>I-Cache</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)。它的外部高速緩沖存儲器(或</FONT><FONT SIZE=3>B-Cache</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)將兩者混在一起。</P>
<P ALIGN="JUSTIFY">最后一種內存是主內存。相對于外部高速緩存存儲器而言速度非常慢,對于</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>內置的高速緩存存儲器,主內存簡直是在爬。</P>
<P ALIGN="JUSTIFY">高速緩存存儲器和主內存必須保持同步(一致)。換句話說,如果主內存中的一個字保存在高速緩存存儲器的一個或多個位置,那么系統必須保證高速緩存存儲器和主內存的內容一樣。使高速緩沖存儲器同步的工作一部分是由硬件完成,另一部分則是由操作系統完成的。對于其它一些系統的主要任務,硬件和軟件也必須緊密配合。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Buses</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>(總線)</LI></P>
<P ALIGN="JUSTIFY">系統板的各個組成部分由被稱為總線的連接系統互連在一起。系統總線分為三種邏輯功能:地址總線、數據總線和控制總線。地址總線指定了數據傳輸的內存位置(地址),數據總線保存了傳輸的數據。數據總線是雙向的,它允許</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>讀取,也允許</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>寫。控制總線包含了各種信號線用于在系統中發送時鐘和控制信號。有許多種不同的總線類型,</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>總線是系統用于連接外設的常用方式。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Controllers and Peripherals </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>(控制器和外設)</LI></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">外設指實在的設備,如由系統板或系統板插卡上的控制芯片所控制的圖形卡或磁盤。</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>控制芯片控制</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>磁盤,而</FONT><FONT SIZE=3>SCSI</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>控制芯片控制</FONT><FONT SIZE=3>SCSI</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>磁盤。這些控制器通過不同的總線連接到</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>并相互連接。現在制造的大多數系統都是用</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>或</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>總線將系統的主要部件連接在一起。控制器本身也是象</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>一樣的處理器,它們可以看作</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的智能助手,</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>擁有系統的最高控制權。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">所有的控制器都是不同的,但是通常它們都有用于控制它們的寄存器。</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>上運行的軟件必須能夠讀寫這些控制寄存器。一個寄存器可能包含描述錯誤的狀態碼,另一個寄存器可能用于控制用途,改變控制器的模式。一個總線上的每一個控制器都可以分別被</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>尋址,這樣軟件設備驅動程序就可以讀寫它的寄存器進而控制它。</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>電纜是一個好例子,它給了你分別存取總線上每一個驅動器的能力。另一個好例子是</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>總線,允許每一個設備(如圖形卡)被獨立存取。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Address Spaces</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>(尋址空間)</LI></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">連接</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>和主內存的系統總線以及連接</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>和系統硬件外設的總線是分離的。硬件外設所擁有的內存空間稱為</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>空間。</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>空間本身可以再進一步劃分,但是我們現在先不討論。</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>可以訪問系統內存空間和</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>空間,而控制器只能通過</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>間接訪問系統內存。從設備的角度來看,比如軟驅控制器,它只能看到它的控制寄存器所在的地址空間(</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>),而非系統內存。一個</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>用不同的指令去訪問內存和</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>空間。例如,可能有一條指令是“從</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>地址</FONT><FONT SIZE=3>0x3f0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>讀取一個字節到</FONT><FONT SIZE=3>X</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>寄存器“。這也是</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>通過讀寫系統硬件外設處于</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>地址空間的寄存器從而控制外設的方法。在地址空間中,普通外設(如</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>控制器,串行端口,軟驅控制器等等)的寄存器在</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>外設的多年發展中已經成了定例。</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>空間的地址</FONT><FONT SIZE=3>0x3f0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>正是串行口(</FONT><FONT SIZE=3>COM1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)的控制寄存器的地址。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">有時控制器需要直接從系統內存讀取大量內存,或直接寫大量數據到系統內存中去。比如將用戶數據寫到硬盤上去。在這種情況下,使用直接內存存取(</FONT><FONT SIZE=3>DMA</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)控制器,允許硬件設備直接存取系統內存,當然,這種存取必須在</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的嚴格控制和監管下進行。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Timer(</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>時鐘</FONT><FONT SIZE=3>)</LI></P></OL>
</OL>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">所有操作系統需要知道時間,現代</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>包括一個特殊的外設,叫做實時時鐘(</FONT><FONT SIZE=3>RTC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)。它提供了兩樣東西:可靠的日期和精確的時間間隔。</FONT><FONT SIZE=3>RTC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>有自己的電池,所以即使</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>沒有加電,它仍在運行。這也是為什么</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>總是“知道”正確的日期和時間。時間間隔計時允許操作系統精確地調度基本工作。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Chapter 2</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">Software Basic(</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>軟件基礎</FONT><FONT SIZE=3>)</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">程序是用于執行特定任務的計算機指令組合。程序可以用匯編語言,一種非常低級的計算機語言來編寫,也可以使用和機器無關的高級語言,比如</FONT><FONT SIZE=3>C</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>語言編寫。操作系統是一個特殊的程序,允許用戶通過它運行應用程序,比如電子表和文字處理等等。本章介紹了基本的編程原理,并簡介操作系統的目的和功能。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">2.1 Computer Languages(</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>計算機語言</FONT><FONT SIZE=3>)</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">2.1.1.</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>匯編語言</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>從內存中讀取和執行的指令對于人類來講無法理解。它們是機器代碼,精確的告訴計算機要做什么。比如十六進制數</FONT><FONT SIZE=3>0x89E5</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,是</FONT><FONT SIZE=3>Intel 80486</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的指令,將寄存器</FONT><FONT SIZE=3>ESP</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的內容拷貝到寄存器</FONT><FONT SIZE=3>EBP</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>中。早期計算機中最初的軟件工具之一是匯編程序,它讀入人類可以閱讀的源文件,將其裝配成機器代碼。匯編語言明確地處理對寄存器和對數據的操作,而這種操作對于特定的微處理器而言是特殊的。</FONT><FONT SIZE=3>Intel X86</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>微處理器的匯編語言和</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>微處理器的匯編語言完全不同。以下</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>匯編代碼演示了程序可以執行的操作類型:</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Ldr r16, (r15) ; </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>第一行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Ldr r17, 4(r15) ; </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>第二行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Beq r16,r17,100; </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>第三行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Str r17, (r15); </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>第四行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">100:		; </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>第五行</P>
<P ALIGN="JUSTIFY"> </P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -