實驗報告
實驗課程:
計算機操作系統
學生姓名:
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"; }
四、心得體會
通過上機,我了解了許多關于操作系統的專業知識。無論就是在批處理系統還就是分時系統中,用戶進程數一般都多于處理機數、這將導致它們互相爭奪處理機。另外,系統進程也同樣需要使用處理機。這就要求進程調度程序按一定的策略,動態地把處理機分配給處于就緒隊列中的某一個進程,以使之執行。
這次實驗課上機就是我了解了許多知識,讓我更加了解了處理系統,我相信我能夠把處理系統用好。
推薦訪問: 實驗 操作系統 計算機在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《