操作系統(tǒng)課程設(shè)計(jì)(設(shè)備管理)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  操作系統(tǒng)課程設(shè)計(jì)(設(shè)備管理)</p><p><b>  目 錄</b></p><p><b>  一 引言1</b></p><p>  1.1課程設(shè)計(jì)題目1</p><p>  1.2課程設(shè)計(jì)的目的1</p><p><b>  

2、1.3小組人數(shù)1</b></p><p><b>  1.4編程語言1</b></p><p>  1.5課程設(shè)計(jì)內(nèi)容1</p><p>  1.6界面設(shè)計(jì)如圖1</p><p>  二 課程設(shè)計(jì)任務(wù)及要求2</p><p><b>  2.1設(shè)計(jì)任務(wù)2</

3、b></p><p><b>  2.2設(shè)計(jì)要求2</b></p><p>  三 算法及數(shù)據(jù)結(jié)構(gòu)2</p><p>  3.1算法的總體思想(流程)2</p><p>  3.2 Equipment模塊3</p><p>  3.2.1 功能3</p><p&

4、gt;  3.2.2 數(shù)據(jù)結(jié)構(gòu)3</p><p>  3.3 cpu模塊4</p><p>  3.3.1 功能4</p><p>  3.3.2 數(shù)據(jù)結(jié)構(gòu)4</p><p>  3.3.3 算法4</p><p>  3.4 form1模塊4</p><p>  3.4.1 功能

5、4</p><p>  3.4.2 算法5</p><p>  四 程序設(shè)計(jì)與實(shí)現(xiàn)5</p><p>  4.1 程序流程圖5</p><p>  4.2 基本思想6</p><p>  4.3 定義的公共變量或數(shù)據(jù)結(jié)構(gòu)7</p><p>  4.4 實(shí)驗(yàn)部分代碼7</p>

6、;<p>  4.5 運(yùn)行截圖12</p><p>  4.6 使用說明15</p><p><b>  五 總結(jié)15</b></p><p><b>  六 參考文獻(xiàn)15</b></p><p><b>  一 引言</b></p><

7、;p><b>  1.1課程設(shè)計(jì)題目</b></p><p>  實(shí)現(xiàn)一個(gè)模擬操作系統(tǒng)。</p><p>  1.2課程設(shè)計(jì)的目的</p><p>  通過模擬操作系統(tǒng)原理的實(shí)現(xiàn),加深對(duì)操作系統(tǒng)工作原理理解,進(jìn)一步了解操作系統(tǒng)的實(shí)現(xiàn)方法,并可練習(xí)合作完成系統(tǒng)的團(tuán)隊(duì)精神和提高程序設(shè)計(jì)能力。</p><p><b

8、>  1.3小組人數(shù)</b></p><p>  建議3~4人一組共同完成模擬系統(tǒng)的實(shí)現(xiàn)。</p><p><b>  1.4編程語言</b></p><p>  建議使用VC、VB、C#、Java等Windows環(huán)境下的程序設(shè)計(jì)語言,以借助這些語言環(huán)境來模擬硬件的一些并行工作。</p><p><

9、;b>  1.5課程設(shè)計(jì)內(nèi)容</b></p><p>  模擬采用多道程序設(shè)計(jì)方法的單用戶操作系統(tǒng),該操作系統(tǒng)包括進(jìn)程管理、存儲(chǔ)管理、設(shè)備管理、文件管理和用戶接口四部分。</p><p><b>  1.6界面設(shè)計(jì)如圖</b></p><p><b>  圖1.1</b></p><p

10、>  二 課程設(shè)計(jì)任務(wù)及要求</p><p><b>  2.1設(shè)計(jì)任務(wù)</b></p><p>  設(shè)計(jì)一個(gè)設(shè)備管理分配程序,按先來先服務(wù)的算法,對(duì)設(shè)備進(jìn)行分配。</p><p><b>  2.2設(shè)計(jì)要求</b></p><p>  設(shè)備管理主要包括設(shè)備的分配和回收。</p>

11、<p>  (1)模擬系統(tǒng)中有A、B、C三種獨(dú)占型設(shè)備,A設(shè)備3個(gè),B設(shè)備2個(gè),C設(shè)備1個(gè)。</p><p>  (2)因?yàn)槟M系統(tǒng)比較小,因此只要設(shè)備表設(shè)計(jì)合理即可。</p><p>  (3)采用先來先服務(wù)分配策略,采用設(shè)備的安全分配方式。</p><p><b>  (4)屏幕顯示</b></p><p&g

12、t;  每個(gè)設(shè)備是否被使用,哪個(gè)進(jìn)程在使用該設(shè)備,哪些進(jìn)程在等待使用該設(shè)備。</p><p><b>  三 算法及數(shù)據(jù)結(jié)構(gòu)</b></p><p>  3.1算法的總體思想(流程)</p><p>  設(shè)備管理的功能是按照設(shè)備的類型和系統(tǒng)采用的分配策略,為請(qǐng)求I/O進(jìn)程分配一條傳輸信息的完整通路。合理的控制I/O的控制過程,可最大限度的實(shí)現(xiàn)C

13、PU與設(shè)備、設(shè)備與設(shè)備之間的并行工作。</p><p>  1.監(jiān)視所有設(shè)備。為了能對(duì)設(shè)備實(shí)施有效的分配和控制,系統(tǒng)能獲取設(shè)備的狀態(tài)。設(shè)備狀態(tài)保存在設(shè)備控制表(DeviceTable)中,并動(dòng)態(tài)的記錄狀態(tài)的變化及有關(guān)信息。</p><p>  2.制定分配策略。按先來先服務(wù)的算法,進(jìn)行設(shè)備分配。</p><p>  3.設(shè)備的分配。把設(shè)備分配給進(jìn)程。</p&g

14、t;<p>  4.設(shè)備回收。當(dāng)進(jìn)程運(yùn)行完畢后,要釋放設(shè)備,則系統(tǒng)必須回收,一邊其他進(jìn)程使用。</p><p><b>  圖3.1</b></p><p>  3.2 Equipment模塊</p><p><b>  3.2.1 功能</b></p><p>  記錄設(shè)備的狀態(tài)及相

15、關(guān)信息</p><p><b>  檢查設(shè)備是否被調(diào)用</b></p><p><b>  對(duì)設(shè)備進(jìn)行分配</b></p><p>  進(jìn)程結(jié)束對(duì)設(shè)備進(jìn)行回收</p><p>  3.2.2 數(shù)據(jù)結(jié)構(gòu)</p><p>  一個(gè)DeviceTable類、一個(gè)DeviceTabl

16、e函數(shù)。</p><p>  DeviceTable是設(shè)備分配表,說明設(shè)備的分配狀況,是否被占用。</p><p>  Device類說明了設(shè)備是如何使用的。每個(gè)設(shè)備是否被使用,哪個(gè)進(jìn)程在使用該設(shè)備,哪些進(jìn)程在等待使用該設(shè)備。</p><p><b>  3.3 cpu模塊</b></p><p><b>  

17、3.3.1 功能</b></p><p>  進(jìn)程對(duì)設(shè)備的調(diào)用,當(dāng)進(jìn)程使用設(shè)備時(shí),檢查設(shè)備是否空閑。如果空閑,則調(diào)用該設(shè)備;如果設(shè)備正被使用,則將該進(jìn)程阻塞到該設(shè)備的阻塞隊(duì)列中,等到設(shè)備空閑時(shí),再被喚醒,調(diào)用設(shè)備。</p><p>  3.3.2 數(shù)據(jù)結(jié)構(gòu)</p><p>  一個(gè)設(shè)備的枚舉類型DeviceType,一個(gè)cpu函數(shù)。</p>

18、<p>  Cpu函數(shù)中調(diào)用Equipment模塊中的函數(shù)對(duì)設(shè)備進(jìn)行檢測(cè)。如果設(shè)備空閑,就調(diào)用該設(shè)備;如果設(shè)備真在被使用,則該進(jìn)程被阻塞到該設(shè)備的阻塞隊(duì)列中。</p><p><b>  3.3.3 算法</b></p><p>  通過調(diào)用Equipment模塊中的函數(shù)對(duì)設(shè)背進(jìn)行檢測(cè):如果設(shè)備空閑,則使用該設(shè)備;如果設(shè)備正在工作,則進(jìn)程被阻塞。</

19、p><p>  3.4 form1模塊</p><p><b>  3.4.1 功能</b></p><p><b>  界面管理</b></p><p><b>  圖3-2</b></p><p>  啟動(dòng)進(jìn)程,如果要使用設(shè)備,按先來先服務(wù)的算法調(diào)用設(shè)備

20、。此模塊中有一個(gè)設(shè)備調(diào)用函數(shù)public int Allocate(DeviceType type),根據(jù)設(shè)備的物理名調(diào)用設(shè)備,并將信息顯示顯示到界面中。</p><p><b>  3.4.2 算法</b></p><p>  先來先服務(wù)(FCFS, First Come First Service)分配算法:</p><p>  每一設(shè)備有

21、一隊(duì)列管理,當(dāng)多個(gè)作業(yè)或任務(wù)對(duì)同一設(shè)備提出I/O請(qǐng)求時(shí),該算法把請(qǐng)求的先后次序排成一個(gè)等待該設(shè)備的隊(duì)列,設(shè)備分配程序把設(shè)備分配給隊(duì)列中的第一各作業(yè)。</p><p><b>  四 程序設(shè)計(jì)與實(shí)現(xiàn)</b></p><p><b>  4.1 程序流程圖</b></p><p><b>  圖4-1</b&g

22、t;</p><p><b>  4.2 基本思想</b></p><p>  進(jìn)程調(diào)用設(shè)備。先調(diào)用A類設(shè)備, A類設(shè)備一共有三個(gè),如果有空閑的設(shè)備,則進(jìn)程就可調(diào)用;否則將進(jìn)程阻塞到設(shè)備A的阻塞隊(duì)列中,等待設(shè)備,等到A類設(shè)備有空閑設(shè)備時(shí),就喚醒該進(jìn)程,在斷點(diǎn)處繼續(xù)進(jìn)行程序。再調(diào)用B類設(shè)備, B類設(shè)備一共有兩個(gè),如果有空閑的設(shè)備,則進(jìn)程就可調(diào)用;否則將進(jìn)程阻塞到設(shè)備B的

23、阻塞隊(duì)列中,等待設(shè)備,等到B類設(shè)備有空閑設(shè)備時(shí),就喚醒該進(jìn)程,在斷點(diǎn)處繼續(xù)進(jìn)行程序。最后調(diào)用C類設(shè)備, C類設(shè)備只有一個(gè),C設(shè)備是臨界資源,如果C設(shè)備空閑,則進(jìn)程就可調(diào)用;否則將進(jìn)程阻塞到設(shè)備C的阻塞隊(duì)列中,等待設(shè)備,等到C設(shè)備空閑,就喚醒該進(jìn)程,在斷點(diǎn)處繼續(xù)進(jìn)行程序。</p><p>  4.3 定義的公共變量或數(shù)據(jù)結(jié)構(gòu)</p><p>  Anum,Bnum,Cnum分別表示設(shè)備A,B

24、,C空閑數(shù)目</p><p>  public enum DeviceType 枚舉型的數(shù)據(jù)類型 列舉出三種設(shè)備</p><p>  public struct DeviceTable 定義一個(gè)設(shè)備表的結(jié)構(gòu)體</p><p>  public class Device 設(shè)備類</p><p>  public bool J

25、udgeDevice(DeviceType type) 檢查類型為type的設(shè)備是否可用</p><p>  public int Allocate(DeviceType type) 分配設(shè)備,返回第幾個(gè)設(shè)備被占用</p><p>  public void DeAllocate(DeviceType type, int a) 回收設(shè)備</p><p>  4.4

26、實(shí)驗(yàn)部分代碼</p><p>  namespace WindowsApplication2</p><p>  { public partial class Form1 : Form</p><p>  { public static int Anum = 3, Bnum = 2, Cnum = 1;</p><p>  public

27、enum DeviceType</p><p><b>  { A,</b></p><p><b>  B,</b></p><p><b>  C,</b></p><p><b>  }</b></p><p>  publ

28、ic struct DeviceTable</p><p>  { public DeviceType deviceType;</p><p>  public int total;</p><p>  public int[] useState; //0——空閑,1——占用</p><p>  public DeviceTab

29、le(DeviceType type, int total) //定義一個(gè)構(gòu)造函數(shù)</p><p>  { this.total = total;</p><p>  deviceType = type;</p><p>  useState = new int[total];</p><p>  for (int i = 0; i

30、 < total; i++) //初始化每個(gè)設(shè)備</p><p>  { useState[i] = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></

31、p><p>  public class Device</p><p>  { private DeviceTable[] table = new DeviceTable[3]; //三種設(shè)備</p><p>  private static Device device = new Device();</p><p>  public

32、 Device()</p><p>  { InitDevice();//初始化設(shè)備</p><p><b>  }</b></p><p>  private void InitDevice() //設(shè)備初始化,A設(shè)備3個(gè),B設(shè)備2個(gè),C設(shè)備1個(gè)</p><p>  {

33、 table[0] = new DeviceTable(DeviceType.A, 3);</p><p>  table[1] = new DeviceTable(DeviceType.B, 2);</p><p>  table[2] = new DeviceTable(DeviceType.C, 1);</p><p><b>  }</b&g

34、t;</p><p><b>  //</b></p><p>  /////////////////檢查類型為type的設(shè)備是否可用//////////////////////</p><p><b>  //</b></p><p>  public bool JudgeDevice(Devic

35、eType type)</p><p>  { bool str = false;</p><p>  switch (type)</p><p>  { case DeviceType.A:</p><p>  { if (table[0].total > 0)</p><p>  { str

36、 = true;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  case DeviceType.B:</p><p>  { if (table[

37、1].total > 0)</p><p>  { str = true;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  case Devi

38、ceType.C:</p><p>  { if (table[2].total > 0)</p><p>  { str = true;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>

39、  }</b></p><p><b>  }</b></p><p>  return str;</p><p><b>  }</b></p><p><b>  //</b></p><p>  ////////////分配設(shè)備,返回第

40、幾個(gè)設(shè)備被占用////////////////////////</p><p><b>  //</b></p><p>  public int Allocate(DeviceType type)</p><p>  { int k = 0;</p><p>  switch (type)

41、//使用switch語句選擇分配設(shè)備不同函數(shù)</p><p>  { case DeviceType.A:</p><p>  { table[0].total--;</p><p>  for (int i = 0; i < 3; i++)</p><p>  { if (table[0].useState[i] == 0

42、)</p><p>  { table[0].useState[i] = 1;</p><p><b>  k = i;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b&g

43、t;  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  case DeviceType.B:</p><p>  { table[1].total--;</p><p>  for (i

44、nt i = 0; i < 2; i++)</p><p><b>  {</b></p><p>  if (table[0].useState[i] == 0)</p><p>  { table[0].useState[i] = 1;</p><p><b>  k = i;</b>

45、;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }<

46、/b></p><p>  case DeviceType.C:</p><p>  { table[2].total--;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</

47、b></p><p><b>  return k;</b></p><p><b>  }</b></p><p><b>  //</b></p><p>  //////////////////////////回收設(shè)備////////////////////////

48、////</p><p><b>  //</b></p><p>  public void DeAllocate(DeviceType type, int a)</p><p>  { switch (type)</p><p>  { case DeviceType.A:</p><p

49、>  { table[0].total++;</p><p>  table[0].useState[a] = 0;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case DeviceType.B:</p>&

50、lt;p>  { table[1].total++;</p><p>  table[1].useState[a] = 0;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case DeviceType.C:</p>

51、;<p>  { table[2].total++;</p><p>  table[2].useState[a] = 0;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b><

52、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  public Form1()</p><p>  { InitializeComponent();</p><p><b>  }</b></p&g

53、t;<p><b>  //</b></p><p>  ///////////////////// 分配設(shè)備時(shí)的顏色變化////////////////////</p><p><b>  //</b></p><p>  private void button7_Click(object sender,

54、EventArgs e)</p><p>  { Anum--;</p><p>  string result1 = "";</p><p>  Device d1 = new Device();</p><p>  int m1 = d1.Allocate(DeviceType.A);</p><

55、;p>  result1 = Convert.ToString(m1);</p><p>  switch (Anum)</p><p>  { case 2:</p><p>  this.button1.BackColor = Color.Red;</p><p><b>  break;</b></

56、p><p><b>  case 1:</b></p><p>  this.button2.BackColor = Color.Red;</p><p><b>  break;</b></p><p><b>  case 0:</b></p><p>

57、  this.button3.BackColor = Color.Red;</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  MessageBox.Show("無設(shè)備可分配");</p><p><b

58、>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  private void button8_Click(object sender, EventArgs e)</p><p>  { Bnum--;&

59、lt;/p><p>  string result2 = "";</p><p>  Device d2 = new Device();</p><p>  int m2 = d2.Allocate(DeviceType.B);</p><p>  switch (Bnum)</p><p>  {

60、 case 1:</p><p>  this.button4.BackColor = Color.Red;</p><p><b>  break;</b></p><p><b>  case 0:</b></p><p>  this.button5.BackColor = Color.Red

61、;</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  MessageBox.Show("無設(shè)備可分配");</p><p><b>  break;</b></p>&l

62、t;p><b>  }</b></p><p>  result2 = Convert.ToString(m2);</p><p><b>  }</b></p><p>  private void button9_Click(object sender, EventArgs e)</p><p

63、>  { Cnum--;</p><p>  string result3 = "";</p><p>  Device d1 = new Device();</p><p>  int m3 = d1.Allocate(DeviceType.C);</p><p>  if (Cnum == 0)</p&

64、gt;<p>  { this.button6.BackColor = Color.Red;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { MessageBox.Show("無設(shè)備可分配");</p>&

65、lt;p><b>  }</b></p><p>  result3 = Convert.ToString(m3);</p><p><b>  }</b></p><p><b> ?。?lt;/b></p><p><b>  }</b></p&

66、gt;<p><b>  4.5 運(yùn)行截圖</b></p><p><b>  屏幕顯示</b></p><p>  主存使用情況示意圖,哪些主存塊已分配,哪些主存塊未分配,以不同的顏色表示,灰色表示設(shè)備空閑,紅色表示設(shè)備已分配</p><p>  初始化為所有設(shè)備都是空閑狀態(tài),如下圖所示</p>

67、<p><b>  圖4-2</b></p><p>  分配設(shè)備A正常情況下,如圖所示:</p><p><b>  圖4-3</b></p><p>  分配設(shè)備A非正常情況下,例如需要設(shè)備數(shù)超過實(shí)際有的設(shè)備數(shù)時(shí),如圖所示:</p><p><b>  圖4-4</

68、b></p><p>  3個(gè)設(shè)備A都被分配出去,回收設(shè)備A時(shí)正常情況如下圖所示:</p><p><b>  圖4-5</b></p><p><b>  4.6 使用說明</b></p><p>  設(shè)備管理主要包括設(shè)備的分配和回收。</p><p><b&g

69、t;  1. 設(shè)備的模擬</b></p><p>  模擬系統(tǒng)中有A、B、C三種獨(dú)占型設(shè)備,A設(shè)備3個(gè),B設(shè)備2個(gè),C設(shè)備1個(gè)。</p><p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p>  因?yàn)槟M系統(tǒng)比較小,因此只要設(shè)備表設(shè)計(jì)合理既可。</p><p><b>  設(shè)備分配</b>

70、;</p><p>  采用先來先服務(wù)策略。</p><p><b>  設(shè)備回收</b></p><p>  回收設(shè)備后,要注意喚醒等待設(shè)備的進(jìn)程。</p><p><b>  屏幕顯示</b></p><p>  屏幕顯示要求包括:每個(gè)設(shè)備是否被使用,哪個(gè)進(jìn)程在使用該設(shè)備

71、,哪些進(jìn)程在等待使用該設(shè)備。其中灰色表示設(shè)備空閑,紅色表示設(shè)備已被分配。</p><p><b>  五 總結(jié)</b></p><p>  設(shè)備管理主要監(jiān)視所有設(shè)備的狀態(tài),制定分配策略,完成設(shè)備的分配和回收,合理的控制I/O的控制過程,最大限度的實(shí)現(xiàn)CPU與設(shè)備、設(shè)備與設(shè)備之間的把并行工作。</p><p>  通過對(duì)這次操作系統(tǒng)課程設(shè)計(jì)的親自

72、參與和操作,使我深刻體會(huì)到了:只要你想做只要你想學(xué)沒有弄不懂得事情,工程里面也不能不在乎細(xì)節(jié),等等。感覺很受益匪淺。懂得了操作系統(tǒng)包括的四部分內(nèi)容:文件管理和用戶接口、存儲(chǔ)管理、設(shè)備管理、進(jìn)程管理之間的內(nèi)在聯(lián)系。加深了我對(duì)這門課程的理解。鍛煉了自己在考慮全局也不是細(xì)節(jié)的能力。通過這次實(shí)驗(yàn),再一次熟悉并深入掌握了程序設(shè)計(jì)語言和界面設(shè)計(jì)。同時(shí),我也深深體會(huì)到了團(tuán)隊(duì)的重要性,如果沒有同組人的互相鼓勵(lì)和督促我跟本不能很快的完成任務(wù)。一滴水的力量

73、是有限的,但匯聚成溪流將是美麗的。雖然我們每個(gè)人的力量都是有限的,但是激烈的討論、相互的鼓勵(lì)使我們?cè)趯?shí)踐中成長。感謝和我一起面對(duì)的同伴們,因?yàn)橛心銈兾也抛兊们趭^。更感謝給予我們諄諄教導(dǎo)的老師,在我們猶豫困惑時(shí)給予我們指導(dǎo),謝謝您!</p><p><b>  六 參考文獻(xiàn)</b></p><p>  劉振鵬、王煜、張明 《操作系統(tǒng)》(第三版)北京:中國鐵道出版社&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論