1. 程式人生 > >編碼的奧祕:作業系統

編碼的奧祕:作業系統

轉自:《編碼的奧祕》   第二十二章

 

 

            一直以來,我們似乎在組裝著—至少在想像中—一臺完整的計算機。它有一個微處理器、一些隨機訪問儲存器、一個鍵盤、一個視訊顯示器和一個磁碟驅動器。當所有硬體各就各位以後,我們全神貫注於開關,給它加電,帶給它生命。也許這樣的描述會在你的腦海裡喚起Victor Frankenstein 裝配怪物時的情景,或者想起 G e p p e t t o正在製造將要命名為匹諾槽的木偶。、

            但我們還缺少一些東西,既不是驚人的力量,也不是良好的願望。繼續進行下去,開啟新計算機電源,然後告訴我們你看到了什麼?
            當陰極射線管發熱以後,螢幕上顯示的是一些整齊排列但又是隨機的 A S C I I碼字元。這正如預期的那樣,當電源斷開時,半導體儲存器的內容會丟失;當給它加電時,它處在隨機的不可預料的狀態。同樣,為微處理器構建的所有 R A M中的內容也是隨機的,微處理器把這些隨機的位元組當作機器程式碼來執行。這樣不會引起任何壞的情況發生,但是,也沒有什麼意義。

           這裡缺少的正是軟體。當微處理器加電或復位時,它執行記憶體中某個地址裡存放的機器程式碼。對 8 0 8 0來說,這個地址是 0 0 0 0 h。對正確設計的計算機來說,加電時,該地址處應該有一個機器程式碼指令(很可能是多個指令中的第一條)。

          機器程式碼指令又是怎樣放到記憶體的那個地方的呢?在新設計的計算機中,把軟體放到合適地方的處理過程可能是最令人費解的。要理解它,先從一個控制面板著手。該控制面板與第1 6章講到的用來寫入位元組到隨機訪問儲存器然後再讀出的控制面板相似

            與以前的控制面板不同的是,這個控制面板有一個標明為復位的開關,這個開關連到微處理器的復位輸入。只要這個開關是閉合的,處理器就什麼也不做;當斷開這個開關後,微處理器開始執行機器碼。

             控制面板的使用方法是:復位開關置 O N,復位微處理器 ,中止執行機器碼;接管開關置O N,則接收總線上的地址訊號和資料訊號。這時,可以使用 A0~A1 5開關輸入 1 6位的儲存器地址。標為 D0~ D7的燈用來顯示該地址的 8位內容。要寫入一個新的位元組到相應的地址,則應在D0~ D7開關上設定該位元組,然後把寫入開關先撥到 O N再撥到 O F F。完成了向記憶體中寫入相應位元組以後,把接管開關設定為 O F F,復位開關設定為 O F F,則微處理器開始執行程式。

             這就是如何向剛剛從頭建成的計算機中輸入第一個機器碼程式的過程,不用說,這是很費事的。

             又是什麼改變了這一切,使得人們樂於在視訊顯示器前檢視自己程式的執行結果呢?在上一章中已經講到,只顯示字元的視訊顯示器有 1 K B的隨機訪問儲存器用來存放 2 5 行,每行4 0個字元的 A S C I I碼。程式把內容寫入到該儲存器中,方法與寫入到計算機中其他儲存器中的方法一樣。

             然而,把程式的輸出顯示到視訊顯示器並不是那麼簡單。例如,如果一段程式,執行結果是4 B h,則不能簡單地把這個值寫入視訊顯示器的儲存器中。如果這樣做,螢幕上將會看到的是字元 K,因為該字元對應的 A S C I I碼是 4 B h。正確的是應寫兩個 A S C I I碼字元到顯示器:3 4 h(是4的A S C I I碼)和 4 2 h(是B的A S C I I碼)。 8位的計算結果每半個位元組是一個十六進位制數字,該數字必須通過對應的 A S C I I碼來顯示。

             當然,也可以寫一段小的子程式來完成這種轉換。下面的一段 8 0 8 0組合語言程式用來把十六進位制數中的一位轉換成對應的 A S C I I碼(假定包含的十六進位制數範圍從 0 0 h~0 F h):

            下面的子程式呼叫 N i b b l e To A s c i i兩次,把累加器A中的一個位元組轉換成兩個 A S C I I碼數字,並放在暫存器 B和C中:

          這些子程式使得可以在視訊顯示器中按十六進位制來顯示一個位元組。如果要轉換成十進位制,再做一些工作即可。此過程與把十六進位制數轉換成十進位制數的方法非常相似— 用 1 0來除幾次即可。

         記住,還沒有把這些組合語言程式輸入到記憶體中。也許,你已經把它們寫到了紙上並且轉換成了機器碼,然後再輸入到記憶體中。這種“手工彙編”是第 2 4章要講的內容。

         儘管控制面板不需要許多硬體,但卻不容易使用。它所採用的輸入 /輸出方法是最壞的方法。既然聰明到可以從零開始來製造自己的計算機,卻還用數字 0和 1 來作為按鍵,的確令人汗顏。那麼首先要做的是去掉控制面板。

         當然要用鍵盤來作為按鍵。前面講過計算機鍵盤的構造是隻要按下一個鍵,就會產生一個對微處理器的中斷訊號。計算機中的中斷控制晶片使得微處理器響應中斷,執行一條 R S T指令。假設這是一條 RST 1 指令,這條指令使得微處理器在堆疊中儲存當前程式計數器的值並跳轉到地址 0 0 0 8 h處。從這個地址開始,可以輸入一些程式碼(用控制面板) 。這些程式碼稱為鍵盤處理程式 。

         為了使一切都正常工作,還需要一些程式碼在微處理器復位時執行,這些程式碼叫 初始化程式。初始化程式首先設定堆疊指標,使得堆疊分配到記憶體的有效區域,然後,把視訊顯示儲存器的每一個位元組設定為十六進位制數 2 0 h,即 A S C I I碼的空格,這樣就可以去掉螢幕上的隨機字元。初始化程式用 O U T( O u t p u t)指令設定游標的位置(游標是視訊顯示器上的下劃線,指示了新輸入的字元將要顯示的位置)到第 1 行第 1 列。下一條指令為 E I,即中斷允許,該指令使得微處理器可以響應鍵盤中斷。在此之後是 H LT指令,它停止微處理器的工作。

        這就是初始化程式的工作。從這時起,由於執行了 H LT指令,計算機很可能處於停機狀態。能夠把計算機從停機狀態喚起的事件僅有來自於控制面板的復位訊號或從鍵盤來的中斷訊號。

         無論何時在鍵盤上按下一個鍵,中斷訊號都使得微處理器從初始化程式最後的 H LT語句跳轉到鍵盤處理程式。鍵盤處理程式用 I N( I n p u t)指令來確定按下的鍵,然後根據按下的鍵來執行一些動作(即鍵盤處理程式處理每一個按鍵) ,接著執行一條 R E T( R e t u r n)指令,最後又回到 H LT語句等待另一個鍵盤中斷。

         不論按下的是字元、數字還是標點符號,鍵盤處理程式使用鍵盤掃描碼,結合 S h i f t鍵是否被按下,來確定合適的 A S C I I碼。然後將 A S C I I碼寫到視訊顯示儲存器中游標的位置。這個過程稱為 回顯 鍵到顯示器。游標位置增加並移到剛才顯示的字元後面的空格處。由此,可以在鍵盤上敲入一串字元並顯示在螢幕上。

          如果按下的鍵是 B a c k s p a c e(對應的 A S C I I碼是 0 8 h),則鍵盤處理程式刪除最後寫入到視訊顯示儲存器中的字元, (刪除字元是很簡單的一件事,只需寫入 A S C I I碼 2 0 h—空格字元—到某一記憶體位置。 )然後把游標移回一格。

          人們通常在鍵盤上敲入一行字元(需要改正錯誤時可用 B a c k s p a c e 鍵) ,然後敲入R e t u r n (回車)鍵,回車鍵在計算機鍵盤上通常標為 E n t e r。與在電子打字機上敲 R e t u r n鍵表明已經準備好開始輸入下一行一樣,在計算機中敲 E n t e r鍵表明打字者已經完成了一行文字的鍵入。

          鍵盤處理程式在處理 R e t u r n或E n t e r鍵(對應的 A S C I I碼為0 D h)的時候,視訊顯示儲存器的這一行字元被解釋成對計算機的一個 命令 ,也就是說,鍵盤處理程式要去做的一些事情。鍵盤處理程式中包含有命令處理程式用來解釋命令,例如三個命令: W、 D和R。

          如果字元行以 W開始,該命令意味著 Wr i t e(寫入)一些位元組到記憶體中。假設敲入到螢幕上的行如下面這樣:

          這個命令指示命令處理程式把十六進位制數 3 5、 4 F等寫入到地址 1 0 2 0 h開始的記憶體中。為了完成這項工作,鍵盤處理程式需要將 A S C I I碼轉換成位元組— 前面示範的那個變換的反變換。

          如果字元行以 D開頭,該命令意味著 D i s p l a y(顯示)記憶體中的一些位元組。假使敲入到螢幕上的行如下面這樣:

         命令處理程式將會顯示從記憶體地址 1 0 3 0 h開始的存放在記憶體中的 11 個位元組(之所以為 11 ,是因為在 4 0個字元寬的顯示器上,在與上面命令同一行的地址後面能顯示的字元數為 11 )。可以用 D i s p l a y命令來檢視記憶體中的內容。

         如果字元行以 R開頭,該命令意味著 R u n(執行) ,如下的命令:

         意味著“執行從地址 1 0 0 0 h處開始儲存的程式”。命令處理程式把 1 0 0 0 h存到暫存器對 H L中,然後執行指令 P C H L,即把暫存器對 H L的值裝入程式計數器,也就是跳轉到該地址處執行程式。

          採用鍵盤處理程式和命令處理程式進行工作是一個重要的里程碑。有了它,無需再用什麼控制面板,從鍵盤輸入容易、迅速且效果良好。

           當然,還有問題。當電源斷電時,輸入的所有程式碼會丟失。正因為如此,可能要把這些新程式碼存到只讀儲存器,即 R O M中。上一章曾講到了一個 R O M晶片裡存有所有用來在螢幕上顯示A S C I I字元的點陣模式。假定所用的晶片在製造時已經配置有這些資料,則你也可以在家裡自己程式設計 R O M晶片。可程式設計只讀儲存器( P R O M )晶片只可以程式設計一次;可擦除可程式設計只讀
儲存器( E P R O M)晶片即可以程式設計,而且它在紫外光的照射下擦除所有的資訊後還可以重新再進行程式設計。

           前面講過, R A M板連到 D I P開關, D I P開關允許設定 R A M板的開始地址。如果使用的是8 0 8 0 系統,初始時一個 R A M板地址應設定成 0 0 0 0 h。如果還有 R O M,則 R O M的地址應為0 0 0 0 h,而R A M板可以連到更高的地址。

           命令處理程式的建立是一個重要的里程碑,不僅因為它對輸入到記憶體中的位元組提供了較快的解釋,而且使計算機現在成為互動式的了。當從鍵盤上敲入一些東西后,計算機就會做出響應,並在螢幕上顯示出來。

           一旦有了 R O M中的命令處理程式,就可以開始試著從記憶體中寫入資料到磁碟驅動器(可能是對應於磁碟扇區大小的塊),並且把資料讀回到記憶體。把程式和資料存放在磁碟上比存放在R A M中要安全得多(後者如果電源出故障它們會丟失),也比存放在 R O M中要靈活得多。

            也許應該加入一些命令到命令處理程式,如用 S命令來表示儲存:

           這個命令表示從地址 2 0 8 0 h處開始的記憶體塊將要存放到磁碟的第 2面,第 1 5磁軌,第 3扇區(記憶體塊的大小根據磁碟扇區的大小確定)。同樣,也可以加入一個 L o a d命令:

           

         該命令把該扇區的內容從磁碟送回到記憶體中。

         當然,還需要保留存放的地方的記錄,可以用手邊的本和鉛筆來記錄。一定要小心不要把儲存在某個地址的程式碼過載到記憶體的另一個地址,這樣做就別指望它能正常工作。所有的J u m p和 C a l l指令將會出錯,因為它們標識的是原來的地址。同樣,如果一個程式比磁碟扇區的大小要大,則需要把它存放到幾個扇區。磁碟中有些扇區可能被其他程式或資料佔用了,有些扇區還是空的,因而存放長程式的扇區在磁碟上可能是不連續的。

          這樣,你可能就會發現手工記錄哪些東西存放到哪些地方的工作是相當多的,正因為如此,就需要有一個檔案系統。

         檔案系統是指在磁碟儲存器中按檔案來組織資料的方法。檔案是存放在一個或多個扇區中相關資料的集合。更重要的是,每個檔案有一個檔名作為標識,便於記住檔案中包含的內容。可以把磁碟看成類似於檔案櫃,裡面的每一個檔案都有一個標誌用來表示檔案的名稱。

         檔案系統通常是稱作作業系統的較大軟體集合的一部分。本章構造的鍵盤處理程式和命令處理程式也肯定包含在作業系統中。先不考慮其漫長的演化過程,讓我們看一下真正的作業系統是在幹什麼,又是如何工作的。

         回顧歷史,最重要的 8位微處理器作業系統是 C P / M,是 Gary Kildall(出生於 1 9 4 2年)在2 0 世紀 7 0 年代中期為 Intel 8080 微處理器而寫的,他後來創立了 D R I ( digital research  i n c o r p o r a t e d)公司。

         C P / M存放在磁碟中。早期 C P / M最常用的儲存介質是單面 8英寸磁碟,有 7 7個磁軌,每道2 6個扇區,每扇區 1 2 8個位元組(總共 256 256位元組) ,磁碟的頭兩個磁軌包含有 C P / M。下面將簡單地描述 C P / M是如何從磁碟裝入到計算機記憶體中的。

         C P / M盤中餘下的 7 5個磁軌用來儲存檔案。 C P / M的檔案系統雖然很簡單,但卻滿足兩個基本的要求:首先,磁碟中的每個檔案有一個名字作為標識,這個名字也存在磁碟中。其實,C P / M用來讀取檔案所需的全部資訊都與檔案一起存放在磁碟中;第二,檔案在磁碟中並不佔據連續的扇區。由於經常建立和刪除不同大小的檔案,因而磁碟上的剩餘空間都是碎片。檔案系統具有把大檔案存放在不連續扇區的這種能力是非常有用的。

         用來存放檔案的 7 5個磁軌按 分配塊 進行分組,每一個分配塊有 8個扇區,即 1 0 2 4位元組。磁碟中共有 2 4 3個分配塊,編號從 0~2 4 2。

         開始的兩個分配塊(共 2 0 4 8位元組)用作目錄區。目錄區是磁碟中的一個特殊區域,用來存放磁碟中每一個檔案的名稱和一些主要資訊。存在磁碟中的每一個檔案需要一個 3 2位元組長的目錄項。因為目錄區總共只有 2 0 4 8位元組,因而磁碟能夠存放 2 0 4 8 / 3 2,即 6 4個檔案。

          每一個3 2位元組的目錄項包含有以下資訊:

        目錄項的第一個位元組只在檔案系統可供兩個或更多人同時共享時使用。在 C P / M中,該位元組通常設定為 0,與第 1 3、 1 4位元組一樣。

       在C P / M中,每個檔案的檔名由兩部分組成,第一部分稱作檔名,最多有 8個字元,存放在目錄項的第 1 ~ 8位元組;第二部分是檔案型別,最多有 3 個字元,存放在第 9~ 11 位元組。有幾個標準的檔案型別,如: T X T 表示文字檔案(即檔案中只包含 A S C I I 碼) , C O M( C o m m a n d的簡稱)表示檔案內容是 8 0 8 0機器碼指令或程式。定義檔案時,這兩部分由點隔
開,如:

這種檔案命令的方式習慣上稱為 8 . 3,表明點前最多有 8個字元,點後最多有 3個字元。

          目錄項中的磁碟儲存表標明瞭該檔案所存放的分配塊。假設磁碟儲存表的前 4項分別為1 4 h、 1 5 h、 0 7 h和2 3 h,其餘均為 0,則表明該檔案佔用 4個分配塊,即 4 K B的空間。檔案實際上可能要短一些。目錄項的第 1 5位元組標明在最後一個分配塊中實際用到了多少個 1 2 8位元組的扇區。

          磁碟儲存表長 1 6位元組,可以容納長達 16 384 位元組的檔案,超過 1 6 K B的檔案要使用多個目錄項,稱為擴充套件 。在這種情況下,第一個目錄項的第 1 2位元組設定為 0,第二個目錄項的第 1 2位元組設定為 1 ,依此類推。

         上面提到過文字檔案也稱為 A S C I I檔案,或其他類似名稱。文字檔案中包含有對應於字元的 A S C I I 碼(包括回車和換行程式碼)供人們瀏覽。不是文字檔案的檔案稱為二進位制檔案。C P / M的C O M檔案為二進位制檔案,因而它包含 8 0 8 0的機器碼。

          假設一個檔案(一個很小檔案)包括三個 1 6位數—例如, 5 A 4 8 h、 7 8 B F h和 F 5 1 0 h。由這三個數字組成的二進位制檔案長僅為 6位元組:

         

         當然,這是儲存多位元組數的 I n t e l格式,其中低位元組在前。為 M o t o r o l a處理器編寫的程式則是按以下方式來建立檔案:

         若用 A S C I I碼文字檔案存放這同樣 3個1 6位數,則由以下這些位元組組成:

         這些位元組是數字和字元的 A S C I I碼,每一個數由回車( 0 D h)和換行( 0 A h)終止。文字檔案很容易顯示,它們不是作為位元組串 ,而是作為字元顯示:

         

         包含這3個數的 A S C I I碼文字檔案也可以由以下位元組組成:

         這些位元組是與這 3個數等效的十進位制數的 A S C I I碼:

         既然採用文字檔案的目的是方便人們閱讀,因而沒有什麼理由不用十進位制而非要用十六進位制。

         上面提到過, C P / M自身存放在磁碟的頭兩個磁軌。為了執行它, C P / M必須從磁碟裝載到記憶體。使用 C P / M的計算機中, R O M並不需要很多,它只需要用來存放一小段程式碼,稱為載入程式 (因為這段程式碼通過自舉來引導作業系統的其餘部分) 。載入程式把磁碟最開始的 1 2 8個位元組的扇區裝入記憶體並執行,這個扇區包含有把 C P / M的其餘部分裝入記憶體的程式碼。整個這
個過程稱為 引導作業系統。

          最終, C P / M把它自己安排在 R A M的最高地址區域。裝載 C P / M以後,整個記憶體組織如下所示:

         該圖不是按比例畫的。 C P / M的三個部件—基本輸入 /輸出系統( B I O S)、基本磁碟作業系統( B D O S )和控制檯命令處理程式( C C P)僅佔用 6 K B 的記憶體,臨時程式區域( T PA)—在6 4 K B記憶體的計算機中大約有 5 8 K B—初始時沒有任何東西。

         控制檯命令處理程式等效於前面構造的命令處理程式,控制檯指的是鍵盤和顯示器。C C P在顯示器上顯示提示符,就像這樣:

         提示符提示可以輸入資訊。在有不止一個磁碟驅動器的計算機中, A指的是第一個磁碟驅動器, C P / M從該驅動器裝入。在提示符後敲入命令並按回車鍵, C C P就執行該命令並在螢幕上顯示結果資訊。命令執行完以後, C C P又顯示提示符。

        C C P只能識別一些命令,最重要的命令可能是:

        該命令用來顯示磁碟目錄,即存放在磁碟中的所有檔案的列表。可以用特殊字元?和 *來限定顯示具有某些特定名稱和型別的檔案,例如:

顯示所有文字檔案,而

顯示檔名為 5個字元,第一個字元為 A,最後一個字元為 B的所有檔案。

 

        另外一個命令是 E R A,它是 E r a s e的縮寫,用來從磁碟中刪除檔案。例如:

 

刪除具有這個名字的檔案,而:

刪除所有文字檔案。刪除檔案意味著釋放檔案的目錄項及檔案所佔用的磁碟空間。

          還一個命令是 R E N,它是 R e n a m e的縮寫,用來改變檔名。 T Y P E命令用來顯示文字檔案的內容。因為文字檔案只包含有 A S C I I碼,因而該命令還可用來瀏覽螢幕上的檔案內容,如:

          

 

S AV E命令用來把臨時程式區域中的一個或多個 2 5 6位元組的記憶體塊以一個特定名稱存入到磁碟中。

          如果敲入一個 C P / M不能識別的命令,就認為輸入的是磁碟中的一個程式的名稱。程式的檔案型別為 C O M,代表命令。 C C P在磁碟中查詢叫這個名字的檔案,如果有, C P / M把檔案從磁碟裝入臨時程式區域,該區域從地址 0 1 0 0 h處開始。以上就是告訴你如何執行磁碟中的檔案。如果在 C P / M提示符後敲入:

           

且如果名稱為 C A L C . C O M的檔案存在於磁碟中,則 C C P把該檔案裝入從地址 0 1 0 0 h處開始的記憶體中,然後轉到地址 0 1 0 0 h處的機器碼指令開始執行程式。

         前面講述瞭如何在記憶體的任一地方加入機器碼指令並執行,但按磁碟檔案儲存的 C P / M程式必須設計成從記憶體的特定地址 0 1 0 0 h處開始裝入。

         C P / M包括幾個有用的程式,如 P I P( peripheral interchange program),即外設交換程式,用來拷貝檔案。 E D是文字編輯器,用來建立和修改文字檔案。像 P I P和 E D這類小且用來完成簡單事務的程式通常稱為實用程式。如果執行 C P / M系統,可以購買一些大的應用程式,如字處理軟體或計算機電子報表軟體;也可以自己編制這樣的軟體。所有這些也都以 C O M型別的檔案儲存。

          到目前為止,已經知道了 C P / M(像許多作業系統一樣)如何提供命令和實用程式以便對檔案進行基本的操作。同樣,也已經知道 C P / M如何把程式裝載到記憶體並執行。作為一個作業系統, C P / M還有第三個主要功能。

          在C P / M下執行的程式經常需要把輸出寫到視訊顯示器,或者從鍵盤上讀入輸入的內容,或者從磁碟讀取一個檔案和向磁碟中寫入一個檔案。但通常情況下, C P / M程式並不把程式輸出直接寫到視訊顯示儲存器中;同樣, C P / M程式也不訪問鍵盤硬體看看輸入了什麼,它也不訪問磁碟驅動器硬體去讀或寫磁碟的扇區。

          事實上,執行在 C P / M下的程式利用 C P / M中所構建的子程式集來完成這些公共事務。這些子程式經過特別設計,從而使得程式很容易訪問計算機中的硬體—包括視訊顯示器、鍵盤和磁碟— 且程式設計員不用關心這些外設實際上是怎樣進行連線的。更重要的是,在C P / M下執行的程式不需要了解磁軌、扇區,這是 C P / M的工作,它可以把檔案存放到磁碟,也可以讀取磁碟上的檔案。

         為程式提供方便訪問計算機硬體的手段是作業系統的第三個主要功能。作業系統提供的這種訪問手段稱之為應用程式介面,即 A P I( application programming interface)。

          在C P / M下執行的程式通過設定暫存器 C為某一特定值(叫作功能值)來使用 A P I並執行指令:

例如,一個程式通過執行下面的指令獲取從鍵盤上輸入的鍵的A S C I I碼:

           累加器A中包含有輸入的鍵的 A S C I I碼。同樣

           把累加器 A中的 A S C I I碼字元寫到視訊顯示器中游標的位置,游標移到下一個位置。

           如果程式中要建立一個檔案,則把暫存器對 D E設定為包含有檔名所在的記憶體區域的地址,然後執行以下程式碼:

此例中, C A L L 5指令使 C P / M在磁碟上建立一個空檔案。程式可以利用其他功能向檔案寫入,最後關閉檔案,意味著檔案已經使用完畢。該程式和其他程式以後可開啟檔案並讀取檔案內容。

            C A L L 5到底能做什麼呢?在記憶體 0 0 0 5 h位置由 C P / M設定了一條 J M P( J u m p)指令,該指令跳轉到 C P / M基本磁碟作業系統( B D O S)所在的位置。這個區域包含有一些子程式用來完成C P / M的每一項功能。 B D O S正如它的名字一樣,基本作用是維護磁碟上的檔案系統。通常B D O S 必須利用 C P / M基本輸入 /輸出系統( B I O S)中的子程式,而 B I O S可實現對像鍵盤、視訊顯示器以及磁碟驅動器這樣的硬體的訪問。實際上, B I O S是C P / M中唯一需要了解計算機硬體的部分。 C C P利用 B D O S的功能來實現自己功能,那些 C P / M提供的實用程式也是如此。

           A P I是與裝置無關的計算機硬體介面,也就是說在 C P / M下編寫的程式不需要知道某一機器上鍵盤的工作機制、視訊顯示器的工作機制或讀寫磁碟扇區的工作機制,它只是簡單地利用 C P / M的功能來完成涉及到鍵盤、顯示器和磁碟的工作。這樣, C P / M程式就可以在不同的計算機上執行,而這些機器可能會用差別很大的硬體來訪問外設。 (所有 C P / M程式必須執行在8 0 8 0微處理器上,或能執行 8 0 8 0指令的處理器上,如: Intel 8085或Z i l o g的Z- 8 0。 )只要計算機執行 C P / M,則程式就可以利用 C P / M的功能間接訪問硬體。如果沒有標準的 A P I,程式則需要針對不同型別的計算機來做不同的工作。

           C P / M曾經是 8 0 8 0中非常流行的作業系統,至今仍具有重要的歷史意義。 C P / M對其後的1 6位作業系統 Q D O S( quick and dirty operating system)有很大的影響。 Q D O S是西雅圖計算機產品公司( seattle computer products)的 Tim Paterson為I n t e l的1 6位8 0 8 6和8 0 8 8晶片而編寫的。 Q D O S後來改名為 8 6 - D O S,由 M i c r o s o f t公司註冊。該作業系統被授權給 I B M以M S - D O S這個名稱用於第 1 代IBM PC 機。儘管 C P / M的 1 6位版本(稱為 C P / M- 8 6)也可用於 IBM PC,但M S - D O S很快成了標準。 M S - D O S(在 I B M計算機上叫 P C - D O S)也允許其他生產 IBM PC相容機的廠商使用。

           M S - D O S沒有保留 C P / M的檔案系統,在 M S - D O S檔案系統中使用的是一張叫檔案分配表的表,即 FAT。這種技術最初由 M i c r o s o f t公司在 1 9 7 7年採用。磁碟空間分成簇,根據磁碟空間大小,簇的大小也從 5 1 2~16 384位元組不等。每個檔案是簇的集合,檔案的目錄項只表明了檔案開始的簇, FAT能夠表明磁碟上每一個簇的下一簇。

           M S - D O S磁碟上的目錄項長 3 2位元組,採用與 C P / M一樣的 8 . 3 檔案命名系統,只是術語有些不同:後面的 3個字元稱作副檔名而不是檔案型別。 M S - D O S的目錄項無需包含分配塊的列表,它包含的是這樣一些有用的資訊,如檔案最後修改的日期、時間及檔案大小。

           M S - D O S的早期版本在結構上很像 C P / M,但M S - D O S中不需要 B I O S,因為 IBM PC 中已經有完整的 B I O S存放在了 R O M中。 M S - D O S的命令處理程式是一個名叫 C O M M A N D . C O M的檔案。 M S - D O S的執行程式有兩種:具有副檔名 C O M的檔案,大小不能超過 6 4 K B;具有副檔名 E X E(可執行)的較大檔案。

           儘管開始時 MS-DOS 支援 CALL 5 API 功能介面,但對新的程式推薦了新的介面。新的介面利用了 8 0 8 6的一個功能叫作 軟體中斷,這類似於子程式呼叫,但程式不需要知道它正在呼叫的確切地址。程式通過執行指令 INT 21h 呼叫 MS-DOS 的 API 功能。

           理論上講,應用程式只能通過作業系統提供的介面它們來訪問計算機的硬體。但對針對2 0世紀 7 0年代和 8 0年代早期的小型作業系統的應用程式而言,經常繞過作業系統,尤其是在處理視訊顯示器的時候。直接寫入位元組到視訊儲存器的程式比採用其他方式的程式執行速度要快。的確,對有些應用程式—例如,那些需要在顯示儲存器上顯示圖形的應用程式—作業系統是不合適的。 M S- D O S最吸引程式設計師的地方正是它的“反傳統性”,程式設計師可以編寫程式以達到硬體的最快速度。

            正因為如此,執行在 IBM PC 上的流行軟體常常是根據 IBM PC的硬體特點編制的。機器製造商為了與 IBM PC競爭也不得不沿襲這些特點。如果不這樣做,則會使得這些流行軟體不能執行。這些軟體通常要求硬體是“ IBM PC或與 IBM PC 100%相容”。

            MS-DOS 2.0 版於 1 9 8 3年3 月釋出,它增強了功能來使用硬碟驅動器。雖說當時的硬碟容量很小(按今天的標準) ,但很快就變得大了起來。當然,硬碟越大就越能儲存更多的檔案,但磁碟上儲存的檔案越多,則找到某個檔案或組織檔案就變得越麻煩。

            MS-DOS 2.0 的解決方法是採用 層次檔案系統,它對原有的 M S - D O S檔案系統做了一些小的改動。前面講過,磁碟中有一個區域叫目錄,它是一個檔案列表,裡面包含了有關檔案存放在磁碟的什麼地方的資訊。在層次檔案系統裡,一些這樣的檔案可能本身就是目錄,也就是說,它們是包含其他檔案列表的檔案,這些檔案也有可能還是目錄。磁碟中,這個常規的目錄稱為根目錄,包含在其他目錄裡的目錄稱為子目錄。目錄(有時稱資料夾)成為對相關檔案進行分組的一種方法。

             層次檔案系統以及MS-DOS 2.0的其他一些功能是從U N I X作業系統借鑑來的。 U N I X是2 0世紀7 0年代早期在貝爾實驗室開發的,大部分工作由 Ken Thompson(生於 1 9 4 3 年)和 D e n n i s  R i t c h i e(生於1 9 4 1年)完成。這個作業系統有趣的名字是一個文字遊戲: U N I X先是作為貝爾實驗室為 M I T和G E開發的名為 M u l t i c s(表示多路複用資訊和計算業務: multiplexed information  and computing services)的早期作業系統的一個缺少健壯性的版本。

             對設計計算機核心程式的計算機程式設計師來說, U N I X什麼時候都是很好的作業系統。雖然大多數作業系統都是針對特定計算機的,但 U N I X是可移植的,意思是它可以執行在各種各樣的計算機中。

             在開發 U N I X的時候,貝爾實驗室還是 AT& T的一個輔助機構。為了抑制 AT& T在電話業的壟斷地位, AT& T受到法庭裁決。起初, AT& T被禁止銷售 U N I X,公司被迫把它授權給別人。所以從 1 9 7 3 年開始, U N I X被廣泛授權給大學、公司和政府機構。 1 9 8 3年, AT& T獲准重返計算機業併發布了它自己的 U N I X版本。

             由此導致的結果就是沒有單一的 U N I X版本,相反,有許多不同的版本,用不同的名稱,執行在不同的計算機上並由不同的經銷商銷售。許多人把手伸向 U N I X,並在 U N I X上留下印跡。然而,當人們在 U N I X上加一些東西時,似乎仍然有一種流行的“ U N I X哲學”在引導人們。這個哲學的其中一部分是用文字檔案作為公用的檔案形式。許多 U N I X實用程式讀取文字檔案,利用它們來做一些工作,然後寫入另外一個文字檔案。 U N I X的實用程式可以組織起來形成一個鏈,然後在這些文字檔案上實現不同的處理。

            U N I X最初是為只一個人使用時大且昂貴的計算機而編寫的。使用 U N I X的計算機通過分時技術允許多個使用者同時與計算機互動操作。由於很快地在所有終端之間切換時間片, U N I X作業系統使得使用者感覺計算機就像在同時為每個人服務。

            並行執行多道程式的作業系統稱為多工作業系統。顯然,這種作業系統比像 C P / M和M S - D O S這樣的單任務作業系統要複雜得多。多工使得檔案系統複雜化,因為多個使用者可能會試圖同時訪問同一個檔案。多工同樣也影響到計算機如何為不同程式分配記憶體,所以需要進行記憶體管理。由於多道程式並行執行需要更多的記憶體,因而很可能計算機沒有足夠的記憶體來分配。作業系統可能需要採用 虛擬記憶體技術 ,當程式不需要某些記憶體塊時可以把它們存放在臨時檔案中,等需要時再讀回記憶體。

            近幾年來, U N I X最令人感興趣的發展是 F S F(自由軟體基金會, free software foundation)和 G U N方案,它們都由 Richard Stallman建立。 G U N表示“ G U N不是 U N I X”,當然, G U N不是U N I X。 G U N試圖與 U N I X相容但卻採用了一種方式來使得軟體不成為專有的。 G U N方案導致了許多與 U N I X相容的實用程式和工具,還有 L i n u x,它是一個與 U N I X相容的作業系統的核心。 L i n u x的大部分程式由芬蘭的 Linus To r v a l d s完成。近幾年, L i n u x已經變得很流行。

            從2 0世紀8 0年代中期開始,作業系統最顯著的發展趨勢是開發大型的、成熟的作業系統,如,蘋果公司的 Macintosh和微軟的 Wi n d o w s ,它們結合了圖形和視覺化視訊顯示,從而使其更容易使用。本書最後一章將要描述這種趨勢。