2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  操作系統(tǒng)安全</b></p><p><b>  課程設計報告</b></p><p>  學生姓名 </p><p>  指導教師 <

2、/p><p>  學 院 信息科學與工程學院 </p><p>  專業(yè)班級 </p><p>  完成時間 2015年12月19日 </p><p><b>  目 錄

3、</b></p><p><b>  第一章 概述2</b></p><p>  第二章 需求分析3</p><p>  第三章 總體設計5</p><p>  第四章 詳細設計6</p><p><b>  一. 界面設計6</b></p>

4、<p>  二. 獲取正在運行的進程及其信息8</p><p><b>  三. 結束進程9</b></p><p>  四. 獲取其他信息10</p><p>  五. 繪制圖表11</p><p>  第五章 調(diào)試分析15</p><p>  第六章 使用說明16&l

5、t;/p><p>  第七章 測試結果17</p><p>  第八章 課程設計總結21</p><p>  第九章 參考文獻22</p><p>  操作系統(tǒng)安全課程設計</p><p><b>  概述</b></p><p>  操作系統(tǒng)安全是整個計算機系統(tǒng)安全的重

6、要基礎,主要針對操作系統(tǒng)層面的安全進行剖析,是上層運行的重要保證。與計算機原理、編譯原理、匯編語言、計算機網(wǎng)絡、程序設計等專業(yè)課程關系十分密切。本課程設計的目的綜合應用學生所學知識,建立安全系統(tǒng)的概念,理解和鞏固操作系統(tǒng)基本理論、原理和方法,掌握安全操作系統(tǒng)開發(fā)的基本技能。</p><p>  任務管理器是在Windows系統(tǒng)中管理應用程序和進程的工具,通常由Windows操作系統(tǒng)自帶,也有提供增強功能的第三方軟

7、件。通過任務管理器用戶可以方便的查看當前運行的程序、進程、用戶、網(wǎng)絡連接以及系統(tǒng)對內(nèi)存和CPU的資源占用,并可以強制結束某些程序和進程,此外還可以監(jiān)控系統(tǒng)資源的使用狀況。</p><p>  Windows 任務管理器首次出現(xiàn)是在1998年美國微軟公司發(fā)行的Windows98操作系統(tǒng)中,此后微軟的各個版本的Windows操作系統(tǒng)都集成了任務管理器。任務管理器并不是Windows系統(tǒng)的專利,它廣泛運用于各種操作系統(tǒng)

8、中,在蘋果公司的Mac OS 操作系統(tǒng)中有類似的活動監(jiān)視器(Activity Monitor),在基于Linux的ubuntu操作系統(tǒng)有相類似功能的系統(tǒng)監(jiān)視器。 Windows任務管理器提供了有關計算機性能的信息,并顯示了計算機上所運行的程序和進程的詳細信息;如果連接到網(wǎng)絡,那么還可以查看網(wǎng)絡狀態(tài)并迅速了解網(wǎng)絡是如何工作的。它的用戶界面提供了文件、選項、查看、窗口、關機、幫助等六大菜單項,其下還有應用程序、進程、性能、聯(lián)網(wǎng)、用戶等五個

9、標簽頁。</p><p>  課題設計就是模擬Windows任務管理器,開發(fā)的一個Windows進程管理軟件。主要設計的是一個基于窗體的C#程序,在主對話框上面放置了一個標簽控件,并創(chuàng)建了應用程序、進程和性能三個頁面,標簽控件用于選擇并顯示頁面。三個頁面分別用于顯示當前運行的窗口程序、進程及進程模塊、系統(tǒng)資源使用情況。程序還實現(xiàn)了結束任務、等對進程管理的基本功能。在的設計過程中,通過調(diào)用Windows API函數(shù)

10、而獲得任務、進程、線程模塊,以及系統(tǒng)資源使用情況等信息。最后在Windows10系統(tǒng)上進行測試,實現(xiàn)了進程管理的基本功能。</p><p><b>  需求分析</b></p><p>  設計一個Windows或Linux下的進程管理與監(jiān)控程序,要求該程序完成以下功能:</p><p>  可獲取當前正在運行的所有進程,包括進程PID、進程名

11、稱、CPU使用情況、當前用戶名、內(nèi)存占用量等;</p><p>  能進一步獲取各進程的所有線程情況;</p><p>  能通過命令終止某個進程的執(zhí)行,終止時能將其子孫進程全部終止;</p><p><b>  要求界面友好。</b></p><p>  關于Windows任務管理器:</p><p

12、>  任務管理器的用戶界面提供了文件、選項、查看、窗口、關機、幫助等六大菜單項,例如“關機”菜單下可以完成待機、休眠、關閉、重新啟動、注銷、切換等操作,其下還有應用程序、進程、性能、聯(lián)網(wǎng)、用戶等五個標簽頁,窗口底部則是狀態(tài)欄,從這里可以查看到當前系統(tǒng)的進程數(shù)、CPU使用比率、更改的內(nèi)存<容量等數(shù)據(jù),默認設置下系統(tǒng)每隔兩秒鐘對數(shù)據(jù)進行1次自動更新,當然你也可以點擊“查看→更新速度”菜單重新設置。</p><

13、p><b>  1. 應用程序</b></p><p>  這里顯示了所有當前正在運行的應用程序,不過它只會顯示當前已打開窗口的應用程序,而QQ、MSN Messenger等最小化至系統(tǒng)托盤區(qū)的應用程序則并不會顯示出來。</p><p>  你可以在這里點擊“結束任務”按鈕直接關閉某個應用程序,如果需要同時結束多個任務,可以按住Ctrl鍵復選;點擊“新任務”按鈕

14、,可以直接打開相應的程序、文件夾、文檔或Internet資源,如果不知道程序的名稱,可以點擊“瀏覽”按鈕進行搜索,其實這個“新任務”的功能看起來有些類似于開始菜單中的運行命令?! ?lt;/p><p><b>  2. 進程</b></p><p>  這里顯示了所有當前正在運行的進程,包括應用程序、后臺服務等,那些隱藏在系統(tǒng)底層深處運行的病毒程序或木馬程序都可以在這里找

15、到,當然前提是你要知道它的名稱。找到需要結束的進程名,然后執(zhí)行右鍵菜單中的“結束進程”命令,就可以強行終止,不過這種方式將丟失未保存的數(shù)據(jù),而且如果結束的是系統(tǒng)服務,則系統(tǒng)的某些功能可能無法正常使用。</p><p>  Windows的任務管理器只能顯示系統(tǒng)中當前進行的進程,而Process Explorer可以樹狀方式顯示出各個進程之間的關系,即某一進程啟動了哪些其他的進程,還可以顯示某個進程所調(diào)用的文件或文

16、件夾,如果某個進程是Windows服務,則可以查看該進程所注冊的所有服務,需要的朋友可以從www.sysinternals.com下載。</p><p><b>  3. 性能</b></p><p>  從任務管理器中我們可以看到計算機性能的動態(tài)概念,例如CPU和各種內(nèi)存的使用情況。</p><p>  CPU使用情況:表明處理器工作時間百分

17、比的圖表,該計數(shù)器是處理器活動的主要指示器,查看該圖表可以知道當前使用的處理時間是多少。</p><p>  CPU使用記錄:顯示處理器的使用程序隨時間的變化情況的圖表,圖表中顯示的采樣情況取決于“查看”菜單中所選擇的“更新速度”設置值,“高”表示每秒2次,“正?!北硎久績擅?次,“低”表示每四秒1次,“暫?!北硎静蛔詣痈?。</p><p>  PF使用情況:正被系統(tǒng)使用的頁面文件的量。

18、</p><p>  頁面文件使用記錄:顯示頁面文件的量隨時間的變化情況的圖表,圖表中顯示的采樣情況取決于“查看”菜單中所選擇的“更新速度”設置值。</p><p>  總數(shù):顯示計算機上正在運行的句柄、線程、進程的總數(shù)。</p><p>  執(zhí)行內(nèi)存:分配給程序和操作系統(tǒng)的內(nèi)存,由于虛擬內(nèi)存的存在,“峰值”可以超過最大物理內(nèi)存,“總數(shù)”值則與“頁面文件使用記錄”圖

19、表中顯示的值相同。</p><p>  物理內(nèi)存:計算機上安裝的總物理內(nèi)存,也稱RAM,“可用”表示可供使用的內(nèi)存容量,“系統(tǒng)緩存”顯示當前用于映射打開文件的頁面的物理內(nèi)存。</p><p>  內(nèi)核內(nèi)存:操作系統(tǒng)內(nèi)核和設備驅動程序所使用的內(nèi)存,“頁面”是可以復制到頁面文件中的內(nèi)存,由此可以釋放物理內(nèi)存;“非分頁”是保留在物理內(nèi)存中的內(nèi)存,不會被復制到頁面文件中。</p>&

20、lt;p><b>  4. 聯(lián)網(wǎng) </b></p><p>  這里顯示了本地計算機所連接的網(wǎng)絡通信量的指示,使用多個網(wǎng)絡連接時,我們可以在這里比較每個連接的通信量,當然只有安裝網(wǎng)卡后才會顯示該選項。</p><p><b>  5. 用戶</b></p><p>  這里顯示了當前已登錄和連接到本機的用戶數(shù)、標識(

21、標識該計算機上的會話的數(shù)字ID)、活動狀態(tài)(正在運行、已斷開)、客戶端名,可以點擊“注銷”按鈕重新登錄,或者通過“斷開”按鈕連接與本機的連接,如果是局域網(wǎng)用戶,還可以向其他用戶發(fā)送消息。</p><p><b>  總體設計</b></p><p>  我決定用java語言完成本次課程設計的題目。</p><p>  設計思路:java可以通過

22、一些命令拿到所需要的信息,比如系統(tǒng)版本名稱、內(nèi)存使用情況、CPU使用情況、進程狀況、線程狀況等等,拿到這些信息以后就可以制作一個簡易的任務管理器了。相對來說,java語言寫界面是比較簡單的,因此任務管理器的界面可以完全仿照Windows自帶任務管理器的界面來完成。</p><p>  下圖為主要的設計方案,java中可以通過如下兩個包來獲取所需的信息,所以這些信息采用get、 set方法獲取后直接打印的方法展示。

23、進程的信息則需要獲取權限,我采用用system函數(shù)調(diào)dos命令的方法來實現(xiàn)。進程的新建、關閉也同樣用dos命令完成。Windows任務管理器由性能、進程、應用程序三大部分組成。其實這三大部分是有機的聯(lián)系在一起的,尤其是性能和進程,性能中除了CPU使用率以外,其余的數(shù)據(jù)都是由進程模塊順便取得的。 Windows的任務管理器通過NtQuerySystemInformation的調(diào)用來獲取各類信息,如CPU使用率,內(nèi)存使用率,句柄總數(shù),線程

24、總數(shù),進程總數(shù)等等。在任務管理器中的幾乎所有信息都是來自該函數(shù)。我的理解中,這兩個包里的函數(shù)和方法都會用到這個函數(shù)。</p><p>  java.lang.management.ManagementFactory</p><p>  com.sun.management.OperatingSystemMXBean</p><p>  在這個任務管理器中,除了應該可

25、以顯示上面提到的信息之外,還要有新建和結束進程、畫出內(nèi)存和CPU使用情況圖的功能。</p><p><b>  詳細設計</b></p><p><b>  界面設計</b></p><p>  預計設計為類似Windows自帶的任務管理器的界面,需要用到java自有包java.awt.*,javax.swing.*。這兩

26、個包中包含了許多制作窗口所需的方法。這里需要用到許多控件來實現(xiàn),如JTabbedPane控件,用于加入選項卡。還需要放置表格用來顯示進程的各項信息。</p><p>  JTabbedPane jtp;</p><p>  JPanel process_tab;</p><p>  JPanel service_tab;</p><p>  

27、JPanel function_tab;</p><p><b>  //顯示進程的表格</b></p><p>  JTable pTable = new JTable();</p><p><b>  //顯示服務的表格</b></p><p>  JTable sTable = new JTa

28、ble();</p><p><b>  //中間面板</b></p><p>  JPanel mainpanel;</p><p>  final Vector pb = new Vector(5);</p><p>  final Vector sb = new Vector(5);</p><

29、p><b>  //進程信息面板</b></p><p>  JLabel process_num;</p><p>  各個面板的各項配置也在界面設計中完成,如選項卡出現(xiàn)的位置、名稱以及顏色等。</p><p><b>  //選項卡布局</b></p><p>  public void

30、setTab() throws Exception{</p><p>  jtp = new JTabbedPane(JTabbedPane.TOP);</p><p>  process_tab = new JPanel();</p><p>  process_tab.setLayout(null);</p><p>  ProcessT

31、ab();</p><p>  service_tab = new JPanel();</p><p>  //service_tab.setLayout(null);</p><p>  ServiceTab();</p><p>  function_tab = new JPanel();</p><p>  fu

32、nction_tab.setLayout(null);</p><p>  FunctionTab();</p><p>  process_tab.setBackground(Color.WHITE);</p><p>  service_tab.setBackground(Color.WHITE);</p><p>  function_

33、tab.setBackground(Color.WHITE);</p><p>  jtp.add("進程 ",process_tab);</p><p>  jtp.add("待定",service_tab);</p><p>  jtp.add("性能 ",function_tab);</p&

34、gt;<p>  mainpanel = new JPanel();</p><p>  mainpanel.setBounds(0, 0, 545, 580);</p><p>  mainpanel.add(jtp);</p><p>  this.getContentPane().add(mainpanel);</p><p

35、>  southPanel();</p><p><b>  }</b></p><p>  接著只要取到各項選項卡所需的信息,將其加入各個選項卡內(nèi)即可,進程選項卡還需添加表格中各個選項,這里用一個字符串數(shù)組來完成。</p><p>  String cname[] = { "映像名稱", "用戶名"

36、;, "優(yōu)先權", "PID", "線程數(shù)" };</p><p>  for (int i = 0; i < 5; i++) pb.add(cname[i]);</p><p>  獲取正在運行的進程及其信息</p><p>  獲得進程及其信息采用通過命令行獲取的方式,在此之前必須先建立一個類

37、(命名為ProcessImformation)來放置取到的信息,所需信息有:進程名稱、用戶名、優(yōu)先權、進程PID、線程數(shù),建立一個函數(shù),再增加該函數(shù)變量的get方法。</p><p>  ProcessImformation(String caption, String csname, String priority,</p><p>  String processId, String

38、threadCount) {</p><p>  this.caption = caption;</p><p>  this.csname = csname;</p><p>  this.priority = priority;</p><p>  this.processId = processId;</p><p&

39、gt;  this.threadCount = threadCount;</p><p><b>  取進程信息的命令:</b></p><p>  String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process get Caption,CSNa

40、me,Priority,ProcessId,ThreadCount";</p><p><b>  // 取進程信息</b></p><p>  readProcess(Runtime.getRuntime().exec(procCmd));</p><p>  String handCmd = System.getenv("

41、;windir")+ "\\system32\\wbem\\wmic.exe process get Name,HandleCount";</p><p><b>  // 取句柄信息</b></p><p>  readHandle(Runtime.getRuntime().exec(handCmd));</p><

42、p>  hand.getOutputStream().close();</p><p>  InputStreamReader ir = new InputStreamReader(hand.getInputStream());</p><p>  LineNumberReader input = new LineNumberReader(ir);</p><p&

43、gt;  String line = input.readLine();</p><p>  int cn = line.indexOf("Name");</p><p>  int ch = line.indexOf("HandleCount");</p><p>  while ((line = input.read

44、Line()) != null) {</p><p>  if (line.length() < cn) continue;</p><p>  int handle = Integer.parseInt(line.substring(ch, cn-1).trim());</p><p>  i += handle;</p><p&g

45、t;<b>  }</b></p><p>  proc.getOutputStream().close();</p><p>  InputStreamReader ir = new InputStreamReader(proc.getInputStream());</p><p>  LineNumberReader input = new

46、 LineNumberReader(ir);</p><p>  String line = input.readLine();</p><p>  int capidx = line.indexOf("Caption");</p><p>  int cmdidx = line.indexOf("CSName");</

47、p><p>  int prioidx = line.indexOf("Priority");</p><p>  int pid = line.indexOf("ProcessId");</p><p>  int tc = line.indexOf("ThreadCount");</p>&l

48、t;p>  while ((line = input.readLine()) != null) {</p><p>  if (line.length() < tc) continue;</p><p>  // 字段出現(xiàn)順序:Caption,CommandLine,Priority,ProcessId,ThreadCount</p><p>  S

49、tring caption = line.substring(capidx, cmdidx - 1).trim();</p><p>  String caname = line.substring(cmdidx, prioidx - 1).trim();</p><p>  String priority = line.substring(prioidx, pid - 1).trim()

50、;</p><p>  String processId = line.substring(pid, tc - 1).trim();</p><p>  String ThreadCount = line.substring(tc, line.length() - 1).trim();</p><p>  proce[i] = new ProcessImformat

51、ion(caption, caname, priority,processId, ThreadCount);</p><p>  //int th = Integer.parseInt(ThreadCount);</p><p>  i = i + 1;</p><p>  //t += th;</p><p><b>  }<

52、;/b></p><p><b>  結束進程</b></p><p>  結束進程同樣通過命令行實現(xiàn),在進程表格中選中某進程后點擊結束進程按鈕,彈出對話框顯示“確定要結束進程(加入進程名稱)嗎?”,點擊“是”后可以結束進程。</p><p><b>  // 結束進程按鈕</b></p><p&

53、gt;  JButton kill = new JButton("結束進程(E)");</p><p>  kill.setBounds(400, 425, 98, 23);</p><p>  kill.addActionListener(this);</p><p>  process_tab.add(kill);</p>&l

54、t;p>  用戶點擊按鈕之后轉到如下函數(shù):</p><p>  public void actionPerformed(ActionEvent args) {</p><p>  if(args.getActionCommand().equals("結束進程(E)")){</p><p>  if (pTable.getSelectedRo

55、w() != -1) {</p><p>  if (pTable.getValueAt(pTable.getSelectedRow(), 0) != null) {</p><p>  // Toolkit.getDefaultToolkit().beep();</p><p>  String pname = pTable.getValueAt(pTable.g

56、etSelectedRow(), 0).toString();</p><p>  pname = pname.replace("\"", "");</p><p>  pname = pname.trim();</p><p>  int n = JOptionPane.showConfirmDialog(this

57、, "確定要結束進程" + pname + "嗎?", "確認對話框", JOptionPane.YES_NO_OPTION);</p><p>  if (n == JOptionPane.YES_OPTION) {</p><p><b>  try {</b></p><p> 

58、 String kill = "wmic process where name=\"" + pname + "\" call terminate";</p><p>  Runtime.getRuntime().exec(kill);</p><p>  } catch (Exception ex) {</p>&l

59、t;p><b>  }</b></p><p>  JOptionPane.showMessageDialog(this, pname + "已結束!", "消息",</p><p>  JOptionPane.WARNING_MESSAGE);</p><p><b>  }</b

60、></p><p><b>  }</b></p><p><b>  } else</b></p><p>  JOptionPane.showMessageDialog(this, "沒有選中項!", "消息",</p><p>  JOptionP

61、ane.WARNING_MESSAGE);</p><p><b>  }</b></p><p><b>  獲取其他信息</b></p><p>  獲得其他信息的方式與獲得進程及其信息的方式相同,在此之前必須先建立一個類(命名為OSInformation)來放置取到的信息,所需信息有:操作系統(tǒng)名稱及版本、總物理內(nèi)存、

62、已使用物理內(nèi)存、剩余物理內(nèi)存、CPU使用情況,建立一個函數(shù),再增加該函數(shù)變量的get、set方法。由于方法與獲得進程及其信息的方法相同,不再贅述。</p><p>  int kb = 1024;</p><p>  OperatingSystemMXBean osmxb =</p><p>  (OperatingSystemMXBean) ManagementF

63、actory.getOperatingSystemMXBean();</p><p><b>  // 操作系統(tǒng)</b></p><p>  String osName = System.getProperty("os.name");</p><p>  String osVersion = System.getProper

64、ty("os.version");</p><p><b>  // 總的物理內(nèi)存</b></p><p>  long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / (kb * kb);</p><p>  // 剩余的物理內(nèi)存</p><

65、p>  long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / (kb * kb);</p><p>  // 已使用的物理內(nèi)存</p><p>  Long usedMemory = </p><p>  (osmxb.getTotalPhysicalMemorySize() -os

66、mxb.getFreePhysicalMemorySize()) / (kb * kb);</p><p>  if (osName.toLowerCase().startsWith("windows")) {</p><p>  this.getProcessForWindows();</p><p><b>  }</b>

67、;</p><p><b>  // 構造返回對象</b></p><p>  OSInformation infoBean = new OSInformation();</p><p>  infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);</p><p&

68、gt;  infoBean.setOsName(osName +" "+osVersion);</p><p>  infoBean.setTotalMemorySize(totalMemorySize);</p><p>  infoBean.setUsedMemory(usedMemory);</p><p>  return infoBea

69、n;</p><p><b>  繪制圖表</b></p><p>  繪制CPU和內(nèi)存使用情況。首先需要建立一個坐標類,由于要繪制兩個圖,所以需要x1、x2、y1、y2四個坐標變量。繪制圖表需要用到時鐘函數(shù),令其可以自動刷新,自動取到所需的信息并且繪圖。每取到新的結果,舊的結果(上一個結果)則向左移動一格。</p><p>  public

70、void updateChart(){</p><p>  //物理內(nèi)存使用記錄中的表格</p><p>  for(int i = 0;i<10;i++){</p><p>  XY xy = new XY();</p><p>  xy.x1 = 0;</p><p>  xy.y1 = (i+1)*13;&

71、lt;/p><p>  xy.x2 = 500;</p><p>  xy.y2 = (i+1)*13;</p><p>  if(!checkEqual(xy,X_memory_record)) X_memory_record.add(xy);</p><p><b>  }</b></p><p&g

72、t;  Y_memory_record.clear();</p><p>  for(int i = 0;i<70;i++){</p><p>  XY xy = new XY();</p><p>  xy.x1 = (i+1)*13-move;</p><p>  xy.y1 = 0;</p><p>  x

73、y.x2 = (i+1)*13-move;</p><p>  xy.y2 = 200;</p><p>  if(!checkEqual(xy,Y_memory_record)) Y_memory_record.add(xy);</p><p><b>  }</b></p><p>  //物理內(nèi)存使用記錄中的數(shù)據(jù)

74、</p><p>  List<XY> temp_memory_record = new ArrayList<XY>();</p><p>  for(int i = 0;i<D_memory_record.size();i++){</p><p>  XY xy = D_memory_record.get(i);</p>

75、<p>  xy.x1 = xy.x1-2;</p><p>  xy.x2 = xy.x2-2;</p><p>  if(!checkEqual(xy,temp_memory_record)) temp_memory_record.add(xy);</p><p><b>  }</b></p><p>

76、;  D_memory_record = temp_memory_record;</p><p>  //物理內(nèi)存使用百分量</p><p>  float used_memory = </p><p>  ((float)monitorInfo.getUsedMemory()/(float)monitorInfo.getTotalMemorySize())*100

77、;</p><p>  float point_memory = 130-(used_memory/100*130);</p><p>  XY xy_memory_record = new XY();</p><p>  xy_memory_record.x1 = 480;</p><p>  xy_memory_record.y1 = (

78、int)point_memory;</p><p>  xy_memory_record.x2 = 480+2;</p><p>  xy_memory_record.y2 = (int)point_memory;</p><p>  if(!checkEqual(xy_memory_record,D_memory_record)){</p><

79、p>  D_memory_record.add(xy_memory_record);</p><p><b>  }</b></p><p>  //CPU使用記錄中的表格</p><p>  for(int i = 0;i<10;i++){</p><p>  XY xy = new XY();</p

80、><p>  xy.x1 = 0;</p><p>  xy.y1 = (i+1)*13;</p><p>  xy.x2 = 500;</p><p>  xy.y2 = (i+1)*13;</p><p>  if(!checkEqual(xy,X_cpu_record)) X_cpu_record.add(xy);

81、</p><p><b>  }</b></p><p>  Y_cpu_record.clear();</p><p>  for(int i = 0;i<70;i++){</p><p>  XY xy = new XY();</p><p>  xy.x1 = (i+1)*13-mov

82、e;</p><p>  xy.y1 = 0;</p><p>  xy.x2 = (i+1)*13-move;</p><p>  xy.y2 = 200;</p><p>  if(!checkEqual(xy,Y_cpu_record)) Y_cpu_record.add(xy);</p><p><b&

83、gt;  }</b></p><p>  //CPU使用記錄中的數(shù)據(jù)</p><p>  List<XY> temp_cpu_record = new ArrayList<XY>();</p><p>  for(int i = 0;i<D_cpu_record.size();i++){</p><p&g

84、t;  XY xy = D_cpu_record.get(i);</p><p>  xy.x1 = xy.x1-2;</p><p>  xy.x2 = xy.x2-2;</p><p>  if(!checkEqual(xy,temp_cpu_record)) temp_cpu_record.add(xy);</p><p><b

85、>  }</b></p><p>  D_cpu_record = temp_cpu_record;</p><p>  //CPU使用百分量</p><p>  float used_cpu = (float)(os.getSystemCpuLoad()*100);</p><p>  float point_cpu =

86、130-(used_cpu/100*130);</p><p>  XY xy_cpu_record = new XY();</p><p>  xy_cpu_record.x1 = 480;</p><p>  xy_cpu_record.y1 = (int)point_cpu;</p><p>  xy_cpu_record.x2 = 4

87、80;</p><p>  xy_cpu_record.y2 = (int)point_cpu;</p><p>  if(!checkEqual(xy_cpu_record,D_cpu_record)) D_cpu_record.add(xy_cpu_record);</p><p>  //CPU兩次數(shù)據(jù)之間的連接線</p><p> 

88、 XY xy_cpu_record_connect = new XY();</p><p>  xy_cpu_record_connect.x1 = temp_cpu_x;</p><p>  xy_cpu_record_connect.y1 = temp_cpu_y;</p><p>  xy_cpu_record_connect.x2 = 480;</p&

89、gt;<p>  xy_cpu_record_connect.y2 = (int)point_cpu;</p><p>  if(!checkEqual(xy_cpu_record_connect,D_cpu_record)){</p><p>  D_cpu_record.add(xy_cpu_record_connect);</p><p><

90、;b>  }</b></p><p>  temp_cpu_x = 480;</p><p>  temp_cpu_y = (int)point_cpu;</p><p><b>  }</b></p><p>  //檢查隊列中是否有重復數(shù)據(jù)</p><p>  public

91、boolean checkEqual(XY check_xy,List<XY> list){</p><p><b>  XY xy;</b></p><p>  for(int i = 0;i<list.size();i++){</p><p>  xy = list.get(i);</p><p>

92、  if((xy.x1 == check_xy.x1)&&(xy.y1 == check_xy.y1)&&(xy.x2 == check_xy.x2)&&(xy.y2 == check_xy.y2)) return true;</p><p><b>  }</b></p><p>  return false;<

93、;/p><p><b>  }</b></p><p>  //輸出隊列中的數(shù)據(jù)</p><p>  public void showData(List<XY> list){</p><p><b>  XY xy;</b></p><p>  for(int i =

94、 0;i<list.size();i++){</p><p>  xy = list.get(i);</p><p>  System.out.println("第"+i+"個: "+xy.x1+" "+xy.y1+" "+xy.x2+" "+xy.y2);</p>&l

95、t;p><b>  }</b></p><p><b>  }</b></p><p>  public void autoFlush() throws Exception {</p><p>  Timer timeCount = new Timer(1000, new ActionListener() {<

96、/p><p>  public void actionPerformed(ActionEvent evt) {</p><p><b>  try {</b></p><p>  //刷新得到系統(tǒng)信息的工具</p><p>  monitorInfo = service.getMonitorInfoBean();</p

97、><p>  m.getHandleCount();</p><p>  //圖標每次左移的像素點</p><p>  move = move+2;</p><p>  updateProcess();</p><p>  southPanel();</p><p>  updateChart();

98、</p><p>  FunctionTab();</p><p>  p_memory_record.repaint();</p><p>  p_cpu_record.repaint();</p><p>  p_cpu_used.repaint();</p><p>  } catch (Exception up

99、date) {</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><p>  timeCount.start();</p><p><b>  }</b&g

100、t;</p><p><b>  調(diào)試分析</b></p><p>  如何在進程的表格中選中一個進程結束是我設計時遇到的問題之一。</p><p>  一開始結束進程總是不很順利,后來我加入了如下函數(shù):記錄上次選中的行,從選中的行中得到進程的名稱,將名稱傳給結束進程的按鈕,再通過結束進程的函數(shù)actionPerformed結束進程。后續(xù)調(diào)試分

101、析表明,這個函數(shù)可實現(xiàn)選中進程后結束進程的功能。</p><p>  public void updateProcess() throws Exception {</p><p>  int flag = 0;</p><p>  String name = "";</p><p>  int rowIndex = 0;&

102、lt;/p><p>  // 記錄上次選中的行</p><p>  if (pTable.getSelectedRow() != -1) {</p><p><b>  flag = 1;</b></p><p>  name = pTable.getValueAt(pTable.getSelectedRow(), 0).t

103、oString();</p><p><b>  } else {</b></p><p><b>  flag = 0;</b></p><p><b>  }</b></p><p>  m.getProcessForWindows();</p><p&

104、gt;  String c[][] = new String[m.processCount][5];</p><p>  int j = 0;</p><p>  Vector srcdata = new Vector();</p><p>  while (j < m.processCount) {</p><p>  c[j][0]

105、 = m.proce[j].getCaption();</p><p>  c[j][1] = m.proce[j].getCSName();</p><p>  c[j][2] = m.proce[j].getPriority();</p><p>  c[j][3] = m.proce[j].getProcessId();</p><p>

106、;  c[j][4] = m.proce[j].getThreadCount();</p><p>  if (c[j][0].equals(name)) rowIndex = j;</p><p>  Vector rowdata = new Vector(5);</p><p>  for (int i = 0; i < 5; i++) row

107、data.add(c[j][i]);</p><p>  // 將數(shù)據(jù)加入到容器,也就是加入到JTable 中</p><p>  srcdata.add(rowdata);</p><p><b>  j++;</b></p><p><b>  }</b></p><p>

108、;  DefaultTableModel model0 = new DefaultTableModel(srcdata, pb);</p><p>  pTable.setModel(model0);</p><p>  if (flag == 1) pTable.setRowSelectionInterval(rowIndex, rowIndex);</p><

109、p>  this.pTable.repaint();</p><p>  this.pTable.updateUI();</p><p><b>  }</b></p><p><b>  使用說明</b></p><p>  使用說明參照第七章 測試結果中的圖1。</p>&l

110、t;p>  如圖1所示,任務管理器中有三個選項卡,進程、待定、性能。進程選項卡中,可顯示現(xiàn)在正在運行中的進程,并且打印進程的信息,包括進程的名稱(映像名稱)、進程的使用者(用戶名)、進程的優(yōu)先權(優(yōu)先權)、進程的PID(PID)、進程的線程數(shù)(線程數(shù))。</p><p>  點擊表格中的某個進程,可以通過右下方的“結束進程”按鈕結束進程。點擊結束進程后會彈出對話框,提示是否要結束進程,選擇“是”之后會結束該

111、進程,同時彈出對話框提示該進程已經(jīng)被結束。</p><p>  性能選項卡顯示的是CPU使用情況和內(nèi)存使用情況圖,如圖5所示。</p><p>  任務管理器的最下方實時顯示進程數(shù)、CPU使用率和物理內(nèi)存使用情況。</p><p><b>  測試結果</b></p><p>  圖1 - 任務管理器界面</p&g

112、t;<p>  圖2 - 選中一個正在運行中的進程</p><p>  圖3 - 點擊結束進程</p><p>  圖4 - 結束進程后</p><p>  圖5 - CPU使用情況和內(nèi)存使用情況圖</p><p>  對比Windows自帶任務管理器可知,實驗結果正確,并且可完成結束進程的功能。</p><

113、p><b>  課程設計總結</b></p><p>  通過這次課程設計,我發(fā)現(xiàn)了自身的不足,比如沒有很好的書寫習慣,考慮問題不周到,對于java語言的理解不夠深入等。</p><p>  原來我并不是很擅長java的界面編寫,但是經(jīng)過此次的課程設計,我已經(jīng)能夠熟練使用java中界面編寫的一些控件,這是我的一大收獲。</p><p> 

114、 研究任務管理器的功能并熟練的使用任務管理器可以方便的處理計算機日常使用中所遇到一些問題,對于更好的使用計算機操作系統(tǒng)從事辦公、學習和娛樂也有現(xiàn)實的意義。課題研究設計的進程管理器能夠顯示任務信息,顯示進程、線程模塊等信息,能夠結束任務、終止進程,并能以圖表的形式顯示CPU、內(nèi)存使用率,操作簡單,能基本滿足用戶對Windows進程管理的需求。但有些進程管理的高級功能還未在設計之中,如對進程模塊(DLL文件)的卸載與加載、對異常進程的警告等

115、,今后還需進一步學習和了解Windows核心編程,熟悉動態(tài)鏈接庫DLL的操作等知識。</p><p>  在編程的過程中我體驗到了一分耕耘一分收獲的喜悅;多次調(diào)試后程序成功運行了,那時候的歡樂是我以前無法想象的。并且,我養(yǎng)成了寫程序時添加注釋的好習慣,這樣在改錯、函數(shù)功能一一對應方面就方便多了。果然,學習任何一門課程,只要學得用心,都可以從中體會到學習的快樂。今后我的進步,想必都是從這一點點敲入編譯器的代碼中獲得

116、的。</p><p><b>  參考文獻</b></p><p>  (1)張堯學等. 計算機操作系統(tǒng)教程(第4版). 清華大學出版社,2013</p><p> ?。?)賈春福,鄭鵬. 操作系統(tǒng)安全. 武漢大學出版社,2006</p><p> ?。?)羅宇等. 操作系統(tǒng)課程設計. 機械工業(yè)出版社,2005</

溫馨提示

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

評論

0/150

提交評論