亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        進(jìn)程管理演示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2009-08-28 09:09:14張瓊聲蔣玉新李春華劉童璇
        計(jì)算機(jī)教育 2009年14期
        關(guān)鍵詞:操作系統(tǒng)

        張瓊聲 蔣玉新 李春華 劉童璇

        摘要:進(jìn)程是資源分配和獨(dú)立運(yùn)行的基本單位,是操作系統(tǒng)的核心概念?!安僮飨到y(tǒng)”教學(xué)中,進(jìn)程的概念以及進(jìn)程管理的實(shí)現(xiàn)原理抽象難懂,初學(xué)者難以掌握。本文闡述如何以圖形化方式設(shè)計(jì)和實(shí)現(xiàn)進(jìn)程管理的演示系統(tǒng),以輔助課堂教學(xué)。該系統(tǒng)的演示內(nèi)容包括:進(jìn)程的概念、進(jìn)程創(chuàng)建、進(jìn)程組織、進(jìn)程關(guān)系管理、進(jìn)程阻塞、進(jìn)程喚醒、進(jìn)程撤銷、進(jìn)程調(diào)度、進(jìn)程同步。

        關(guān)鍵詞:進(jìn)程管理;演示系統(tǒng);操作系統(tǒng)

        中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B

        1前言

        進(jìn)程管理是操作系統(tǒng)原理最主要的教學(xué)內(nèi)容之一,而進(jìn)程及進(jìn)程的控制原理是學(xué)生學(xué)習(xí)的重點(diǎn)和難點(diǎn)。如何使學(xué)生能夠在較短的時(shí)間內(nèi),深入了解進(jìn)程的概念及進(jìn)程控制的原理,如何把進(jìn)程的概念與程序運(yùn)行的軟硬件環(huán)境的變化聯(lián)系起來?如何把進(jìn)程管理的功能與數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn)結(jié)合起來?使學(xué)生從根本上掌握進(jìn)程的概念,理解操作系統(tǒng)中進(jìn)程管理功能的實(shí)現(xiàn)原理和實(shí)現(xiàn)技術(shù),把抽象的理論與具體的實(shí)現(xiàn)技術(shù)結(jié)合起來?是“操作系統(tǒng)”課程教學(xué)面臨的重要問題。

        進(jìn)程管理演示系統(tǒng)主要用于輔助課堂教學(xué),試圖將抽象的理論與系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)的具體技術(shù)相結(jié)合,通過動(dòng)態(tài)的、圖形化的界面表現(xiàn)進(jìn)程概念的本質(zhì)、進(jìn)程管理的過程、進(jìn)程管理功能與數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)的關(guān)系。把抽象的概念和原理實(shí)例化。幫助學(xué)生直觀地、深入地理解進(jìn)程的概念和進(jìn)程管理功能存在的必要性以及相應(yīng)的實(shí)現(xiàn)技術(shù)。

        本系統(tǒng)主要實(shí)現(xiàn)進(jìn)程概念、進(jìn)程控制、進(jìn)程調(diào)度、進(jìn)程同步行為和實(shí)現(xiàn)原理的演示。該系統(tǒng)的特點(diǎn)是用圖形化的方式把操作系統(tǒng)原理與程序?qū)崿F(xiàn)結(jié)合起來。論文詳細(xì)說明了該演示系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)技術(shù)。

        2系統(tǒng)設(shè)計(jì)

        2.1系統(tǒng)模塊結(jié)構(gòu)

        本系統(tǒng)包括進(jìn)程概念、進(jìn)程控制、進(jìn)程調(diào)度、進(jìn)程同步四個(gè)演示模塊。其中進(jìn)程控制演示模塊包括進(jìn)程創(chuàng)建、進(jìn)程終止、進(jìn)程阻塞與喚醒三個(gè)演示子模塊。進(jìn)程調(diào)度演示模塊包括單級(jí)隊(duì)列調(diào)度和多級(jí)隊(duì)列調(diào)度演示兩個(gè)子模塊。進(jìn)程同步演示模塊包括進(jìn)程互斥和讀者—寫者問題演示兩個(gè)子模塊。

        本系統(tǒng)用VC++6.0開發(fā),采用單文檔結(jié)構(gòu),所有演示過程都在視圖中通過VC控件交互實(shí)現(xiàn)。系統(tǒng)使用了延時(shí)機(jī)制,每當(dāng)執(zhí)行一個(gè)過程使界面發(fā)生變化或執(zhí)行了關(guān)鍵步驟后,執(zhí)行一個(gè)延時(shí)函數(shù),從而給用戶足夠的時(shí)間觀察界面的變化。

        2.2進(jìn)程組織

        (1) 鏈表組織

        本系統(tǒng)實(shí)現(xiàn)多個(gè)進(jìn)程鏈表,包括總進(jìn)程鏈表、多個(gè)優(yōu)先權(quán)不同的就緒進(jìn)程鏈表和三個(gè)對(duì)應(yīng)不同阻塞事情的阻塞進(jìn)程鏈表。

        (2) 進(jìn)程樹

        系統(tǒng)按照進(jìn)程的親屬關(guān)系,建立進(jìn)程樹,實(shí)現(xiàn)了進(jìn)程樹的管理和圖形顯示。

        (3) 進(jìn)程標(biāo)識(shí)符PID的管理

        每一個(gè)進(jìn)程都有唯一的內(nèi)部標(biāo)識(shí)符PID,本系統(tǒng)通過循環(huán)使用來達(dá)到有限PID資源的合理利用。當(dāng)進(jìn)程創(chuàng)建時(shí)分配可用的PID,當(dāng)進(jìn)程終止時(shí),釋放占用的PID。

        2.3進(jìn)程執(zhí)行過程的模擬

        本系統(tǒng)通過定時(shí)器和執(zhí)行時(shí)間來模擬進(jìn)程的執(zhí)行過程。

        創(chuàng)建進(jìn)程時(shí),給進(jìn)程一個(gè)隨機(jī)的執(zhí)行時(shí)間。執(zhí)行時(shí)間長(zhǎng)短根據(jù)系統(tǒng)參數(shù)配置進(jìn)行靈活控制。進(jìn)程同步中對(duì)臨界資源的訪問過程也通過訪問時(shí)間來模擬,根據(jù)進(jìn)程的執(zhí)行時(shí)間,進(jìn)程訪問臨界資源的時(shí)間總是定義為一個(gè)比總執(zhí)行時(shí)間小的值。

        給定進(jìn)程的執(zhí)行時(shí)間后,通過定時(shí)器控制進(jìn)程的執(zhí)行。進(jìn)程執(zhí)行一條指令用一個(gè)定時(shí)周期來模擬,在定時(shí)處理函數(shù)中對(duì)進(jìn)程控制塊的相關(guān)數(shù)據(jù)進(jìn)行修改并同步在界面上更新顯示,從而模擬出進(jìn)程的執(zhí)行過程。當(dāng)定時(shí)周期數(shù)等于給定的進(jìn)程執(zhí)行時(shí)間時(shí)(本系統(tǒng)在進(jìn)程控制塊中添加了已執(zhí)行時(shí)間來記錄執(zhí)行進(jìn)度,該值就等于定時(shí)周期數(shù)),進(jìn)程正常結(jié)束。

        2.4進(jìn)程概念演示模塊

        本模塊通過顯示當(dāng)前進(jìn)程的PCB信息、CPU寄存器的變化來演示進(jìn)程概念。模擬了進(jìn)程實(shí)體、進(jìn)程控制塊、動(dòng)態(tài)特征、短暫存在性、進(jìn)程切換、并發(fā)執(zhí)行、獨(dú)立性等特點(diǎn)。

        系統(tǒng)界面上顯示的進(jìn)程信息都直接或間接地從進(jìn)程控制塊中獲取。

        2.5進(jìn)程控制演示模塊

        (1) 進(jìn)程創(chuàng)建演示模塊

        本模塊實(shí)現(xiàn)進(jìn)程創(chuàng)建過程的演示。用戶可以輸入新進(jìn)程的外部標(biāo)識(shí)符即進(jìn)程名稱,若用戶沒有輸入,則系統(tǒng)自動(dòng)為進(jìn)程命名,每一個(gè)進(jìn)程的創(chuàng)建都是有引發(fā)事件的,用戶可以在界面上選擇一個(gè)引發(fā)進(jìn)程創(chuàng)建的事件。當(dāng)用戶點(diǎn)擊“創(chuàng)建進(jìn)程”按鈕時(shí)就開始執(zhí)行創(chuàng)建進(jìn)程過程并同步顯示進(jìn)程創(chuàng)建的每一個(gè)執(zhí)行步驟。

        (2) 進(jìn)程終止演示模塊

        本模塊實(shí)現(xiàn)并演示各種不同情況下進(jìn)程終止的過程。用戶可以通過輸入PID來終止某個(gè)進(jìn)程,也可以通過選擇界面上進(jìn)程列表中的某個(gè)進(jìn)程來終止被選中的進(jìn)程。執(zhí)行態(tài)進(jìn)程被終止后要轉(zhuǎn)進(jìn)程調(diào)度程序。

        (3) 進(jìn)程阻塞與喚醒演示模塊

        本模塊實(shí)現(xiàn)并演示進(jìn)程阻塞與喚醒的過程。進(jìn)程執(zhí)行過程中用戶可以選擇阻塞事件并阻塞當(dāng)前進(jìn)程。當(dāng)有阻塞態(tài)進(jìn)程時(shí),用戶可以選擇相關(guān)事件喚醒阻塞列表中的進(jìn)程。

        本模塊設(shè)置了三個(gè)阻塞事件:打印機(jī)服務(wù)、I/O設(shè)備操作和無新數(shù)據(jù)輸入。

        2.6進(jìn)程調(diào)度演示模塊

        本模塊實(shí)現(xiàn)了單級(jí)隊(duì)列調(diào)度和多級(jí)隊(duì)列調(diào)度的演示。分別實(shí)現(xiàn)了搶占、非搶占、優(yōu)先級(jí)、時(shí)間片等調(diào)度策略的模擬。多級(jí)隊(duì)列調(diào)度的演示,模擬了Minix的三級(jí)隊(duì)列(任務(wù)級(jí)、服務(wù)級(jí)和用戶級(jí))調(diào)度 ,定義了三個(gè)優(yōu)先級(jí)不同的就緒隊(duì)列。

        2.7進(jìn)程同步演示模塊

        (1) 進(jìn)程互斥演示模塊

        本模塊實(shí)現(xiàn)并演示了多個(gè)進(jìn)程互斥訪問同一個(gè)臨界資源的控制過程。通過該演示過程,使用戶了解操作系統(tǒng)是如何實(shí)現(xiàn)進(jìn)程對(duì)臨界資源的互斥訪問的。

        本模塊中,對(duì)臨界資源的訪問可以由用戶控制,也可以系統(tǒng)自動(dòng)控制。即在進(jìn)程執(zhí)行過程中,用戶可以發(fā)送訪問臨界資源的命令,讓其執(zhí)行訪問臨界資源的過程。自動(dòng)控制的設(shè)計(jì)是若某進(jìn)程沒有訪問過臨界資源,則令其在執(zhí)行過程的最后時(shí)間段自動(dòng)訪問臨界資源。

        (2) 讀者—寫者問題演示模塊

        本模塊演示多個(gè)讀進(jìn)程與寫進(jìn)程同步訪問共享數(shù)據(jù)區(qū)的管理過程。創(chuàng)建進(jìn)程時(shí),用戶要指定新進(jìn)程的類別(讀者進(jìn)程或?qū)懻哌M(jìn)程)。用戶可以通過進(jìn)程列表選擇任何進(jìn)程執(zhí)行,執(zhí)行過程中,用戶可以隨時(shí)讓進(jìn)程訪問資源。

        2.8系統(tǒng)參數(shù)配置

        本系統(tǒng)為了靈活控制演示過程并滿足用戶的需要,設(shè)置了一些配置參數(shù),如定時(shí)周期、最小或最大延時(shí)時(shí)間、最小或最大執(zhí)行時(shí)間、優(yōu)先級(jí)、最大進(jìn)程數(shù)等。

        2.9系統(tǒng)界面設(shè)計(jì)

        演示界面設(shè)計(jì)如圖1所示:

        3系統(tǒng)實(shí)現(xiàn)

        3.1進(jìn)程控制塊PCB

        (1)PCB結(jié)構(gòu)體定義

        structPCB

        {

        //進(jìn)程標(biāo)識(shí)符信息

        UINTnPID; //進(jìn)程的內(nèi)部標(biāo)識(shí)符

        CString szName; //進(jìn)程的外部標(biāo)識(shí)符

        PCB *pParent; //進(jìn)程的父進(jìn)程指針

        PCB *pFirstChild; //進(jìn)程的子進(jìn)程指針

        PCB *pNextSibling; //兄弟進(jìn)程指針

        //處理機(jī)狀態(tài)信息

        DWORD dwPC; //下一條指令地址

        DWORD dwPSW; //程序狀態(tài)字

        DWORD dwCS; //段地址

        DWORD dwPageTableAddr; //最外層頁表地址,32位

        //進(jìn)程調(diào)度信息

        UINT iState; //進(jìn)程的狀態(tài)

        UINT iPriority; //進(jìn)程的優(yōu)先級(jí)

        UINT iPriorUpSteps; //優(yōu)先級(jí)動(dòng)態(tài)提升的級(jí)數(shù)

        int nTotalTime; //進(jìn)程的總執(zhí)行時(shí)間

        int nHasExecTime; //進(jìn)程已經(jīng)執(zhí)行的時(shí)間

        int nWaitTime; //等待時(shí)間

        UINT iWaitEvent; //等待事件

        UINT iCritSrcSort; //進(jìn)程訪問的臨界資源類別

        int nCritSrcTotalT;

        //進(jìn)程訪問臨界資源的總時(shí)間

        int nCritSrcHasExecT;

        //進(jìn)程已經(jīng)訪問臨界資源 的時(shí)間

        UINT iCritSrcVisitPos;

        //進(jìn)程訪問臨界資源的階段

        //進(jìn)程控制信息

        int nKernelStackPos;//內(nèi)核棧指針位置

        UINT iUser; //進(jìn)程的用戶名

        UINT iSort; //進(jìn)程的類別

        UINT nWaitedSema; //已經(jīng)等待過信號(hào)量的標(biāo)志

        list_headpTasksList; //進(jìn)程鏈表的指針

        list_head pStateList; //鏈接狀態(tài)鏈表的指針

        RECT *aAddrSpace[3];//關(guān)聯(lián)進(jìn)程三部分模擬空間

        };

        (2)PCB結(jié)構(gòu)體說明

        ? 組織進(jìn)程關(guān)系的域

        pParent記錄每一個(gè)進(jìn)程的父進(jìn)程,pFirstChild記錄第一個(gè)兒子,pNextSibling記錄下一個(gè)兄弟,通過這種方式記錄了整個(gè)父子關(guān)系樹,進(jìn)程關(guān)系的管理通過這三個(gè)域?qū)崿F(xiàn)。

        ? 記錄寄存器信息的域

        dwPC、dwPSW、dwCS、dwPageTableAddr分別保存了當(dāng)前CPU中主要的寄存器信息,通過這些信息來管理進(jìn)程并發(fā)執(zhí)行以及獨(dú)立運(yùn)行。dwPC在每一次定時(shí)處理中加1,模擬一條指令的執(zhí)行,dwPSW在執(zhí)行過程中隨機(jī)變化,模擬指令執(zhí)行對(duì)CPU標(biāo)志的影響。每個(gè)進(jìn)程的dwCS和dwPageTableAddr值不同且不變,在創(chuàng)建進(jìn)程時(shí)要保證它們的唯一性。

        ? 優(yōu)先級(jí)

        iPriority是進(jìn)程的優(yōu)先級(jí)。本系統(tǒng)設(shè)定了六種優(yōu)先級(jí),分別為PRIO_REALTIME(實(shí)時(shí))、PRIO_HIGHER(高)、PRIO_UPSTANDARD(高于標(biāo)準(zhǔn))、PRIO_STANDARD(標(biāo)準(zhǔn))、PRIO_DOWNSTANDARD(低于標(biāo)準(zhǔn))、PRIO_LOWER(低)。該值是動(dòng)態(tài)的,在某些模塊中,創(chuàng)建進(jìn)程時(shí)系統(tǒng)自動(dòng)設(shè)為PRIO_STANDARD(標(biāo)準(zhǔn));在某些模塊中,創(chuàng)建進(jìn)程時(shí)由用戶指定。在所有模塊中,每一次進(jìn)程調(diào)度時(shí)根據(jù)nWaitTime(等待時(shí)間)以及系統(tǒng)參數(shù)m_nUpPrioSpan(優(yōu)先級(jí)升級(jí)的基數(shù),針對(duì)等待時(shí)間)對(duì)就緒進(jìn)程的iPriority值進(jìn)行相應(yīng)的修改,但最高只能升級(jí)到PRIO_HIGHER(高)。

        ? 執(zhí)行時(shí)間

        nTotalTime是進(jìn)程的執(zhí)行時(shí)間,它決定了進(jìn)程的生存期,用于控制進(jìn)程的執(zhí)行。系統(tǒng)進(jìn)程(0號(hào)進(jìn)程和1號(hào)進(jìn)程)的PCB中,其值為-1,表示進(jìn)程一直存在。

        ? 已執(zhí)行時(shí)間

        nHasExecTime是進(jìn)程的已執(zhí)行時(shí)間,用于控制進(jìn)程的執(zhí)行進(jìn)度。進(jìn)程執(zhí)行時(shí),在每一次定時(shí)處理中加該域值1,當(dāng)它等于nTotalTime時(shí),表示進(jìn)程執(zhí)行完畢。

        ? 等待時(shí)間

        nWaitTime是進(jìn)程的等待時(shí)間,用于動(dòng)態(tài)修改進(jìn)程的優(yōu)先級(jí),該值在每一次定時(shí)處理中加1,但執(zhí)行態(tài)進(jìn)程的nWaitTime始終為0,只有當(dāng)執(zhí)行態(tài)進(jìn)程切換為其它狀態(tài)時(shí),才開始累積該值。當(dāng)進(jìn)程的狀態(tài)發(fā)生改變而鏈入到其它狀態(tài)鏈表中時(shí),該值清0。

        ? 等待事件

        iWaitEvent是進(jìn)程的等待事件,本系統(tǒng)將此值的范圍進(jìn)行了擴(kuò)充。對(duì)于就緒進(jìn)程,該值為WAIT_CPU(等待CPU);對(duì)于執(zhí)行態(tài)進(jìn)程,該值為WAIT_NULL(沒有等待事件);對(duì)于阻塞進(jìn)程,該值表示阻塞事件,可以取值為WAIT_PRINTER(等待打印機(jī)),WAIT_IOSTREAM(等待I/O設(shè)備),WAIT_NEWDATA(等待新數(shù)據(jù));在進(jìn)程同步模塊中,對(duì)于等待臨界資源的進(jìn)程該值為WAIT_CRITSRC (等待臨界資源),等待的資源保存在iCritSrcSort中。

        ? 訪問的臨界資源種類

        iCritSrcSort是進(jìn)程訪問臨界資源的種類,也就是對(duì)應(yīng)的信號(hào)量類別。本系統(tǒng)中可以取值為CRITSRC_PRINTER (打印機(jī)資源)、CRITSRC_GLOBAL (全局變量資源)、CRITSRC_READWRITE(讀寫資源)。對(duì)于不需要訪問臨界資源的進(jìn)程來說該值為CRITSRC_NULL(無臨界資源)。

        ? 訪問臨界資源的時(shí)間

        nCritSrcTotalT是進(jìn)程訪問臨界資源的總時(shí)間,用于控制進(jìn)程對(duì)臨界資源的訪問過程,該值是在進(jìn)程創(chuàng)建時(shí)根據(jù)nTotalTime隨機(jī)產(chǎn)生的,總是小于nTotalTime。

        ? 已訪問臨界資源時(shí)間

        nCritSrcHasExecT是進(jìn)程已訪問臨界資源的時(shí)間,用于控制進(jìn)程訪問臨界資源的進(jìn)度,在定時(shí)處理中加1,當(dāng)?shù)扔趎CritSrcTotalT時(shí)表示訪問臨界資源結(jié)束,該域主要在進(jìn)程同步模塊中使用,在其他模塊中該值一律為0。

        ? 訪問臨界資源的階段

        iCritSrcVisitPos是進(jìn)程對(duì)臨界資源的訪問階段,可以取值為CRITSRC_VISIT_NULL(沒有訪問),CRITSRC_ VISIT_ENTEY(進(jìn)入?yún)^(qū))、CRITSRC_VISIT_CRITICAL(臨界區(qū))、CRITSRC_VISIT_EXIT(退出區(qū))、CRITSRC_ VISIT_FINISH(完成訪問),該域用于標(biāo)識(shí)和記錄進(jìn)程訪問資源階段,在進(jìn)程同步模塊中使用。

        ? 內(nèi)核棧棧頂位置

        nKernelStackPos模擬進(jìn)程的內(nèi)核棧指針位置,即棧頂位置,創(chuàng)建進(jìn)程時(shí)置為0,模擬進(jìn)程執(zhí)行過程中內(nèi)核棧的變化,該域主要在進(jìn)程概念演示模塊中使用。

        ? 進(jìn)程用戶名

        iUser是進(jìn)程的用戶名,可以取值為SYSTEM(系統(tǒng))和USER(用戶)。本系統(tǒng)中為了能夠比較全面地模擬操作系統(tǒng)中的進(jìn)程,設(shè)置了0號(hào)系統(tǒng)進(jìn)程和1號(hào)系統(tǒng)進(jìn)程。

        ? 進(jìn)程類別

        iSort是進(jìn)程的類別,可以取值為NORMALTASK(一般進(jìn)程)、READTASK(讀者進(jìn)程)、WRITETASK(寫者進(jìn)程),該域主要用于區(qū)分進(jìn)程同步模塊中的讀寫進(jìn)程,在其他模塊中,該值為NORMALTASK(一般進(jìn)程)。

        ? 等待信號(hào)量標(biāo)志

        nWaitedSema用于進(jìn)程同步模塊,用來標(biāo)識(shí)進(jìn)程訪問臨界資源過程中,是否執(zhí)行過wait(s)原語,因?yàn)楫?dāng)進(jìn)程申請(qǐng)信號(hào)量失敗被阻塞后,它已經(jīng)對(duì)信號(hào)量值進(jìn)行減一操作了,當(dāng)再次被喚醒時(shí),是從被阻塞的位置往下執(zhí)行的,即不會(huì)再檢查信號(hào)量值了,由于本系統(tǒng)是模擬這一過程,需要一個(gè)標(biāo)志來做判斷,而進(jìn)程訪問臨界資源的過程中可能要涉及多個(gè)信號(hào)量,所以將nWaitedSema定義為UINT類型,否則會(huì)使信號(hào)量值發(fā)生錯(cuò)誤。

        ? 鏈表鏈接域

        pTasksList和pStateList用于鏈接進(jìn)程鏈表,它們都是list_head類型的通用雙向循環(huán)鏈表。list_head結(jié)構(gòu)的定義:

        structlist_head

        {

        struct list_head * pPre;

        struct list_head * pNext;

        PCB * pThisPcb;

        };

        ? 模擬內(nèi)存空間

        aAddrSpace是一個(gè)具有三個(gè)元素的數(shù)組,用來模擬進(jìn)程的邏輯內(nèi)存空間,是RECT類型的。本系統(tǒng)用三個(gè)矩形模擬進(jìn)程三部分(正文段、用戶數(shù)據(jù)段和系統(tǒng)數(shù)據(jù)段)在內(nèi)存中的分布,在界面上顯示出來,直觀地表示出進(jìn)程實(shí)體。在進(jìn)程創(chuàng)建演示中,由于要演示資源分配的過程,所以在進(jìn)程創(chuàng)建時(shí)對(duì)該數(shù)組進(jìn)程賦值(根據(jù)顯示區(qū)域合理的產(chǎn)生隨機(jī)值),而其它模塊中,在需要顯示進(jìn)程實(shí)體的分布時(shí)才給該數(shù)組賦值。

        3.2信號(hào)量

        在進(jìn)程同步演示模塊中,用到了記錄型信號(hào)量。

        (1) 信號(hào)量結(jié)構(gòu)體定義

        structSEMAPHORE

        {

        int nValue; //資源數(shù)量

        CProcessLink * pBlockLink; //阻塞鏈表

        };

        (2) 結(jié)構(gòu)體說明

        每一個(gè)信號(hào)量都有一個(gè)標(biāo)識(shí)臨界資源數(shù)量的值,即結(jié)構(gòu)體中的nValue。在本系統(tǒng)的進(jìn)程同步模塊中,用到的都是互斥信號(hào)量,所以nValue初值都是1。當(dāng)該值小于0時(shí),nValue的絕對(duì)值表示阻塞鏈表中的等待進(jìn)程數(shù)。

        因等待臨界資源而不能繼續(xù)執(zhí)行的進(jìn)程阻塞相應(yīng)信號(hào)量的阻塞鏈表中,該鏈表就是結(jié)構(gòu)體中的pBlockLink,當(dāng)進(jìn)程釋放臨界資源訪問權(quán)時(shí),若判斷得出還有等待該資源的進(jìn)程,就從該鏈表中喚醒第一個(gè)進(jìn)程。

        3.3模塊類

        模塊類是本系統(tǒng)中實(shí)現(xiàn)進(jìn)程管理系統(tǒng)演示的核心類。由于本系統(tǒng)有多個(gè)模塊,且各個(gè)模塊具有一些共同特性,所以定義了一個(gè)基類CDlgPage,并定義了繼承類CDlgPage的各個(gè)模塊或子模塊類,如圖2所示。每個(gè)模塊都有一些重要的成員,說明如下:

        ? m_pCurRunPcb指向當(dāng)前將要執(zhí)行的進(jìn)程或當(dāng)前正在執(zhí)行的進(jìn)程。

        ? m_nCurTimerEvent記錄定時(shí)器定時(shí)標(biāo)志。

        ? m_pTasksLink指向總進(jìn)程鏈表。

        ? m_pSysIdleTask是0號(hào)系統(tǒng)進(jìn)程,m_pSysInitTask是1號(hào)系統(tǒng)進(jìn)程,每個(gè)模塊中都有這兩個(gè)模擬的系統(tǒng)進(jìn)程,這兩個(gè)進(jìn)程在第一次演示當(dāng)前模塊時(shí)創(chuàng)建,一直存在。

        ? m_nProNum是當(dāng)前模塊中的進(jìn)程數(shù)。

        ? m_pSysInitTask是1號(hào)系統(tǒng)進(jìn)程。

        ? m_nProNum是當(dāng)前模塊中的進(jìn)程數(shù)。

        ? virtual void InitPage()該函數(shù)的功能是在用戶切換到當(dāng)前模塊時(shí)進(jìn)行一些初始化操作,即控件創(chuàng)建、信息顯示、等操作。

        ? virtual void ClearPage()該函數(shù)的功能是對(duì)當(dāng)前演示模塊進(jìn)行相關(guān)清除操作,即刪除界面控件、清除其它界面顯示、清除模塊對(duì)象與標(biāo)志記錄等操作。

        用戶在切換演示模塊時(shí)先調(diào)用被切換模塊對(duì)象的ClearPage()函數(shù),再調(diào)用切換到的模塊對(duì)象的InitPage()函數(shù),從而實(shí)現(xiàn)演示模塊的切換。

        4總結(jié)

        本系統(tǒng)結(jié)合多種控件以及延時(shí)、同步刷新界面和突出顯示變化效果等實(shí)現(xiàn)了圖形化的進(jìn)程管理模擬系統(tǒng),達(dá)到了較好的演示效果。進(jìn)程管理中各個(gè)模塊獨(dú)立實(shí)現(xiàn),能較好地輔助操作系統(tǒng)原理的課堂教學(xué)。系統(tǒng)代碼結(jié)構(gòu)清晰,功能豐富,方案設(shè)計(jì)合理,擴(kuò)展性強(qiáng),有良好的交互性,有助于學(xué)生直觀、具體地理解進(jìn)程管理原理。

        參考文獻(xiàn):

        [1] 湯子瀛,哲鳳評(píng),湯小丹. 計(jì)算機(jī)操作系統(tǒng)原理(修訂版)[M].西安:西安電子科技大學(xué)出版社,2001:26-79.

        [2] 陳莉君. 深入分析Linux內(nèi)核源代碼[M].北京:人民郵電出版社,2002:97-138.

        [3] DANIEL P.BOVET,MARCO CESATI.深入理解Linux內(nèi)核[M].3版.陳莉君,譯.北京:中國(guó)電力出版社,2007:84-134,258-265.

        [4] Andrew S.Tanenbaum. 操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京:電子工業(yè)出版社,1998:19-49.

        猜你喜歡
        操作系統(tǒng)
        智能手機(jī)操作系統(tǒng)的分析與比較
        卷宗(2016年10期)2017-01-21 14:04:15
        國(guó)產(chǎn)桌面操作系統(tǒng)中虛擬化技術(shù)應(yīng)用研究
        計(jì)算機(jī)維護(hù)中操作系統(tǒng)還原技術(shù)的分析
        對(duì)計(jì)算機(jī)進(jìn)行操作系統(tǒng)重裝的維護(hù)
        操作系統(tǒng)實(shí)踐教學(xué)改革探索
        基于虛擬機(jī)(VMware)的實(shí)驗(yàn)平臺(tái)構(gòu)建
        基于單片機(jī)的嵌入式系統(tǒng)的開發(fā)研究
        計(jì)算機(jī)操作系統(tǒng)中死鎖問題研究
        “操作系統(tǒng)原理”實(shí)驗(yàn)教學(xué)設(shè)置初探
        高校操作系統(tǒng)課程教學(xué)改革的研究與實(shí)踐
        插上翅膀插上科学的翅膀飞| 精品无码人妻久久久一区二区三区| 蜜桃在线观看免费高清| 亚洲一区二区三区国产| 大地资源中文第3页| 色两性网欧美| 亚洲国产不卡av一区二区三区| 人妻有码av中文幕久久| 波多野结衣久久精品99e| 午夜视频在线观看视频在线播放| 国产精品网站在线观看免费传媒 | 欧美成人久久久免费播放| 日本高清不卡一区二区三区| 国内久久婷婷六月综合欲色啪| 无码免费一区二区三区| 国产精品久久久久久久久免费观看 | 看女人毛茸茸下面视频| 色天使综合婷婷国产日韩av| 国产又爽又黄的激情精品视频| 91国产超碰在线观看| 人妻少妇不满足中文字幕| 国产av综合影院| 国产艳妇av在线出轨| 国产偷闻女邻居av在线观看| 亚洲日韩精品无码av海量| 中文无码制服丝袜人妻av | 伊人狼人激情综合影院| 少妇久久久久久被弄高潮| 最近中文字幕视频高清| 亚洲色图在线视频免费观看 | 久久午夜精品人妻一区二区三区| 性生交大全免费看| 91精品日本久久久久久牛牛| 亚洲熟妇一区二区蜜桃在线观看 | 日韩亚洲一区二区三区四区| 99久久综合精品五月天| 亚洲av影院一区二区三区四区| 亚洲熟妇一区二区蜜桃在线观看| 免费网站看av片| 热久久这里只有| 日本一区二区三区一级片|