操作系統(tǒng)課的實驗環(huán)節(jié)一直是操作系統(tǒng)教學的難點。本書通過Windows和Linux兩個操作系統(tǒng)各自的編程接口,提供一些編程實例,以此加深學生對操作系統(tǒng)設(shè)計原理的領(lǐng)會和對操作系統(tǒng)實現(xiàn)方法的理解,并且使學生在程序設(shè)計方面能夠得到基本的訓練。
本書提供了操作系統(tǒng)接口的設(shè)計實例以及有關(guān)進程調(diào)度、作業(yè)調(diào)度、虛存管理、文件管理、設(shè)備管理等內(nèi)容的實踐例子。書中的實驗環(huán)境基于Windows操作系統(tǒng)或者Linux操作系統(tǒng)。每個實驗分為六個部分,即實驗目的、實驗要求、相關(guān)基礎(chǔ)知識、實驗設(shè)計、實驗總結(jié)、源程序與運行結(jié)果。
本書的使用對象是普通高等院校計算機專業(yè)的學生,或者是具有一些操作系統(tǒng)基本知識并想進一步了解程序設(shè)計以及操作系統(tǒng)實驗內(nèi)容的讀者,也可作為普通高等院校操作系統(tǒng)實驗教學的參考書。
第三版前言
操作系統(tǒng)課程是一門實踐性很強的技術(shù)課程,是計算機專業(yè)本科生的必修課。開設(shè)本實驗課的目的在于培養(yǎng)學生的實踐能力,促進理論與實踐的結(jié)合。本書通過兩個著名的操作系統(tǒng)Windows和Linux各自的編程接口,提供一些編程實例,使學生熟悉對操作系統(tǒng)程序接口的使用,并了解如何模擬操作系統(tǒng)原理的實現(xiàn),加深對操作系統(tǒng)設(shè)計原理和實現(xiàn)方法的理解,使學生在程序設(shè)計方面能夠得到基本的訓練。
操作系統(tǒng)本身的構(gòu)造十分復雜,如何在有效的時間內(nèi),使學生既能了解其實現(xiàn)原理,又能對原理部分進行有效的實踐,是操作系統(tǒng)教學一直在探索的內(nèi)容。本書從基本原理出發(fā),提供了不同類型的上機實習題。每個實習題都配有測試通過的源程序代碼供讀者參考,也對實習題的設(shè)計進行了詳細的講解和指導。
本書的使用對象是針對普通高等院校計算機專業(yè)的學生,或者是具有一些操作系統(tǒng)基本知識并想進一步了解程序設(shè)計以及操作系統(tǒng)實驗內(nèi)容的讀者。實驗的環(huán)境是Windows操作系統(tǒng)或者是Linux操作系統(tǒng)。Windows操作系統(tǒng)已經(jīng)很普及,但是對于Linux操作系統(tǒng)并不是每個用戶都有所了解,僅是有具體應用目的或者對Linux感興趣的人才會去接觸Linux。所以,在附錄B中為讀者提供了有關(guān)Linux的安裝知識和常用命令。而對Windows的使用,我們便主觀地認為學生已經(jīng)熟知了它的使用,所以在介紹實驗方法時,只重點介紹編程工具的使用過程以及實驗設(shè)計本身的內(nèi)容。
在Windows的實驗中,重點放在對Windows的應用程序接口API的使用上。利用這些與操作系統(tǒng)原理直接相關(guān)的API,編寫一些實踐操作系統(tǒng)概念的實例,便于對抽象概念的理解和具體化;通過閱讀本書提供的實例程序代碼,使讀者得到編程方面的體驗和訓練。
在Linux的實驗中,基本上也是在系統(tǒng)調(diào)用的層次上對學生進行訓練,所不同的是Linux是開放源代碼的自由軟件,讀者可以很方便地得到Linux操作系統(tǒng)的全部源代碼。比如常用的由Red Hat Software公司提供的Red Hat Linux,既可從網(wǎng)站上下載,也可從一般的書店中買到安裝光盤。Linux是深入學習操作系統(tǒng)的有利環(huán)境,通過對Linux的不斷了解,不僅可以深入學習操作系統(tǒng)的設(shè)計原理和技巧,還可以在互聯(lián)網(wǎng)上與熱衷于編程的人探討與Linux相關(guān)的技術(shù)難題。如今的筆記本電腦已經(jīng)十分普及,從而使Linux的實驗環(huán)境可以隨讀者的筆記本電腦安裝并建立。
本書在Windows環(huán)境下提供了四個實驗,分別是關(guān)于操作系統(tǒng)命令接口的設(shè)計、進程調(diào)度、虛存管理以及文件管理方面的實驗內(nèi)容。
在Linux環(huán)境下提供了四個實驗,分別是關(guān)于操作系統(tǒng)的命令接口程序shell的編制、虛存管理、作業(yè)控制系統(tǒng)以及文件系統(tǒng)方面的實例。
書中有些實驗題目是基于北京航空航天大學計算機學院操作系統(tǒng)課設(shè)的實驗內(nèi)容,書中配備的實驗源程序有一部分來自于學生提交的實際作業(yè)?紤]到實驗的覆蓋面,在附錄中增加了存儲管理以及命令接口設(shè)計等方面的實驗實例供讀者參考和學習。
本書的Windows實驗部分由羅曉峰執(zhí)筆,Linux的實驗部分由李鵬和羅曉峰執(zhí)筆,任愛華完成全書的統(tǒng)稿、編寫和審校工作。參與本書實驗的設(shè)計與驗證工作的還有李萌、張愷、張曉敏、原攀峰、郝美玲、胡寶雷、郭威、叢佩政、張迪、茹曉毅、佘世偉、楊洋、鄭志明等。
限于編者水平,錯誤和不妥之處在所難免,懇請讀者批評指正。
任愛華 于北京
2009年6月
VI
操作系統(tǒng)實用教程(第三版)實驗指導
VII
第三版前言
目 錄
實驗一 命令解釋程序1
1.1 實驗目的1
1.2 實驗要求1
1.2.1 基本要求1
1.2.2 進一步要求2
1.2.3 實驗步驟建議3
1.3 相關(guān)基礎(chǔ)知識3
1.3.1 命令解釋程序與內(nèi)核的關(guān)系3
1.3.2 系統(tǒng)調(diào)用4
1.3.3 重要API的使用說明10
1.4 實驗設(shè)計12
1.4.1 重要的數(shù)據(jù)結(jié)構(gòu)12
1.4.2 程序?qū)崿F(xiàn)14
1.5 實驗總結(jié)15
1.6 源程序與運行結(jié)果16
1.6.1 程序源代碼16
1.6.2 程序運行結(jié)果29
1.6.3 實驗報告模板29
實驗二 虛存管理(Windows)31
2.1 實驗目的31
2.2 實驗要求31
2.2.1 基本要求31
2.2.2 進一步要求31
2.3 相關(guān)基礎(chǔ)知識32
2.3.1 虛擬存儲器32
2.3.2 頁式存儲管理方式32
2.3.3 Windows中的虛擬存儲技術(shù)35
2.4 實驗設(shè)計38
2.4.1 重要的數(shù)據(jù)結(jié)構(gòu)38
2.4.2 程序?qū)崿F(xiàn)40
2.5 實驗總結(jié)45
2.6 源程序與運行結(jié)果45
2.6.1 程序源代碼45
2.6.2 程序運行結(jié)果57
實驗三 進程調(diào)度58
3.1 實驗目的58
3.2 實驗要求58
3.2.1 基本要求58
3.2.2 進一步要求59
3.3 相關(guān)基礎(chǔ)知識59
3.3.1 進程調(diào)度59
3.3.2 Windows中的進程和線程61
3.3.3 相關(guān)Win32 API介紹62
3.4 實驗設(shè)計64
3.4.1 重要的數(shù)據(jù)結(jié)構(gòu)64
3.4.2 程序?qū)崿F(xiàn)65
3.5 實驗總結(jié)68
3.6 源程序與運行結(jié)果68
3.6.1 程序源代碼68
3.6.2 程序運行結(jié)果83
實驗四 文件系統(tǒng)85
4.1 實驗目的85
4.2 實驗要求85
4.2.1 基本要求85
4.2.2 進一步要求86
4.3 相關(guān)基礎(chǔ)知識87
4.3.1 Windows的文件系統(tǒng)87
4.3.2 FAT16文件系統(tǒng)88
4.3.3 相關(guān)API函數(shù)說明92
4.4 實驗設(shè)計95
4.4.1 重要的數(shù)據(jù)結(jié)構(gòu)95
4.4.2 程序?qū)崿F(xiàn)97
4.4.3 編譯及運行102
4.5 實驗總結(jié)103
4.6 源程序與運行結(jié)果103
4.6.1 程序源代碼103
4.6.2 程序運行結(jié)果119
實驗五 shell程序120
5.1 實驗目的120
5.2 實驗要求120
5.2.1 基本要求120
5.2.2 進一步要求122
5.2.3 實驗步驟建議122
5.3 相關(guān)基礎(chǔ)知識123
5.3.1 shell與內(nèi)核的關(guān)系123
5.3.2 系統(tǒng)調(diào)用123
5.3.3 Lex和YACC介紹133
5.4 實驗設(shè)計134
5.4.1 重要的數(shù)據(jù)結(jié)構(gòu)135
5.4.2 程序?qū)崿F(xiàn)136
5.5 實驗總結(jié)143
5.6 源程序與運行結(jié)果143
5.6.1 程序源代碼143
5.6.2 程序運行結(jié)果160
實驗六 虛存管理(Linux)162
6.1 實驗目的162
6.2 實驗要求162
6.2.1 基本要求162
6.2.2 進一步要求162
6.3 相關(guān)基礎(chǔ)知識163
6.3.1 存儲管理163
6.3.2 虛擬存儲的功能163
6.3.3 虛擬存儲的抽象模型163
6.3.4 按需裝入頁面164
6.3.5 頁面交換165
6.3.6 共享內(nèi)存166
6.3.7 存取控制166
6.3.8 系統(tǒng)頁表167
6.3.9 頁面的分配和釋放168
6.3.10 內(nèi)存映射169
6.3.11 缺頁中斷170
6.4 實驗設(shè)計171
6.4.1 重要的數(shù)據(jù)結(jié)構(gòu)171
6.4.2 虛存管理程序的實現(xiàn)172
6.5 實驗總結(jié)178
6.6 源程序與運行結(jié)果178
6.6.1 程序源代碼178
6.6.2 程序運行結(jié)果190
實驗七 作業(yè)調(diào)度192
7.1 實驗目的192
7.2 實驗要求192
7.2.1 基本要求192
7.2.2 進一步要求193
7.3 相關(guān)基礎(chǔ)知識194
7.3.1 進程及作業(yè)的概念194
7.3.2 作業(yè)調(diào)度195
7.3.3 進程間通信196
7.4 實驗設(shè)計198
7.4.1 重要數(shù)據(jù)結(jié)構(gòu)198
7.4.2 程序?qū)崿F(xiàn)199
7.5 實驗總結(jié)201
7.6 源程序與運行結(jié)果202
7.6.1 程序源代碼202
7.6.2 程序運行結(jié)果218
實驗八 文件系統(tǒng)219
8.1 實驗目的219
8.2 實驗要求219
8.2.1 基本要求219
8.2.2 進一步要求220
8.3 相關(guān)基礎(chǔ)知識220
8.3.1 虛擬文件系統(tǒng)220
8.3.2 FAT文件系統(tǒng)結(jié)構(gòu)224
8.4 實驗設(shè)計229
8.4.1 重要的數(shù)據(jù)結(jié)構(gòu)229
8.4.2 程序?qū)崿F(xiàn)230
8.5 實驗總結(jié)234
8.6 源程序與運行結(jié)果235
8.6.1 程序源代碼235
8.6.2 程序運行結(jié)果253
附錄A 存儲管理應用實例254
A.1 概述254
A.2 存儲管理對內(nèi)存硬件的抽象255
A.3 用戶編程中申請與釋放內(nèi)存實例分析258
A.3.1 Malloc.h文件258
A.3.2 Malloc.c文件259
A.3.3 Test.c文件262
A.3.4 Makefile文件263
A.4 小結(jié)263
A.5 習題264
附錄B 操作系統(tǒng)接口265
B.1 操作系統(tǒng)接口265
B.1.1 系統(tǒng)調(diào)用265
B.1.2 shell命令及其解釋程序274
B.2 Linux的安裝283
B.2.1 安裝前的準備283
B.2.2 建立硬盤分區(qū)284
B.2.3 安裝類型285
B.2.4 安裝過程286
B.2.5 操作系統(tǒng)的安裝概念286
B.3 Linux的使用287
B.3.1 使用常識287
B.3.2 文件操作命令288
B.3.3 文本編輯命令294
B.3.4 shell的特殊字符296
B.3.5 進程控制命令300
B.3.6 網(wǎng)絡(luò)應用工具303
B.3.7 聯(lián)機幫助305
B.4 系統(tǒng)管理305
B.4.1 超級用戶305
B.4.2 用戶和用戶組管理306
B.4.3 文件系統(tǒng)管理308
B.4.4 Linux源代碼文件安放結(jié)構(gòu)312
B.5 小結(jié)313
B.6 習題313
參考文獻314
??
??
??
??
X
操作系統(tǒng)實用教程(第三版)實驗指導
XI
目錄