




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、-PAGE . z.(操作系統課程設計)連續(xù)動態(tài)分區(qū)存 管理模擬實現目錄操作系統課程設計1 引言3課程設計目的和容 3 需求分析3 概要設計3開發(fā)環(huán)境 4系統分析設計 4有關了解存管理的相關理論4存管理概念4存管理的必要性4存的物理組織4什么是虛擬存5連續(xù)動態(tài)分區(qū)存管理方式5單一連續(xù)分配(單個分區(qū)) 5固定分區(qū)存儲管理5可變分區(qū)存儲管理(動態(tài)分區(qū)) 5可重定位分區(qū)存儲管理5問題描述和分析6程序流程圖6數據結構體分析8主要程序代碼分析9分析并實現四種存分配算法 11最先適應算11下次適應分配算法13最優(yōu)適應算法16最壞適應算法 18回收存算法20調試與操作說明22初始界面22模擬存分配23已分配
2、分區(qū)說明表面24空閑區(qū)說明表界面24回收存界面25重新申請存界面26.總結與體會 28參考文獻 28引言操作系統是最重要的系統軟件,同時也是最活躍的學科之一。我們通過操作系統可以理解計算機系統的資源如何組織,操作系統如何有效地管理這些系統資源,用戶如何通過操作系統與計算機系統打交道。存儲器是計算機系統的重要組成部分,近年來,存儲器容量雖然一直在不斷擴大,但仍不能滿足現代軟件發(fā)展的需要,因此,存儲器仍然是一種寶貴而又緊俏的資源。如何對它加以有效的管理,不僅直接影響到存儲器的利用率,而且還對系統性能有重大影響。而動態(tài)分區(qū)分配屬于連續(xù)分配的一種方式,它至今仍在存分配方式中占有一席之地。課程設計目的和
3、容: 理解存管理的相關理論,掌握連續(xù)動態(tài)分區(qū)存管理的理論;通過對實際問題的編程實現,獲得實際應用和編程能力。 編寫程序實現連續(xù)動態(tài)分區(qū)存管理方式,該程序管理一塊虛擬存,實現存分配和回收功能。 分析并實現四種存分配算法,即最先適應算法,下次最先適應算法,最優(yōu)適應算法,最壞適應算法。存分配算法和回收算法的實現。需求分析動態(tài)分區(qū)分配是根據進程的實際需要,動態(tài)地為之分配存空間。在實現動態(tài)分區(qū)分配時,將涉及到分區(qū)分配中所用的數據結構、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個問題。常用的數據結構有動態(tài)分區(qū)表和動態(tài)分區(qū)鏈。在對數據結構有一定掌握程度的情況下設計合理的數據結構來描述存儲空間,實現分區(qū)存儲管理
4、的存分配功能,應該選擇最合適的適應算法(首次適應算法,最佳適應算法,最后適應算法,最壞適應算法),在動態(tài)分區(qū)存儲管理方式中主要實現存分配和存回收算法,在這些存儲管理中間必然會有碎片的產生,當碎片產生時,進行碎片的拼接等相關的容概要設計本程序采用機構化模塊化的設計方法,共分為四大模塊。最先適應算法實現 從空閑分區(qū)表的第一個表目起查找該表,把最先能夠滿足要求的空閑區(qū)分配給作業(yè),這種方法目的在于減少查找時間。為適應這種算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按地址由低到高進行排序。該算法優(yōu)先使用低址部分空閑區(qū),在低址空間造成許多小的空閑區(qū),在高地址空間保留大的空閑區(qū)。下次適應分配算法實現該算法是最
5、先適應算法的變種。在分配存空間時,不再每次從表頭(鏈首)開始查找,而是從上次找到空閑區(qū)的下一個空閑開始查找,直到找到第一個能滿足要求的的空閑區(qū)為止,并從中劃出一塊與請求大小相等的存空間分配給作業(yè)。該算法能使存中的空閑區(qū)分布得較均勻。最優(yōu)適應算法實現它從全部空閑區(qū)中找出能滿足作業(yè)要求的、且大小最小的空閑分區(qū),這種方法能使碎片盡量小。為適應此算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按從小到大進行排序,自表頭開始查找到第一個滿足要求的自由分區(qū)分配。最壞算法實現最壞適應分配算法要掃描整個空閑分區(qū)或鏈表,總是挑選一個最大的空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量從大到小的順序形成一空
6、閑分區(qū)鏈,查找時只要看第一個分區(qū)能否滿足作業(yè)要求。開發(fā)環(huán)境: win7 下 VC+6.0系統分析設計: 相關算法原理,算法流程圖,涉及的數據結構容都相應包含在各章節(jié)中有關了解存管理的相關理論存管理概念: 存管理,是指軟件運行時對計算機存資源的分配和使用的技術。其最主要的目的是如何高效,快速的分配,并且在適當的時候釋放和回收存資源。存不是預先劃分好的,而是在系統運行的過程中建立分區(qū).當作業(yè)裝入主存時,根據作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待.分區(qū)長度不固定分區(qū)個數不固定。這種存儲管理的方法克服了固定分區(qū)嚴重浪費主存的問題,提高了主存資源
7、的利用率。存管理的必要性:存管理對于編寫出高效率的 Windows 程序是非常重要的,這是因為Windows 是多任務系統,它的存管理和單任務的 DOS 相比有很大的差異。DOS是單任務操作系統,應用程序分配到存后,如果它不主動釋放,系統是不會對它作任何改變的;但 Windows 卻不然,它在同一時刻可能有多個應用程序共享存,有時為了使*個任務更好地執(zhí)行,Windows 系統可能會對其它任務分配的存進行移動,甚至刪除。因此,我們在 Windows 應用程序中使用存時,要遵循Windows 存管理的一些約定,以盡量提高 Windows 存的利用率。 1.3 存的物理組織:物理地址: 把存分成若干
8、個大小相等的存儲單元,每個存儲單元占 8 位,稱作字節(jié)(byte)。每個單元給一個編號,這個編號稱為物理地址(存地址、絕對地址、實地址)。二、物理地址空間: 物理地址的集合稱為物理地址空間(主存地址空間),它是一個一維空間。什么是虛擬存:虛擬存是存管理技術的一個極其實用的創(chuàng)新。它是一段程序(由操作系統調度),持續(xù)監(jiān)控著所有物理存中的代碼段、數據段,并保證他們在運行中的效率以及可靠性,對于每個用戶層(user-level)的進程分配一段虛擬存空間。當進程建立時,不需要在物理存件之間搬移數據,數據儲存于磁盤的虛擬存空間,也不需要為該進程去配置主存空間,只有當該進程被被調用的時候才會被加載到主存。連
9、續(xù)動態(tài)分區(qū)存管理方式的實現在早期的操作系統中,主存分配廣泛采用連續(xù)分配方式。 連續(xù)分配方式,是指為一個用戶程序分配一個連續(xù)的存空間,該連續(xù)存空間指的的是物理存。下面介紹連續(xù)分配的四種方式。單一連續(xù)分配(單個分區(qū))最簡單的存儲管理方式,用于多道程序設計技術之前。 存分為系統區(qū)和用戶區(qū),系統區(qū)由操作系統使用。用戶區(qū)作為一個連續(xù)的分區(qū)分配給一個作業(yè)。 分區(qū)存儲管理是滿足多道程序設計的最簡單的一種存儲管理方法,它允許多 4個用戶程序同時存在系統存中,即共享存空間。 按分區(qū)劃分方式可分為固定分區(qū)和可變分區(qū)。固定分區(qū)存儲管理 把存的用戶區(qū)預先劃分成多個分區(qū),每個分區(qū)大小可以相同,也可以不同。(分區(qū)的劃分由
10、計算機的操作員或者由操作系統給出,并給出主存分配表) 分區(qū)個數固定,分區(qū)的大小固定。 一個分區(qū)中可裝入一個作業(yè),作業(yè)執(zhí)行過程中不會改變存放區(qū)域。 早期的 IBM 的 OS/MFT(具有固定任務數的多道程序系統)采用了這種固定分區(qū)的方法。可變分區(qū)存儲管理(動態(tài)分區(qū))存不是預先劃分好的,而是在系統運行的過程中建立分區(qū).當作業(yè)裝入主存時,根據作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待。 分區(qū)長度不固定分區(qū)個數不固定。 這種存儲管理的方法克服了固定分區(qū)嚴重浪費主存的問題,提高了主存資源的利用率。 操作系統采用可變分區(qū)存儲管理??芍囟ㄎ环謪^(qū)存儲管理
11、解決碎片問題的一種簡單方法是采用可重定位分區(qū)分配.。 其中心思想是,把不同程序,且在存中地址不連續(xù)的想法讓他們連續(xù)。例:存中現有 3 個空閑區(qū),現有一作業(yè)到達,要求獲得 30k 存空間,沒有分區(qū)滿足容量要求,若想把作業(yè)裝入,可將存中所有作業(yè)進行移動,這樣把原來分散的空閑區(qū)匯集成一個大的空閑區(qū)。 將存中的作業(yè)進行移動使它們連接在一起把原來分散的多個小分區(qū)拼接成一個大的空閑區(qū).這個過程稱為”緊湊”或”移動”。 需解決的問題:每次”緊湊”后程序或數據裝入的物理地址變化采用動態(tài)重定位。問題描述和分析系統應利用*種分配算法,從空閑分區(qū)鏈表中找到所需大小的分區(qū),如果空閑分區(qū)大小大于請求分區(qū)大小,則從該分區(qū)
12、中按改請求的大小劃分出一塊存空間大小劃分出一塊存空間分配出去,余下的部分仍留在空閑鏈表中。然后,將分配區(qū)的首址返回給調用者。當進程運行完畢師存時,系統根據回收區(qū)的首址,從空閑區(qū)中找到相應的插入點,此時可能出現以下四種情況之一:該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū):將三個空閑區(qū)合并為一個空閑區(qū)。新空閑區(qū)的起始地址為上空閑區(qū)的起始地址,大小為三個空閑區(qū)之和。空閑區(qū)合并后,取消可用表或自由鏈中下空閑區(qū)的表目項或鏈指針,修改上空閑區(qū)的對應項。 該空閑區(qū)的上相鄰區(qū)是空閑區(qū):將釋放區(qū)與上空閑區(qū)合并為一個空閑區(qū),其起始地址為上空閑區(qū)的起始地址,大小為上空閑區(qū)與釋放區(qū)之和。合并后,修改上空閑區(qū)對應的可用表的表目
13、項或自由鏈指針。 該空閑區(qū)的下相鄰區(qū)是空閑區(qū):將釋放區(qū)與下空閑區(qū)合并,并將釋放區(qū)的起始地址作為合并區(qū)的起始地址。合并區(qū)的長度為釋放區(qū)與下空閑區(qū)之和。同理,合并后修改可用表或自由鏈中相應的表目項或鏈指針。兩相鄰區(qū)都不是空閑區(qū):釋放區(qū)作為一個新空閑可用區(qū)插入可用表或自由鏈。程序流程圖存分配流程圖,如圖存回收流程圖,如圖數據結構體分析進程屬性結構體typedef struct readyque char name10; int size;readyque,*readyqueue;空閑鏈表結構體typedef struct idlyspace int from; int size; idlyspace
14、 * ne*t;idlyspace,*idly;已分配鏈表結構體typedef struct busyspace int from; readyque r; busyspace * ne*t;busyspace,*busy主要程序代碼分析主函數/代碼請?zhí)砑舆m當的注釋。int main() Is=(idly)malloc(sizeof(idlyspace); Is-from=0; Is-size=256; Is-ne*t=NULL; Is2=Is; Bs=(busy)malloc(sizeof(busyspace); Bs-ne*t=NULL; int t,t1; printf(n歡迎來到動態(tài)分
15、區(qū)存儲管理系統nn); printf(請選擇要執(zhí)行的算法:n); printf( 1.最先適應算法 n); printf( 2.下次適應算法 n); printf(3.最優(yōu)適應算法 n); printf( 4.最壞適應算法 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)
16、; printf( 5.退 出 n); printf(n); scanf(%d,&i); switch(i) case 1: switch(t) case 1: t1=FF(); 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)
17、; else printf(回收失敗n); break; case 3: Isprint(); break; case 4: Bsprint(); break; return 0;第三章 :分析并實現四種存分配算法最先適應算法空閑區(qū)按地址從小到大的次序排列。 分配:當進程申請大小為 SIZE 的存時,系統順序查找空閑區(qū)表(鏈),直到找到容量滿足要求(SIZE)的空閑區(qū)為止。從該空閑區(qū)中劃出大小為 SIZE的分區(qū)分配給進程,余下的部分仍作為一個空閑區(qū),但要修改其首址和大小。 優(yōu)點:這種算法是盡可能地利用低地址部分的空閑區(qū),而盡量地保證高地址 6部分的大空閑區(qū),有利于大作業(yè)的裝入。缺點:主存低地址
18、和高地址分區(qū)利用不均衡。在低地址部分集中了許多非常小的空閑區(qū)碎片降低了主存的利用率。最先適應算法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)/尋找空閑表小滿足申請進程所需大小并且起址最小的空閑結點 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256)
19、/如果找到則為進程分配空間 busy j; j=(busy)malloc(sizeof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break; j-ne*t=b-ne*t; b-ne*t=j; min-from=min-from+D.size; min-size=min-size-D.size; return t;下次適應分配算法 最先適應算法的變種??偸菑目臻e區(qū)上次掃描結束處順序查找空閑
20、區(qū)表(鏈),直到找到第一個滿足容量要求的空閑區(qū)為止,分割一部分給作業(yè),剩余部分仍作為空閑區(qū)。下次適應分配算法int NF() int t=0; readyque D; printf請輸入進程名:”); scanf%”,D.name); printf輸入進程申請空間大小:”); scanf%”,&D.size); int mt=256; idly l=Is2; idly min=NULL; busy b=Bs; while(l) /尋找空閑表小滿足申請進程所需大小并且起址最小的空閑結點 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(
21、mt!=256)/如果找到則為進程分配空間 busy j; j=(busy)malloc(sizeof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break; /將申請空間進程插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改相應空閑節(jié)點的起址和大小 min-from=min-from+D.size; min-size=min-size-D.size; Is2=m
22、in-ne*t;/ls2指向修改結點的下一個結點 t=1; return t; l=Is;/l指向空閑表的頭 while(l!=Is2)/循環(huán)查找 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256) busy j; j=(busy)malloc(sizeof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break;
23、j-ne*t=b-ne*t; b-ne*t=j; min-from=min-from+D.size; min-size=min-size-D.size; Is2=min-ne*t; t=1; return t; return t;最優(yōu)適應算法空閑區(qū)按容量遞增的次序排列。 分配:當進程申請存儲空間,系統順序查找空閑區(qū)表(鏈),直到找到第一個滿足容量要求的空閑區(qū)為止。 采用最優(yōu)適應算法選中的空閑區(qū)是滿足容量要求的最小空閑區(qū)。 優(yōu)點:選中的空閑區(qū)是滿足容量要求的最小空閑區(qū),而不致于毀掉較大的空閑區(qū)。 缺點:空閑區(qū)的大小一般與申請分區(qū)大小不相等,因此將其一分為二,留下來的空閑區(qū)一般情況下是很小的,以致
24、無法使用。隨著時間的推移,系統中的小空閑區(qū)會越來越多,從而造成存儲空間的浪費。最優(yōu)適應算法int BF()int t=0; 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.sizesize) if(l-sizesize; min=l; t=1; l=l-ne*t; if(mt!=256)/找到第一個滿
25、足要求的空閑塊 busy j; j=(busy)malloc(sizeof(busyspace);/申請分配用于存放進程的存空間 j-from=min-from;/將第一個滿足要求的空閑塊(min)的首地址賦給j for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t)/按從小到大的順序查找新進程在已分配區(qū)中的位置 if(b-ne*t-fromfrom) b=b-ne*t; else break; j-ne*t=b-ne*t; b-ne*t=j;/將所輸入的進程插入進程鏈 min-from=min-from+D.size;/改變該
26、空閑塊的起始地址 min-size=min-size-D.size;/改變該空閑塊的剩余大小 return t;最壞適應算法 為了克服最佳適應算法把空閑區(qū)切割得太小的缺點,人們提出了一種最壞適應算法,即每次分配時,總是將最大的空閑區(qū)切去一部分分配給請求者,剩余的部分仍是一個較大的空閑區(qū)。避免了空閑區(qū)越分越小的問題。 要求空閑區(qū)按容量遞減的順序排列。 分配:進程申請存儲區(qū)時,檢查空閑區(qū)表(鏈)的第一個空閑區(qū)的大小是否滿足要求,若不滿足則令進程等待;若滿足則從該空閑區(qū)中分配一部分存儲區(qū)給用戶,剩下的部分仍作為空閑區(qū)。最壞適應算法int WF() int t=0; readyque D; print
27、f請輸入進程名:”); scanf%”,D.name); printf輸入進程申請空間大小:”); scanf%”,&D.size);/輸入進程申請的空間大小 idly l=Is;/l指向空閑鏈表ls頭 idly min=NULL; int mt=0; busy b=Bs;/b指向已分配鏈表Bs頭 /找到空閑分區(qū)小滿足進程的請求且尺寸最大的結點 while(l) if(D.sizesize)/判斷進程所申請的大小是否小于空閑區(qū)的各結點大小 if(l-sizemt) mt=l-size; min=l;/min指向空閑區(qū)中尺寸最大的結點t=1; l=l-ne*t;/l指向空閑鏈表下一個結點 if(
28、mt!=0)/判斷是否找到了空閑區(qū)的滿足結點 busy j; j=(busy)malloc(sizeof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t)/尋找插入到已分配鏈表中的位置 if(b-ne*t-fromfrom) b=b-ne*t; else break; /把此進程結點j插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改空閑鏈表的相應結點的參數 min-from=min-from+D.size; min-size=min-si
29、ze-D.size; return t;可變分區(qū)的回收當*個進程釋放*存儲區(qū)時,系統首先檢查釋放區(qū)是否與系統中的空閑區(qū)相鄰若相鄰則把釋放區(qū)合并到相鄰的空閑區(qū)去,否則把釋放區(qū)作為一個空閑區(qū)插入到空閑表的適當位置。釋放區(qū)與空閑區(qū)相鄰的四種情況。釋放區(qū)與前空閑區(qū)相鄰:把釋放區(qū)與前空閑區(qū)合并到一個空閑區(qū)。其首址仍為前空閑區(qū)首址,大小為釋放區(qū)大小與空閑區(qū)大小之和。釋放區(qū)與后空閑區(qū)相鄰:則把釋放區(qū)合并到后空閑區(qū),其首地址為釋放區(qū)首地址,大小為二者之和。釋放區(qū)與前后兩空閑區(qū)相鄰:這三個區(qū)合為一個空閑區(qū),首地址為前空閑區(qū)首址,大小為這三個空閑區(qū)之和,并取消后空閑區(qū)表目。釋放區(qū)不與任何空閑區(qū)相鄰:將釋放區(qū)作為一
30、個空閑區(qū),將其大小和首址插入到空閑區(qū)表的適當位置?;厥沾嫠惴╥nt recover() readyque D; printf請輸入想要回收的進程名”); scanf%”,D.name); busy b=Bs; idly l=Is; while(b-ne*t) /查找輸入的進程名是否在已分配鏈表中 bool yo=1; for(int i=0;ine*i=D.namei) yo=yo*1; else yo=0; /如果在已分配鏈表中則釋放該結點所占空間 if(yo) int t=b-ne*t-from; int ts=b-ne*t-r.size; while(l) if(l-fromt+ts)/所回收進程與空閑結點上下都不鄰接 idly tl; tl=(idly)malloc(sizeof(idlyspace); tl-from=t; tl-size=ts; tl-ne*t=l; Is=tl; break; if(l-from=t+ts)/所回收進程與空閑結點下鄰接 l-from=t; l-size=l-size+ts; busy tb=b-ne*t; b-ne*t=b-ne*t-ne*t; free(tb); return 1; if(l-from+l-sizefrom=t; tl-size=t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025護士入院筆試題目及答案
- 工程造價計算試題及答案
- 房地產中介行業(yè)2025年規(guī)范發(fā)展與服務質量提升營銷策略報告
- 生物質能源在分布式能源系統中的分布式能源應用模式與優(yōu)化策略優(yōu)化報告
- 醫(yī)藥流通行業(yè)2025年供應鏈風險管理與成本控制策略報告
- 職場語言運用2025年商務英語考試試題及答案
- 整套心理測試題及答案
- 綜合課程設計試題及答案
- 山水貴州答案及試題解析
- 安全工程師應試策略考題及答案
- 小石獅【經典繪本】
- 大學計算機基礎實驗教程(高守平第2版)
- 2023年福建三明市初中畢業(yè)班數學質量檢測卷(附答案)
- 金蝶固定資產管理系統
- LY/T 2457-2015西南樺培育技術規(guī)程
- GB/T 40998-2021變性淀粉中羥丙基含量的測定分光光度法
- GB/T 25840-2010規(guī)定電氣設備部件(特別是接線端子)允許溫升的導則
- 軍標類型整理文檔
- FZ/T 52019-2011萊賽爾短纖維
- 止血包扎(課件)
- 2022年湖南高二學業(yè)水平合格考試政治試卷真題及答案詳解
評論
0/150
提交評論