操作系統(tǒng)課程設(shè)計(jì)-模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

./__0120910340228課程設(shè)計(jì)題目模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)XX姓名XX指導(dǎo)教師XXX2011年01月09日課程設(shè)計(jì)任務(wù)書學(xué)生__XX專業(yè)__計(jì)算機(jī)0902班指導(dǎo)XXX工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院題目:模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收初始條件:1.預(yù)備內(nèi)容:閱讀操作系統(tǒng)的內(nèi)存管理章節(jié)內(nèi)容,了解有關(guān)虛擬存儲(chǔ)器、頁(yè)式存儲(chǔ)管理等概念,并體會(huì)頁(yè)式管理內(nèi)存的分配和回收過程。2.實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。要求完成的主要任務(wù):〔包括課程設(shè)計(jì)工作量與其技術(shù)要求,以與說明書撰寫等具體要求〕1.采用頁(yè)式管理方案實(shí)施內(nèi)存分配和回收。能夠處理以下的情形⑴能夠輸入給定的內(nèi)存頁(yè)面數(shù),頁(yè)面大小,進(jìn)程的個(gè)數(shù)與每個(gè)進(jìn)程的頁(yè)數(shù)。⑵要求當(dāng)某進(jìn)程提出申請(qǐng)空間的大小后,顯示能否滿足申請(qǐng),以與為該進(jìn)程分配資源后內(nèi)存空間的使用情況〔被進(jìn)程占用的頁(yè)面,空閑的頁(yè)面〕。2.設(shè)計(jì)報(bào)告內(nèi)容應(yīng)說明:⑴課程設(shè)計(jì)目的與功能;⑵需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明<功能與框圖>;⑶源程序的主要部分;⑷測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;⑸自我評(píng)價(jià)與總結(jié):=1\*romani〕你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;=2\*romanii〕什么地方做得不太好,以后如何改正;=3\*romaniii〕從本設(shè)計(jì)得到的收獲〔在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗(yàn)和教訓(xùn)〕;=4\*romaniv〕完成本題是否有其他的其他方法〔如果有,簡(jiǎn)要說明該方法〕;=5\*romanv〕對(duì)實(shí)驗(yàn)題的評(píng)價(jià)和改進(jìn)意見,請(qǐng)你推薦設(shè)計(jì)題目。時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成程序分析與設(shè)計(jì)。周2、周3:完成程序調(diào)試與測(cè)試。周4、周5:驗(yàn)收,撰寫課程設(shè)計(jì)報(bào)告?!沧⒁馐马?xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記〕指導(dǎo)教師簽名:年月日系主任〔或責(zé)任教師〕簽名:年月日模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收1需求分析頁(yè)式管理是一種內(nèi)存空間存儲(chǔ)管理的技術(shù),頁(yè)式管理分為靜態(tài)頁(yè)式管理和動(dòng)態(tài)頁(yè)式管理?;驹硎菍⒏鬟M(jìn)程的虛擬空間劃分成若干個(gè)長(zhǎng)度相等的頁(yè)<page>,頁(yè)式管理把內(nèi)存空間按頁(yè)的大小劃分成片或者頁(yè)面〔pageframe〕,然后把頁(yè)式虛擬地址與內(nèi)存地址建立一一對(duì)應(yīng)頁(yè)表,并用相應(yīng)的硬件地址變換機(jī)構(gòu),來解決離散地址變換問題。頁(yè)式管理采用請(qǐng)求調(diào)頁(yè)或預(yù)調(diào)頁(yè)技術(shù)實(shí)現(xiàn)了內(nèi)外存存儲(chǔ)器的統(tǒng)一管理。圖1頁(yè)的劃分圖2基本頁(yè)表示例靜態(tài)分頁(yè)管理的第一步是為要求內(nèi)存的作業(yè)或進(jìn)程分配足夠的頁(yè)面。系統(tǒng)通過存儲(chǔ)頁(yè)面表、請(qǐng)求表以與頁(yè)表來完成內(nèi)存的分配工作。頁(yè)表指的是內(nèi)存中的一塊固定存儲(chǔ)區(qū)。頁(yè)式管理時(shí)每個(gè)進(jìn)程至少有一個(gè)頁(yè)表。請(qǐng)求表指的是用來確定作業(yè)或進(jìn)程的虛擬空間的各頁(yè)在內(nèi)存中的實(shí)際對(duì)應(yīng)位置;另外整個(gè)系統(tǒng)有一個(gè)存儲(chǔ)頁(yè)面表,其描述了物理內(nèi)存空間的分配使用狀況。圖3請(qǐng)求表的示例存儲(chǔ)頁(yè)面表有兩種構(gòu)成方法:1、位示圖法2、空閑頁(yè)面鏈表法模擬設(shè)計(jì)頁(yè)式存儲(chǔ)管理的分配與回收要求能夠滿足如下的要求:輸入給定的內(nèi)存頁(yè)面數(shù),頁(yè)面大小,進(jìn)程的個(gè)數(shù)與每個(gè)進(jìn)程的頁(yè)數(shù)。要求當(dāng)某進(jìn)程提出申請(qǐng)空間的大小后,顯示能否滿足申請(qǐng),以與為該進(jìn)程分配資源后內(nèi)存空間的使用情況〔被進(jìn)程占用的頁(yè)面,空閑的頁(yè)面〕。2功能設(shè)計(jì)2.1算法分析首先,請(qǐng)求表給出進(jìn)程或作業(yè)要求的頁(yè)面數(shù)。然后,由存儲(chǔ)頁(yè)面表檢查是否有足夠的空閑頁(yè)面,如果沒有,則本次無法分配。如果有則首先分配設(shè)置頁(yè)表,并請(qǐng)求表中的相應(yīng)表項(xiàng)后,按一定的查找算法搜索出所要求的空閑頁(yè)面,并將對(duì)應(yīng)的頁(yè)好填入頁(yè)表中。圖4分配頁(yè)面的算法流程2.2數(shù)據(jù)結(jié)構(gòu)頁(yè)式管理把內(nèi)存空間按頁(yè)的大小劃分成片或者頁(yè)面,再按照一定的規(guī)律建立起頁(yè)表,并通過請(qǐng)求表將分配內(nèi)容顯示出來.將頁(yè)表和請(qǐng)求表的內(nèi)容使用結(jié)構(gòu)體來定義是比較方便的.//頁(yè)表項(xiàng)結(jié)構(gòu)typedefstruct_pagetableitem{ pageidpagenum; //頁(yè)號(hào) blockidblocknum; //塊號(hào)}pgtabitem; //頁(yè)表typedefpgtabitem*pagetable;//請(qǐng)求表結(jié)構(gòu)typedefstruct_reqtable{ unsignedpid; //進(jìn)程號(hào) unsignedreqpagenum; //請(qǐng)求頁(yè)面數(shù) pagetablepgtabadr;//頁(yè)表始址 boolstate; //狀態(tài)}reqtabitem;請(qǐng)求表還引入了支持快速插入和刪除的list順序容器來進(jìn)行相關(guān)操作.list<reqtabitem>reqtable因?yàn)槟M設(shè)計(jì)的關(guān)系,頁(yè)面的起始地址均應(yīng)該為隨機(jī)的數(shù)值,所以程序在設(shè)計(jì)過程中加入了隨機(jī)數(shù)類的編寫.classRandomNumber{private:unsignedlongrandseed;public:RandomNumber<unsignedlongs=0>;unsignedshortRandom<unsignedlongn>;doublefRandom<void>;};采用當(dāng)前系統(tǒng)的時(shí)間值來生成偽隨機(jī)數(shù)分配地址.定義隨機(jī)數(shù)產(chǎn)生器:RandomNumberrandom定義內(nèi)存頁(yè)面數(shù):intpagenum定義頁(yè)面大小:intpagesize定義進(jìn)程個(gè)數(shù):intpnum用整數(shù)數(shù)組模擬分配的內(nèi)存頁(yè)面數(shù)int*mempage=newint[pagenum]2.3模塊說明2.3.1主函數(shù)主函數(shù)依次運(yùn)行了程序中所實(shí)現(xiàn)的關(guān)鍵函數(shù).intmain<>{InitSys<>;//初始化系統(tǒng)MainChoice<>;//輸出系統(tǒng)菜單Destroy<>;//釋放申請(qǐng)的動(dòng)態(tài)內(nèi)存return0;}2.3.2各個(gè)功能函數(shù)初始化內(nèi)存頁(yè)面:voidInit_Mempage<void>獲取內(nèi)存使用情況:intGet_Mempagenum<void>初始化默認(rèn)的請(qǐng)求表:voidInit_Reqtable<void>為默認(rèn)的進(jìn)程分配內(nèi)存:voidInit_DistMem<void>手動(dòng)創(chuàng)建進(jìn)程,并分配內(nèi)存:voidDist_Mem<void>釋放申請(qǐng)的動(dòng)態(tài)內(nèi)存:voidDestroy<void>結(jié)束指定進(jìn)程:voidKill<void>2.3.3打印函數(shù)打印出進(jìn)程請(qǐng)求表:voidPrintReqtable<void>打印出頁(yè)表:voidPrintPageTable<void>打印出內(nèi)存使用情況:voidPrintMem<void>打印出物理塊的大小:voidPrintBlockSize<void>2.3.4其他函數(shù)初始化系統(tǒng):voidInitSys<void>輸出主菜單:voidMainMenu<void>選擇運(yùn)行分支:voidMainChoice<>3開發(fā)平臺(tái)3.1開發(fā)平臺(tái)使用系統(tǒng):Windows7使用語(yǔ)言:C++開發(fā)工具:VisualC++20084測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析4.1測(cè)試方法通過輸入正常數(shù)據(jù)以與非正常數(shù)據(jù)對(duì)程序進(jìn)行全方位測(cè)試4.2測(cè)試結(jié)果<1>程序主界面<2>輸入進(jìn)程號(hào)和頁(yè)面數(shù):<3>顯示進(jìn)程頁(yè)表:<4>顯示請(qǐng)求表<5>顯示內(nèi)存使用情況以與物理塊大小<6>錯(cuò)誤檢驗(yàn)5源程序的主要部分#include<iostream>#include<cstdlib>#include<iomanip>#include<list>#include"page.h"#include"Random.h"usingnamespacestd;list<reqtabitem>reqtable;RandomNumberrandom;//隨機(jī)數(shù)產(chǎn)生器unsignedpagenum=random.Random<80>+21;//內(nèi)存頁(yè)面數(shù)21-100unsignedpagesize=random.Random<16>+5;//頁(yè)面大小 5-20unsignedpnum=random.Random<4>+5;//進(jìn)程的個(gè)數(shù)5-8int*mempage=newint[pagenum];//用整數(shù)數(shù)組模擬內(nèi)存頁(yè)面數(shù)/*初始化內(nèi)存頁(yè)面*/voidInit_Mempage<void>{ inti=0; for<i=0;i<int<pagenum>;i++> mempage[i]=0; //數(shù)組全部賦初值}/*獲取內(nèi)存的使用情況*/intGet_Mempagenum<void>{ intsum=0; for<inti=0;i<int<pagenum>;i++> if<mempage[i]==0> sum++; returnsum; //判斷有多少內(nèi)存頁(yè)面已經(jīng)被使用}/*初始化默認(rèn)的請(qǐng)求表*/voidInit_Reqtable<void>{ inti; for<i=1;i<=int<pnum>;i++> { reqtabitempreq; preq.pid=i; preq.reqpagenum=random.Random<4>+2;//進(jìn)程請(qǐng)求的頁(yè)面大小-5 preq.state=false; preq.pgtabadr=NULL; reqtable.push_back<preq>; //依次壓入容器 }}/*為默認(rèn)的進(jìn)程分配內(nèi)存*/voidInit_DistMem<void>{ intreqpnum; //進(jìn)程請(qǐng)求頁(yè)面數(shù) inti; list<reqtabitem>::iteratorpos=reqtable.begin<>; for<;pos!=reqtable.end<>;pos++> { reqpnum=<*pos>.reqpagenum; if<reqpnum>int<Get_Mempagenum<>>> //判斷請(qǐng)求的內(nèi)存頁(yè)面數(shù)目是否大于剩余的 { cout<<"沒有足夠的內(nèi)存!"<<endl; cout<<endl; } else { <*pos>.state=true; pagetabletemp=newpgtabitem[reqpnum];//新建臨時(shí)頁(yè)表項(xiàng)數(shù)組 if<temp==NULL> { cout<<"內(nèi)存分配失敗!"<<endl; exit<0>; } <*pos>.pgtabadr=temp; for<i=0;i<reqpnum;i++> { temp[i].pagenum=i; //頁(yè)表的頁(yè)號(hào) intrandnum=random.Random<pagenum>+1;//隨機(jī)產(chǎn)生一個(gè)塊號(hào) while<mempage[randnum]==1> randnum=random.Random<pagenum>+1; temp[i].blocknum=randnum;//頁(yè)表的塊號(hào) mempage[randnum]=1; } } }}/*手動(dòng)創(chuàng)建進(jìn)程,并分配內(nèi)存*/voidDist_Mem<void>{ inti; reqtabitempreq; //新創(chuàng)建進(jìn)程記錄 intpid; //進(jìn)程號(hào) intreqpnum; //請(qǐng)求頁(yè)面數(shù) boolflag=false; do{ cout<<"請(qǐng)輸入進(jìn)程號(hào):"; flag=false; cin>>pid; for<list<reqtabitem>::iteratorpos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { if<<*pos>.pid==pid> { flag=true; cout<<"該進(jìn)程號(hào)已經(jīng)存在,請(qǐng)重新輸入"<<endl; cout<<endl; break; } } }while<flag==true>;//循環(huán)直到輸入的Pid滿足條件 preq.pid=pid; cout<<"請(qǐng)輸入需要的頁(yè)面數(shù):"; cin>>reqpnum; preq.reqpagenum=reqpnum; preq.state=false; preq.pgtabadr=NULL; reqpnum=preq.reqpagenum; if<reqpnum>Get_Mempagenum<>> { cout<<"沒有足夠的內(nèi)存,進(jìn)程創(chuàng)建失敗!"<<endl; cout<<endl; } else { preq.state=true; pagetabletemp=newpgtabitem[reqpnum]; if<temp==NULL> { cout<<"內(nèi)存分配失敗!"<<endl; exit<0>; } preq.pgtabadr=temp; for<i=0;i<int<reqpnum>;i++> { temp[i].pagenum=i; //頁(yè)表的頁(yè)號(hào) intrandnum=random.Random<pagenum>+1;//隨機(jī)產(chǎn)生一個(gè)塊號(hào) while<mempage[randnum]==1> randnum=random.Random<pagenum>+1; temp[i].blocknum=randnum;//頁(yè)表的塊號(hào) mempage[randnum]=1; } } reqtable.push_back<preq>; //將該進(jìn)程的記錄加入請(qǐng)求表}/*程序結(jié)束時(shí),釋放申請(qǐng)的動(dòng)態(tài)內(nèi)存*/voidDestroy<void>{ list<reqtabitem>::iteratorpos=reqtable.begin<>; for<pos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { if<<*pos>.state==true> delete[]<*pos>.pgtabadr; } reqtable.clear<>;}/*打印出進(jìn)程請(qǐng)求表*/voidPrintReqtable<void>{ cout<<endl; cout<<"||"<<endl; cout<<"|進(jìn)程請(qǐng)求表|"<<endl; cout<<"||"<<endl; cout<<"|"<<setw<8><<"進(jìn)程號(hào)" <<setw<16><<"請(qǐng)求頁(yè)面數(shù)" <<setw<16><<"頁(yè)表起始地址" <<setw<16><<"頁(yè)表長(zhǎng)度" <<setw<16><<"狀態(tài)|"<<endl; cout<<"||"<<endl; list<reqtabitem>::iteratorpos=reqtable.begin<>; for<pos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { cout<<"|"<<setw<8><<<*pos>.pid <<setw<16><<<*pos>.reqpagenum <<setw<16><<<*pos>.pgtabadr <<setw<16><<<<*pos>.reqpagenum>*pagesize; if<<*pos>.state> cout<<setw<4><<"已分配|"<<endl; else cout<<setw<4><<"未分配|"<<endl; if<<*pos>.pid!=reqtable.back<>.pid> cout<<"||"<<endl; else cout<<"||"<<endl; }}/*打印頁(yè)表*/voidPrintPageTable<void>{ unsignedpid; inti; boolflag=false; cout<<"請(qǐng)輸入進(jìn)程號(hào):"; cin>>pid; list<reqtabitem>::iteratorpos=reqtable.begin<>; for<pos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { if<<*pos>.pid==pid&&<*pos>.state==true> { flag=true; cout<<"||"<<endl; cout<<"|此進(jìn)程的頁(yè)表|"<<endl; cout<<"||"<<endl; cout<<"|"<<setw<16><<"頁(yè)號(hào)" <<setw<6><<"塊號(hào)|"<<endl; cout<<"||"<<endl; intreqpagenum=<*pos>.reqpagenum; for<i=0;i<reqpagenum;i++> { cout<<"|"<<setw<16><<<*pos>.pgtabadr[i].pagenum <<setw<6><<<*pos>.pgtabadr[i].blocknum<<"|"<<endl; if<i!=reqpagenum-1> cout<<"||"<<endl; else cout<<"||"<<endl; } } } if<flag==false> cout<<"系統(tǒng)中不存在該進(jìn)程或者該進(jìn)程還沒有被分配內(nèi)存!\n"; cout<<endl;}voidPrintMem<void>{ cout<<"內(nèi)存總塊數(shù)為"<<pagenum<<",已經(jīng)使用了"<<pagenum-Get_Mempagenum<><<"塊!"<<endl; cout<<"現(xiàn)在還有"<<Get_Mempagenum<><<"塊內(nèi)存區(qū)域空閑!"<<endl; cout<<endl;}voidPrintBlockSize<void>{ cout<<"物理塊大小為:"<<pagesize<<"KB"<<endl; cout<<endl;}/*結(jié)束指定進(jìn)程*/voidKill<void>{ boolflag; inti; reqtabitemtemp; list<reqtabitem>::iteratorpos=reqtable.begin<>; intpid; do{ cout<<"請(qǐng)輸入進(jìn)程號(hào):"; flag=false; cin>>pid; for<pos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { if<<*pos>.pid==pid> { flag=true; temp=*pos; break; } } if<flag==false> cout<<"系統(tǒng)中不存在該進(jìn)程!"<<endl; cout<<endl; }while<flag==false>; for<i=0;i<int<temp.reqpagenum>;i++> mempage[temp.pgtabadr[i].blocknum]=0; reqtable.remove<temp>; //重新為沒有分配到內(nèi)存的進(jìn)程分配內(nèi)存 for<pos=reqtable.begin<>;pos!=reqtable.end<>;pos++> { if<<*pos>.state==false> { intreqpnum; reqpnum=<*pos>.reqpagenum; if<reqpnum<=Get_Mempagenum<>> { <*pos>.state=true; pagetabletemp=newpgtabitem[reqpnum]; if<temp==NULL> { cout<<"內(nèi)存分配失敗!"<<endl; cout<<endl; exit<0>; } <*pos>.pgtabadr=temp; for<i=0;i<int<reqpnum>;i++> { temp[i].pagenum=i; //頁(yè)表的頁(yè)號(hào) intrandnum=random.Random<pagenum>+1;//隨機(jī)產(chǎn)生一個(gè)塊號(hào) while<mempage[randnum]==1> randnum=random.Random<pagenum>+1; temp[i].blocknum=randnum;//頁(yè)表的塊號(hào) mempage[randnum]=1; } } } }}/*初始化系統(tǒng)*/voidInitSys<void>{ cout.setf<ios::left>;//左對(duì)齊 Init_Mempage<>; Init_Reqtable<>; Init_DistMem<>;}/*輸出主菜單*/voidMainMenu<void>{ cout<<"頁(yè)式存儲(chǔ)管理的分配與回收"<<endl; cout<<"1.手動(dòng)創(chuàng)建進(jìn)程"<<endl; cout<<"2.顯示進(jìn)程頁(yè)表"<<endl; cout<<"3.顯示請(qǐng)求表"<<endl; cout<<"4.撤銷進(jìn)程"<<endl; cout<<"5.顯示內(nèi)存使用情況"<<endl; cout<<"6.顯示物理塊大小"<<endl; cout<<"7.退出系統(tǒng)"<<endl; cout<<"請(qǐng)輸入您的選擇<0--7>:";}/*選擇函數(shù)*/voidMainChoice<>{ intchoice; do{ MainMenu<>; cin>>choice; switch<choice> { case1: Dist_Mem<>; break; case2: PrintPageTable<>; break; case3: PrintReqtable<>; break; case4: Kill<>; break; case5: PrintMem<>; break; case6: PrintBlockSize<>; break; case7: break; default:cout<<"輸入有誤,請(qǐng)重新輸入.\n"; co

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論