操作系統(tǒng)課程設(shè)計_第1頁
操作系統(tǒng)課程設(shè)計_第2頁
操作系統(tǒng)課程設(shè)計_第3頁
操作系統(tǒng)課程設(shè)計_第4頁
操作系統(tǒng)課程設(shè)計_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精品文檔 case 2:display(); break; case 可編輯 void menu() int n, i; n = 1; while (n = 1) 進(jìn)程模擬 endl; 建進(jìn)程 2. 查看進(jìn)程信息 endl; 撤銷進(jìn)程 4.終止進(jìn)程 endl; 5. 退出 endl; 你的選擇: system(cls); cout cout 1. 創(chuàng) cout 3. cout cout i; switch (i) case 1:create(); break; void menu() int n, i; n = 1; while (n = 1) 進(jìn)程模擬 endl; 建進(jìn)程 2. 查看進(jìn)程信息

2、 endl; 撤銷進(jìn)程 4.終止進(jìn)程 endl; 5. 退出 endl; 你的選擇: system(cls); cout cout 1. 創(chuàng) cout 3. cout cout i; switch (i) case 1:create(); break; void menu() int n, i; n = 1; while (n = 1) 進(jìn)程模擬 endl; 建進(jìn)程 2. 查看進(jìn)程信息 endl; 撤銷進(jìn)程 4.終止進(jìn)程 endl; 5. 退出 endl; 你的選擇: system(cls); cout cout 1. 創(chuàng) cout 3. cout cout i; switch (i) cas

3、e 1:create(); break; 精品文檔 退出 個替換進(jìn)程吊IP汨 請輸入1,退出,按任意犍 創(chuàng)建進(jìn)羋先二 亠撤銷進(jìn)程芻終止迸 驚詹的選a V 備輸入第二個替換進(jìn)程的屈 任務(wù)三、基本存儲器管理 一、目的: 一個好的計算機(jī)系統(tǒng)不僅要有一個足夠容量的、存取速度高的、穩(wěn)定可靠 的主存儲器,而且要能合理地分配和使用這些存儲空間。 當(dāng)用戶提出申請存儲 器空間時,存儲管理必須根據(jù)申請者的要求,按一定的策略分析主存空間的使 用情況,找出足夠的空閑區(qū)域分配給申請者。當(dāng)作業(yè)撤離或主動歸還主存資源 時,則存儲管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配 和回收的實現(xiàn)與主存儲器的管理方式有關(guān)

4、的,通過本實驗幫助學(xué)生理解在不同 的存儲管理方式下怎樣實現(xiàn)主存的分配和回收。 二、內(nèi)容: 從下兩種存儲管理方式的主存分配和回收中, 選擇一種管理方式來實現(xiàn) 本次實驗任務(wù): 1、在可變(動態(tài))分區(qū)管理方式下,采用最先適應(yīng)算法。 2、在分頁式管理方式下,采用位示圖來表示主存的分配情況和回收情況 程序流程圖: 源代碼如下: #in cludevc oni o.h #in clude #define n 10/系統(tǒng)最大作業(yè)數(shù) #define maxsize 20/空閑區(qū)最大內(nèi)存 #defi ne mini size 100 using n amespace std; struct float addr

5、; /已分配分區(qū)起始地址 float size; / 已分配分區(qū)長度,單位為字節(jié) int flag; useedn; / 已分配區(qū)表 struct float addr; / 空閑區(qū)起始地址 float size; / 空閑區(qū)大小 int flag; /0 為空,1 未分配 freesmaxsize; void allo(char a,float xk) int i,k; float ad; k=-1; for(i=0;i=xk if(k=-1) cout 無可用空閑區(qū) endl; return; if(freesk.size-xk=minisize) freesk.flag=0; ad=fr

6、eesk.addr; xk=freesk.size; else freesk.size=freesk.size-xk; ad=freesk.addr+freesk.size; i=0; while(useedi.flag!=0 if(freesk.flag=0) freesk.flag=1; else freesk.size=freesk.size+xk; return; else useedi.addr=ad; useedi.size=xk; useedi.flag=a; return; void findc(char x) int i,k,a,s,t; float S,L; s=0; wh

7、ile(useeds.flag!=x|useeds.flag=0) return; useeds.flag=0; S=useeds.addr; L=useeds.size; a=-1;k=-1;i=0; while(imaxsize if(freesi.addr=S+L)a=i; i+; if(k!=-1) if(a!=-1) freesk.size=freesa.size+freesk.size+L; freesa.flag=0; else freesk.size=freesk.size+L; else if(a!=-1) freesa.addr=S; freesa.size=freesa.

8、size+L; else t=0; while(freest.flag=1 useeds.flag=a; return; freest.addr=S; freest.size=L; freest.flag=1; return; int main( ) int i,a; float xk; frees0.addr=10240; frees0.size=10240; frees0.flag=1; for(i=1;imaxsize;i+) freesi.flag=0; for(i=0;in;i+) useedi.flag=0; while(1) cout 選擇操作 :endl0- 退出 endl1-

9、 分配內(nèi)存 endl2- 回 收已分配內(nèi)存 endl3- 顯示內(nèi)存信息 endl; couta; switch(a) case 0: exit(0); case 1:couta; coutxk; allo(a,xk); break; case 2:couta; findc(a); break; case 3:cout 輸出 空閑 分區(qū) : endl 起始地 址 分區(qū)長度 標(biāo)志 endl; for(i=0;imaxsize;i+) coutfreesi.addr freesi.size freesi.flagendl; cout 按任意鍵 , 輸出已分配信息 endl; getch(); cou

10、t 查看已分配分區(qū): endl 起始地址 分區(qū)長度 標(biāo)志 endl; for(i=0;in;i+) if(useedi.flag!=0) coutuseedi.addr useedi.size useedi.flagendl; else coutuseedi.addr useedi.size useedi.flagendl; break; default:cout 輸入有誤! ! ! endl; 可編輯 精品文檔 C:wi nd ow 5syste iyi 3 2c rn d. exe 可編輯 return 1; 1 1 Ji 存 存 - 內(nèi)自|:12小 內(nèi)自| 配信選:大 配信選 作內(nèi)已內(nèi)$

11、卡 內(nèi)已內(nèi)你 操岀配收一 T作星出配收父 分回顯回顯輸 選卜-K-I3-請星選0-1-E-I3-請 mi C:wind口 存呂度 內(nèi)息昭M 爲(wèi)馬分務(wù) EHJ內(nèi)你畀 眾父空地 八佶a-SH始 tl-E-3-請輸起100 0 一 0000000 0 00 0 0 000000 nl 0MHEls 8聞 00051 ME? M0n 起始 20469 11 12 0 _000 0 0-030 000M00 HIZ0MSS0000 選0-一E-3- 存 內(nèi)息|= 矍選 -突刀 作內(nèi)RJE你 I a as回顯輸 尢一I- ,- R青 i a 0 i 0 0 i a 0 確遅意鍵輸出已分配信息 配分兩: 分

12、區(qū)長度標(biāo)志 任務(wù)五、死鎖的避免 、目的 在多道程序系統(tǒng)中,多個進(jìn)程的并發(fā)執(zhí)行來改善系統(tǒng)的資源利用率,提高系 統(tǒng)的吞吐量,但可能發(fā)生一種危險一一死鎖。所謂死鎖(Deadlock),是指多個進(jìn) 程在運(yùn)行過程中因爭奪資源而造成的一種僵局(DeadlyEmbrace ),當(dāng)進(jìn)程處于 這種狀態(tài)時,若無外力作用,他們都無法在向前推進(jìn)。 我們可以在分配資源時加上限制條件就可以預(yù)防死鎖,但是,在每一種預(yù)防 死鎖的方法之中,都施加了較強(qiáng)的限制條件;而在避免死鎖的方法中,所施加的 限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。 1、內(nèi)容 利用銀行家算法來避免死鎖的發(fā)生 #include #include #defi

13、ne max_s 20 #define max_p 100 int availablemax_s; int max max_p max_s ; int allocation max_p max_s ; int need max_p max_s ; int request max_s ; int requestPID; int source; int process; using namespace std; /1: 表示請求的資源 還分配的資源 /2: 表示請求的資源 系統(tǒng)剩余的資源 /3: 表示不存在安全序列 /0: 成功 int banker( int stSq ) 精品文檔 int i

14、, j , k; for( i = 0 ; i needrequestPIDi ) return 1; for( i = 0 ; i availablei ) return 2; for( i = 0 ; i source ; i+ ) availablei -= requesti; allocationrequestPIDi += requesti; needrequestPIDi -= requesti; int finish max_p = 0 ; int work max_s ; int curS; for( i = 0 ; i source ; i+ ) worki = availa

15、blei; for( k = 0 ; k process ; k+ ) bool flag = false; for( i = 0 ; i process i+ ) if( finishi = 0 ) flag = true; for( j = 0 ; j workj ) flag = false; curS = i; if( !flag ) for( j = 0 ; j source ; j+ ) availablej += requestj; allocationrequestPIDj -= requestj; needrequestPIDj += requestj; return 3;

16、finishcurS = k+1; for( j = 0 ; j source ; j+ ) workj += allocationcurSj; for( i = 0 ; i process ; i+ ) j = 0; while( finishj != i + 1 ) j+; stSqi = j; return 0; void setCS() source = 3; process = 5; int a = 4 , 5 , 8 ; int max20100; int m max_s = 8 , 5 , 4 , 5 , 3 , 3 , 10 , 1 , 3 , 3 , 3 , 3 , 5 ,

17、4 , 4 , ; int al max_s = 1 , 2 , 1 , 3 , 1 , 1 , 1 , 1 , 3 ; int re = 0 , 2 , 2 ; int i , j; cout 當(dāng)前可用資源數(shù) :endl; for( i = 0 ; i source ; i+ ) availablei = ai; coutsetw(5)availablei; coutendlendl; cout 進(jìn)程所需資源的最大數(shù)量 :endl; for( i = 0 ; i process ; i+ ) for( j = 0 ; j source ; j+ ) maxij = mij; coutsetw

18、(5)maxij; coutendl; coutendl; cout 進(jìn)程已分配到資源量 :endl; for( i = 0 ; i process ; i+ ) for( j = 0 ; j source ; j+ ) allocationij = alij; coutsetw(5)allocationij; coutendl; coutendl; cout 進(jìn)程還需的資源量 :endl; for( i = 0 ; i process ; i+ ) for( j = 0 ; j source ; j+ ) needij = maxij - allocationij; coutsetw(5)n

19、eedij; coutendl; coutendl; requestPID = 1; cout 進(jìn)程 requestPID 正在請求的資源 :endl; for( i = 0 ; i source ; i+ ) requesti = rei; coutsetw(5)requesti; coutendlendl; void main() setCS(); int stSq max_p = 0 ; cout 銀行家算法的演示 endl; int error = banker( stSq ); if( !error ) cout 可以進(jìn)行分配 endl; for( int i = 0 ; i pro

20、cess ; i+ ) coutsetw(5)stSqi; coutendl; else endl; cout 剩余資源無法滿足要求,拒絕分配資源 任務(wù)六、磁盤空間的分配與回收 一、目的: 磁盤初始化時把磁盤存儲空間分成許多塊(扇區(qū)) ,這些空間可以被多個用戶 共享。用戶作業(yè)在執(zhí)行期間常常要在磁盤上建立文件或已經(jīng)建立在磁盤上的文件刪 去,這就涉及到磁盤存儲空間的分配和回收。 。一個文件存放到磁盤上,可以組織 成順序文件(連續(xù)文件) 、鏈接文件(串聯(lián)文件) 、索引文件等,因此,磁盤存儲空 間的分配有兩種方式,一種是分配連續(xù)的存儲空間,另一種是可以分配不連續(xù)的存 儲空間。怎樣有效地管理磁盤存儲空間

21、是操作系統(tǒng)應(yīng)解決的一個重要問題,通過本 實驗使學(xué)生掌握磁盤存儲空間的分配和收回算法。 二、內(nèi)容: 模擬磁盤空閑空間的表示方法,以及模擬實現(xiàn)磁盤空間的分配和回收。從下題 目中選擇一題來實現(xiàn)設(shè)備的管理: (1) 連續(xù)的磁盤存儲空間的分配和回收。 (2) 用位示圖管理磁盤存儲空間。 (3 )模擬 UNIX 系統(tǒng)的空閑塊組鏈接法,實現(xiàn)磁盤存儲空間的管理。 三、提示:參考教材 P231 P234 1、連續(xù)的磁盤存儲空間的分配和回收: (1) 要在磁盤上建立順序文時,必須把按序排列的邏輯記錄依次存放在磁盤的連 續(xù)存儲空間中。 可假定磁盤初始化時, 已把磁盤 存儲空間劃分成若干個等長的塊 (扇區(qū)),按柱面號

22、和盤面號的順序給每一塊確定一個編號。隨著文件的建立、刪 除、磁盤存儲空間被分成許多區(qū)(每一區(qū)包含若干塊),有的區(qū)存放著文件,而有 的區(qū)的空閑的。當(dāng)要建立順序文件時必須找到一個合適的空閑區(qū)來存放文件記錄, 當(dāng)一個文件被刪除時,則該文件占用的區(qū)應(yīng)成為空閑區(qū)。為此可用一張空閑區(qū)表 不記錄磁盤存儲空間中尚未占用的部分,格式如下: 序列 起始空閑塊號 空閑塊個數(shù) 狀態(tài) 1 5 6 未分配 2 14 3 未分配 3 21 30 未分配 4 空表目 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (2)要建立文件時,先查找空閑區(qū)表,從狀態(tài)為“未分配”的登記欄目

23、中找出一 個塊數(shù)能滿足要求的區(qū),由起始空閑塊號能依次推得可使用的其它塊號。若不需 要占用該區(qū)的所有塊時,則剩余的塊仍應(yīng)為未分配的空閑塊,這時要修改起空閑 塊號和空閑塊數(shù)。若占用了該區(qū)的所有塊,則相應(yīng)登記欄中的狀態(tài)修改成“空表 目”,刪除一個文件時,從空閑區(qū)表中找一個狀態(tài)為“空表目”的登記欄目,把歸 還的起始塊號和塊數(shù)填入對應(yīng)的位置。 磁盤存儲空間的分配和回收算法類似于主存儲器的可變分區(qū)方式的分配和回 收。同學(xué)們可參考上一實驗的第一題。 3)當(dāng)找到空塊后,必須啟動磁盤把信息存放到指定的塊中,啟動磁盤必須給出 由三個參數(shù)組成的物理地址:柱面號、磁道號和物理記錄號。故必須把找到的空 閑塊號換算成磁盤

24、的物理地址。 為了減少移臂次數(shù),磁盤上的信息按柱面上各磁道順序存放?,F(xiàn)假定一個盤 組共有 200 個柱面,(編號 0199 )每個柱面有 20 個磁道( 019 ,同一柱面 上的各磁道分布在各盤面上,故磁道號即盤面號。 ),每個磁道被分成等長的 6 個 物理記錄(編號 0 5 ,每個盤面被分成若干個扇區(qū),故每個磁道上的物理記錄號 即為對應(yīng)的扇區(qū)號。 )。那么,空閑塊號與磁盤物理地址的對應(yīng)關(guān)系如下: 假設(shè)M=空閑塊號/6 , m=空閑塊號/6 則物理記錄號 =m 磁道號 =M/20 ,柱面號 =M/20 4)刪除一個文件時,從文件目錄表中可得到該文件在磁盤上的起始地址和邏輯 記錄個數(shù),假定每個邏

25、輯記錄占磁盤上的一塊,則可推算出歸還后的起始空閑塊 號和塊數(shù),登記到空閑區(qū)表中。換算關(guān)系如下: 起始空閑塊號 =(柱面號 *20+ 磁道號) *6+ 物理記錄號 空閑塊數(shù) =邏輯記錄數(shù) 5)請設(shè)計磁盤存儲空間的分配和回收程序,要求把分配到空閑塊轉(zhuǎn)換成磁盤物 理地址,把歸還的磁盤空間轉(zhuǎn)換成空閑塊號 假定空閑區(qū)表的初值如提示( 1)中指出,現(xiàn)有一文件要占用 10 塊,運(yùn)行你 所設(shè)計的分配程序,顯示或打印分配后的空閑區(qū)表以及分配到的磁盤空間的起始 物理地址。然后,有一文件被刪除,它占用的磁盤空間為: 1 號柱面 2 號磁道, 0 號物理記錄開始的 4 塊,運(yùn)行你所設(shè)計劃的回收程序,顯示或打印回收后的

26、空閑 區(qū)表。 2、用位示圖管理磁盤存儲空間的分配和回收: (1 )為了提高磁盤存儲空間的利用率,可在磁盤上組織成鏈接文件、索引文件, 這類文件可以把邏輯記錄存放在不連續(xù)的存儲空間。為了表示哪些磁盤空間已被 占用,哪些磁盤空間是空閑的,可用位示圖來指出。位示圖由若干字節(jié)構(gòu)成,每 一位與磁盤上的一塊對應(yīng), “1 ”狀態(tài)表示相應(yīng)塊已占用, “0”狀態(tài)表示該塊為空 閑。位示圖的形式與上一實驗中的位示圖一樣,但要注意,對于主存儲空間和磁 盤存儲空間應(yīng)該用不同的位示圖來管理,絕不可混用。 (2 )申請一塊磁盤空間時,由分配程序查位示圖,找出一個為“ 0”的位,計算 出這一位對應(yīng)塊的磁盤物理地址,且把該位置

27、成占用狀態(tài)“ 1 ”。假設(shè)現(xiàn)在有一個 盤組共 80 個柱面,每個柱面有兩個磁道,每個磁道分成 4 個物理記錄。那么, 當(dāng)在位示圖中找到某一字節(jié)的某一位為 “0 ”時,這個空閑塊對應(yīng)的磁盤物理地址 為: 柱面號 = 字節(jié)號 磁道號 =位數(shù)/4 物理記錄號 =位數(shù) /4 (3 )歸還一塊磁盤空間時, 由回收程序根據(jù)歸還的磁盤物理地址計算出歸還塊在 位示圖中的對應(yīng)位,把該位置成“ 0”。按照(2)中假設(shè)的盤組,歸還塊在位示 圖中的位置計算如下: 字節(jié)號=柱面號 位數(shù)=磁道號*4+物理記錄號 (4) 設(shè)計申請一塊磁盤空間和歸還一塊磁盤空間的程序。要求能顯示或打印程序 運(yùn)行前和運(yùn)行后的位示圖;分配時把分

28、配到的磁盤空間物理地址顯示或打印出來, 歸還時把歸還塊對應(yīng)于位示圖的字節(jié)號和位數(shù)顯示或打印出來。 (5)假定已有如表6 1磁盤空間被占用了,現(xiàn)在要申請五塊磁盤空間,運(yùn)行分 配程序,按(4 )中要求顯示或打印運(yùn)行的結(jié)果。然后再歸還如表 6 2的空間, 運(yùn)行回收程序,按(4)中的要求顯示或打印運(yùn)行結(jié)果。 柱面號 磁道號 物理記錄號 0 0 1 0 0 2 0 1 0 0 1 3 1 0 0 1 1 2 表6 1 可編輯 精品文檔 柱面號 磁道號 物理記錄號 0 0 2 0 1 0 1 0 1 表6 2 3、模擬UNIX系統(tǒng)的空閑塊成組鏈接法,實現(xiàn)磁盤存儲空間的管理: (1 )假定磁盤存儲空間已被劃

29、分成長度 n的等長塊,共有M塊可供使用。UNIX 系統(tǒng)中采用空閑塊成組鏈接的方法來管理磁盤存儲空間,將磁盤中的每N個空閑 塊(NM )分成一組,最后一組可以不足 N塊,每組的第一塊登記了下一組空閑 塊的塊數(shù)和塊號,第一組的塊數(shù)和塊號登記在專用塊中,登記的格式如下: 當(dāng)?shù)谝豁梼?nèi)容為“ 0”時,則第二項起指出的空閑塊是最后一組。 (2 )現(xiàn)模擬UNIX系統(tǒng)的空閑塊成組鏈接,假定共有 8塊可供使用,每3塊為 可編輯 精品文檔 一組,則空閑塊成組鏈接的初始狀態(tài)為: A0A1A4 A8 開始時,空閑塊號是順序排列的,但經(jīng)若干次的分配和歸還操作后,空閑塊的鏈 可編輯 精品文檔 接就未必按序排列了 用二維數(shù)

30、組AMN來模擬管理磁盤空間,用 Ai表示第i塊,第0塊A0 作為專用塊。 (3 )成組鏈接的分組情況記錄在磁盤物理塊中,為了查找鏈接情況,必須把它們 讀入主存,故當(dāng)磁盤初始化后,系統(tǒng)先將專用塊內(nèi)容復(fù)到主存中,定義一個數(shù)組 MA存放專用塊內(nèi)容,即MA=A0。申請一塊磁盤空間時,查 MA,從中找出空 閑塊號,當(dāng)一組空閑塊只剩第一塊時,貝U應(yīng)把該塊中指出的下一組的空閑塊數(shù)和 塊號復(fù)制到專用塊中,然后把該塊分配給申請者。當(dāng)一組的空閑塊分配完后則把 專用塊內(nèi)容(下一組鏈接情況)復(fù)制到主存,再為申請者分配。分配算法如圖 6 1 o 圖6 1采用成組鏈接的分配算法 (4 )歸還一塊時給出歸還的塊號,若當(dāng)前組

31、不滿規(guī)定塊時,將歸還塊登記入該組; 若當(dāng)前組已滿,則另建一新組,這時歸還塊作為新一組的第一塊,應(yīng)把主存中登 記的一組鏈接情況MA復(fù)制歸還塊中,然后在 MA重新登記一個新組。歸還一塊 的算法圖62。 精品文檔 圖 6 2 采用成組鏈接的回收算法 (5 )設(shè)計分配和歸還磁盤空間的程序, 能顯示或打印分配的磁盤空間的塊號, 在 完成一次分配或歸還后能顯示或打印各空閑塊組的情況(各組的空閑塊數(shù)和塊 號)。本實驗省去了塊號與物理地址之間的轉(zhuǎn)換工作, 而在實際的系統(tǒng)中必須進(jìn)行 塊號與物理地址的轉(zhuǎn)換工作。 (6 )運(yùn)行你所設(shè)計的程序,假定空閑塊鏈接的初始狀態(tài)如提示( 2 ),現(xiàn)先分配 4 塊,再依歸還第 2

32、 塊和第 6 塊。把執(zhí)行后分配到的塊號依次顯示或打印出來,且 顯示或打印空閑塊組的情況。 在上次執(zhí)行的基礎(chǔ)上繼續(xù)分配 3 塊,然后歸還第 1 塊,再申請 5 塊,顯示或 打印依次分配到的塊號及空閑塊組情況。 #include using namespace std; void init(int disk88) int cyd,tra,sor; char select=Y; cout 開始初始化 .endl; while(select=y|select=Y) coutcyd; couttra; coutsor; diskcyd4*tra+sor=1; cout 是否繼續(xù) Y|Nendl; coutselect; void loca(int disk88) int i,j; int flag=0; int cyd,tra,sor; for(i=0;i8;i+) for(j=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論