操作系統(tǒng)實驗報告_第1頁
操作系統(tǒng)實驗報告_第2頁
操作系統(tǒng)實驗報告_第3頁
操作系統(tǒng)實驗報告_第4頁
操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

操作系統(tǒng)實驗報告學號 姓名班級

實驗一實驗報告【實驗名稱】:并發(fā)程序設計(實驗1)【實驗目的】:掌握在程序中創(chuàng)建新進程的方法,觀察并理解多道程序并發(fā)執(zhí)行的現(xiàn)象?!緦嶒炘怼浚篺ork():建立子進程。子進程得到父進程地址空間的一個復制。返回值:成功時,該函數(shù)被調用一次,但返回兩次,fork()對子進程返回0,對父進程返回子進程標識符(非0值)。不成功時對父進程返回-1,沒有子進程。另一個迸程的數(shù)據(jù)區(qū)另一個迸程的數(shù)據(jù)區(qū)用用<父進程數(shù)據(jù)區(qū)和棧區(qū)戶另一個迸程的數(shù)據(jù)區(qū)另一個迸程的數(shù)據(jù)區(qū)用用<父進程數(shù)據(jù)區(qū)和棧區(qū)戶1區(qū)父進程數(shù)據(jù)區(qū)和棧區(qū)戶5區(qū)父進程代碼父子迸程代碼另一個進程的區(qū)另一個迸程的區(qū)子迸程數(shù)據(jù)區(qū)(與父迸程數(shù)據(jù)區(qū)內容完全一樣)OSyOSyproc數(shù)組區(qū)'proc數(shù)組區(qū)』proc數(shù)組proc數(shù)組另一個進程的數(shù)據(jù)區(qū)于進程代碼(新裝入的)父進程數(shù)據(jù)區(qū)和棧區(qū)父進程代碼另一個進程的區(qū):于進程數(shù)據(jù)區(qū)(新)proc數(shù)組Vproc數(shù)組進程標識 所執(zhí)行的程序 (父) 進程標識 所執(zhí)行的程序 (父) (于)(同父) 進程標識 所執(zhí)行的程序 (父) (于)(新) (c)exec后的內存物理空間(a)fbrkWu的內存^物JS&空I'可(b)fbrk后、execWu的內存物理空間【實驗內容I:首先分析一下程序運行時其輸出結果有哪幾種可能性,然后實際調試該程序觀察其實際輸出情況,比較兩者的差異,分析其中的原因。voidmain(void)(intx=5;if(fork())(x+=30;printf("%d\n”,x);}elseprintf("%d\n”,x);printf(("%d\n”,x);}【實驗要求】:每個同學必須獨立完成本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含預計的實驗結果,關鍵代碼的分析,調試記錄,實際的實驗結果,實驗結果分析等內容?!绢A計的實驗結果】355355【關鍵代碼分析】代碼主要由fork()函數(shù)和一個ifelse條件分支語句組成。fork()函數(shù),它是Linux的系統(tǒng)調用。函數(shù)定義:intfork(void);返回值:子進程中返回0,父進程中返回子進程ID,出錯返回-1函數(shù)說明:一個現(xiàn)有進程可以調用fork函數(shù)創(chuàng)建一個新進程。由fork創(chuàng)建的新進程被稱為子進程(childprocess)ofork函數(shù)被調用一次但返回兩次。兩次返回的唯一區(qū)別是子進程中返回0值而父進程中返回子進程ID。子進程是父進程的副本,它將獲得父進程數(shù)據(jù)空間、堆、棧等資源的副本。注意,子進程持有的是上述存儲空間的“副本”,這意味著父子進程間不共享這些存儲空間,它們之間共享的存儲空間只有代碼段。linux將復制父進程的地址空間內容給子進程,因此,子進程有了獨立的地址空間。父進程和子進程的代碼段都是上面的所有代碼,由定義可知不過子進程的代碼只從創(chuàng)建此子進程那里開始執(zhí)行。也就是從if(fork())語句開始,出現(xiàn)了子進程,兩個進程并發(fā)執(zhí)行。的。可以完全看成普通的兩個進程。所以在執(zhí)行printf(("%d\n”,x);的時候,父子進程當然都會執(zhí)行它,因為他們本身程序段里都有這句代碼?!菊{試記錄】在紅帽終端里做gdb調試在第五行加入斷點,執(zhí)行run得到55,這是子進程執(zhí)行的結果。再執(zhí)行next得到3535,這是父進程的結果。這里可以看出,由父進程創(chuàng)建的子進程先執(zhí)行完畢,但是宏觀上是并發(fā)執(zhí)行。include<stdioLti>muin(void){intx=5;if(forkO)TOC\o"1-5"\h\z1printf( hx)i}eIseprintf( hx)i(gdb)bSBjeakpoint1atOx8O4837c3fileca.chline5,(gdb)runStartingprogram;/horre/yuiuiui/cbBreakpoint1.nuin()atca.f>x+=30;(gdb)Ifgdh)n7 printf( hx):Cgdh)n11 printf( hx):Cgdh)n【實際的實驗結果】553535【實驗結果分析】從實際結果來看,子進程比父進程先執(zhí)行完,但是由fork函數(shù),我們可知,兩者優(yōu)先級應該是一樣的。至于哪個可能先執(zhí)行,可能和操作系統(tǒng)的具體調度算法有關。當實驗超過一定次數(shù)時,應該會出現(xiàn)其它結果。實驗二實驗報告【實驗名稱】:進程通信(實驗2)【實驗目的】:掌握用郵箱方式進行進程通信的方法,并通過設計實現(xiàn)簡單郵箱理解進程通信中的同步問題以及解決該問題的方法。【實驗原理】:郵箱機制類似于日常使用的信箱。對于用戶而言使用起來比較方便,用戶只需使用send()向對方郵箱發(fā)郵件receive()從自己郵箱取郵件,send()和receive()的內部操作用戶無需關心。因為郵箱在內存中實現(xiàn),其空間有大小限制。其實send()和receive()的內部實現(xiàn)主要還是要解決生產者與消費者問題?!緦嶒瀮热荨浚哼M程通信的郵箱方式由操作系統(tǒng)提供形如send()和receive()的系統(tǒng)調用來支持,本實驗要求學生首先查找資料了解所選用操作系統(tǒng)平臺上用于進程通信的系統(tǒng)調用具體形式,然后使用該系統(tǒng)調用編寫程序進行進程間的通信,要求程序運行結果可以直觀地體現(xiàn)在界面上。在此基礎上查找所選用操作系統(tǒng)平臺上支持信號量機制的系統(tǒng)調用具體形式,運用生產者與消費者模型設計實現(xiàn)一個簡單的信箱,該信箱需要有創(chuàng)建、發(fā)信、收信、撤銷等函數(shù),至少能夠支持兩個進程互相交換信息,比較自己實現(xiàn)的信箱與操作系統(tǒng)本身提供的信箱,分析兩者之間存在的異同?!緦嶒炓蟆浚好總€同學必須獨立完成本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含背景知識介紹,設計方案,預計的實驗結果,關鍵代碼的分析,調試記錄,實際的實驗結果,實驗結果分析等內容?!颈尘爸R介紹】:1、sembuf數(shù)據(jù)結構structsembuf(unsignedshortintsem_num;//semaphorenumbershortintsem_op;//semaphoreoperationshortintsem_flg;//operationflag};sem_num:是相對應的信號量集中的某一個資源,所以其值是一個從0到相應的信號量集的資源總數(shù)(ipc_perm.sem_nsems)之間的整數(shù)。sem_op:指明所要執(zhí)行的操作。如果其值為正數(shù),該值會加到現(xiàn)有的信號內含值中。通常用于釋放所控資源的使用權;如果sem_op的值為負數(shù),而其絕對值又大于信號的現(xiàn)值,操作將會阻塞,直到信號值大于或等于sem_op的絕對值。通常用于獲取資源的使用權;如果sem_op的值為0,則操作將暫時阻塞,直到信號的值變?yōu)?。sem_flg:信號操作標志,可能的選擇有兩種IPC_NOWAIT//對信號的操作不能滿足時,semop()不會阻塞,并立即返回,同時設定錯誤信息。IPC_UNDO//程序結束時(不論正?;虿徽?,保證信號值會被重設為semop()調用前的值。這樣做的目的在于避免程序在異常情況下結束時未將鎖定的資源解鎖,造成該資源永遠鎖定。2、 semop函數(shù)函數(shù)原型:intsemop(intsemid,structsembuf*sops,unsignednsops);參數(shù)說明:semid:信號集的識別碼,可通過semget獲取。sops:指向存儲信號操作結構的數(shù)組指針。nsops:信號操作結構的數(shù)量,恒大于或等于1。返回說明:成功執(zhí)行時,兩個系統(tǒng)調用都返回0。失敗返回-1,錯誤信息保存在errno中。3、 semget函數(shù)函數(shù)原型:intsemget(key_tkey,intnsems,intsemflg);參數(shù)說明:key:關鍵字值一般是由系統(tǒng)調用ftok()返回的nsems:指出了一個新的信號量集中應該創(chuàng)建的信號量的個數(shù)semflg:打開和存取操作與參數(shù)semflg中的內容相關。返回說明:如果成功,則返回信號量集的IPC標識符。如果失敗,返回-1,錯誤信息保存在errno中。4、 semctl函數(shù)函數(shù)原型:intsemctl(intsemid,intsemnum,intcmd,unionsemunarg);參數(shù)說明:senid:關鍵字值semnum:信號量數(shù)目cmd:要操作的具體命令arg:semnu的一個聯(lián)合類型的副本。返回說明:返回值:如果成功,則為一個正數(shù)。如果失敗,則為-1。錯誤信息保存在errno中。5、 pthread_create函數(shù)函數(shù)原型:intpthread_create(pthread_t*restricttidp,constpthread_attr_t^restrictattr,void*(*start_rtn)(void*),void^restrictarg);參數(shù)說明:tidp:指向線程標識符的指針。attr:用來設置線程屬性。第三個參數(shù)是線程運行函數(shù)的起始地址。arg:運行函數(shù)的參數(shù)?!驹O計方案】:采用兩個程序并行的方式,打開兩個終端,為兩個進程都創(chuàng)建一個郵箱。并且,要求先輸入操作命令,使信箱執(zhí)行哪種操作,以完成兩個進程間的郵件通信。同時,還應采用pv操作,使當郵箱滿和空的時候,分別不能執(zhí)行發(fā)送和接收的工作?!緦嶒烆A計結果】:A_Receive()和B_Receive()分別接收B_Send()和A_Send()發(fā)出的信息,發(fā)送的信息和接受的信息應該一樣?!娟P鍵代碼分析】:PV操作實現(xiàn):intp(intsem_id)(structsembufsem_b;sem_b.sem_num=0;sem_b.sem_op=-1; //V操作只需將-1改為0。sem_b.sem_flg=SEM_UNDO;if(semop(sem_id,&sem_b,1)==-1)(return0;}return1;}A向B發(fā)送信息:void*A_Send(void*arg){ —inti;for(i=0;i<10;i++)(semaphore_P(sem_idAs);//P操作semaphore_P(a_mutex_semaphore);//互斥intnumber=rand(); //隨機數(shù)為發(fā)送的郵件printf("AsendtoB:%d\n”,number);b_buf[b_buf_top]=number;//郵箱B中接收A發(fā)送的郵件b_buf_top+=1;//A向B發(fā)送郵件,B的郵件數(shù)量加一

semaphore_V(a_mutex_semaphore);//互斥semaphore_V(sem_idBr);//V操作sleep(1);}}【調試記錄】:pthread庫不是Linux系統(tǒng)默認的庫,連接時需要使用庫libpthread.a,所以在使用pthread_create創(chuàng)建線程時,在編譯中要加-lpthread參數(shù)gcc-w-lpthreadsemaphore.c【實驗的實際結果】:yuiuiui@yuiuiui-desktop:-$gcc-w-osemaphore-lpthreadsemaphore.cyuiuiui@yuiuiui-desktop:-$./semaphoreBsendtoA:2AreceivefromB:2BsendtoA:2AreceivefromB:2AsendtoB:56BreceivefromA:56BsendtoA:37AreceivefromB:37AsendtoB:45BreceivefromA:45BsendtoA:97AsendtoB:asdfBreceivefromA:asdfBsendtoA:rtAreceivefromB:rtAreceivefromB:97AsendtoB:145BreceivefromA:145BsendtoA:564AreceivefromB:564AsendtoB:5647BreceivefromA:5647BsendtoA:23123AreceivefromB:23123【實驗結果分析】:四個線程并發(fā)運行,A_Send()和B_Send()發(fā)出信息,同時打印出發(fā)出的信息內容;A_Receive()和B_Receive()分別接收B_Send()和A_Send()發(fā)出的信息,并打印出接受的信息內容。發(fā)出的內容和接收的內容一樣,符合時間情況。實驗三實驗報告【實驗目的】:掌握磁盤的工作原理和操作系統(tǒng)進行文件管理的原理【實驗原理】:硬盤的MBR:MBR(MainBootRecord),按其字面上的理解即為主引導記錄區(qū),位于整個硬盤的0磁道0柱面1扇區(qū)。在總共512字節(jié)的主引導扇區(qū)中,MBR只占用了其中的446個字節(jié)(偏移0000--偏移01BD),另外的64個字節(jié)(偏移01BE--偏移01FD)交給了DPT(DiskPartitionTable硬盤分區(qū)表),最后兩個字節(jié)”55,AA"(偏移01FE-偏移01FF)是分區(qū)的結束標志。這個整體構成了硬盤的主引導扇區(qū)。大致的結構如圖所示:TOC\o"1-5"\h\z0000| II II I| Main.BootRecord |I II II 主引導記錄〔44日字節(jié)) |01BD | |01BE | |I I01CD | 分區(qū)信息1〔16字節(jié)) |DICE | |I I01DD | 分區(qū)信息沮1日字節(jié)) |01DE | |I I01ED | 分區(qū)信息3〔1日字節(jié)) |01EE | |I I硬盤依據(jù)分區(qū)表中的信息酗盤劃分為最多四個分區(qū)(對于擴展分區(qū),可進一步劃分為多個邏輯分區(qū))"]U盤采用類似的方法劃分分區(qū)。每個分區(qū)或軟盤上可建立獨立的文件系統(tǒng)。下圖是FAT文件系統(tǒng)空間分布結構。| | 引導扇區(qū)1*1FAT1111FA:T2111i根目錄區(qū)文件數(shù)據(jù)區(qū)【實驗內容】:在掌握磁盤的工作原理和操作系統(tǒng)進行文件管理原理的基礎上,自行設計實現(xiàn)在磁盤上建立文件系統(tǒng)的軟件,該軟件應該具有與Format類似的功能,至少支持一種文件系統(tǒng)格式,如FAT、NTFS或EXT2,至少能夠對一種媒體進行格式化,如軟盤,U盤或硬盤(不得在實驗室的機器上進行硬盤格式化的實驗)等。不能直接調用操作系統(tǒng)提供的格式化工具或類似SHFormatDrive()的高層系統(tǒng)函數(shù)實現(xiàn)該軟件。在DOS環(huán)境可使用biosdisk()函數(shù)完成底層盤操作,在Windows環(huán)境可使用WriteFile(涵數(shù)完成底層盤操作,在Linux環(huán)境上可參考format的源代碼。比較自己設計實現(xiàn)的軟件與FORMAT,分析存在什么異同?!緦嶒炓蟆棵總€同學必須獨立完成本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含背景知識介紹,設計方案,預計的實驗結果,關鍵代碼的分析,調試記錄,實際的實驗結果,實驗結果分析等內容。背景知識介紹一個分區(qū)或磁盤能作為文件系統(tǒng)使用前,需要初始化,并將記錄數(shù)據(jù)結構寫到磁盤上。這個過程就叫建立文件系統(tǒng)。大部分linux文件系統(tǒng)種類具有類似的通用結構。其中心概念是超級塊superblock,i節(jié)點inode,數(shù)據(jù)塊datablock,目錄塊directoryblock,和間接塊indirectionblock。超級塊包括文件系統(tǒng)的總體信息。 i節(jié)點包括除了名字外的一個文件的所有信息,名字與i節(jié)點數(shù)目一起存在目錄中,目錄條目包括文件名和文件的i節(jié)點數(shù)目。i節(jié)點包括幾個數(shù)據(jù)塊的數(shù)目,用于存儲文件的數(shù)據(jù)。i節(jié)點中只有少量數(shù)據(jù)塊數(shù)的空間,如果需要更多,會動態(tài)分配指向數(shù)據(jù)塊的指針空間。這些動態(tài)分配的塊是間接塊;為了找到數(shù)據(jù)塊,這名字指出它必須先找到間接塊的號碼。Linux文件系統(tǒng)通常允許在文件中產生孔(hole),意思是文件系統(tǒng)假裝文件中有一個特殊的位置只有0字節(jié),但沒有為這文件的這個位置保留實際的磁盤空間。這對小的二進制文件經(jīng)常發(fā)生,Linux共享庫、一些數(shù)據(jù)庫和其他一些特殊情況。設計方案1、 用一個文件(3)模擬一個物理硬盤,通過對該文件格式化操作,模擬linux文件系統(tǒng)中的文件操作。2、 將文件劃分為四個分區(qū)預計的實驗結果文件會被格式化,原先文件里的內容都會刪除,創(chuàng)建新的文件系統(tǒng)。關鍵代碼的分析1、 i節(jié)點結構structinode(structinode*i_forw;structinode*i_back;chari_flag;unsignedinti_ino;//磁盤i節(jié)點標號unsignedinti_count;//弓I用計數(shù)unsignedshortdi_number;//關聯(lián)文件數(shù)unsignedshortdi_mode;//存取權限unsignedshortdi_uid;//磁盤i節(jié)點用戶idunsignedshortdi_gid;//磁盤i節(jié)點住idunsignedintdi_size;//大小unsignedintdi_addr[NADDR];//物理塊號};2、 目錄項結構structdirect(chard_name[DIRSIZ];//目錄名unsignedintd_ino;//目錄號};3、 超級塊structfilsys(unsignedshorts_isize;//i節(jié)點塊塊數(shù)unsignedlongs_fsize;//數(shù)據(jù)塊塊數(shù)unsignedints_nfree;//空閑塊塊數(shù)unsignedshorts_pfree;//空閑塊指針unsignedints_free[NICFREE];//空閑塊堆棧unsignedints_ninode;//空閑i節(jié)點數(shù)unsignedshorts_pinode;//空閑i節(jié)點指針unsignedints_inode[NICINOD];//空閑i節(jié)點數(shù)組unsignedints_rinode;//超級塊修改標志chars_fmod;};4、 函數(shù)說明ifree:釋放i節(jié)點區(qū)函數(shù)bfree:磁盤塊釋放函數(shù)iget:i節(jié)點內容獲取函數(shù)iput:i節(jié)點內容釋放函數(shù)format:格式化函數(shù)調試記錄實際的實驗結果fzu@fzu-desktop:~/OS$gcc-w-oformatformat.cfzu@fzu-desktop:~/OS$./format請輸入文件的位置/home/fzu/OS/3formatsuccussfzu@fzu-desktop:~/OS$fzu@fzu-desktop:~/OS$vim3在文件3中輸入一些內容,運行格式化程序后,文件不再是原來的內容和格式,想要雙擊打開,但是顯示無法打開次文件。

文件(日融(日查看(Y)終端①幫助曲歐典rtAA(aA(a^^AA(aA(a^GrtAA(aA(aAFAAA(aA(a2A(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(a'但人H'BT”?????'亍亍礦①礦①①①足禪禪***"強?????d??*??? 足?????????rtS??"$??YiiF(????i??E???K?p人H'(r(r(r笆h???e???-b禪??h???矽m???????-T???¥TF*?????p他'但'他■爬'他■爬■爬■爬外酒'但Hp??p???室掣魚趨.N=?X???q??yy'他■爬■爬'P???博???'(rb(r<r(r<r(r<rbbb<r<rb<r(r??x???%?ad^hr????fwa禪禪^????.N=?(????????r????????'D'Ht?????'愈'足飛^虞???勺足'足'包飛^愈'也X???'四爬'笆'笆'笆'強'笆'笆足丹足丹里丹強'強'笆'笆'笆'笆足丹足丹里丹吊'強'強'笆'笆'笆'笆足丹足丹里外笆'強'笆'笆'笆'笆足^(aA(aA(aA(aAtaA(aAtaA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aAtaA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aAtaA(aA(aA(aA(aA(aA(aA(aA(aAtaA(aAtaA(aA強'強'強'愈'足'足-足-足-足-足-強-強'強'強'愈'愈'足-足-足-足-足-足-強'強'強'強'愈'足'足-足-足-足-足-強-強'強'強'愈'愈'足-足-足人強外愈外觸'強'用k足-足-足-用外強外強外強'愈'相'用呂用呂足k足-足-用-強外強外強外強'強'用k超-足-足-用外強外足外強'強'用'用呂足外?'強-強'?'?'但-但-@-但-但-巧-強-強-強-?'?'(^但外但巧-強-強-強巧-強-強-強-?'?'(^但外但A(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aAi!aA(aA(aA(aA(aA(aA足'強'強'愈'足'足-足-足-足-足-強-強'強'強'愈'愈'足-足-足-足-足-里-強'強'強'強'愈'足'足-足-足-足-足-強-強'強'強'愈'愈'足-足-足A(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(art(a^(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(a八強'強'強足-足-足-足-足-強'強'強'強'里'足'足-足-里-足-定-強-強'強'強'里'里'足-足-足-足足-強'強'足'強'里'足'足外足外(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(a八電'他'但但'但巧'電'強'但'?'他'他'但'電-強'強'強電'但'但電'電'?'色但'但人(a^(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(aA(a八強'愈

溫馨提示

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

評論

0/150

提交評論