第一篇:10-11操作系統(tǒng)課程設(shè)計教案
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:Nachos系統(tǒng)綜述
教學(xué)日期:10-9/20
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Nachos系統(tǒng)在操作系統(tǒng)內(nèi)核實驗教學(xué)中的作用和地位, 如何利用Nachos系統(tǒng)培養(yǎng)和啟發(fā)開發(fā)系統(tǒng)軟件的能力
要求:說明Nachos系統(tǒng)概貌,如何安裝Nachosx系統(tǒng),如何配置Nachos系統(tǒng)的開發(fā)和運行環(huán)境。
授課主要內(nèi)容及學(xué)時分配
講授Nachos系統(tǒng)的主要作用和功能。(0.4學(xué)時)講授Nachos系統(tǒng)的實驗環(huán)境、安裝方法和系統(tǒng)結(jié)構(gòu)。(0.4學(xué)時)講授Nachos系統(tǒng)的開發(fā)過程。Makefile文件的設(shè)計和管理方法。(0.4學(xué)時)講授Nachos系統(tǒng)內(nèi)核跟蹤和調(diào)試的方法。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:Nachos系統(tǒng)的安裝和系統(tǒng)結(jié)構(gòu)。要求: 掌握。難點:Makefile文件的設(shè)計和管理。要求:了解。
主要外語詞匯
Nachos Operating System tar
C++ emacs gdb make Makefile
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教, 多媒體課件
復(fù)習(xí)思考題
1.What is the purpose of ystem program? 2.What is main advantage of Nachos? 3.How does Makefile in Nachos?
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 1,2,3 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 1,2,3
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:線程的創(chuàng)建與管理
教學(xué)日期:10-9/27
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解操作系統(tǒng)內(nèi)核中對線程的基本管理技術(shù),培養(yǎng)學(xué)生編制、開發(fā)和改進內(nèi)核級線程管理機制的技能,啟發(fā)學(xué)生對內(nèi)核線程管理機制的創(chuàng)新思路。
要求:說明操作系統(tǒng)內(nèi)核中進線程的基本管理機制,并說明如何進行內(nèi)核線程的實驗和開發(fā)。
讓學(xué)生實現(xiàn)一個按優(yōu)先數(shù)策略調(diào)度線程的Nachos操作系統(tǒng)新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授操作系統(tǒng)內(nèi)核中線程的創(chuàng)建/撤銷。(0.4學(xué)時)講授操作系統(tǒng)內(nèi)核中線程的并發(fā)控制。(0.4學(xué)時)講授操作系統(tǒng)內(nèi)核中線程的調(diào)度。(0.4學(xué)時)講授操作系統(tǒng)內(nèi)核中線程上下文切換的實現(xiàn)過程。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:操作系統(tǒng)內(nèi)核中線程的并發(fā)控制和調(diào)度.。要求: 掌握。難點:線程上下文切換的實現(xiàn)過程。要求: 熟悉。
主要外語詞匯 Thread
Concurrent
Schedule Switch
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.Are Nachos threads kernel threads or user threads, if
Nachos runs on a raw hardware or Nachos runs on a UNIX system? 2.Suppose that thread A calls function Run(Thread *nextThread)and nextThread points to thread B.Within the this function, the assembly function SWITCH(oldThread, nextThread);(a From the machine’s point of view, what thread does this function call return to?(b From the viewpoint of thread A, when and how does this function call return?
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 4,5,6
Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 4,5,6
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:線程間的同步機制
教學(xué)日期:10-10/11
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Nachos系統(tǒng)如何實現(xiàn)并發(fā)進程同步機制的,如何利用和改進這些同步機制解決實際的同步問題。啟發(fā)學(xué)生對同步機制的創(chuàng)新思路。, 要求:說明Nachos系統(tǒng)同步機制的實現(xiàn)方法,并說明如何進行同步機制的實驗和開發(fā)。讓學(xué)生利用Nachos操作系統(tǒng)的同步機制生成一個能解決多生產(chǎn)者/消費者問題的新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授Nachos系統(tǒng)信號燈的實現(xiàn)和主要功能。(0.4學(xué)時)講授Nachos系統(tǒng)鎖的實現(xiàn)和主要功能。(0.4學(xué)時)講授Nachos系統(tǒng)Mesa樣式管程的實現(xiàn)和主要功能。(0.4學(xué)時)講授如何利用信號燈解決多生產(chǎn)者/消費者問題。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:信號燈的實現(xiàn)和主要功能。要求: 掌握。
難點:Mesa樣式管程的實現(xiàn)和主要功能。要求: 熟悉。
主要外語詞匯 Synchronization Semaphore Lock Monitor
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.Explain why starvation is possible if the waiting queue of semaphore is implemented by using the LIFO order.2.Provide another example showing that incorrect results may occur when producer and consumer processes run the programs in page 190 of the text.3.If the P()and V()operations of semaphore are not executed atomically, show how the mutual exclusion intended in the code in Figure 7.11 of the text may be violated.參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 7,8 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 7,8
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:Hoare樣式管程的實現(xiàn)
教學(xué)日期:10-10/18
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Hoare樣式管程的同步機理,如何在操作系統(tǒng)內(nèi)核中構(gòu)造Hoare樣式管程并用它解決實際的同步問題。啟發(fā)學(xué)生對管程同步機制的創(chuàng)新思路。, 要求:說明Nachos系統(tǒng)同步機制的實現(xiàn)方法,并說明如何進行管程的實驗和開發(fā)。讓學(xué)生實現(xiàn)一個帶有管程機制的Nachos操作系統(tǒng)新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授Hoare樣式管程的同步機理。(0.4學(xué)時)講授如何在操作系統(tǒng)中實現(xiàn)Hoare樣式的管程。(0.4學(xué)時)講授如何在Hoare樣式的管程中實現(xiàn)條件變量。(0.4學(xué)時)講授如何利用管程解決多生產(chǎn)者/消費者問題。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:Hoare樣式的管程同步機理。要求: 掌握。難點:Hoare樣式的管程實現(xiàn)。要求: 熟悉。
主要外語詞匯 Hoare Condition Wait Signal
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教、多媒體課件
復(fù)習(xí)思考題
1.Explain why the Hoare style condition variables degenerate to the Mesa style condition variables if if operation Signal()can only appear as the last state-ment in all functions of a monitor..2.Write a monitor for the bounded-buffer problem.Implement this monitor in Nachos using(a)the existing Mesa style condition variables
(b)the Hoare style condition variables you implemented previously.參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 7,8 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 7,8
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:MISP虛擬機和內(nèi)存管理
教學(xué)日期:10-10/25
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Nachos內(nèi)核是如何模擬一個真實計算機硬件的,用戶程序是如何在MIPS虛擬機上運行的。怎樣編寫和開發(fā)內(nèi)存管理程序。啟發(fā)學(xué)生構(gòu)造內(nèi)存管理機制的創(chuàng)新思路。要求:說明Nachos內(nèi)核是如何模擬一個真實計算機硬件的,并說明如何進行內(nèi)存管理的實驗和開發(fā)。
讓學(xué)生實現(xiàn)一個能同時駐留多道用戶程序的Nachos操作系統(tǒng)新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授Nachos內(nèi)核是如何模擬一個MISP計算機CPU的。(0.4學(xué)時)講授Nachos內(nèi)核是如何模擬一個MISP計算機的內(nèi)存的。(0.4學(xué)時)講授Nachos內(nèi)核是如何模擬一個MISP計算機頁式內(nèi)存管理部件的。(0.4學(xué)時)講授Nachos內(nèi)核是如何將一個用戶可執(zhí)行程序裝入內(nèi)存執(zhí)行的。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:用戶可執(zhí)行程序的裝入和執(zhí)行.。要求: 掌握。難點:頁式內(nèi)存管理部件管理。
要求: 熟悉。
主要外語詞匯 MIPS
Simulator Memory Translation
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.Suppose that a memory reference instruction of a 32-bit machine can have at most two memory references.The instruction that has two memory ref-erences itself takes two 32-bit words.The machine allows at most 8 levels of indirection for each memory reference.What is the minimum number of frames that must be allocated to a process on this machine? Why?
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 9,10
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:系統(tǒng)調(diào)用的實現(xiàn)
教學(xué)日期:10-11/1
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:說明操作系統(tǒng)系統(tǒng)調(diào)用的基本機制,怎樣編制開發(fā)系統(tǒng)調(diào)用接口和系統(tǒng)調(diào)用管理程序。啟發(fā)學(xué)生對系統(tǒng)調(diào)用的創(chuàng)新思路。
要求: 能實現(xiàn)一個具有fork,Exec等基本系統(tǒng)調(diào)用功能的Nachos操作系統(tǒng)新內(nèi)核。
授課主要內(nèi)容及學(xué)時分配
講授系統(tǒng)調(diào)用接口和用戶程序是怎樣鏈接的。(0.6學(xué)時)講授系統(tǒng)調(diào)用異常是怎樣進入的。(0.6學(xué)時)講授系統(tǒng)調(diào)用管理程序應(yīng)當(dāng)怎樣實現(xiàn)。(0.6學(xué)時)安排本節(jié)實驗內(nèi)容(0.2學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:系統(tǒng)調(diào)用管理程序的設(shè)計.。
要求: 掌握。難點:fork,Exec系統(tǒng)調(diào)用的實現(xiàn)。
要求: 熟悉。
主要外語詞匯
System call Interfaces Stub
Exception Trap fork
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.When linking start.o and the object module of a Nachos user program, say halt.o, why must we put start.o before halt.o? 2.Describe all the changes you need to make in the Nachos code in order to implement the remaining 10 systems calls
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 3,9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 3,9,10
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:虛擬內(nèi)存
教學(xué)日期:10-11/8
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:說明Nachos系統(tǒng)虛擬內(nèi)存的基本機制。啟發(fā)學(xué)生對操作系統(tǒng)虛擬內(nèi)存設(shè)計的創(chuàng)新思路。
要求: 啟發(fā)出學(xué)生如何進行虛擬內(nèi)存實驗的思路。授課主要內(nèi)容及學(xué)時分配
講授Nachos構(gòu)造虛擬內(nèi)存的基本機制。(0.6學(xué)時)講授請求式內(nèi)存頁式管理設(shè)計技術(shù)(0.6學(xué)時)講授頁置換策略算法的實現(xiàn)技術(shù)(0.6學(xué)時)安排本節(jié)設(shè)計開發(fā)實驗內(nèi)容(0.2學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:分頁式虛擬內(nèi)存的構(gòu)造.。要求: 掌握。難點:頁置換策略的實現(xiàn)。
要求: 熟悉。
主要外語詞匯 Virtual Memory TLB Demand Paging Page Replacement Frames
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.What is the minimum of page frame a process ? 2.What allocation to use ? 3.Whether yu apply the allocation algorithm globally or locally
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 3,9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 3,9,10
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:文件系統(tǒng)接口
教學(xué)日期:10-11/15
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Nachos文件系統(tǒng)的層次和結(jié)構(gòu),如何操作文件系統(tǒng)。啟發(fā)學(xué)生擴展文件系統(tǒng)功能的創(chuàng)新思路。
要求:說明Nachos文件系統(tǒng)的層次和結(jié)構(gòu),并說明如何進行文件系統(tǒng)操作的實驗和開發(fā)。
讓學(xué)生實現(xiàn)一個具有獨立文件系統(tǒng)的Nachos操作系統(tǒng)新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授Nachos文件系統(tǒng)的層次和結(jié)構(gòu)。(0.4學(xué)時)講授Nachos系統(tǒng)中的打開文件系統(tǒng)。(0.4學(xué)時)講授Nachos系統(tǒng)中的文件目錄結(jié)構(gòu)。(0.4學(xué)時)講授怎樣操作Nachos文件系統(tǒng)。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:Nachos文件系統(tǒng)的層次和結(jié)構(gòu)。要求: 掌握。難點:Nachos系統(tǒng)中的打開文件系統(tǒng)。要求: 熟悉。
主要外語詞匯 File system
Open files Directory File Operations
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.What are the sector numbers of data blocks for file big?
2.What is the sector number of the disk to store the file header for file big?
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 11 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 11
山東大學(xué)授課教案
課程名稱 :操作系統(tǒng)課程設(shè)計 本次授課內(nèi)容:I/O系統(tǒng)和文件系統(tǒng)的實現(xiàn)
教學(xué)日期:10-11/22
授課教師姓名:張鴻烈
職稱:高級實驗師
授課對象:本科
授課時數(shù):2
教材名稱及版本:Nachos Study v3.4授課方式:講課
本單元或章節(jié)的教學(xué)目的與要求:
目的:讓學(xué)生了解Nachos系統(tǒng)中I/O系統(tǒng)和文件系統(tǒng)的實現(xiàn)方法,如何擴展文件系統(tǒng)功能。啟發(fā)學(xué)生擴展文件系統(tǒng)功能的創(chuàng)新思路。
要求:Nachos系統(tǒng)中I/O系統(tǒng)和文件系統(tǒng)的實現(xiàn),并說明如何進行文件系統(tǒng)擴展的實驗和開發(fā)。
讓學(xué)生實現(xiàn)一個具有擴展功能文件系統(tǒng)的Nachos操作系統(tǒng)新內(nèi)核。授課主要內(nèi)容及學(xué)時分配
講授Nachos文件系統(tǒng)的組織層次。(0.4學(xué)時)講授Nachos系統(tǒng)中設(shè)備控制的方法。(0.4學(xué)時)講授Nachos系統(tǒng)中文件空間的管理方法。(0.4學(xué)時)講授Nachos文件系統(tǒng)中目錄和I節(jié)點的管理方法。(0.4學(xué)時)安排本節(jié)實驗內(nèi)容(0.4學(xué)時)
重點、難點及對學(xué)生的要求(掌握、熟悉、了解、自學(xué))
重點:Nachos文件系統(tǒng)的文件空間和I節(jié)點的管理方法。要求: 掌握。難點:Nachos系統(tǒng)中設(shè)備控制的方法。要求: 熟悉。
主要外語詞匯 I/O Control
Free Space I-Node Directory
輔助教學(xué)情況(多媒體課件、板書、繪圖、標(biāo)本、示教等)板書、示教
復(fù)習(xí)思考題
1.According to the result of the last command nachos D and the result of od c DISK , how many files are there on the hard disk DISK?
2.The sector size of the Nachos hard disk is 128 bytes.Could you check the result of od-c DISK to make sure that the data blocks and the file header of big are in the right places in the disk?
參考教材(資料)
Silberschatz, A., Galvin, P., and Gagne, G., ”O(jiān)perating System Concepts”, 6th Edition.Chapter 12,13 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 12,13
第二篇:操作系統(tǒng)課程設(shè)計
湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
(操作系統(tǒng)課程設(shè)計)
連續(xù)動態(tài)分區(qū)內(nèi)存
管理模擬實現(xiàn)
學(xué)生姓名: 韓 慧 學(xué)生學(xué)號: 031140312 班 級: 031140--3 0311401、02、03、04班制
二〇一三年十二月 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
目錄
《操作系統(tǒng)》課程設(shè)計.......................................................1 引言......................................................................3 課程設(shè)計目的和內(nèi)容......................................................3 需求分析.........................................................................3 概要設(shè)計...................................................................3 開發(fā)環(huán)境........................................................................4 系統(tǒng)分析設(shè)計.....................................................................4 有關(guān)了解內(nèi)存管理的相關(guān)理論..................................................4 內(nèi)存管理概念........................................................................4 內(nèi)存管理的必要性..............................................................4 內(nèi)存的物理組織.............................................................4 什么是虛擬內(nèi)存.................................................................5 連續(xù)動態(tài)分區(qū)內(nèi)存管理方式...................................................5 單一連續(xù)分配(單個分區(qū))...................................................5
固定分區(qū)存儲管理...............................................................5 可變分區(qū)存儲管理(動態(tài)分區(qū))..............................................5 可重定位分區(qū)存儲管理........................................................5 問題描述和分析....................................................................6 程序流程圖........................................................................6 數(shù)據(jù)結(jié)構(gòu)體分析..................................................................8 主要程序代碼分析...............................................................9 分析并實現(xiàn)四種內(nèi)存分配算法.................................................11 最先適應(yīng)算.....................................................................11 下次適應(yīng)分配算法..........................................................13 最優(yōu)適應(yīng)算法...............................................................16 最壞適應(yīng)算法...............................................................18 回收內(nèi)存算法................................................................20 調(diào)試與操作說明.................................................................22
初始界面.......................................................................22 模擬內(nèi)存分配...............................................................23
已分配分區(qū)說明表面............................................................24 空閑區(qū)說明表界面.............................................................24 回收內(nèi)存界面.....................................................................25 重新申請內(nèi)存界面..........................................................26.總結(jié)與體會......................................................................28 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
參考文獻.........................................................................28
引言
操作系統(tǒng)是最重要的系統(tǒng)軟件,同時也是最活躍的學(xué)科之一。我們通過操作系統(tǒng)可以理解計算機系統(tǒng)的資源如何組織,操作系統(tǒng)如何有效地管理這些系統(tǒng)資源,用戶如何通過操作系統(tǒng)與計算機系統(tǒng)打交道。
存儲器是計算機系統(tǒng)的重要組成部分,近年來,存儲器容量雖然一直在不斷擴大,但仍不能滿足現(xiàn)代軟件發(fā)展的需要,因此,存儲器仍然是一種寶貴而又緊俏的資源。如何對它加以有效的管理,不僅直接影響到存儲器的利用率,而且還對系統(tǒng)性能有重大影響。而動態(tài)分區(qū)分配屬于連續(xù)分配的一種方式,它至今仍在內(nèi)存分配方式中占有一席之地。
課程設(shè)計目的和內(nèi)容:
理解內(nèi)存管理的相關(guān)理論,掌握連續(xù)動態(tài)分區(qū)內(nèi)存管理的理論;通過對實際問題的編程實現(xiàn),獲得實際應(yīng)用和編程能力。
編寫程序?qū)崿F(xiàn)連續(xù)動態(tài)分區(qū)內(nèi)存管理方式,該程序管理一塊虛擬內(nèi)存,實現(xiàn)內(nèi)存分配和回收功能。分析并實現(xiàn)四種內(nèi)存分配算法,即最先適應(yīng)算法,下次最先適應(yīng)算法,最優(yōu)適應(yīng)算法,最壞適應(yīng)算法。內(nèi)存分配算法和回收算法的實現(xiàn)。
需求分析
動態(tài)分區(qū)分配是根據(jù)進程的實際需要,動態(tài)地為之分配內(nèi)存空間。在實現(xiàn)動態(tài)分區(qū)分配時,將涉及到分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個問題。常用的數(shù)據(jù)結(jié)構(gòu)有動態(tài)分區(qū)表和動態(tài)分區(qū)鏈。在對數(shù)據(jù)結(jié)構(gòu)有一定掌握程度的情況下設(shè)計合理的數(shù)據(jù)結(jié)構(gòu)來描述存儲空間,實現(xiàn)分區(qū)存儲管理的內(nèi)存分配功能,應(yīng)該選擇最合適的適應(yīng)算法(首次適應(yīng)算法,最佳適應(yīng)算法,最后適應(yīng)算法,最壞適應(yīng)算法),在動態(tài)分區(qū)存儲管理方式中主要實現(xiàn)內(nèi)存分配和內(nèi)存回收算法,在這些存儲管理中間必然會有碎片的產(chǎn)生,當(dāng)碎片產(chǎn)生時,進行碎片的拼接等相關(guān)的內(nèi)容
概要設(shè)計
本程序采用機構(gòu)化模塊化的設(shè)計方法,共分為四大模塊。⑴最先適應(yīng)算法實現(xiàn)
從空閑分區(qū)表的第一個表目起查找該表,把最先能夠滿足要求的空閑區(qū)分配給作業(yè),這種方法目的在于減少查找時間。為適應(yīng)這種算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按地址由低到高進行排序。該算法優(yōu)先使用低址部分空閑區(qū),在低址空間造成許多小的空閑區(qū),在高地址空間保留大的空閑區(qū)。⑵下次適應(yīng)分配算法實現(xiàn) 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
該算法是最先適應(yīng)算法的變種。在分配內(nèi)存空間時,不再每次從表頭(鏈?zhǔn)祝╅_始查找,而是從上次找到空閑區(qū)的下一個空閑開始查找,直到找到第一個能滿足要求的的空閑區(qū)為止,并從中劃出一塊與請求大小相等的內(nèi)存空間分配給作業(yè)。該算法能使內(nèi)存中的空閑區(qū)分布得較均勻。⑶最優(yōu)適應(yīng)算法實現(xiàn)
它從全部空閑區(qū)中找出能滿足作業(yè)要求的、且大小最小的空閑分區(qū),這種方法能使碎片盡量小。為適應(yīng)此算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按從小到大進行排序,自表頭開始查找到第一個滿足要求的自由分區(qū)分配。⑷最壞算法實現(xiàn)
最壞適應(yīng)分配算法要掃描整個空閑分區(qū)或鏈表,總是挑選一個最大的空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量從大到小的順序形成一空閑分區(qū)鏈,查找時只要看第一個分區(qū)能否滿足作業(yè)要求。
開發(fā)環(huán)境:
win7 下 VC++6.0 系統(tǒng)分析設(shè)計:
相關(guān)算法原理,算法流程圖,涉及的數(shù)據(jù)結(jié)構(gòu)內(nèi)容都相應(yīng)包含在各章節(jié)中
有關(guān)了解內(nèi)存管理的相關(guān)理論
內(nèi)存管理概念:
內(nèi)存管理,是指軟件運行時對計算機內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當(dāng)?shù)臅r候釋放和回收內(nèi)存資源。內(nèi)存不是預(yù)先劃分好的,而是在系統(tǒng)運行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時,根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待.分區(qū)長度不固定分區(qū)個數(shù)不固定。這種存儲管理的方法克服了固定分區(qū)嚴(yán)重浪費主存的問題,提高了主存資源的利用率。
內(nèi)存管理的必要性:
內(nèi)存管理對于編寫出高效率的 Windows 程序是非常重要的,這是因為Windows 是多任務(wù)系統(tǒng),它的內(nèi)存管理和單任務(wù)的 DOS 相比有很大的差異。DOS是單任務(wù)操作系統(tǒng),應(yīng)用程序分配到內(nèi)存后,如果它不主動釋放,系統(tǒng)是不會對它作任何改變的;但 Windows 卻不然,它在同一時刻可能有多個應(yīng)用程序共享內(nèi)存,有時為了使某個任務(wù)更好地執(zhí)行,Windows 系統(tǒng)可能會對其它任務(wù)分配的內(nèi)存進行移動,甚至刪除。因此,我們在 Windows 應(yīng)用程序中使用內(nèi)存時,要遵循Windows 內(nèi)存管理的一些約定,以盡量提高 Windows 內(nèi)存的利用率。湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
1.3 內(nèi)存的物理組織:
物理地址:
把內(nèi)存分成若干個大小相等的存儲單元,每個存儲單元占 8 位,稱作字節(jié)(byte)。每個單元給一個編號,這個編號稱為物理地址(內(nèi)存地址、絕對地址、實地址)。
二、物理地址空間: 物理地址的集合稱為物理地址空間(主存地址空間),它是一個一維空間。
什么是虛擬內(nèi)存:
虛擬內(nèi)存是內(nèi)存管理技術(shù)的一個極其實用的創(chuàng)新。它是一段程序(由操作系統(tǒng)調(diào)度),持續(xù)監(jiān)控著所有物理內(nèi)存中的代碼段、數(shù)據(jù)段,并保證他們在運行中的效率以及可靠性,對于每個用戶層(user-level)的進程分配一段虛擬內(nèi)存空間。當(dāng)進程建立時,不需要在物理內(nèi)存件之間搬移數(shù)據(jù),數(shù)據(jù)儲存于磁盤內(nèi)的虛擬內(nèi)存空間,也不需要為該進程去配置主內(nèi)存空間,只有當(dāng)該進程被被調(diào)用的時候才會被加載到主內(nèi)存。
連續(xù)動態(tài)分區(qū)內(nèi)存管理方式的實現(xiàn)
在早期的操作系統(tǒng)中,主存分配廣泛采用連續(xù)分配方式。連續(xù)分配方式,是指為一個用戶程序分配一個連續(xù)的內(nèi)存空間,該連續(xù)內(nèi)存空間指的的是物理內(nèi)存。下面介紹連續(xù)分配的四種方式。
單一連續(xù)分配(單個分區(qū))
最簡單的存儲管理方式,用于多道程序設(shè)計技術(shù)之前。內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)由操作系統(tǒng)使用。用戶區(qū)作為一個連續(xù)的分區(qū)分配給一個作業(yè)。分區(qū)存儲管理是滿足多道程序設(shè)計的最簡單的一種存儲管理方法,它允許多 4個用戶程序同時存在系統(tǒng)內(nèi)存中,即共享內(nèi)存空間。按分區(qū)劃分方式可分為固定分區(qū)和可變分區(qū)。
固定分區(qū)存儲管理
把內(nèi)存的用戶區(qū)預(yù)先劃分成多個分區(qū),每個分區(qū)大小可以相同,也可以不同。(分區(qū)的劃分由計算機的操作員或者由操作系統(tǒng)給出,并給出主存分配表)分區(qū)個數(shù)固定,分區(qū)的大小固定。一個分區(qū)中可裝入一個作業(yè),作業(yè)執(zhí)行過程中不會改變存放區(qū)域。早期的 IBM 的 OS/MFT(具有固定任務(wù)數(shù)的多道程序系統(tǒng))采用了這種固定分區(qū)的方法。
可變分區(qū)存儲管理(動態(tài)分區(qū))
內(nèi)存不是預(yù)先劃分好的,而是在系統(tǒng)運行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時,根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待。分區(qū)長度不固定分區(qū)個數(shù)不固定。這種存儲管理的方法克服了固定分區(qū)嚴(yán)重浪費主存的問題,提高了主存資源的利用率。IBM操作系統(tǒng)OS/MVT采用可變分區(qū)存儲管理。湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
可重定位分區(qū)存儲管理
解決碎片問題的一種簡單方法是采用可重定位分區(qū)分配.。其中心思想是,把不同程序,且在內(nèi)存中地址不連續(xù)的想法讓他們連續(xù)。
例:內(nèi)存中現(xiàn)有 3 個空閑區(qū),現(xiàn)有一作業(yè)到達(dá),要求獲得 30k 內(nèi)存空間,沒有分區(qū)滿足容量要求,若想把作業(yè)裝入,可將內(nèi)存中所有作業(yè)進行移動,這樣把原來分散的空閑區(qū)匯集成一個大的空閑區(qū)。將內(nèi)存中的作業(yè)進行移動使它們連接在一起把原來分散的多個小分區(qū)拼接成一個大的空閑區(qū).這個過程稱為”緊湊”或”移動”。需解決的問題:每次”緊湊”后程序或數(shù)據(jù)裝入的物理地址變化采用動態(tài)重定位。
問題描述和分析
系統(tǒng)應(yīng)利用某種分配算法,從空閑分區(qū)鏈表中找到所需大小的分區(qū),如果空閑分區(qū)大小大于請求分區(qū)大小,則從該分區(qū)中按改請求的大小劃分出一塊內(nèi)存空間大小劃分出一塊內(nèi)存空間分配出去,余下的部分仍留在空閑鏈表中。然后,將分配區(qū)的首址返回給調(diào)用者。
當(dāng)進程運行完畢師范內(nèi)存時,系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)中找到相應(yīng)的插入點,此時可能出現(xiàn)以下四種情況之一:
⑴該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū):將三個空閑區(qū)合并為一個空閑區(qū)。新空閑區(qū)的起始地址為上空閑區(qū)的起始地址,大小為三個空閑區(qū)之和。空閑區(qū)合并后,取消可用表或自由鏈中下空閑區(qū)的表目項或鏈指針,修改上空閑區(qū)的對應(yīng)項。
⑵該空閑區(qū)的上相鄰區(qū)是空閑區(qū):將釋放區(qū)與上空閑區(qū)合并為一個空閑區(qū),其起始地址為上空閑區(qū)的起始地址,大小為上空閑區(qū)與釋放區(qū)之和。合并后,修改上空閑區(qū)對應(yīng)的可用表的表目項或自由鏈指針。
⑶該空閑區(qū)的下相鄰區(qū)是空閑區(qū):將釋放區(qū)與下空閑區(qū)合并,并將釋放區(qū)的起始地址作為合并區(qū)的起始地址。合并區(qū)的長度為釋放區(qū)與下空閑區(qū)之和。同理,合并后修改可用表或自由鏈中相應(yīng)的表目項或鏈指針。
⑷兩相鄰區(qū)都不是空閑區(qū):釋放區(qū)作為一個新空閑可用區(qū)插入可用表或自由鏈。
程序流程圖
內(nèi)存分配流程圖,如圖
湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
從頭開始查表檢索完否?NY返回分區(qū)大小>所需大小N繼續(xù)檢索下一個表項Y分區(qū)大小-所需大小<=不可再分割大小N從該分區(qū)中劃出所需大小的新分區(qū)Y將該分區(qū)從鏈中移出將該分區(qū)分配給請求者修改有關(guān)數(shù)據(jù)結(jié)構(gòu)返回
內(nèi)存回收流程圖,如圖
湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
開始判斷空閑區(qū)上下內(nèi)存情況上為空下為空上下都為空上下都不為空將上面的空閑區(qū)合并,并回收將下面的空閑區(qū)合并,并回收將上下的空閑區(qū)合并,并回收直接將其回收結(jié)束 數(shù)據(jù)結(jié)構(gòu)體分析
⑴進程屬性結(jié)構(gòu)體 typedef struct readyque { char name[10];int size;}readyque,*readyqueue;⑵空閑鏈表結(jié)構(gòu)體 typedef struct idlyspace { int from;int size;idlyspace * next;}idlyspace,*idly;⑶已分配鏈表結(jié)構(gòu)體 typedef struct busyspace { int from;readyque r;湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
busyspace * next;}busyspace,*busy
主要程序代碼分析
⑴主函數(shù)//代碼請?zhí)砑舆m當(dāng)?shù)淖⑨?。int main(){ Is=(idly)malloc(sizeof(idlyspace));Is->from=0;Is->size=256;Is->next=NULL;Is2=Is;Bs=(busy)malloc(sizeof(busyspace));Bs->next=NULL;int t,t1;printf(“n.......................歡迎來到動態(tài)分區(qū)存儲管理系統(tǒng)..................nn”);printf(“...........................請選擇要執(zhí)行的算法:...........................n”);printf(“.........................1.最先適應(yīng)算法
...............................n”);printf(“.........................2.下次適應(yīng)算法............................n”);printf(“..........................3.最優(yōu)適應(yīng)算法
...............................n”);printf(“.........................4.最壞適應(yīng)算法................................n”);printf(“........................................................................n”);printf(“請輸入您的選擇:”);scanf(“%d”,&t);int i;while(i!=5){
printf(“........................................................................n”);
printf(“.........................操作菜單如下:(請選擇).......................n”);
printf(“..........................1.輸入進程分配空間...........................n”);
printf(“.........................2.進程撤銷回收空間...........................n”);
printf(“.........................3.輸出所有空閑分區(qū)
..........................n”);
printf(“..........................4.輸出所有已分配分區(qū)..........................n”);
printf(“..........................5.退
出..........................n”);
printf(“........................................................................n”);
scanf(“%d”,&i);
switch(i)
{
case 1:
switch(t)
{
case 1:
t1=FF();湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
break;
case 2:
t1=NF();
break;
case 3:
t1=BF();
break;
case 4:
t1=WF();
break;
default:
printf(“選擇算法錯誤n”);
return 1;
}
if(t1)
printf(“分配空間成功n”);
else
printf(“分配空間失敗n”);
break;
case 2:
t1=recover();
if(t1)
printf(“回收成功n”);
else
printf(“回收失敗n”);
break;
case 3:
Isprint();
break;
case 4:
Bsprint();
break;
} } return 0;}
第三章 :分析并實現(xiàn)四種內(nèi)存分配算法
最先適應(yīng)算法
空閑區(qū)按地址從小到大的次序排列。
分配:當(dāng)進程申請大小為 SIZE 的內(nèi)存時,系統(tǒng)順序查找空閑區(qū)表(鏈),直到找到容量滿足要求(≥SIZE)的空閑區(qū)為止。從該空閑區(qū)中劃出大小為 SIZE的分區(qū)分配給進程,余下的部分仍作為一個空閑區(qū),但要修改其首址和大小。湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計
優(yōu)點:這種算法是盡可能地利用低地址部分的空閑區(qū),而盡量地保證高地址 6部分的大空閑區(qū),有利于大作業(yè)的裝入。
缺點:主存低地址和高地址分區(qū)利用不均衡。在低地址部分集中了許多非常小的空閑區(qū)碎片降低了主存的利用率。最先適應(yīng)算法 int FF(){ int t=0;readyque D;printf““請輸入進程名:””);scanf““%””,D.name);
printf““輸入進程申請空間大小:””);scanf““%””,&D.size);
idly l=Is;int mt=256;busy b=Bs;idly min=NULL;while(l)
//尋找空閑表中大小滿足申請進程所需大小并且起址最小的空閑結(jié)點
{
if(D.size<=l->size)
{
if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); //如果找到則為進程分配空間 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 下次適應(yīng)分配算法 最先適應(yīng)算法的變種。 總是從空閑區(qū)上次掃描結(jié)束處順序查找空閑區(qū)表(鏈),直到找到第一個滿足容量要求的空閑區(qū)為止,分割一部分給作業(yè),剩余部分仍作為空閑區(qū)。下次適應(yīng)分配算法 int NF(){ int t=0;readyque D;printf““請輸入進程名:””);scanf““%””,D.name); 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 printf““輸入進程申請空間大小:””);scanf““%””,&D.size); int mt=256;idly l=Is2;idly min=NULL;busy b=Bs;while(l)//尋找空閑表中大小滿足申請進程所需大小并且起址最小的空閑結(jié)點 { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; //如果找到則為進程分配空間 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 } //將申請空間進程插入到已分配鏈表中 j->next=b->next; b->next=j; //修改相應(yīng)空閑節(jié)點的起址和大小 min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; 結(jié)點 t=1; return t;} l=Is;//l指向空閑表的頭 while(l!=Is2) { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256){ busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { //ls2指向修改結(jié)點的下一個 //循環(huán)查找 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; t=1; return t;} return t;} 最優(yōu)適應(yīng)算法 空閑區(qū)按容量遞增的次序排列。 分配:當(dāng)進程申請存儲空間,系統(tǒng)順序查找空閑區(qū)表(鏈),直到找到第一個滿足容量要求的空閑區(qū)為止。采用最優(yōu)適應(yīng)算法選中的空閑區(qū)是滿足容量要求的最小空閑區(qū)。優(yōu)點:選中的空閑區(qū)是滿足容量要求的最小空閑區(qū),而不致于毀掉較大的空閑區(qū)。 缺點:空閑區(qū)的大小一般與申請分區(qū)大小不相等,因此將其一分為二,留下來的空閑區(qū)一般情況下是很小的,以致無法使用。隨著時間的推移,系統(tǒng)中的小空閑區(qū)會越來越多,從而造成存儲空間的浪費。最優(yōu)適應(yīng)算法 int BF(){ int t=0;湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 readyque D;printf““請輸入進程名:””);scanf““%””,D.name); printf““輸入進程申請空間大小:””);scanf““%””,&D.size); idly l=Is;idly min=NULL;int mt=256;busy b=Bs;while(l)//在空閑鏈中尋找第一個大于所輸入的進程大小的空閑塊 { if(D.size<=l->size) { if(l->size { mt=l->size;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace));空間 j->from=min->from; //申請分配用于存放進程的內(nèi)存 //找到第一個滿足要求的空閑塊 //將第一個滿足要求的空閑塊(min)的首地址賦給j for(int i=0;i<10;i++) { j->r.name[i]=D.name[i];16 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 } j->r.size=D.size; while(b->next) //按從小到大的順序查找新進程在已分配區(qū)中的位置 { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; } return t;} 最壞適應(yīng)算法 為了克服最佳適應(yīng)算法把空閑區(qū)切割得太小的缺點,人們提出了一種最壞適應(yīng)算法,即每次分配時,總是將最大的空閑區(qū)切去一部分分配給請求者,剩余的部分仍是一個較大的空閑區(qū)。避免了空閑區(qū)越分越小的問題。要求空閑區(qū)按容量遞減的順序排列。 分配:進程申請存儲區(qū)時,檢查空閑區(qū)表(鏈)的第一個空閑區(qū)的大小是否滿足要求,若不滿足則令進程等待;若滿足則從該空閑區(qū)中分配一部分存儲區(qū)給用戶,剩下的部分仍作為空閑區(qū)。最壞適應(yīng)算法 int WF(){ int t=0;readyque D;printf““請輸入進程名:””);scanf““%””,D.name); printf““輸入進程申請空間大小:””); //將所輸入的進程插入進程鏈 //改變該空閑塊的起始地址 //改變該空閑塊的剩余大小 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 scanf““%””,&D.size); //輸入進程申請的空間大小 idly l=Is;//l指向空閑鏈表ls頭 idly min=NULL;int mt=0;busy b=Bs; //b指向已分配鏈表Bs頭 //找到空閑分區(qū)中大小滿足進程的請求且尺寸最大的結(jié)點 while(l){ if(D.size<=l->size)//判斷進程所申請的大小是否小于空閑區(qū)的各結(jié)點大小 { if(l->size>mt) { mt=l->size;min=l;//min指向空閑區(qū)中尺寸最大的結(jié)點 t=1; } } l=l->next;} if(mt!=0)點 { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; //判斷是否找到了空閑區(qū)的滿足結(jié) //l指向空閑鏈表下一個結(jié)點 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 while(b->next)置 //尋找插入到已分配鏈表中的位 { if(b->next->from b=b->next;else break; } //把此進程結(jié)點j插入到已分配鏈表中 j->next=b->next; b->next=j; //修改空閑鏈表的相應(yīng)結(jié)點的參數(shù) min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 可變分區(qū)的回收 當(dāng)某個進程釋放某存儲區(qū)時,系統(tǒng)首先檢查釋放區(qū)是否與系統(tǒng)中的空閑區(qū)相鄰若相鄰則把釋放區(qū)合并到相鄰的空閑區(qū)去,否則把釋放區(qū)作為一個空閑區(qū)插入到空閑表的適當(dāng)位置。 釋放區(qū)與空閑區(qū)相鄰的四種情況。 (1)釋放區(qū)與前空閑區(qū)相鄰:把釋放區(qū)與前空閑區(qū)合并到一個空閑區(qū)。其首址仍為前空閑區(qū)首址,大小為釋放區(qū)大小與空閑區(qū)大小之和。 (2)釋放區(qū)與后空閑區(qū)相鄰:則把釋放區(qū)合并到后空閑區(qū),其首地址為釋放區(qū)首地址,大小為二者之和。 (3)釋放區(qū)與前后兩空閑區(qū)相鄰:這三個區(qū)合為一個空閑區(qū),首地址為前空閑區(qū)首址,大小為這三個空閑區(qū)之和,并取消后空閑區(qū)表目。 (4)釋放區(qū)不與任何空閑區(qū)相鄰:將釋放區(qū)作為一個空閑區(qū),將其大小和首址插入到空閑區(qū)表的適當(dāng)位置。 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 回收內(nèi)存算法 int recover(){ readyque D;printf““請輸入想要回收的進程名””); scanf““%””,D.name); busy b=Bs;idly l=Is;while(b->next)鏈表中 { bool yo=1; for(int i=0;i<10;i++) { if(b->next->r.name[i]==D.name[i])yo=yo*1; else yo=0; } //如果在已分配鏈表中則釋放該結(jié)點所占空間 if(yo) { int t=b->next->from; int ts=b->next->r.size; //查找輸入的進程名是否在已分配湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 while(l) { if(l->from>t+ts)不鄰接 { idly tl;tl=(idly)malloc(sizeof(idlyspace));tl->from=t;tl->size=ts;tl->next=l;Is=tl;break;} if(l->from==t+ts) l->from=t; l->size=l->size+ts; busy tb=b->next; b->next=b->next->next; free(tb); return 1;} if(l->from+l->size idly tl; tl=(idly)malloc(sizeof(idlyspace)); tl->from=t; tl->size=ts; tl->next=l->next; l->next=tl; break;} else if(l->from+l->size==t) //所回收進程與空閑結(jié)點上鄰接 { //所回收進程與空閑結(jié)點上下都不鄰接 //所回收進程與空閑結(jié)點下鄰接 { //所回收進程與空閑結(jié)點上下都 21 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 l->size=l->size+ts; if(l->from+l->size==l->next->from)接 { l->size=l->size+l->next->size; idly tm=l->next; l->next=l->next->next; freI); } br l=l->next; } //從已分配鏈表中釋放所回收進程 busy tb=b->next; b->next=b->next->next; free(tb); return 1; } b=b->next;} printf(“沒找到這”進程n”);return 0;} //所回收進程與空閑結(jié)點上下都鄰調(diào)試與操作說明 初始界面 程序初始界面,有四個塊選擇,選擇要執(zhí)行的算法,調(diào)試以最壞算法為例,如圖 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 選擇最壞適應(yīng)算法,如圖 模擬內(nèi)存分配 給進程a分配內(nèi)存20,如圖 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 已分配分區(qū)說明表界面 同理,給進程b分配內(nèi)存30,給進程c分配內(nèi)存40,給進程d分配50,給進程e分配60,如圖 空閑分區(qū)說明表界面 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 查看空閑分區(qū),如圖 回收內(nèi)存界面 回收進程b和d所占內(nèi)存,如圖 已分配分區(qū)說明表和空閑分區(qū)說明表 如圖 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 重新申請內(nèi)存界面 再為新進程i分配內(nèi)存30,如圖 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 根據(jù)最壞適應(yīng)算法結(jié)合圖所示可知,該算法將會從空閑分區(qū)表中選擇一塊最大的內(nèi)存空間分配給進程i,從圖也可看出該模擬算法實現(xiàn)了最壞適應(yīng)算法 湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 總結(jié)與體會 本次做的課題是動態(tài)分區(qū)分配算法實現(xiàn),此次課程設(shè)計成功實現(xiàn)了內(nèi)存分配和內(nèi)存回收,內(nèi)存分配中包含了四種算法,分別是首次適應(yīng)算法,循環(huán)首次適應(yīng)算法,最佳適應(yīng)算法和最壞適應(yīng)算法。經(jīng)編碼調(diào)試,表明該程序模塊是有效可行的。 通過這門課程的學(xué)習(xí)讓我充分了解了內(nèi)存管理的機制實現(xiàn),從而更深一步的的對計算機 有了很多了解,這對于以后我們的研究和學(xué)習(xí)計算機系統(tǒng)起到了很重要的作用。 對于本次論文制作,自己的編程能力有所提高,對操作系統(tǒng)內(nèi)存分配,存儲空間的回收都有全新的認(rèn)識。 在這次操作系統(tǒng)課程設(shè)計中,我使用了c++編寫系統(tǒng)軟件,對os中可變分區(qū)存儲管理有了深刻的理解,但是過程中遇到了很多困難,一邊做一邊學(xué),對c++有了比較多的理解。 實驗中遇到很多問題,浪費了很多時間,總而言之是自己學(xué)習(xí)還不夠好,不扎實,希望在以后學(xué)習(xí)中加以改善,學(xué)到更多知識。 參考文獻 【1】 湯子瀛,哲鳳屏,湯小丹.計算機操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001.。湖北民族學(xué)院信息工程學(xué)院11級計算機專業(yè)操作系統(tǒng)課程設(shè)計 【2】 任愛華.操作系統(tǒng)實用教程.北京:清華大學(xué)出版社,2001。 長春理工大學(xué) 軟件學(xué)院 0813111班 27號 姓名:丁為勝 一. 概述 1、課程設(shè)計目的及任務(wù)課程設(shè)計地點及要求 每個學(xué)生一臺微機,需要安裝windows98或windows2000操作系統(tǒng),配備VC、VB、java或C編程語言,每個學(xué)生上機時間不少于24個小時。 操作系統(tǒng)是計算機專業(yè)的核心專業(yè)課,“操作系統(tǒng)課程設(shè)計”是理解和鞏固操作系統(tǒng)基本理論、原理和方法的重要的實踐環(huán)節(jié)。 操作系統(tǒng)課程主要講述的內(nèi)容是多道操作系統(tǒng)的原理與技術(shù),與其它計算機原理、編譯原理、匯編語言、計算機網(wǎng)絡(luò)、程序設(shè)計等專業(yè)課程關(guān)系十分密切。本課程設(shè)計的目的綜合應(yīng)用學(xué)生所學(xué)知識,建立系統(tǒng)和完整的計算機系統(tǒng)概念,理解和鞏固操作系統(tǒng)基本理論、原理和方法,掌握操作系統(tǒng)基本理論與管理方式。在算法基礎(chǔ)上,解決實際的管理功能的問題,提高學(xué)生實際應(yīng)用、編程的能力。 主要任務(wù)是實現(xiàn)操作系統(tǒng)和相關(guān)系統(tǒng)軟件的設(shè)計,其中涉及進程創(chuàng)建,同步,進程間的通信,存儲管理,文件系統(tǒng)等操作系統(tǒng)概念。 2.課程設(shè)計地點及要求 每個學(xué)生一臺微機,需要安裝windows98或windows2000操作系統(tǒng),配備VC、VB、java或C編程語言,每個學(xué)生上機時間不少于24個小時。 3.課程設(shè)計的內(nèi)容 設(shè)計二: 設(shè)計任務(wù): 掌握進程的管道通訊機制和信號量同步互斥機制。1. 進程的管道通訊 編制一個程序,程序中創(chuàng)建一個子進程。然后父子進程各自獨立運行,父進程不斷地在標(biāo)準(zhǔn)輸入設(shè)備上讀入小寫字母,寫入管道。子進程不斷地從管道中讀取字符,轉(zhuǎn)換為大寫字母后輸出到標(biāo)準(zhǔn)輸出設(shè)備上。當(dāng)讀到x時,結(jié)束。 2. 信號量實現(xiàn)的同步互斥機制 編制一個程序,程序中創(chuàng)建5個子進程,代表五位哲學(xué)家,然后父進程結(jié)束。使用信號量機制解決哲學(xué)家進餐問題。當(dāng)哲學(xué)家進餐時,屏幕輸出: [進程號] eating!當(dāng)哲學(xué)家思考時,屏幕輸出: [進程號] thinging!相關(guān)的系統(tǒng)調(diào)用和函數(shù):pipe();write();read();semget();sepop();semctl();要求:查找并閱讀上述系統(tǒng)調(diào)用的相關(guān)資料,將上述相關(guān)的函數(shù)封裝為P()、V()操作,使用你封裝的P()、V()操作實現(xiàn)5位哲學(xué)家的同步和互斥。 二. 設(shè)計的基本概念和原理 1.進程的管道通訊 管道(Pipe)實際是用于進程間通信的一段共享內(nèi)存,創(chuàng)建管道的進程稱為管道服務(wù)器,連接到一個管道的進程為管道客戶機。命名管道(Named Pipes)是在管道服務(wù)器和一臺或多臺管道客戶機之間進行單向或雙向通信的一種命名的管道。一個命名管道的所有實例共享同一個管道名,但是每一個實例均擁有獨立的緩存與句柄,并且為客戶——服務(wù)通信提供有一個分離的管道。實例的使用保證了多個管道客戶能夠在同一時間使用同一個命名管道。 2.信號量實現(xiàn)的同步互斥機制 規(guī)定奇數(shù)號的哲學(xué)家先拿起他左邊的筷子,然后再去拿他右邊的筷子;而偶數(shù)號 的哲學(xué)家則相反.按此規(guī)定,將是1,2號哲學(xué)家競爭1號筷子,3,4號哲學(xué)家競爭3號筷子.即 五個哲學(xué)家都競爭奇數(shù)號筷子,獲得后,再去競爭偶數(shù)號筷子,最后總會有一個哲學(xué)家能獲 得兩支筷子而進餐。而申請不到的哲學(xué)家進入阻塞等待隊列,根FIFO原則,則先申請的哲 學(xué)家會較先可以吃飯,因此不會出現(xiàn)餓死的哲學(xué)家。 三. 總體設(shè)計 1.實現(xiàn)的方法和主要技術(shù)路線 1.無名管道 無名管道用于具有親緣關(guān)系的父子進程,子子進程之間的通訊。它的實現(xiàn)函數(shù)有 int pipe(int fd[2]); //fd[2] 為描述符數(shù)組,包含一個讀描述符與一個寫描述符,在使用管道通信時,關(guān)閉某些不需要的讀或?qū)懨枋龇?,建立起單向的讀或?qū)懝艿溃缓笥胷ead 和write 像操作文件一樣去操作它即可。 如圖便是進程1 到進程2 的一個讀管道。 分別在父進程和父子進程里向管道寫數(shù)據(jù),然后在子進程和子子進程里讀數(shù)據(jù)。2.哲學(xué)家進餐偽碼: semaphore chopstick[5]={1,1,1,1,1};void philosopher(int i){ while(true){ think(); if(i%2 == 0)//偶數(shù)哲學(xué)家,先右后左。 { wait(chopstick[ i + 1 ] mod 5);wait(chopstick[ i]);eat(); signal(chopstick[ i + 1 ] mod 5);signal(chopstick[ i]);} Else //奇數(shù)哲學(xué)家,先左后右。 { wait(chopstick[ i]); wait(chopstick[ i + 1 ] mod 5);eat(); signal(chopstick[ i]); signal(chopstick[ i + 1 ] mod 5);} } 四. 詳細(xì)設(shè)計 進程的管道通信代碼: import java.io.IOException;import java.io.PipedReader; public class ReceiverThread1 extends Thread { PipedReader pipedReader; public ReceiverThread1(SenderThread1 sender)throws IOException { pipedReader=new PipedReader(sender.getPipedWriter()); } public void run() { char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;try { while((i=pipedReader.read(ch))!=-1) { sb=new StringBuffer(); for(int j=0;j { sb.append(ch[j]); } str=sb.toString(); System.out.println(“子進程讀取的字符為:”+str.toUpperCase()); if(!str.endsWith(“x”)) { System.out.print(“父進程讀入字符為:”); }else if(str.endsWith(“x”)) { System.out.println(“結(jié)束無法再次輸入字符”); } } } catch(IOException e){ e.printStackTrace();}finally{ try { pipedReader.close(); } catch(IOException e){ e.printStackTrace(); } } } } import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PipedWriter; public class SenderThread1 extends Thread { PipedWriter pipedWriter; public SenderThread1(){ pipedWriter=new PipedWriter();} public PipedWriter getPipedWriter(){ return pipedWriter;} public void run() { BufferedReader ir=new BufferedReader(new InputStreamReader(System.in));char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;System.out.print(“父進程讀入字符為:”);try { while((i=ir.read(ch))!=-1) { sb=new StringBuffer(); for(int j=0;j { if(ch[j]>='a' && ch[j]<='z') { sb.append(ch[j]); if(ch[j]=='x') { break; } } } str=sb.toString(); pipedWriter.write(str); if(str.startsWith(“x”)||str.endsWith(“x”)) { break; // this.stop(); } } } catch(IOException e){ e.printStackTrace();}finally{ try { ir.close(); pipedWriter.close(); } catch(IOException e){ e.printStackTrace(); } } } } public class ThreadComm1 { public static void main(String[] args)throws Exception{ SenderThread1 sender=new SenderThread1();ReceiverThread1 receiver=new ReceiverThread1(sender);sender.start();receiver.start();} } 哲學(xué)家進餐問題代碼: #include “stdafx.h” using namespace std;bool chop[100];//定義筷子 class ph { protected: bool * left,* right;//哲學(xué)家的左右手指向的筷子 int eattime;//哲學(xué)家的吃飯時間 public: bool check()//用于檢查哲學(xué)家左右手的筷子是不是被占用 { if(*left && *right) return true; else return false;} void eat(int ineattime)//哲學(xué)家開始進餐 { eattime=ineattime; *left=false; *right=false;} bool finish()//檢查哲學(xué)家是否完成進餐 { if(eattime>0)//沒完成的話剩余時間減少 { eattime--; if(eattime==0)//完成的話歸還筷子 { *left=true; *right=true; return true; } else return false; } else return false;} void init(int num,int max)//初始化哲學(xué)家,指定他們使用的筷子 { eattime=0; left=&chop[num]; if(num right=&chop[num+1]; else right=&chop[0];} };void main(){ system(“title 哲學(xué)家進餐問題”);int in,i,temp,time,j=1;queue for(int i=0;i<5;i++){ chop[i]=1; } for(int i=0;i<5;i++){ P[i].init(i,5);} cout<<“輸入哲學(xué)家進餐隊列:”< break;else if(in>5) { cout<<“一共只有”<<5<<“個人!”< } else { Q.push(in-1); } } cout<<“每個人吃飯時間:”< P[temp].eat(time); cout< if(temp+2>5) cout<<1< else cout< Q.push(temp);} for(i=0;i<5;i++) { if(P[i].finish()) cout< } //Q.push(-1); for(i=0;i { temp=Q.front(); Q.pop(); //if(temp!=-1) { cout< Q.push(temp); } //else { // Q.pop(); break; } } } for(int j=0;j第三篇:操作系統(tǒng)課程設(shè)計