狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

計算機操作系統實驗課實驗報告

| 瀏覽次數:

 實驗報告

 實驗課程:

 計算機操作系統

 學生姓名:

  XXX

  學

 號:

  XXXX

 專業班級:

  軟件

 2014 年 年 12 月 月 25 日 目錄

 實驗一

 熟悉 P Windows XP 中的進程與線程 .. 1 實驗二

 進程調度 ............................................ 4 實驗三

 死鎖避免 — 銀行家算法的實現 ...... 13 實驗四

 存儲管理 .......................................... 19 實驗一

 熟悉 P Windows XP 中的進程 與線程

  一、 實驗名稱 熟悉 Windows XP 中的進程與線程 二、 實驗目的 1、熟悉 Windows 中任務管理器的使用。

 2、通過任務管理器識別操作系統中的進程與線程的相關信息。

 3、掌握利用 spy++、exe 來察瞧 Windows 中各個任務的更詳細信息。

 三、 實驗結果分析

 1、啟動操作系統自帶的任務管理器: 方法:直接按組合鍵 Ctrl+Alt+Del,或者就是在點擊任務條上的“開始”“運行”,并輸入“taskmgr、exe”。

 2、 調整任務管理器的“查瞧”中的相關設置,顯示關于進程的以下各項信息,并完成下表: 表一:統計進程的各項主要信息 序號 進程名稱 進程 ID 線程數量 占用內存 優先級 占 CPU 時間 虛擬內存 1 Bddownloader、exe 7312 32 9980k 標準 0:00:00 9200k 2 Taskmgr、exe 7228 3 4124k 高 0:00:04 3372k 3 BaiDuSdTray 、exe 5144 30 8588k 標準 0:00:15 43652k

 4 QQprotect、exe 4668 11 20700k 標準 0:00:01 23572k 5 TXPlatform、exe 5908 3 1716k 標準 0:00:00 2128k 6 Explorer、exe 5816 17 30340k 標準 0:00:11 21720k 3、 啟動辦公軟件“Word”,在任務管理器中找到該軟件的登記,并將其結束掉。再從任務管理器中分別找到下列程序:winlogon、exe、lsass、exe、csrss、exe、smss、exe,試著結束它們,觀察到的反應就是

 任務管理器無法結束進程

  , 原因就是

 該系統就是系統進程

  。

 4、 在任務管理器中找到進程“explorer、exe”,將之結束掉,并將桌面上您打開的所有窗口最小化,瞧瞧您的計算機系統起來什么樣的變化

  桌面上圖標菜單都消失了

 、得到的結論 explorer、exe 就是管理桌面圖標的文件

  (說出 explorer、exe 進程的作用)。

 5、運行“spy++、exe”應用軟件,點擊按鈕“ ”,切換到進程顯示欄上,查瞧進程“explorer、exe”的各項信息,并填寫下表:

 進程:explorer、exe 中的各個線程

 序號 進程 ID 線程 ID 基本優先級 當前優先級 CPU 時間 上下文開關 1 000016B8

  8 10 0:00:06499 8336 2 000016B8 000003EC 15 15 0:00:00 8 3 000016B8

 8 10 0:00:00 11 4 000016B8 00000A0C 8 10 0:00:00 13 5 000016B8

 8 8 0:00:078 17138 6 000016B8 000013D8 8 10 0:00:00 2326 6、注意某些線程前有“+”,如圖所示: ,說明二者之間的差異 前有“+”其器線程下有窗口

 。

 四、 心得體會

 通過本次實驗,我了解到了 windows 系統中進程的管理與操作,我了解了如何切出任務管理器,任務管理器應用與其她與進程相關的知識,明白了有些系統程序不能夠關閉,系統中的進程與線程雖然很多,但就是其中有許多關聯,只要弄清楚其中的關聯那么就能夠運用好進程與線程,達到我們的目的。

  每個進程下都包含著許多線程,我們控制進程來達到控制線程的目的只有我們了解好掌握還進程,我們才能更好的運用線程,更好的控制運用計算機。

 實驗二

 進程調度

 一、

 實驗名稱 進程調度 二、

 實驗目的 1、使學生進一步理解進程的概念,并在此基礎上掌握有關 PCB、進程隊列的概念。

 2、掌握進程基本狀態的轉化; 3、 掌握進程調度的策略、具體實施方法以及系統性能的評價方法。

 三、實驗結果分析

 簡化的實驗代碼如下: #include<iostream>

 #include<queue>//調用 STL 中的優先隊列

 using namespace std; //定義一個 PCB 進程類

 class PCB { public: char name[10];//進程的名字

 int runtime;//該進程的運行時間

 int priority;//該進程的優先級

 char state;//該進程的狀態

 PCB* next;//指向下個進程的指針

 void print()const//輸出進程的信息

 { cout<<"(name="<<name<<",runtime="<<runtime<<",state="<<state <<",priority="<<priority<<")"<<endl; } }; class PCBSortCriterion{//優先隊列的優先準則類

 public: bool operator()(const PCB & p1,const PCB & p2)const//仿函數確定優先準則,從大到小

 { return (p1、priority < p2、priority); } }; PCB* pcb=new PCB[number];//一個 PCB 的數組用來保存就緒進程 PCB* p1=new PCB[number];//一個 PCB 的數組用來保存已經結束的進程 cout<<endl; PCB p;//一個 PCB 型的變量,用來保存隊首元素 int i; for( i=0 ;i<=number-1;i++)//建立進程信息

 cout<<"請輸入 pcb["<<i<<"]的信息!"<<endl; cout<<"以(name,runtime,state(初始為 R),priority)格式輸入!"<<endl; cin>>pcb[i]、name; cin>>pcb[i]、runtime; cin>>pcb[i]、state; cin>>pcb[i]、priority; cout<<endl; } typedef priority_queue<PCB,vector<PCB> ,PCBSortCriterion> pQueue;//以 //PCBSortCriterion 為 //優先準則的優先隊列

 pQueue q,// 優先隊列 pQueue 的一個對象,對這個隊列進行主操作 temp;//優先隊列pQueue的一個對象,就是q的一個拷貝對象,作為實現打印輸出//的一個中間變量 for(int j=0;j<=number-1;j++)//將進程入隊建立優先隊列

 { q、push(pcb[j]); } //輸出進程控制塊的初始狀態信息 cout<<"進程控制塊的初始狀態信息為:"<<endl;

 temp=q; while(!temp、empty()) { p=temp、top(); p、print(); temp、pop(); } cout<<endl; int n=0, //進程執行的次數

 m=0;//完成進程的個數

 while(!q、empty())//對進程進行調度

 { cout<<"第"<<++n<<"次運行"; p=q、top(); cout<<q、top()、name<<"!"<<endl; p、runtime-=1; p、priority-=1; q、pop(); if(p、runtime!=0)//表明該進程還未執行完 ,繼續入隊進行操作

 {

 q、push(p); } else {//表明該進程已經執行完,設置其狀態為 Z,并將其保存到 p1 中

 p、state="Z"; p1[m++]=p; } cout<<"運行后的狀態為:"<<endl; //打印出運行后的進程狀態

 temp=q;//拷貝輸出隊列

 while(!temp、empty()) { p=temp、top(); p、print(); temp、pop(); } if(m>0)//輸出完成的進程的信息

 for( i=0;i<=m-1;i++) p1[i]、print(); cout<<endl; cout<<endl; }

 system("pause"); return 0; } int main() {

 cout<<setw(40)<<"進程模擬調度設計"<<endl<<endl;

 cout<<"提示:輸入 1 選擇先來先服務算法,輸入 2 選擇優先級法,輸入 3 選擇輪轉法,輸入 4 退出程序"<<endl<<endl;

 cout<<"

  1、先來先服務\n

  2、優先級法\n

  3、時間片輪轉法\n

  4、多級反饋輪轉法\n

  5、動態優先級法\n

  6、退出"<<endl<<endl;

 int choice;

 int go=1;

 while(go)

 {

  cout<<"請輸入您的選擇:";

  cin>>choice;

  switch(choice)

 {

  //調用先來先服務算法求解

  case 1: FCFS();break;

  //調用優先級法求解

  case 2: PRIO();break;

  //調用時間片輪轉法求解

  case 3: LZF();break;

  //調用多級反饋輪轉法求解

  case 4: DJFKLZ();break;

  case 5: DTYXJF();break;

  case 6: cout<<"退出"<<endl;go=0;break;

  //返回首頁

  default: cout<<"選擇有誤,請重新輸入選擇!"<<endl;break;

 }

  }

 system("pause");

 return 0; } 程序運行結果: 初始化界面:

 先來先服務法:

 靜態優先級法:

  時間片輪轉法: 、

  動態優先級法:

  多級反饋輪轉法:

  四、心得體會

 1、通過這次實驗使得我對進程調度幾種算法的思想以及實現原理有了進一步的認識與掌握。在設計多級反饋輪轉法的算法以及實現代碼時,遇到了代碼不會寫,算法理解不夠透徹的問題,而導致在這個問題上糾結了很久。最后還就是在查閱資料以及同組成員的討論下解決了。

 2、這次實驗使用的編程語言就是 C。由于在以前學習 C 的時候掌握的不就是很好與很多知識點都忘記了以至于在實驗的很多地方(如實驗界面與代碼的精簡)做得不就是很好,以后得注意對 C 的學習與鞏固。

 3、也使我更能體會到集體的力量永遠要大于個人。在實驗中我們遇見的很多問題基本上都就是一起討論才解決的。

 4、

 一開始以為涉及到操作系統的模擬編程的都就是高不可攀的,然而在仔細閱讀課本以及實驗說明后,發現只要弄清楚了優先級數調度的實現原理后其實并不難,用優先隊列就可以了。通過這個實驗一來加深了對優先級數調度的理解,二來也加強了自己的編程實踐能力!

  實驗三

 死鎖避免 — 銀行家算法的實現

  一、

 實驗 名稱

 死鎖避免—銀行家算法的實現 二、

 實驗目的

 1、 掌握死鎖產生的原因與必要條件。

 2、 掌握銀行家算法的實現 三、

 實驗結果分析 #include <iostream> using namespace std; #define mp 50

  //最大進程數 #define mr 100

 /最大資源數 int keyong[mr];

 //可用資源數組 int MAX[mp][mr];

 //最大需求矩陣 int fenpei[mp][mr];

 //分配矩陣 int need[mp][mr];

 //剩余需求矩陣 bool FINISH[mp];

 //系統就是否有足夠資源分配 int p[mp];

 //記錄序列 int Work[mr];

  //工作數組 int m,n;

  //m 個進程,n 個資源 int l=0;

 void Init();

  //初始化 bool Safe(); void jc(); void main() {

  Init();

  Safe();

 if(l!=m)

  jc();} void Init()

  //初始化算法 { int i,j; cout<<"請輸入進程的數目:";

  cin>>m;

  cout<<"請輸入資源的種類:";

  cin>>n;

 cout<<"請輸入每個進程最多所需的各資源數,按照"<<m<<"x"<<n<<"矩陣輸入"<<endl;

  for(i=0;i<m;i++)

  for(j=0;j<n;j++)

  cin>>MAX[i][j];

  cout<<"請輸入每個進程已分配的各資源數,也按照"<<m<<"x"<<n<<"矩陣輸入"<<endl;

  for(i=0;i<m;i++)

  {

 for(j=0;j<n;j++)

  {

  cin>>fenpei[i][j];

  need[i][j]=MAX[i][j]-fenpei[i][j];

  if(need[i][j]<0)

  {

 cout<<"您輸入的第"<<i+1<<"個進程所擁有的第"<<j+1<<"個資源數錯誤,請重新輸入:"<<endl; j--;

  continue; }

  }

  } cout<<"請輸入各個資源現有的數目:"<<endl;

  for(i=0;i<n;i++)

  {

 cin>>keyong[i];

  }

 cout<<"剩余需求矩陣:"<<endl;

 for(i=0;i<m;i++)

  for(j=0;j<n;j++)

  {

  cout<<need[i][j]<<" ";

  if(j==n-1)

 cout<<endl;

  }

  cout<<"各資源現有數量:"<<endl;

  for(i=0;i<n;i++)

 cout<<keyong[i]<<" ";

  cout<<endl; }

 bool Safe()

  /*安全性算法*/

 { int i,j,k;

  for(i=0;i<n;i++)

  Work[i]=keyong[i];

  for(i=0;i<m;i++)

  { FINISH[i]=false; //判斷進程 i 就是否已執行

  }

  for(i=0;i<m;i++)

  {

  if(FINISH[i]==true)

  { continue;

  }

  else

  { for(j=0;j<n;j++)

  { if(need[i][j]>Work[j])

  {

 break;

  }

  }

  if(j==n)

  {

 FINISH[i]=true;

  for(k=0;k<n;k++)

  {

  Work[k]+=fenpei[i][k];

  //進程 i 執行完后回收資源}

  p[l++]=i;

  i=-1;

  }

  else

  {

  continue;

  }

  }

  if(l==m)

  {

  cout<<"系統就是安全的"<<endl;

  cout<<"安全序列:"<<endl;

  for(i=0;i<l;i++)

  {

  cout<<p[i];

  if(i!=l-1)

  {

  cout<<"-->";

  }

  }

  cout<<""<<endl;

  return true;

  }

  }

 cout<<"會發生死鎖,發生死鎖的進程就是:"<<endl;

  for(i=0;i<m;i++)

  if(FINISH[i]==false)

 cout<<i<<" ";

  cout<<endl;

 return false; } void jc() {

  int i,j,k,q;

 i=0; while(i<m&&FINISH[i]==false)

  //尋找沒執行的

  {

  for(j=0;j<n;j++)

  {

 keyong[j]+=fenpei[i][j];

 //回收

 fenpei[i][j]=0;

  }

  if(Safe())

 cout<<"死鎖已解除"<<endl;

  else

 i++;

  Safe();

 } } 輸入 進程 已 擁 有 資 源數 總 需 求 資 源數 1 (0、0、1、2) (0、0、1、2、) 2 (2、0、0、0) (2、7、5、0) 3 (0、0、3、4) (6、6、5、6) 4 (2、3、5、4) (4、3、5、6) 5 (0、3、3、2) (0、6、5、2)

  四、心得體會 通過這次實驗,我了解了有關資源申請分配、檢測以及避免死鎖等概念,了解死鎖與避免死鎖的具體實施方法。死鎖的解除實質上就就是如何讓釋放資源的進程能夠繼續運行、為了解除死鎖就要剝奪資源,

 實驗四

 存儲管理

 一、 實驗名稱 儲存管理 二、實驗目的 1、掌握物理內存與虛擬內存的基本概念,理解絕對地址與相對地址; 2、了解 Windows 中內存管理機制,掌握頁式虛擬存儲; 3、掌握虛擬存儲管理中有關缺頁處理方法等內容,鞏固有關虛擬存儲管理的教學內容; 4、理解內存分配原理、特別就是以頁面為單位的虛擬內存分配原理; 5、掌握常用的頁面置換算法。

 三、 實驗結果分析 #define MAXSIZE

 20 #include <iostream、h> void main() {

 int label=0;

 //標記此頁就是否已經裝入內存

 int input=0;

 //用于輸入作業號

 int worknum=0;

 //記錄作業個數

 int storesize=0;

 //系統分配的存儲塊數

 int interrupt=0;

 //中斷次數

 int quence[MAXSIZE];

 //隊列,FIFO 算法的主要數據結構

  int workstep[MAXSIZE];

 //用于記錄作業走向

 /*初始化*/

 for(int i=0;i<MAXSIZE;i++)

 {

  quence[i]=0;

  workstep[i]=0;

 }

 cout<<"請輸入存儲區塊數:";

 cin>>storesize;

 cout<<"請輸入作業走向(輸入 0 結束):\n";

 for(int j=0;j<MAXSIZE;j++)

 {

  cout<<"頁面號:"<<j+1;

  cin>>input;

 workstep[j]=input;

  if(input==0)

  {

 cout<<"輸入結束!\n";

 break;

  }

  worknum++;

 }

 if(workstep[0]==0)

 {

  cout<<"未輸入任何作業,系統將退出!\n";

  return;

 }

 cout<<"置換情況如下:\n";

 for(int k=0;k<worknum;k++)

 {

 label=0;

  /*瞧隊列中就是否有相等的頁號或空位置*/

  for(int l=0;l<storesize;l++)

  {

 /*就是否有相等的頁號*/

 if(quence[l]==workstep[k])

 {

  cout<<"內存中有"<<workstep[k]<<"號頁面,無須中斷!\n";

  label=1;

 //標記此頁面已裝入內存

  break;

 }

 /*就是否有空位置*/

 if(quence[l]==0)

  {

  quence[l]=workstep[k];

  cout<<"發生中斷,但內存中有空閑區,"<<workstep[k]<<"號頁面直接調入!\n";

  interrupt++;

  label=1;

  break;

 }

  }

  /*上述情況都不成立則調出對首,將調入頁面插入對尾*/

  if(label==0)

  {

 cout<<"發生中斷,將"<<quence[0]<<"號頁面調出,"<<workstep[k]<<"號裝入!\n";

 interrupt++;

  for(int m=0;m<storesize;m++)

  {

 quence[m]=quence[m+1];

  }

 quence[storesize-1]=workstep[k];

  }

 }

 cout<<" 作 業 "<<worknum<<" 個 ,"<<" 中 斷 "<<interrupt<<" 次 ,"<<" 缺 頁率:"<<float(interrupt)/float(worknum)*100<<"%\n"; }

 四、心得體會

 通過上機,我了解了許多關于操作系統的專業知識。無論就是在批處理系統還就是分時系統中,用戶進程數一般都多于處理機數、這將導致它們互相爭奪處理機。另外,系統進程也同樣需要使用處理機。這就要求進程調度程序按一定的策略,動態地把處理機分配給處于就緒隊列中的某一個進程,以使之執行。

 這次實驗課上機就是我了解了許多知識,讓我更加了解了處理系統,我相信我能夠把處理系統用好。

推薦訪問: 實驗 操作系統 計算機

【計算機操作系統實驗課實驗報告】相關推薦

工作總結最新推薦

NEW