本書是“操作系統(tǒng)”課程的輔助教材,通過其中的實驗可加深對本課程概念的理解。全書共分為10章,從設計一個簡單的操作系統(tǒng)引導程序開始,指導學生初步理解操作系統(tǒng)的設計原理和過程,使學生能夠掌握簡單的Shell編程,掌握進程、線程、進程管理、進程調(diào)度和進程通信等基本概念和技術(shù),掌握內(nèi)存管理基本概念和技術(shù),掌握文件操作和磁盤調(diào)度的基本原理。
本書的實驗以Linux操作系統(tǒng)為主。因為Linux是開放源碼的,因此,在本書附錄中給出了Linux0.11的部分源碼分析,可以讓讀者得以一窺操作系統(tǒng)的內(nèi)部實現(xiàn)機制。
書中的實驗題目具有獨立性,并且對每個實驗中用到的知識,在前面都給予描述和指導,這樣有利于讀者通過自學掌握實驗教程中的技術(shù)和方法。
本書可作為高等院校計算機及相關專業(yè)“操作系統(tǒng)”課程實驗的輔助教材,也可作為讀者學習操作系統(tǒng)技術(shù)的實驗指導教程。
操作系統(tǒng)是現(xiàn)代計算機系統(tǒng)中不可缺少的系統(tǒng)軟件。如果讓用戶去使用一臺沒有配置操作系統(tǒng)的計算機,那是難以想象的。操作系統(tǒng)控制和管理整個計算機系統(tǒng)中的軟硬件資源,并為用戶使用計算機提供一個方便靈活、安全可靠的工作環(huán)境。本書遵循操作系統(tǒng)課程的教學大綱要求,針對應用型模式的專業(yè)定位和人才培養(yǎng)目標而編寫。
操作系統(tǒng)課程的實驗環(huán)節(jié)一直是操作系統(tǒng)教學的難點。本書通過Windows和Linux兩個操作系統(tǒng)各自的編程接口,提供一些編程實例,以此加深學生對操作系統(tǒng)工作原理的領會和對操作系統(tǒng)實現(xiàn)方法的理解,并且使學生在程序設計方面得到基本訓練。
全書共分為10章,從設計一個簡單的操作系統(tǒng)引導程序開始,指導學生初步理解操作系統(tǒng)的設計原理和過程,使學生能夠掌握簡單的Shell編程,掌握進程、線程、進程管理、進程調(diào)度、進程通信等基本概念和技術(shù),掌握內(nèi)存管理基本概念和技術(shù),掌握文件操作和磁盤調(diào)度的基本原理。
結(jié)合操作系統(tǒng)理論課程的學習,通過本書的全部實驗,使學生能夠理解操作系統(tǒng)的一般概念和方法,有能力去分析、設計和改變一個操作系統(tǒng)的某些組件。
本書的大部分程序在Linux下實現(xiàn),可為后續(xù)的嵌入式Linux系統(tǒng)課程打下很好的基礎。為了更好地讓讀者理解操作系統(tǒng)的原理和實現(xiàn)技術(shù),其余程序是在Windows下實現(xiàn)的一些模擬算法。所有程序都經(jīng)過測試和驗證。
本書附有Linux0.11的部分源碼分析,這主要是為了讓讀者能夠更加深入地理解一個真實操作系統(tǒng)的內(nèi)部原理。附錄還精選了一些習題,供廣大師生選用。
實驗要求:
1. 明確實驗目的,掌握相關背景知識。
2. 熟練掌握實驗內(nèi)容和方法。
3. 每個實驗都要求學生寫出實驗報告,同時注意各實驗中給出的“實驗任務”。
4. 教師最后寫出實驗總結(jié)。
在本書的編寫過程中,姜立秋編寫了第4章、第9章和第10章,趙慧然編寫了附錄B、附錄C、附錄D和附錄E,全書由張坤提出編寫大綱并編寫了其余章節(jié)。由于編者水平有限,錯誤和不妥之處敬請讀者提出寶貴意見。
第1章引導操作系統(tǒng)的過程
1.1實驗目的
1.2預備知識
1.3實驗內(nèi)容
1.3.1簡單匯編程序設計
1.3.2查看啟動記錄
1.3.3修改啟動記錄
1.3.4用NASMW編譯一個自己的
啟動程序(.bin文件)
第2章Linux基本環(huán)境
2.1實驗目的
2.2預備知識
2.2.1Linux的安裝
2.2.2Linux 命令行(Shell環(huán)境)
2.2.3文件系統(tǒng)命令
2.2.4用戶及系統(tǒng)管理常用命令
2.2.5網(wǎng)絡操作常用命令
2.2.6Linux下軟件安裝
2.2.7使用編輯器vi 編輯文件
2.2.8GCC編譯器
2.2.9Gdb調(diào)試器
2.2.10編寫包含多文件的Makefile
2.3實驗內(nèi)容
2.3.1Linux基本操作練習
2.3.2Makefile的應用
第3章Shell編程
3.1實驗目的
3.2預備知識
3.2.1Shell概述
3.2.2Shell的特點和命令行書寫規(guī)則
3.2.3常用Shell類型
3.3實驗內(nèi)容
3.3.1簡單Shell 程序設計
3.3.2Shell腳本的建立和執(zhí)行
3.3.3Shell變量
3.3.4Shell中的特殊字符
3.3.5表達式的比較
3.3.6控制結(jié)構(gòu)
3.3.7綜合應用
第4章進程管理
4.1實驗目的
4.2預備知識
4.2.1進程相關基本概念
4.2.2Linux下系統(tǒng)調(diào)用
4.2.3Windows下的系統(tǒng)調(diào)用
4.2.4進程調(diào)度算法
4.3實驗內(nèi)容
4.3.1進程的創(chuàng)建
4.3.2進程的控制
4.3.3文件的加鎖、解鎖
4.3.4Windows下的進程管理
4.3.5進程調(diào)度模擬算法
第5章進程間通信
5.1實驗目的
5.2預備知識
5.2.1管道
5.2.2消息
5.2.3共享內(nèi)存
5.2.4信號機制
5.3實驗內(nèi)容
5.3.1進程的管道通信
5.3.2消息的創(chuàng)建、發(fā)送和接收
5.3.3共享存儲區(qū)的創(chuàng)建、附接和段接
5.3.4消息隊列和共享存儲區(qū)性能比較
5.3.5信號機制舉例
第6章進程(或線程)同步與多線程編程
6.1實驗目的
6.2預備知識
6.2.1進程(或線程)同步概述
6.2.2線程概述
6.3實驗內(nèi)容
6.3.1生產(chǎn)者消費者問題
6.3.2進程、線程綜合應用
第7章死鎖避免——銀行家算法
7.1實驗目的
7.2預備知識
7.2.1死鎖的概念
7.2.2死鎖預防
7.2.3死鎖避免
7.3實驗內(nèi)容
7.3.1實現(xiàn)銀行家算法所用的數(shù)據(jù)結(jié)構(gòu)
7.3.2銀行家算法
7.3.3源程序清單
7.3.4設計輸入數(shù)據(jù)、驗證銀行家算法
第8章存儲管理
8.1實驗目的
8.2預備知識
8.3實驗內(nèi)容
8.3.1可變分區(qū)主存分配和回收
8.3.2請求頁式存儲管理
第9章文件操作
9.1實驗目的
9.2預備知識
9.3實驗內(nèi)容
第10章磁盤調(diào)度
10.1實驗目的
10.2預備知識
10.3實驗內(nèi)容
附錄A80386基礎
附錄B操作系統(tǒng)練習題與參考答案
附錄C綜合測試題及其參考答案
附錄D操作系統(tǒng)自測題
附錄ELinux0.11系統(tǒng)引導程序
附錄FLinux0.11進程調(diào)度
附錄GLinux0.11中信號的處理
附錄HLinux0.11的內(nèi)存管理
參考文獻