版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄一課程概述 .1 1.1. 設計構想 .1 1.2. 需求分析 .1 1.3. 理論依據 .1 1.4. 課程任務 .1 二總體方案設計 .2 2.1 程序結構 .2 三詳細設計 .3 3.1.界面設計 .3 3.1.1.進程屬性控制 .3 3.1.2.進程算法 .3 3.1.3.進程運行狀態(tài)顯示 .4 3.1.4.設置停頓時間 .4 3.1.5.設置時間片 .5 3.1.6.菜單 .5 3.2.先來先服務調度 .6 3.2.1算法思想 .6 3.2.2.算法代碼 .6 3.2.3.算法流程圖 .7 3.3.時間片輪轉調度 .8 3.3.1.算法思想 .8 3.3.2算法流程圖 .8 3.
2、3.3.程序代碼 .9 3.4.優(yōu)先級調度 .9 3.4.1.算法思想 .9 3.4.2 算法流程圖 .10 3.4.3.程序代碼 .10 3.5.基礎函數 . 11 3.5.1.進度條設置 . 11 3.5.2.創(chuàng)建進程pbc . 11 3.5.3.更新進程運行狀態(tài)顯示 .12 3.5.4.判斷當前進程是否創(chuàng)建 .13 3.5.5.創(chuàng)建時間隊列 .13 3.5.6.判斷所有進程是否完成 .14 3.5.7.創(chuàng)建優(yōu)先權隊列 .14 3.5.8.先來先服務線程函數 .15 3.5.9.時間片輪轉線程函數 .15 3.5.10.高優(yōu)先級線程函數 .16 3.5.11.保存輸入框修改線程函數 .16
3、 3.5.12.保存輸入框修改 .16 3.5.13.子線程向主線程發(fā)送消息 .16 四程序的調試與運行結果說明 .17 4.1.界面 .17 4.1.1問題 1 .17 4.2.先來先服務調度 .17 4.2.1問題 1 .17 4.3.時間片輪轉調度 .18 4.3.1問題 1 .18 4.3.2 問題 2 .18 4.4.高優(yōu)先級優(yōu)先調度 .19 4.4.1問題 1 .19 4.5 基礎函數調試 .20 4.5.1問題 1 .20 4.5.2問題 2 .20 五課程設計總結 .21 六后記 .21 七致謝 .21 八附錄 .22 8.1.進程狀態(tài)宏 .22 8.2.進程隊列結點 .22
4、8.3.主框架構造函數 .22 8.4.界面控件與類變量鏈接 .22 參考文獻 .24 1 一課程概述1.1. 設計構想程序能夠完成以下操作:1、創(chuàng)建進程。2、修改進程的優(yōu)先級、創(chuàng)建時間、服務時間。3、啟動進程算法,先來先服務、時間片輪轉、高優(yōu)先級優(yōu)先調度。4、進程運行狀態(tài)顯示。1.2. 需求分析在多道程序環(huán)境下,主存中有著多個進程,其數目往往多于處理機數目,要使這多個進程能夠并發(fā)地執(zhí)行,這就要求系統(tǒng)能按某種算法,動態(tài)地把處理機分配給就緒隊列中的一個進程,使之執(zhí)行。分配處理機的任務是由處理機調度程序完成的。由于處理機是最重要的計算機資源,提高處理機的利用率及改善系統(tǒng)必(吞吐量、響應時間),在很
5、大程度上取決于處理機調度性能的好壞,因而,處理機調度便成為操作系統(tǒng)設計的中心問題之一。本次實驗在vs2010 環(huán)境下實現先來先服務調度算法,時間片輪轉調度算法和高優(yōu)先權調度算法。1.3. 理論依據為 了 描 述 和 管 制 進 程 的 運 行 , 系 統(tǒng) 為 每 個 進 程 定 義 了 一 個 數 據 結 構 進 程 控 制 塊pcb(process control block),pcb 中記錄了操作系統(tǒng)所需的、用于描述進程的當前情況以及控制進程運行的全部信息,系統(tǒng)總是通過pcb對進程進行控制,亦即,系統(tǒng)是根據進程的pcb而不是任何別的什么而感知進程的存在的,pcb是進程存在的惟一標志。本次課
6、程設計用結構體pronode 代替 pcb的功能。1.4. 課程任務1、用 c語言(或 c+ )編程實現操作模擬操作系統(tǒng)進程調度子系統(tǒng)的基本功能;運用多種算法實現對進程的模擬調度。2、通過編寫程序實現進程或作業(yè)先來先服務、按時間片輪轉、高優(yōu)先權,使學生進一步掌握進程調度的概念和算法,加深對處理機分配的理解。3、用 mfc實現程序界面。1.5. 功能模塊分析:1、 進程概念: 進程是被獨立分配資源的最小單位。進程是動態(tài)概念, 必須程序運行才有進程的產生。2、進程的狀態(tài)模型:(1)完成:進程已經完成。(2)就緒:進程已經準備好,一旦有處理器就可運行。3、處理機調度:在多道程序設計系統(tǒng)中,內存中有多
7、道程序運行,他們相互爭奪處理機這一重要的資源。處理機調度就是從就緒隊列中,按照一定的算法選擇一個進程并將處理機分配給它運行,以實現進程并發(fā)地執(zhí)行。4、進程調度算法的功能:記錄系統(tǒng)中所有進程的執(zhí)行情況、選擇占有處理機的進程、進行進程的上下文切換。5、進程調度的算法:( 1)先來先服務算法:如果早就緒的進程排在就緒隊列的前面,遲就緒的進程排在就緒隊列的后面,那么先來先服務總是把當前處于就緒隊列之首的那個進程調度到運行狀態(tài)。(2)時間片輪轉算法:固定時間片,每個進程在執(zhí)行一個時間片后,輪到下一進程執(zhí)行,知道所有的進程執(zhí)行完畢。處理器同一個時間只能處理一個任務。處理器在處理多任務的時候,就要看請求的時
8、間順序,如果時間一致,就要進行預測。挑到一個任務后,需要若干步驟才能做完,這些步驟中有些需要處理器參與,有些不需要(如磁盤控制器的存儲過程)。不需要處理器處理的時候,這部分時間就要分配給其他的進程。原來的進程就要處于等待的時間段上。經過周密分配時間,宏觀上就象是多2 個任務一起運行一樣,但微觀上是有先后的,就是時間輪換。( 3)優(yōu)先數算法:即進程的執(zhí)行順序由高優(yōu)先級到低優(yōu)先級。系統(tǒng)或用戶按某種原則為進程指定一個優(yōu)先級來表示該進程所享有的確調度優(yōu)先權。該算法核心是確定進程的優(yōu)先級。二總體方案設計2.1 程序結構程序一共添加了4 個線程,分別是保存修改線程,先來先服務線程,時間片輪轉線程,高優(yōu)先權
9、優(yōu)先服務線程。圖 2.1 程序結構圖優(yōu)先級進程調度主模塊進程控制界面進程調度算法進程狀態(tài)界面先來先服務算法時間片輪轉算法高優(yōu)先權優(yōu)先調度算法創(chuàng)建時間服務時間3 三詳細設計3.1.界面設計圖 3.1 界面設計3.1.1.進程屬性控制圖 3.1.1.進程屬性控制3.1.2.進程算法圖 3.1.2.進程算法4 3.1.3.進程運行狀態(tài)顯示. 圖 3.1.2.進程算法3.1.4.設置停頓時間圖 3.1.4設置停頓時間 相關類及其主要函數class settime : public cdialogex declare_dynamic(settime) public: settime(cwn
10、d* pparent = null); / 標準構造函數virtual settime(); / 對話框數據enum idd = idd_settime ; protected: virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map() public: int m_time; ; settime:settime(cwnd* pparent /*=null*/) : cdialogex(settime:idd, pparent) , m_time(3) 5 3.1.5.設置時間片圖 3.1
11、.5 設置時間片 相關類及其主要函數class seep : public cdialogex declare_dynamic(seep) public: seep(cwnd* pparent = null); / 標準構造函數virtual seep(); / 對話框數據enum idd = idd_sleep ; protected: virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map() public: int m_sleep; ; 3.1.6.菜單圖 3.1.5
12、設置時間片保存輸入框修改void cprogressdlg:onsave() cwinthread *mainstartthread; lpvoid lmainparam = (lpvoid)this;/把this指針作為參數傳進去6 mainstartthread=:afxbeginthread( threadfuncsave, (lpvoid)lmainparam, thread_priority_normal, 0, 0, null ); 設置時間片大小void cprogressdlg:onsetrr() settime dlg; if( dlg.domod
13、al() = idok) m_timerr = dlg.m_time; 設置停頓時間void cprogressdlg:onseeptime() seep dlg; if(dlg.domodal() = idok) m_sleep = dlg.m_sleep; 3.2.先來先服務調度3.2.1算法思想先來先服務調度算法的思想是按照進程進入就緒隊列的先后順序調度并分配處理機執(zhí)行。先來先服務調度算法是一種不可搶占的算法,先進入就緒隊列的進程,先被處理機運行。一旦一個進程占有了處理機,它就一直運行下去,直到該進程完成工作或者因為等待某事件而不能繼續(xù)運行時才釋放處理機。3.2.2.算法代
14、碼void cprogressdlg:fcfs(void) int i=0,j; createtimearray();/ 創(chuàng)建時間數組while(!isfinish() /找出已創(chuàng)建的進程while(!iscreate(m_timei) | m_pronodem_state = finish) +i; 7 if(i=5) m_systime += 1; i=0; proshow();/ 更新進程運行狀態(tài) /進程服務for(j=0; j=5) m_systime += 1; i=0; proshow();/ 更新進程運行狀態(tài) /進程服務for(int r=0; r=5) i=0
15、; 3.4.優(yōu)先級調度3.4.1.算法思想進程的執(zhí)行順序由高優(yōu)先級到低優(yōu)先級,系統(tǒng)或用戶按某種原則為進程指定一個優(yōu)先級來表示該進程所享有的確調度優(yōu)先權。該算法核心是確定進程的優(yōu)先級。1 03.4.2 算法流程圖圖 3.4. 優(yōu)先級調度流程圖3.4.3.程序代碼void cprogressdlg:hphs(void) int i=0; createproarray();/ 創(chuàng)建時間數組while(!isfinish() i=0; /找出已創(chuàng)建的進程while(!iscreate(m_proi) | m_pronodem_state = finish) +i; if(i=5) 運行
16、進程取出進程是否創(chuàng)建創(chuàng)建進程隊列(優(yōu)先級)是否完成開始結束y n n y 1 1 m_systime += 1; i=0; proshow();/ 更新進程運行狀態(tài) /進程服務for(int r=0; rsetrange32(0,ser); proset-setstep(1); proset-setpos(0); 3.5.2.創(chuàng)建進程pbc 圖 3.5.2 創(chuàng)建進程pbc 流程圖i5 結束開始int i=0,pro,cre,ser; m_systime=0; 否是逐個創(chuàng)建1 2void cprogressdlg:createpro(void) int pro,cre,ser; m_systim
17、e = 0; for (int i=0; isetwindowtextw(str); m_proctrl2.setpos(m_pronode1.finishpart); str.format(_t(%d),m_pronode1.finishpart); getdlgitem(idc_static2)-setwindowtextw(str); m_proctrl3.setpos(m_pronode2.finishpart); str.format(_t(%d),m_pronode2.finishpart); getdlgitem(idc_static3)-setwindowtextw(str);
18、 m_proctrl4.setpos(m_pronode3.finishpart); str.format(_t(%d),m_pronode3.finishpart); getdlgitem(idc_static4)-setwindowtextw(str); m_proctrl5.setpos(m_pronode4.finishpart); str.format(_t(%d),m_pronode4.finishpart); getdlgitem(idc_static5)-setwindowtextw(str); str.format(_t( 運行時間: %d),m_systime); getd
19、lgitem(idc_static6)-setwindowtextw(str); sleep(m_sleep); 1 33.5.4.判斷當前進程是否創(chuàng)建bool cprogressdlg:iscreate(int index) if(m_pronodeindex.createtimem_systime) return false; else return true; 3.5.5.創(chuàng)建時間隊列圖 3.5.5 創(chuàng)建時間隊列流程圖void cprogressdlg:createtimearray(void) int time = 100,s; for(int j=0; j5; +j) for(int
20、 i=0; i5; +i) if(m_pronodei.createtimetime & m_pronodei.rr=-1) 開始int time-100,s,i-0,j-0 j5 i5 time=createtime; s=i; createtimetime&rr=-1 rr=0; m_timei=s; time=100; 結束n y n y y n 1 4time=m_pronodei.createtime; s=i; m_pronodes.rr = 0; m_timej=s; time = 100; 3.5.6.判斷所有進程是否完成bool cprogressdlg:is
21、finish(void) int pronum = 5,i; /是否所有進程完成for(i=0; i5; +i) if(m_state) = finish) pronum -= 1; if(pronum != 0) return false; else return true; 3.5.7.創(chuàng)建優(yōu)先權隊列開始int time-100,s,i-0,j-0 j5 i5 pro=; s=i; protime&rr=-1 rr=0; m_proi=s; pro=100; 結束n y n y y n 1 5圖 3.5.7創(chuàng)建優(yōu)先權隊列流程圖void
22、 cprogressdlg:createproarray(void) int pro = 100,s=0; for(int j=0; j5; +j) for(int i=0; i5; +i) if(m_createpro(); dlg-fcfs(); criticalsection.unlock(); return 0; 3.5.9.時間片輪轉線程函數uint threadfuncrr(lpvoid lp) criticalsection.lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-createpr
23、o(); dlg-rr(); criticalsection.unlock(); return 0; 1 63.5.10.高優(yōu)先級線程函數uint threadfunchphs(lpvoid lp) criticalsection.lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-createpro(); dlg-hphs(); criticalsection.unlock(); return 0; 3.5.11.保存輸入框修改線程函數uint threadfuncsave(lpvoid lp) criticalsection.
24、lock(); cprogressdlg * dlg; dlg = (cprogressdlg *)lp; dlg-save(); dlg-messagebox(_t( 修改成功! ),_t( 提示 ),mb_ok); criticalsection.unlock(); return 0; 3.5.12.保存輸入框修改void cprogressdlg:save(void) sendmessage(um_myupdatedata,true); proset(&m_proctrl1,m_ser1); proset(&m_proctrl2,m_ser2); proset(&
25、m_proctrl3,m_ser3); proset(&m_proctrl4,m_ser4); proset(&m_proctrl5,m_ser5); getdlgitem(idc_static1)-setwindowtextw(_t(0); getdlgitem(idc_static2)-setwindowtextw(_t(0); getdlgitem(idc_static3)-setwindowtextw(_t(0); getdlgitem(idc_static4)-setwindowtextw(_t(0); getdlgitem(idc_static5)-setwindo
26、wtextw(_t(0); getdlgitem(idc_static6)-setwindowtextw(_t(運行時間: 0); 3.5.13.子線程向主線程發(fā)送消息afx_msg lresult cprogressdlg:onummyupdatedata(wparam wparam, lparam lparam) updatedata(wparam); return 0; 1 7四程序的調試與運行結果說明4.1.界面4.1.1問題 1 程序界面出現“卡死”現象原因,當程序只有一個主線程的時候,程序只有完成當前操作的時候才會執(zhí)行下一個操作任務。解決辦法,分別添加四個線程,分別是保存修改線程,
27、先來先服務線程,時間片輪轉線程,高優(yōu)先權優(yōu)先服務線程。圖 4.1.1界面調試4.2.先來先服務調度4.2.1問題 1 無法正確按照時間先后順序調用線程。原因是直接修改pcb隊列會導致界面的實現比較困難,但是不修改又會導致無法正確調度進程或者需要更多的函數輔助,以便實現相應的功能。解決辦法,創(chuàng)建時間隊列,添加函數void cprogressdlg:createtimearray(void)圖 4.2. 先來先服務調度調試1 84.3.時間片輪轉調度4.3.1問題 1 進程時間片結束還沒有切換下一個線程。解決辦法修改該段代碼m_systime += 1; m_pronodem_timei.fini
28、shpart += 1; proshow();/ 更新進程運行狀態(tài)改成如下代碼if(m_pronodem_timei.finishpart = m_pronodem_timei.servetime) m_pronodem_state = finish; else m_systime += 1; m_pronodem_timei.finishpart += 1; proshow();/ 更新進程運行狀態(tài) 圖 4.3.1 時間片輪轉調度調試4.3.2 問題 2 進程間能切換的時候,發(fā)現進程的時間片到了,還繼續(xù)對當前進程服務,直到進程運行完成。原因是進程的創(chuàng)建時間隊列沒有形成“環(huán)”
29、從隊頭到對尾的時候沒有再跳回隊頭。解決辦法,添加以下代碼,當執(zhí)行到隊尾的時候,就跳回隊頭。+i; if (i=5) i=0;1 9圖 4.3.2 時間片輪轉調度調試4.4.高優(yōu)先級優(yōu)先調度4.4.1問題 1 無法正確按照優(yōu)先權高低調用進程。原因是直接修改pcb隊列會導致界面的實現比較困難,但是不修改又會導致無法正確調度進程或者需要更多的函數輔助,以便實現相應的功能。解決辦法,創(chuàng)建優(yōu)先權隊列,添加函數void cprogressdlg:createproarray()圖 4.4.1高優(yōu)先級優(yōu)先調度2 04.5 基礎函數調試4.5.1 問題 1 執(zhí)行 threadfuncsave函數的時候出現如下
30、錯誤。圖 4.5.1hreadfuncsave函數調試導致錯誤的代碼是:dlg-updatedata(true); 原因該子線程通過主框架對象的指針,修改了主線程的數據,而主線程有自己的安全保護措施,禁止子線程主動修改主線程的數據,所以導致了錯誤。解決辦法,添加一個自定義消息,子線程向主線程發(fā)送消息,讓主線程自己修改數據。繞過主線程的保護措施。#define um_myupdatedata wm_user+100/自定義消息(子線程向主線程發(fā)送消息)afx_msg lresult cprogressdlg:onummyupdatedata(wparam wparam, lparam lpara
31、m) updatedata(wparam); return 0; 4.5.2 問題2 導致錯誤的代碼是:void cprogressdlg:onsetrr() settime dlg; if ( dlg.domodal() = idok) m_timerr = dlg.getdlgitemint(idc_timeedit); 原因寫了 if(dlg.domodal() = idok)點擊 ok 后,窗口已經關閉,不能使用getdlgitemint ,繼續(xù)使用會出現野指針的問題。2 1解決辦法:窗口對象消除了,但是對象的數據還沒有被析構函數清除。修改該代碼m_timerr = dlg.getdl
32、gitemint(idc_timeedit); 改成 m_timerr = dlg.m_time; 五課程設計總結通過做本實驗,我在以前學過的知識的基礎上有了提高,學到了很多新知識:比如將用戶作業(yè)和就緒進程按提交的順序或變?yōu)榫途w狀態(tài)的先后排成隊列,并按照先來先服務的方式進行調度。調度時從后備隊列中選擇若干優(yōu)先權最高的個作業(yè)進入內存;或從就緒隊列中選擇優(yōu)先權最高的進程,將處理機分配給它。對進程優(yōu)先、進程或作業(yè)先來先服務、按時間片輪轉調度算法以及進程調度的概念和算法,有了更深入的認識!初步理解了操作系統(tǒng)對于作業(yè)處理的基本思想!了解到算法很重要,又更加明白算法本身可以節(jié)約時間,而且不同的函數之間在調
33、用的時候要注意很多的問題。在動手操作過程中,體會到了成功的喜悅和遇到問題自己解決的能力,對于我來說是一次提高,讓自己多多的在實踐中可以加深對理論的理解,也讓我明白了以后應該如何更好,更高效的學習。六后記經過兩周的時間,課程設計終于完成了,他鍛煉了我查閱資料,進行方案構思的能力。在設計過程中,我按照實驗要求逐步完善設計方案,較好的完成了設計任務。這次課程設計,由于理論知識的不足,再加上平時沒有設計經驗,一開始有些手忙腳亂,不知從何入手。但在組員們的熱情幫助下,使我順利地完成了設計。雖然困難很多,但是我盡了自己最大的努力去克服,然而還是難免有些疏忽和遺漏的地方。這次課程設計對我而言是對計算機操作系
34、統(tǒng)課程內容掌握情況的一次自我驗證和對以前所學的各種計算機語言的一種檢驗,從而有著極其重要的意義。通過這次課程設計提高了對所學知識的綜合應用能力。七致謝2 2我 們 全 組 人 員 感 謝 給 過 我 幫 助 和 關 注 的 所 有 人 , 更 加 感 謝 張 威 老 師 帶 領 我 們 完 成 這 次 課程 設 計 ,指 出 我 們 的 不 足 之 處 ,鼓 勵 我 們 繼 續(xù) 努 力 。組 長 我 感 謝 組 員 的 默 契 配 合 與 相 互 合 作 。謝 謝 大 家八附錄8.1.進程狀態(tài)宏#definefinish 0 #defineready 1 8.2.進程隊列結點struct pr
35、onode int pro;/ 優(yōu)先級int createtime;/ 創(chuàng)建時間int servetime;/ 服務時間int finishpart;/ 完成部分int prostate;/進程狀態(tài)int rr;/ 是否加入數組; 8.3.主框架構造函數cprogressdlg:cprogressdlg(cwnd* pparent /*=null*/) : cdialogex(cprogressdlg:idd, pparent) m_hicon = afxgetapp()-loadicon(idr_mainframe); m_systime = 0; m_pri1 = 2; m_pri2 =
36、4; m_pri3 = 1; m_pri4 = 3; m_pri5 = 5; m_cre1 = 4; m_cre2 = 3; m_cre3 = 8; m_cre4 = 2; m_cre5 = 10; m_ser1 = 9; m_ser2 = 8; m_ser3 = 12; m_ser4 = 6; m_ser5 = 10; m_timerr = 3; m_sleep = 450; 8.4.界面控件與類變量鏈接void cprogressdlg:dodataexchange(cdataexchange* pdx) 2 3 cdialogex:dodataexchange(pdx); ddx_text(pdx, idc_priority1, m_pri1); ddv_minmaxint(pdx, m_pri1, 1, 5); ddx_text(pdx, idc_priority2, m_pri2); ddv_minmaxint(pdx, m_pri2, 1, 5); ddx_text(pdx, idc_priority3, m_pri3); ddv_minmaxint(pdx, m_pri3, 1, 5); ddx_text(pdx, idc_priority4, m_pri4);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電梯井施工與電梯設備保養(yǎng)合同
- 二零二五年度情感關系建立合同
- 二零二五年度2025年門面房租賃與社區(qū)配套服務合同
- 二零二五年度精裝修公寓房購買與戶外休閑設施使用合同3篇
- 二零二五版奶粉生產廢棄物資源化利用服務合同范本頁22篇
- 2025年度影視基地場地租賃合同及影視制作服務協(xié)議3篇
- 二零二五版電子商務SET協(xié)議安全風險評估與風險控制合同3篇
- 二零二五版淋浴房市場推廣與廣告投放合同3篇
- 二零二五年度EPS線條綠色建材采購合同3篇
- 二零二五版水電系統(tǒng)自動化改造與升級合同3篇
- 城市基礎設施維修計劃
- 2024山西廣播電視臺招聘專業(yè)技術崗位編制人員20人歷年高頻500題難、易錯點模擬試題附帶答案詳解
- 新材料行業(yè)系列深度報告一:新材料行業(yè)研究框架
- 人教版小學英語各冊單詞表(帶英標)
- 廣東省潮州市潮安區(qū)2023-2024學年六年級上學期期末考試數學試題
- 鄉(xiāng)村治理中正式制度與非正式制度的關系解析
- 智能護理:人工智能助力的醫(yī)療創(chuàng)新
- 國家中小學智慧教育平臺培訓專題講座
- 5G+教育5G技術在智慧校園教育專網系統(tǒng)的應用
- VI設計輔助圖形設計
- 淺談小學勞動教育的開展與探究 論文
評論
0/150
提交評論