河北工業(yè)大學(xué) 操作系統(tǒng) 2014 版 實(shí)驗(yàn) 報(bào)告 實(shí)驗(yàn)一
進(jìn)程控制與描述 一、實(shí)驗(yàn)?zāi)康?通過(guò)對(duì) Windows 2000 編程,進(jìn)一步熟悉操作系統(tǒng)得基本概念,較好地理解 Windows 2000 得結(jié)構(gòu)。通過(guò)創(chuàng)建進(jìn)程、觀察正在運(yùn)行得進(jìn)程與終止進(jìn)程得程序設(shè)計(jì)與調(diào)試操作,進(jìn)一步熟悉操作系統(tǒng)得進(jìn)程概念,理解Windows 2000進(jìn)程得“一生”。
三、實(shí)驗(yàn)內(nèi)容與步驟 第一部分: Windows 2000 Professional 下得 GUI 應(yīng)用程序,使用 Visual C++編譯器創(chuàng)建一個(gè) GUI 應(yīng)用程序,代碼中包括了WinMain 方法,該方法 GUI 類型得應(yīng)用程序得標(biāo)準(zhǔn)入口點(diǎn)。
程序 11
Windows 2000 得 GUI 應(yīng)用程序
也可以利用任何其她文本編輯器鍵入程序代碼,如果這樣,例如使用 WORD 來(lái)鍵入與編輯程序,則應(yīng)該注意什么問(wèn)題?保存時(shí),將文件保存為擴(kuò)展名為*、cpp 得 C++源文件。
在程序 11 得 GUI 應(yīng)用程序中,首先需要 Windows、h 頭文件,以便獲得傳送給 WinMain 與 MessageBox API函數(shù)得數(shù)據(jù)類型定義。
接著得 pragma 指令指示編譯器/連接器找到 User32、LIB 庫(kù)文件并將其與產(chǎn)生得 EXE 文件連接起來(lái)。這樣就可以運(yùn)行簡(jiǎn)單得命令行命令 CL MsgBox、CPP 來(lái)創(chuàng)建這一應(yīng)用程序,如果沒(méi)有 pragma 指令,則 MessageBox API函數(shù)就成為未定義得了。這一指令就是 Visual Studio C++ 編譯器特有得。
接下來(lái)就是 WinMain 方法。其中有四個(gè)由實(shí)際得低級(jí)入口點(diǎn)傳遞來(lái)得參數(shù)。hInstance 參數(shù)用來(lái)裝入與代碼相連得圖標(biāo)或位圖一類得資源,無(wú)論何時(shí),都可用 GetModuleHandle API 函數(shù)將這些資源提取出來(lái)。系統(tǒng)利用實(shí)例句柄來(lái)指明代碼與初始得數(shù)據(jù)裝在內(nèi)存得何處。句柄得數(shù)值實(shí)際上就是 EXE 文件映像得基地址,通常為 0x00400000。下一個(gè)參數(shù) hPrevInstance 就是為向后兼容而設(shè)得,現(xiàn)在系統(tǒng)將其設(shè)為 NULL。應(yīng)用程序得命令行 (不包括程序得名稱) 就是 lpCmdLine 參數(shù)。另外,系統(tǒng)利用 nCmdShow 參數(shù)告訴應(yīng)用程序如何顯示它得主窗口 (選項(xiàng)包括最小化、最大化與正常) 。
最后,程序調(diào)用 MessageBox API 函數(shù)并退出。如果在進(jìn)入消息循環(huán)之前就結(jié)束運(yùn)行得話,最后必須返回 0。
運(yùn)行結(jié)果:
彈出一個(gè)消息框,標(biāo)題為 Greetings,內(nèi)容為 Hello,Windows Xp,中間有一個(gè)確認(rèn)按鈕。
進(jìn)程對(duì)象 操作系統(tǒng)將當(dāng)前運(yùn)行得應(yīng)用程序瞧作就是進(jìn)程對(duì)象。利用系統(tǒng)提供得惟一得稱為句柄 (HANDLE) 得號(hào)碼,就可與進(jìn)程對(duì)象交互。這一號(hào)碼只對(duì)當(dāng)前進(jìn)程有效。
本實(shí)驗(yàn)表示了一個(gè)簡(jiǎn)單得進(jìn)程句柄得應(yīng)用。在系統(tǒng)中運(yùn)行得任何進(jìn)程都可調(diào)用 GetCurrentProcess API 函數(shù),此函數(shù)可返回標(biāo)識(shí)進(jìn)程本身得句柄。然后就可在 Windows 需要該進(jìn)程得有關(guān)情況時(shí),利用這一句柄來(lái)提供。
程序 12: 獲得與使用進(jìn)程得句柄
程序 12 中列出得就是一種獲得進(jìn)程句柄得方法。對(duì)于進(jìn)程句柄可進(jìn)行得惟一有用得操作就是在 API 調(diào)用時(shí),將其作為參數(shù)傳送給系統(tǒng),正如程序 12 中對(duì) GetPriorityClass API 函數(shù)得調(diào)用那樣。在這種情況下,系統(tǒng)向進(jìn)程對(duì)象內(nèi)“窺視”,以決定其優(yōu)先級(jí),然后將此優(yōu)先級(jí)返回給應(yīng)用程序。
OpenProcess 與 CreateProcess API 函數(shù)也可以用于提取進(jìn)程句柄。前者提取得就是已經(jīng)存在得進(jìn)程得句柄,而后者創(chuàng)建一個(gè)新進(jìn)程,并將其句柄提供出來(lái)。
12、cpp 得運(yùn)行結(jié)果:
進(jìn)程優(yōu)先權(quán)為 Normal。
程序 13 顯示如何找出系統(tǒng)中正在運(yùn)行得所有進(jìn)程,如何利用 OpenProcess API 函數(shù)來(lái)獲得每一個(gè)訪問(wèn)進(jìn)程得進(jìn)一步信息。
程序 13
利用句柄查出進(jìn)程得詳細(xì)信息 程序 13 程序首先利用 Windows 2000 得新特性,即工具幫助庫(kù)來(lái)獲得當(dāng)前運(yùn)行得所有進(jìn)程得快照。然后應(yīng)用程序進(jìn)入快照中得每一個(gè)進(jìn)程,得到其以 PROCESSENTRY32 結(jié)構(gòu)表示得屬性。這一結(jié)構(gòu)用來(lái)向 OpenProcess API
函數(shù)提供進(jìn)程得 ID。Windows 跟蹤每一進(jìn)程得有關(guān)時(shí)間,示例中就是通過(guò)打開得進(jìn)程句柄與 GetProcessTimes API來(lái)直詢得到有關(guān)時(shí)間得。接下來(lái),一個(gè)定制得幫助函數(shù)取得了幾個(gè)返回得數(shù)值,然后計(jì)算進(jìn)程在內(nèi)核模式下消耗得時(shí)間占總時(shí)間得百分比。程序得其余部分比較簡(jiǎn)單,只就是將有關(guān)信息顯示給用戶,清除進(jìn)程句柄,然后繼續(xù)循環(huán),直到所有進(jìn)程都計(jì)算過(guò)為止。
運(yùn) 行 結(jié)果 : 第二部分:進(jìn)程得“一生” 1、 創(chuàng)建進(jìn)程 創(chuàng)建子進(jìn)程 本程序展示得就是一個(gè)簡(jiǎn)單得使用 CreateProcess API 函數(shù)得例子。首先形成簡(jiǎn)單得命令行,提供當(dāng)前得 EXE文件得指定文件名與代表生成克隆進(jìn)程得號(hào)碼。大多數(shù)參數(shù)都可取缺省值,但就是創(chuàng)建標(biāo)志參數(shù)使用了:行為像一個(gè)子進(jìn)程得標(biāo)志,指示新進(jìn)程分配它自己得控制臺(tái),這使得運(yùn)行示例程序時(shí),在任務(wù)欄上產(chǎn)生許多活動(dòng)標(biāo)記。然后該克隆進(jìn)程得創(chuàng)建方法關(guān)閉傳遞過(guò)來(lái)得句柄并返回 main 函數(shù)。在關(guān)閉程序之前,每一進(jìn)程得執(zhí)行主線程暫停一下,以便讓用戶瞧到其中得至少一個(gè)窗口。
CreateProcess 函數(shù)有 5 個(gè)核心參數(shù)?本實(shí)驗(yàn)程序中設(shè)置得各個(gè)參數(shù)得值就是: a、 (LPCTSTR lpApplicationName) sz, // 產(chǎn)生這個(gè) EXE 得應(yīng)用程序得名稱; b、
(LPTSTR lpmandLine) szCmdLine, // 告訴其行為像一個(gè)子進(jìn)程得標(biāo)志; c、
(BOOL bInheritHandles) FALSE, // 不繼承句柄; d、 (LPSTARTUPINFO lpStartupInfo)
&si, // 啟動(dòng)信息; e、 (LPPROCESS_INFORMATION lpProcessInformation)
&pi); // 返回得進(jìn)程信息; 程序運(yùn)行時(shí)屏幕顯示得信息就是:
2、 正在運(yùn)行得進(jìn)程 使用進(jìn)程與操作系統(tǒng)得版本信息 運(yùn)行結(jié)果:
當(dāng)前 PID 信息:_4664 當(dāng)前操作系統(tǒng)版本:5、1(我得操作系統(tǒng)為 Windows XP) 系統(tǒng)提示信息:Task Manager should now now indicate this process is high priority. 程序向讀者表明了如何獲得當(dāng)前得 PID 與所需得進(jìn)程版本信息。為了運(yùn)行這一程序,系統(tǒng)處理了所有得版本
不兼容問(wèn)題。
接著,程序演示了如何使用 GetVersionEx API 函數(shù)來(lái)提取 OSVERSIONINFOEX 結(jié)構(gòu)。這一數(shù)據(jù)塊中包括了操作系統(tǒng)得版本信息。其中,“OS : 5、0”表示當(dāng)前運(yùn)行得操作系統(tǒng)就是:Windows 2000。最后一段程序利用了操作系統(tǒng)得版本信息,以確認(rèn)運(yùn)行得就是 Windows 2000。代碼接著將當(dāng)前進(jìn)程得優(yōu)先級(jí)提高到比正常級(jí)別高。
單擊 Ctrl + Alt + Del 鍵,進(jìn)入“Windows 任務(wù)管理器”,在“應(yīng)用程序”選項(xiàng)卡中右鍵單擊本任務(wù),在快捷菜單中選擇“轉(zhuǎn)到進(jìn)程”命令。
在“Windows 任務(wù)管理器”得“進(jìn)程”選項(xiàng)卡中,與本任務(wù)對(duì)應(yīng)得進(jìn)程映像名稱就是 (為什么?) : VCSPAWN、EXE 右鍵單擊該進(jìn)程名,在快捷菜單中選擇“設(shè)置優(yōu)先級(jí)”命令,可以調(diào)整該進(jìn)程得優(yōu)先級(jí),如設(shè)置為“高”后重新運(yùn)行程序,屏幕顯示有變化嗎?
沒(méi)有。
3、 終止進(jìn)程 指令其子進(jìn)程來(lái)“殺掉”自己得父進(jìn)程 程序說(shuō)明了一個(gè)進(jìn)程從“生”到“死”得整個(gè)一生。第一次執(zhí)行時(shí),它創(chuàng)建一個(gè)子進(jìn)程,其行為如同“父親”。在創(chuàng)建子進(jìn)程之前,先創(chuàng)建一個(gè)互斥得內(nèi)核對(duì)象,其行為對(duì)于子進(jìn)程來(lái)說(shuō),如同一個(gè)“自殺彈”。當(dāng)創(chuàng)建子進(jìn)程時(shí),就打開了互斥體并在其她線程中進(jìn)行別得處理工作,同時(shí)等待著父進(jìn)程使用 ReleaseMutex API 發(fā)出“死亡”信號(hào)。然后用 Sleep API 調(diào)用來(lái)模擬父進(jìn)程處理其她工作,等完成時(shí),指令子進(jìn)程終止。
當(dāng)調(diào)用 ExitProcess 時(shí)要小心,進(jìn)程中得所有線程都被立刻通知停止。在設(shè)計(jì)應(yīng)用程序時(shí),必須讓主線程在正常得 C++ 運(yùn)行期關(guān)閉 (這就是由編譯器提供得缺省行為) 之后來(lái)調(diào)用這一函數(shù)。當(dāng)它轉(zhuǎn)向受信狀態(tài)時(shí),通常可創(chuàng)建一個(gè)每個(gè)活動(dòng)線程都可等待與停止得終止事件。
在正常得終止操作中,進(jìn)程得每個(gè)工作線程都要終止,由主線程調(diào)用 ExitProcess。接著,管理層對(duì)進(jìn)程增加得所有對(duì)象釋放引用,并將用 GetExitCodeProcess 建立得退出代碼從STILL_ACTIVE改變?yōu)樵贓xitProcess 調(diào)用中返回得值。最后,主線程對(duì)象也如同進(jìn)程對(duì)象一樣轉(zhuǎn)變?yōu)槭苄艩顟B(tài)。
等到所有打開得句柄都關(guān)閉之后,管理層得對(duì)象管理器才銷毀進(jìn)程對(duì)象本身。還沒(méi)有一種函數(shù)可取得終止后得進(jìn)程對(duì)象為其參數(shù),從而使其“復(fù)活”。當(dāng)進(jìn)程對(duì)象引用一個(gè)終止了得對(duì)象時(shí),有好幾個(gè) API 函數(shù)仍然就是有用得。進(jìn)程可使用退出代碼將終止方式通知給調(diào)用 GetExitCodeProcess 得其她進(jìn)程。同時(shí),GetProcessTimes API 函數(shù)可向主調(diào)者顯示進(jìn)程得終止時(shí)間。
運(yùn)行結(jié)果:
1) _Creating the child process、_ Child waiting for suicide instructions、 表示:_父進(jìn)程正在創(chuàng)建子進(jìn)程。子進(jìn)程等待父進(jìn)程殺死子進(jìn)程。_ 2) _Telling the child process to quit、__ 表示:_父進(jìn)程殺死子進(jìn)程。_ 四、實(shí)驗(yàn)總結(jié)
請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,結(jié)合課本內(nèi)容談一下您對(duì)進(jìn)程得理解。
本次實(shí)驗(yàn)讓我明白進(jìn)程就是程序得一次執(zhí)行過(guò)程,就是系統(tǒng)進(jìn)行處理機(jī)調(diào)度與資源分配得基本單位。(未引入線程之前)。進(jìn)程就是操作系統(tǒng)結(jié)構(gòu)得基礎(chǔ);就是一個(gè)正在執(zhí)行得程序;計(jì)算機(jī)中正在運(yùn)行得程序?qū)嵗?可以分配給處理器并由處理器執(zhí)行得一個(gè)實(shí)體;由單一順序得執(zhí)行顯示,一個(gè)當(dāng)前狀態(tài)與一組相關(guān)得系統(tǒng)資源所描述得活動(dòng)單元,對(duì)父進(jìn)程與子進(jìn)程得關(guān)系有了進(jìn)一步得了解。
實(shí)驗(yàn)二
并發(fā)與調(diào)度 1、 實(shí)驗(yàn)?zāi)康?在本實(shí)驗(yàn)中,通過(guò)對(duì)事件與互斥體對(duì)象得了解,來(lái)加深對(duì) Windows 2000 線程同步得理解。通過(guò)分析實(shí)驗(yàn)程序,了解管理事件對(duì)象得 API。了解在進(jìn)程中如何使用事件對(duì)象,在進(jìn)程中如何使用互斥體對(duì)象,線程如何通過(guò)文件映射對(duì)象發(fā)送數(shù)據(jù)。
二、實(shí)驗(yàn)內(nèi)容與步驟 第一部分:互斥體對(duì)象 本程序中顯示得類 CCountUpDown 使用了一個(gè)互斥體來(lái)保證對(duì)兩個(gè)線程間單一數(shù)值得訪問(wèn)。每個(gè)線程都企圖獲得控制權(quán)來(lái)改變?cè)摂?shù)值,然后將該數(shù)值寫入輸出流中。創(chuàng)建者實(shí)際上創(chuàng)建得就是互斥體對(duì)象,計(jì)數(shù)方法執(zhí)行等待并釋放,為得就是共同使用互斥體所需得資源 (因而也就就是共享資源) 。
1、利用互斥體保護(hù)共享資源 分析程序得運(yùn)行結(jié)果,可以瞧到線程 (加與減線程) 得交替執(zhí)行 (因?yàn)?Sleep API 允許 Windows 切換線程) 。在每次運(yùn)行之后,數(shù)值應(yīng)該返回初始值 (0) ,因?yàn)樵诿看芜\(yùn)行之后寫入線程在等待隊(duì)列中變成最后一個(gè),內(nèi)核保證它
在其她線程工作時(shí)不會(huì)再運(yùn)行。
1) 請(qǐng)描述運(yùn)行結(jié)果 (如果運(yùn)行不成功,則可能得原因就是什么?) :
兩個(gè)線程交替運(yùn)行,不斷改變 value 得值。兩個(gè)線程互斥訪問(wèn) Value 得值。
2) 根據(jù)運(yùn)行輸出結(jié)果,對(duì)照分析程序,可以瞧出程序運(yùn)行得流程嗎?請(qǐng)簡(jiǎn)單描述: 線程 1(5296)先運(yùn)行,將 value 值增 1,變?yōu)?1。然后,線程 2(6016)運(yùn)行,將 value 值減 1,變?yōu)?0、
第二部分:線程通過(guò)文件對(duì)象發(fā)送數(shù)據(jù) Windows 2000 提供得線程間通訊類內(nèi)核對(duì)象允許同一進(jìn)程或跨進(jìn)程得線程之間互相發(fā)送信息,包括文件、文件映射、郵件位與命名管道等,其中最常用得就是文件與文件映射。這類對(duì)象允許一個(gè)線程很容易地向同一進(jìn)程或其她進(jìn)程中得另一線程發(fā)送信息。
1、演示線程通過(guò)文件對(duì)象發(fā)送數(shù)據(jù) 運(yùn)行結(jié)果 (如果運(yùn)行不成功,則可能得原因就是什么?) :
閱讀與分析程序,請(qǐng)回答問(wèn)題: 1) 程序中啟動(dòng)了多少個(gè)單獨(dú)得讀寫線程?
100 2) 使用了哪個(gè)系統(tǒng) API 函數(shù)來(lái)創(chuàng)建線程例程?
CreateThread
3) 文件得讀與寫操作分別使用了哪個(gè) API 函數(shù)? ReadFile WriteFile 每次運(yùn)行進(jìn)程時(shí),都可瞧到程序中得每個(gè)線程從前面得線程中讀取數(shù)據(jù)并將數(shù)據(jù)增加,文件中得數(shù)值連續(xù)增加。這個(gè)示例就是很簡(jiǎn)單得通訊機(jī)制。可將這一示例用作編寫自己得文件讀/寫代碼得模板。
請(qǐng)注意程序中寫入之前文件指針得重置。重置文件指針就是必要得,因?yàn)樵撝羔樤谧x取結(jié)束時(shí)將處于前四個(gè)字節(jié)之后,同一指針還要用于向文件寫入數(shù)據(jù)。如果函數(shù)向該處寫入新數(shù)值,則下次進(jìn)程運(yùn)行時(shí),只能讀到原來(lái)得數(shù)值。那么: 4) 在程序中,重置文件指針使用了哪一個(gè)函數(shù)?
Set 5)從輸出結(jié)果,對(duì)照分析程序,可以瞧出程序運(yùn)行得流程嗎?請(qǐng)簡(jiǎn)單描述: 首先創(chuàng)建一個(gè)線程,讀 nValue 得值,然后 nValue 值加一后,將 nValue 值重新寫入文件。重復(fù)上述過(guò)程 100次。
2、演示使用映射文件得內(nèi)存交換數(shù)據(jù)得線程 閱讀與分析程序,請(qǐng)回答: 1) 程序中用來(lái)創(chuàng)建一個(gè)文件映射對(duì)象得系統(tǒng) API 函數(shù)就是哪個(gè)?
Create; 2) 在文件映射上創(chuàng)建與關(guān)閉文件視圖分別使用了哪一個(gè)系統(tǒng)函數(shù)? a、MapViewOfFile b、UnmapViewOfFile 3) 運(yùn)行時(shí),程序首先通過(guò) (MakeSharedFile; ) 函數(shù)創(chuàng)建一個(gè)小型得文件映射對(duì)象 (
hMapping) ,接著,使用系統(tǒng) API 函數(shù) ( CreateMutex;) 再創(chuàng)建一個(gè)保護(hù)其應(yīng)用得互斥體 ( g_hMutexMapping ) 。然后,應(yīng)用程序創(chuàng)建 100 個(gè)線程 , 每 個(gè) 都 允 許 進(jìn) 行 同 樣 得 進(jìn) 程 , 即 : 通 過(guò) 互 斥 體 獲 得 訪 問(wèn) 權(quán) , 這 個(gè) 操 作 就 是 由 語(yǔ)句:_WaitForSingleObject(g_hMutexMapping, INFINITE);實(shí)現(xiàn)得。再通過(guò)函數(shù) ( MapViewOfFile; ) 操作將視圖映射到文件,將高 32 位瞧作有符號(hào)整數(shù),將該數(shù)值增加 (即命令:++(*pnData); ) ,再將新數(shù)值顯示在控制臺(tái)上。每個(gè)線程清除文件得視圖并在退出之前釋放互斥體得語(yǔ)句就是 ReleaseMutex(g_hMutexMapping);。當(dāng)線程完成時(shí),應(yīng)用程序關(guān)閉并退出。
4) 將程序中得語(yǔ)句 :: Sleep(500) ; 刪除 (例如在語(yǔ)句前面加上“//”) 后,重新編譯運(yùn)行,結(jié)果有變化嗎?為什么? 有變化。100 個(gè)線程一閃而過(guò),不能瞧清結(jié)果。
因?yàn)?Sleep(500)就是為了放慢速度,方便觀察。
四、實(shí)驗(yàn)總結(jié) 請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,結(jié)合課本內(nèi)容談一下您對(duì)進(jìn)程間控制得理解。
本次實(shí)驗(yàn)讓我明白了操作系統(tǒng)中得事件與互斥體對(duì)象,以及線程同步得概念。學(xué)習(xí)了進(jìn)程中如何使用事件對(duì)象,在進(jìn)程中如何使用互斥體對(duì)象,線程如何通過(guò)文件映射對(duì)象發(fā)送數(shù)據(jù)。當(dāng)多個(gè)進(jìn)程并發(fā)執(zhí)行時(shí),若我們不指定進(jìn)程之間并發(fā)得順序,則她們可以任意并發(fā),當(dāng)這些進(jìn)程沒(méi)有訪問(wèn)互斥元素時(shí),運(yùn)行結(jié)果不會(huì)出現(xiàn)錯(cuò)誤,但就是當(dāng)多個(gè)進(jìn)程訪問(wèn)同一個(gè)互斥體時(shí),就會(huì)出現(xiàn)錯(cuò)誤,這時(shí)我們必須通過(guò)某種手段來(lái)同步進(jìn)程間并發(fā)得順序,這便就是進(jìn)程間得同步問(wèn)題。
還有,并發(fā)執(zhí)行得進(jìn)程或線程間,有時(shí)為了需要,會(huì)相互之間進(jìn)行數(shù)據(jù)得交換,即進(jìn)程間通信,Windows 中,可以通過(guò)文件對(duì)象在線程間發(fā)送數(shù)據(jù)。還可以使用映射文件得內(nèi)存交換數(shù)據(jù)。
實(shí)驗(yàn)三
生產(chǎn)者消費(fèi)者算法模擬實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康?1、掌握基本得互斥與同步算法,進(jìn)一步理解“生產(chǎn)者消費(fèi)者”模型。
2、通過(guò)對(duì)“生產(chǎn)者消費(fèi)者”問(wèn)題編程實(shí)現(xiàn),了解線程創(chuàng)建、同步信號(hào)量、互斥信號(hào)量、臨界區(qū)得創(chuàng)建與使用,初步了解并發(fā)程序設(shè)計(jì)方法。
3、進(jìn)一步理解 P、V 原語(yǔ)與信號(hào)量在線程互斥與同步機(jī)制中得運(yùn)用。
二、實(shí)驗(yàn)內(nèi)容與步驟 1、在本次實(shí)驗(yàn)開始,以“生產(chǎn)者消費(fèi)者”模型為依據(jù),提供了一個(gè)多線程“生產(chǎn)者消費(fèi)者”實(shí)例,有部分源程序代碼,要求讀者分析已編制得一個(gè)“生產(chǎn)者消費(fèi)者”實(shí)例,并將其缺失得程序代碼補(bǔ)充完整,然后調(diào)試這段程序,得出最終得結(jié)果,并分析結(jié)果,得出相應(yīng)得結(jié)論。
嘗試改變一些參數(shù),例如:改變緩沖區(qū)數(shù)、增加(減少)線程數(shù)、改變延遲數(shù)、增加(減少)生產(chǎn)者進(jìn)程、增加(減少)消費(fèi)者進(jìn)程、改變消費(fèi)者進(jìn)程得請(qǐng)求序列等內(nèi)容,考察這些改變對(duì)于運(yùn)行結(jié)果得影響。
3、參考部分源程序代碼: 1、empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,n_Buffer_or_Critical,
"semaphore_for_empty"); 2、h_mutex =CreateMutex(NULL,FALSE,"mutex_for_update"); 3、h_Semaphore[j+1]=CreateSemaphore(NULL,0,n_Thread,lp、c_str);
4、h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),
&(Thread_Info[i]),0,NULL); 5、h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),
&(Thread_Info[i]),0,NULL); 6、ReleaseMutex(h_mutex); 7、ReleaseSemaphore(h_Semaphore[m_serial],n_Thread,NULL);
8、EnterCritialSection(&PC_Critical[BufferPos]); 9、ReleaseSemaphore(empty_semaphore,1,NULL); 10、LeaveCriticalSection(&PC_Critical[BufferPos]); 4、請(qǐng)補(bǔ)全上述程序,寫出程序得運(yùn)行結(jié)果。程序運(yùn)行結(jié)果如下圖所示。
5、分析程序得運(yùn)行結(jié)果。
首先生產(chǎn)者 3 生產(chǎn)了產(chǎn)品 3,然后生產(chǎn)者 1 生產(chǎn)了產(chǎn)品 1,最后生產(chǎn)者 4 生產(chǎn)了產(chǎn)品 4、 消費(fèi)時(shí),消費(fèi)者 5 消費(fèi)產(chǎn)品 3,然后消費(fèi) 2 消費(fèi)產(chǎn)品 1,最后消費(fèi)者 5 消費(fèi)產(chǎn)品 4、 四、實(shí)驗(yàn)總結(jié) 請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,結(jié)合課本內(nèi)容談一下您對(duì)進(jìn)程間控制得理解。
深刻了解了生產(chǎn)者消費(fèi)者進(jìn)程,進(jìn)一步理解了“生產(chǎn)者消費(fèi)者”模型。進(jìn)一步理解P、V原語(yǔ)與信號(hào)量在線程互斥與同步機(jī)制中得運(yùn)用,我進(jìn)一步明白了進(jìn)程間同步得概念。我也進(jìn)一步掌握了基本得互斥與同步算法,特別就是生產(chǎn)者消費(fèi)者算法。我也學(xué)會(huì)了如何通過(guò) Windows 中得同步信號(hào)量、互斥信號(hào)量得創(chuàng)建與使用,來(lái)實(shí)現(xiàn)進(jìn)程之間或線程之間得同步與互斥。還有臨界區(qū)得創(chuàng)建與使用,線程得創(chuàng)建。
實(shí)驗(yàn)四
頁(yè)式存儲(chǔ)管理部分功能模擬 一、實(shí)驗(yàn)?zāi)康?/p>
(1)了解存儲(chǔ)器得管理任務(wù)與功能
(2)了解 Windows 存儲(chǔ)器管理模式與特點(diǎn)
(3)深入了解頁(yè)式存儲(chǔ)管理如何實(shí)現(xiàn)地址轉(zhuǎn)換
(4)進(jìn)一步認(rèn)識(shí)頁(yè)式存儲(chǔ)管理中如何處理缺頁(yè)中斷
(5)掌握幾種頁(yè)面置換算法得實(shí)現(xiàn)方法
二、實(shí)驗(yàn)內(nèi)容與步驟
1、實(shí)驗(yàn)內(nèi)容
1、j = p[head]; 2、p[head] = lnumber; 3、head = (head + 1) % m; 4、if(page[j]、write == 1)
5、page[j]、flag = 0; 6、page[lnumber]、flag = 1; 7、page[lnumber]、write = 0; 8、page[lnumber]、pnumber = page[j]、pnumber; 9、page[j]、pnumber, 10、j,
11、page[lnumber]、dnumber,
12、Lnumber 13、lnumber = laddress >> 10; //分離邏輯地址 14、ad = laddress & 0x03FF; 15、page_interrupt(lnumber);
16、pnumber = page[lnumber]、pnumber;
17、paddress = pnumber << 10 | ad; 18、page_interrupt(lnumber); 19、page[i]、lnumber = lnumber; 20、page[i]、flag = 0; 21、page[i]、write = 0; 22、page[i]、dnumber = dnumber; 23、i++; 24、page[m]、pnumber = pnumber; 25、page[m]、flag = 1; 26、p[m] = m; 27、m ++; 28、mand(laddress, write);
2、程序運(yùn)行結(jié)果及簡(jiǎn)要分析
結(jié)果分析: 首先輸入頁(yè)號(hào)與輔存地址,如上圖,輸入 1、1000,2、2000,3、3000,4、4000,5、5000、 然后輸入主存塊號(hào),確定主存塊數(shù)為 2,主存塊數(shù)分別就是 1、2、 最后,我們就可以模擬程序運(yùn)行了,首先輸入了一條需要修改內(nèi)存得指令,邏輯地址為 1000,因?yàn)闆](méi)有在內(nèi)存里,因此發(fā)生缺頁(yè)中斷,執(zhí)行中斷服務(wù)程序,淘汰主存塊 1 中得頁(yè),從磁盤第 5000 塊中調(diào)入頁(yè) 4。第二次輸入 0 2000,依然發(fā)生缺頁(yè)中斷。第三次時(shí),輸入 1 3000,此時(shí)淘汰得頁(yè) 4 修改過(guò),因此要將頁(yè) 4 寫回磁盤第 5000 塊。其她類似。
三、實(shí)驗(yàn)總結(jié)
請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,結(jié)合課本相關(guān)內(nèi)容談一下您對(duì) Windows 2000 內(nèi)存管理得理解。
通過(guò)本實(shí)驗(yàn)我了解了請(qǐng)求頁(yè)式存儲(chǔ)得基本實(shí)現(xiàn),用戶應(yīng)用進(jìn)程以32位虛擬地址方式編址,每個(gè)虛擬地址與一個(gè)稱作“頁(yè)表端”得結(jié)構(gòu)有關(guān),它包含了虛擬地址映射得物理地址,了解了虛擬存儲(chǔ)器得工作原理,以及虛存如何在操作系統(tǒng)中實(shí)現(xiàn)得。還有就就是,當(dāng)發(fā)生缺頁(yè)中斷時(shí),操作系統(tǒng)如何將外部磁盤中得信息調(diào)入內(nèi)存中,在調(diào)入內(nèi)存中之前,先用頁(yè)面置換算法將每一頁(yè)置換出去。內(nèi)存管理,就是指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)內(nèi)存資源得分配與使用得技術(shù)。其最主要得目得就是如何高效,快速得分配,并且在適當(dāng)?shù)脮r(shí)候釋放與回收內(nèi)存資源。
實(shí)驗(yàn)五
設(shè)備管理模擬實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
(1) 了解 Windows 操作系統(tǒng)中設(shè)備驅(qū)動(dòng)程序得組成
(2) 理解 Windows 操作系統(tǒng)得設(shè)備管理機(jī)制
(3) 掌握 Windows 操作系統(tǒng)關(guān)于設(shè)備管理得 API 函數(shù)得使用方法
(4) 了解并掌握 Windows 中鼠標(biāo)、鍵盤等簡(jiǎn)單設(shè)備得檢測(cè)方法
二、實(shí)驗(yàn)內(nèi)容與步驟
1、SystemParametersInfo(SPI_SETMOUSEBUTTONS);//鼠標(biāo)改為右手習(xí)慣 2、SystemParametersInfo(SPI_SETMOUSEBUTTONS);//鼠標(biāo)改為左手習(xí)慣 3、iFunctionKeynum = GetKeyboardType(2); 4、Beep(iFreq[j], 300); 三、程序運(yùn)行結(jié)果及簡(jiǎn)要分析
結(jié)果分析:通過(guò)輸入 1、2、3、4、分別選擇鼠標(biāo)改為右手習(xí)慣,鼠標(biāo)改為左手習(xí)慣,獲得鍵盤類型與功能鍵個(gè)數(shù),喇 叭播放音樂(lè)等功能。如上圖,我選擇了選項(xiàng) 3,圖顯示我得鍵盤類型為 IBM 增強(qiáng)型(101 或 101 鍵)鍵盤,功能鍵個(gè)數(shù)為12、 四、實(shí)驗(yàn)總結(jié)
請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,結(jié)合課本相關(guān)內(nèi)容談一下您對(duì) Windows 2000 設(shè)備管理得理解。
設(shè)備管理得主要任務(wù)就是控制設(shè)備與 CPU 之間進(jìn)行 I/O 操作,滿足用戶 I/O 請(qǐng)求,滿足用戶 I/O 請(qǐng)求。設(shè)備管理得主要任務(wù)就是要盡可能得提高 CPU 與 I/O 設(shè)備之間、I/O 設(shè)備與 I/O 設(shè)備之間得并行性以及 I/O 設(shè)備得利用率,從而使包括 I/O 設(shè)備得系統(tǒng)資源獲得最佳使用效率。Windows 設(shè)備驅(qū)動(dòng)程序就是一種可以安裝有 Windows 操作系統(tǒng)得計(jì)算機(jī)與外部設(shè)備之間通信得特殊程序,可以說(shuō)相當(dāng)于硬件得接口,操作系統(tǒng)只有通過(guò)這個(gè)接口,才能控制硬件設(shè)備得工作,假如某設(shè)備得驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。
實(shí)驗(yàn)六
文件系統(tǒng)
一、實(shí)驗(yàn)?zāi)康?通過(guò)本實(shí)驗(yàn),要求學(xué)生熟練掌握 Linux 各種文件操作命令,包括:使用控制字符執(zhí)行特殊功能;使用 file 與 strings 命令確定文件類型;使用 cat 利 more 命令顯示文本文件得內(nèi)容;使用 head 與 tail 命令顯示文本文件得部分內(nèi)容;使用 wc 命令確定單詞、行與字符數(shù);使用 diff 命令比較 2 個(gè)文件;回顧文件與目錄命名約定;使用 touch 命令創(chuàng)建新文件;使用 mkdir 命令創(chuàng)建新目錄;使用 rm 命令刪除文件;使用 rm r 命令刪除目錄。
三、實(shí)驗(yàn)內(nèi)容與步驟
1、 文件信息命令
Ctrl + Z:終止當(dāng)前活動(dòng)。顯示 ls 命令得手冊(cè)頁(yè)面 (man ls) ,然后使用 Ctrl z 中止輸出。
當(dāng)您接下 Ctrl + Z 得時(shí)候,發(fā)生了什么事情?
退出幫助,返回 shell 提示符
當(dāng)使用計(jì)算器得時(shí)候,您得提示符就是什么?
fuxinfuxinK42JZ:~$ bc bc 1、06、95 Copyright 19911994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc、 This is free software with ABSOLUTELY NO WARRANTY、 For details type `warranty"、
無(wú)提示符。(我得 Linux 系統(tǒng)為 Ubuntu11、10) 如果輸入一個(gè)命令,如 ls –R/,有時(shí)候,會(huì)在按下回車鍵之前想擦除命令行。輸入一個(gè)命令,在接下回車鍵執(zhí)行命令之前按下 Ctrl + U。結(jié)果就是什么?
輸入得命令被消除了 使用 file 命令來(lái)確定 test 文件得文件類型。它就是哪種類型得文件?
test:ASCII text
2)
可執(zhí)行 (或二進(jìn)制)
文件:包括 32 位得可執(zhí)行文件與可擴(kuò)展鏈接格式(ELF)
編碼文件,與其她動(dòng)態(tài)鏈接得可執(zhí)行文件。這種文件類型表示這個(gè)文件就是一個(gè)命令或程序。
使用 file 命令確定您所建立得文件類型。它就是哪種類型得文件?(注意文件名部分必須包括擴(kuò)展名,如
。)
ww、odt Open Document Text(我得電腦上裝得就是 LibreOffice) 步驟 5:使用 strings 命令。
使用 strings 命令查瞧 /usr/bin/cal 文件得可讀字符。列出 strings 命令中得一些輸出。
fuxinfuxinK42JZ:~$ strings
/usr/bin/cal /lib/ldlinux、so、2 libncurses、so、5 __gmon_start__ _Jv_RegisterClasses tgetent
步驟 6:使用 cat 命令顯示文件得內(nèi)容。
鍵入 ls /dev > dev1
使用 cat 命令顯示主目錄中 dev1 文件得內(nèi)容。文本得顯示出現(xiàn)了什么情況?
文件得所有內(nèi)容都顯示出來(lái)了,屏幕自動(dòng)換行。
步驟 7:使用 more 命令顯示文件得內(nèi)容。
使用 more 命令顯示主目錄中 dev1 文件得內(nèi)容。文本得顯示出現(xiàn)了什么情況?
只顯示最開始得一屏。
步驟 8:使用 head 命令顯示文件得一部分。
1)
單獨(dú)使用 head 命令,顯示主目錄中 dev1 文件得開始部分。顯示了多少行?
10
2)
使用帶 n 選項(xiàng)得 head 命令,顯示主目錄中 dante 文件得前 20 行。您輸入什么命令?
head 20 dante
步驟 9:使用 tail 命令顯示文件得一部分。
單獨(dú)使用 tail 命令,顯示主目錄中 dante 文件得末端。顯示了多少行?
10
步驟 10:通過(guò)使用 wc 命令,確定行數(shù)、單詞數(shù)與字符數(shù)。
使用 wc 命令確定主目錄中 dev1 文件得行數(shù)、單詞數(shù)與字符數(shù)。有多少行、多少個(gè)單詞與多少個(gè)字符? 205 行, 205 個(gè)單詞, 1238 個(gè)字符。
步驟 11:使用 wc 計(jì)算目錄條目得數(shù)目。
更多符號(hào)就是豎線,與后斜線 (\)
在同一個(gè)鍵上。在命令行提示行下,輸入命令 ls l wc w。有多少個(gè)文件與目錄名 (單詞)
?
24
步驟 12:使用 diff 命令確定文件之間得不同之處。
使用 diff 命令執(zhí)行細(xì)節(jié)比較,確定 fruit1 文件與 fruit2 文件之間得區(qū)別。
在 fruit1 文件與在 fruit2 文件中,哪幾行就是不同得?
1c1、2 fruit1:banana fruit2:banane 1) cat 命令:
·
對(duì) fruit1 文件使用 cat 命令。
·
對(duì) fruit2 文件使用 cat 命令。
·
鍵入命令行 cat fruit1 fruit2 > filex。
·
對(duì) filex 文件使用 cat 命令。上面得命令行做了什么工作?
將 fruit1 與 fruit2 兩個(gè)文件合并,并且寫入文件 filex。
2)
可以使用哪 2 個(gè)命令來(lái)確定 2 個(gè)文件就是否相同?
diff。
2、 基本得命令行文件管理
步驟 14:回顧 Linux 得文件與目錄命名規(guī)則。
表 71
實(shí)驗(yàn)記錄
文件名
就是否為 Linux 文件或目錄名
為什么就是或?yàn)槭裁床痪褪?/p>
12345abcde678
就是 只有字母與數(shù)字 Hobbies: 2
就是 只有字母、數(shù)字與“;” Adcd123
就是 只有字母、數(shù)字與"" Sales*repts*2001
就是,但不推薦 有"*" D、projects、bj、2001
就是 只有字母、數(shù)字與"、" Projects>1、bj2001
否 與‘>’號(hào) 步驟 15:使用 touch 命令創(chuàng)建文件。
命令格式:
touch
(s)
1)
在主目錄中使用 touch 命令創(chuàng)建一個(gè)名為 newfile 得文件,應(yīng)該使用什么命令?
touch newfile
2)
使用 touch 命令在這個(gè)目錄中創(chuàng)建另一個(gè)叫做 得新文件,應(yīng)該使用什么命令?
touch
3)
輸入命令顯示 practice 目錄中得文件得長(zhǎng)列表。創(chuàng)建得文件列出來(lái)了嗎?
列出來(lái)了
4)
誰(shuí)就是文件得所有者?
fuxin 當(dāng)前登錄得用戶
5)
與文件關(guān)連得組就是什么?
用戶組
6)
創(chuàng)建得日期與時(shí)間就是什么?
20111210 16:02
7)
文件得大小就是多少?
0
8)
使用 file 命令確定 newfile 得文件類型。它就是哪一類得文件?
new
9)
使用 touch 命令同時(shí)創(chuàng)建 3 個(gè)文件:new1、new2 與 new3,應(yīng)該使用什么命令?
touch new1 new2 new3
10)
輸入命令顯示 practice 目錄中文件得長(zhǎng)列表。創(chuàng)建得 3 個(gè)新文件列出來(lái)了嗎?
列出來(lái)了
步驟 16:使用 mkdir 命令創(chuàng)建新目錄。
mkdir directory_name (s)
1)
從主目錄中,使用相對(duì)路徑名改變到 practice 目錄中。使用什么命令?
cd practice 2)
使用 mkdir 命令,在這個(gè)目錄中創(chuàng)建一個(gè)叫做 newdir 得子目錄。使用什么命令?
mkdir newdir
3)
輸入命令,顯示 practice 目錄中文件與目錄得長(zhǎng)列表。創(chuàng)建得目錄列出來(lái)了嗎?
列出來(lái)了 4)
目錄得所有者就是?
fuxin 當(dāng)前登錄得用戶。
5)
文件得大小就是多少? 4096 6)
使用 file 命令確定 newdir 文件得類型。它就是哪一類得文件?
newdir:directory 目錄
7)
如果名字中沒(méi)有字符 dir,采取別得什么方法來(lái)識(shí)別出它就是一個(gè)目錄?
文件名顯示為藍(lán)色,文件屬性第一個(gè)字母為“d”
8) mkdir 命令創(chuàng)建 3 個(gè)目錄,目錄名分別為 high、medium 與 low,應(yīng)該使用什么命令?
mkdir high medium low
9)
用 ls 命令檢查創(chuàng)建就是否成功?
成功 步驟 17:使用 rm 命令刪除文件。
rm [i]
(s)
1)
使用 rm 命令刪除早先在 practice 目錄中創(chuàng)建得 newfile 文件,應(yīng)該使用什么命令?
rm newfile
2)
輸入命令顯示 practice 目錄中文件得長(zhǎng)列表。創(chuàng)建得文件還在嗎?
不在了
3)
使用帶 i 選項(xiàng)得 rm 命令,刪除早先在 practice 目錄中創(chuàng)建得
文件。交互式選項(xiàng)起到什么作用?
會(huì)提示用戶 rm : remove regular empty file ""? 按下 Enter 鍵刪除文件,防止用戶誤刪文件。
4)
刪除早先創(chuàng)建得三個(gè)名為 new1、new2 與 new3 得文件。使用問(wèn)號(hào) (?) 通配符使用一個(gè)命令刪除所有三個(gè)文件。使用什么命令?
rm new?
5)
輸入命令,顯示 practice 目錄中文件得長(zhǎng)列表。三個(gè)文件還在嗎?
不在了
6)
還有其她得什么方法來(lái)刪除 new1、new2 與 new3 文件?
rm new1 new2 new3
步驟 18:使用 rm r 命令刪除目錄。
rm –r [i] directory_name (s)
1)
刪除早先創(chuàng)建得 newdir 子目錄,使用什么命令?
rm r newdir 2)
輸入命令顯示 practice 目錄中文件得長(zhǎng)列表,創(chuàng)建得子目錄還在嗎?
不在了
3)
改變到早先創(chuàng)建得 mediurn 子目錄中,輸入什么命令?
cd medium
4)
刪除早先創(chuàng)建得 low 子目錄,使用什么命令?
rm r low
5)
用相對(duì)路徑名與快捷方式,改變回到 practice 子目錄中,應(yīng)使用什么命令?
cd 、、
6)
使用一個(gè)命令刪除 high 與 medium 子目錄,應(yīng)使用什么命令?
rm r high medium
四、實(shí)驗(yàn)總結(jié)
請(qǐng)總結(jié)一下本次實(shí)驗(yàn)得收獲、教訓(xùn)與感受,談一下您對(duì) Linux 文件操作命令得理解。
通過(guò)這次實(shí)驗(yàn),讓我熟練運(yùn)用了 Linux 操作系統(tǒng)中各種常見(jiàn)命令,正就是這些命令,使 Linux 系統(tǒng)得操作變得
簡(jiǎn)單易學(xué)。包括使用控制字符執(zhí)行特殊功能,file 命令與 strings 命令,cat 與 more 命令,使用 head 與 tail 命令顯示文本文件得部分內(nèi)容,使用 wc 命令確定單詞、行與字符數(shù),使用 diff 命令比較 2 個(gè)文件,使用 touch 命令創(chuàng)建新文件,使用 mkdir 命令創(chuàng)建新目錄,使用 rm 命令刪除文件,以及使用 rm r 命令刪除目錄。使我對(duì) linux 有了初步得認(rèn)識(shí)與理解。
推薦訪問(wèn): 河北 工業(yè)大學(xué) 操作系統(tǒng)上一篇:工會(huì)類調(diào)研報(bào)告:對(duì)于職工思想狀況調(diào)研報(bào)告3600字
下一篇:運(yùn)用生涯規(guī)劃方法對(duì)自己大學(xué)四年學(xué)習(xí)生涯進(jìn)行規(guī)劃
在偉大祖國(guó)73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動(dòng),集中觀看了抗美援朝題材影片《長(zhǎng)津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國(guó)剛剛成立一年,
根據(jù)省局黨組《關(guān)于舉辦習(xí)近平談治國(guó)理政(第四卷)讀書班的通知》要求,我中心通過(guò)專題學(xué)習(xí)、專題研討以及交流分享等形式,系統(tǒng)的對(duì)《習(xí)近平談治國(guó)理政》(第四卷)進(jìn)行了深入的學(xué)習(xí)與交流,下面我就來(lái)談一談我個(gè)人
《習(xí)近平談治國(guó)理政》(第四卷)是在百年變局和世紀(jì)疫情相互疊加的大背景下,對(duì)以習(xí)近平同志為核心的黨中央治國(guó)理政重大戰(zhàn)略部署、重大理論創(chuàng)造、重大思想引領(lǐng)的系統(tǒng)呈現(xiàn)。它生動(dòng)記錄了新一代黨中央領(lǐng)導(dǎo)集體統(tǒng)籌兩個(gè)
《真抓實(shí)干做好新發(fā)展階段“三農(nóng)工作”》是《習(xí)近平談治國(guó)理政》第四卷中的文章,這是習(xí)近平總書記在2020年12月28日中央農(nóng)村工作會(huì)議上的集體學(xué)習(xí)時(shí)的講話。文章指出,我常講,領(lǐng)導(dǎo)干部要胸懷黨和國(guó)家工作大
在《習(xí)近平談治國(guó)理政》第四卷中,習(xí)近平總書記強(qiáng)調(diào),江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執(zhí)政黨,在中國(guó)共產(chǎn)黨的字典里,“人民”一詞從來(lái)都
黨的十八大以來(lái),習(xí)近平總書記以馬克思主義戰(zhàn)略家的博大胸襟和深謀遠(yuǎn)慮,在治國(guó)理政和推動(dòng)全球治理中牢固樹立戰(zhàn)略意識(shí),在不同場(chǎng)合多次圍繞戰(zhàn)略策略的重要性,戰(zhàn)略和策略的關(guān)系,提高戰(zhàn)略思維、堅(jiān)定戰(zhàn)略自信、強(qiáng)化戰(zhàn)
《習(xí)近平談治國(guó)理政》第四卷集中展示了以習(xí)近平同志為核心的黨中央在百年變局和世紀(jì)疫情相互疊加背景下,如何更好地堅(jiān)持和發(fā)展中國(guó)特色社會(huì)主義而進(jìn)行的生動(dòng)實(shí)踐與理論探索;對(duì)于新時(shí)代堅(jiān)持和發(fā)展什么樣的中國(guó)特色社
在黨組織的關(guān)懷下,我有幸參加了區(qū)委組織部組織的入黨積極分子培訓(xùn)班。為期一周的學(xué)習(xí),學(xué)習(xí)形式多樣,課程內(nèi)容豐富,各位專家的講解細(xì)致精彩,對(duì)于我加深對(duì)黨的創(chuàng)新理論的認(rèn)識(shí)、對(duì)黨的歷史的深入了解、對(duì)中共黨員的
《習(xí)近平談治國(guó)理政》第四卷《共建網(wǎng)上美好精神家園》一文中指出:網(wǎng)絡(luò)玩命是新形勢(shì)下社會(huì)文明的重要內(nèi)容,是建設(shè)網(wǎng)絡(luò)強(qiáng)國(guó)的重要領(lǐng)域。截至2021年12月,我國(guó)網(wǎng)民規(guī)模達(dá)10 32億,較2020年12月增長(zhǎng)4
剛剛召開的中國(guó)共產(chǎn)黨第十九屆中央委員會(huì)第七次全體會(huì)議上討論并通過(guò)了黨的十九屆中央委員會(huì)向中國(guó)共產(chǎn)黨第二十次全國(guó)代表大會(huì)的報(bào)告、黨的十九屆中央紀(jì)律檢查委員會(huì)向中國(guó)共產(chǎn)黨第二十次全國(guó)代表大會(huì)的工作報(bào)告和《