實(shí)
驗(yàn)
報(bào)
告
實(shí)驗(yàn)課程:
計(jì)算機(jī)操作系統(tǒng)
學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專(zhuān)業(yè)班級(jí):
電氣信息類(lèi) III 091 班
0 2010 年 年 2 12 月 月 8 18 日
目錄
操作系統(tǒng)安裝及其接口環(huán)境 ............................. 2 編程實(shí)現(xiàn)銀行家安全算法 ................................ 7 進(jìn)程調(diào)度算法的實(shí)現(xiàn) ................................... 16 存儲(chǔ)管理的模擬實(shí)現(xiàn) ................................... 22
告 南昌大學(xué)實(shí)驗(yàn)報(bào)告 ---操作系統(tǒng)安裝及其接口環(huán)境 學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專(zhuān)業(yè)班級(jí):
電Ⅲ091 班
實(shí)驗(yàn)類(lèi)型:□ 驗(yàn)證 ■ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新
實(shí)驗(yàn)日期:
實(shí)驗(yàn)成績(jī):
一、實(shí)驗(yàn)?zāi)康?熟悉 Windows//Linux 操作系統(tǒng)的安裝過(guò)程與安裝方法,并掌握該操作系統(tǒng)所提供的用戶(hù)接口環(huán)境,并為后續(xù)實(shí)驗(yàn)做好編程環(huán)境準(zhǔn)備。
二、實(shí)驗(yàn)內(nèi)容 1、熟悉 Windows//Linux 操作系統(tǒng)的安裝過(guò)程與安裝方法,并掌握該操作系統(tǒng)所提供的用戶(hù)接口環(huán)境,通過(guò)系統(tǒng)提供的用戶(hù)管理程序、查看系統(tǒng)中的用戶(hù)情況、進(jìn)程、線(xiàn)程、內(nèi)存使用情況等,學(xué)會(huì)使用它進(jìn)行監(jiān)視進(jìn)程的狀況、系統(tǒng)資源的使用情況及用戶(hù)情況。并為后續(xù)實(shí)驗(yàn)做好編程環(huán)境準(zhǔn)備。
2、用 C 語(yǔ)言編寫(xiě)一小段程序,使其可以通過(guò)某個(gè)系統(tǒng)調(diào)用來(lái)獲得 OS 提供的某種服務(wù)。
三、實(shí)驗(yàn)要求 1. 了解所安裝的操作系統(tǒng)對(duì)軟硬件資源的具體要求; 2. 機(jī)器最低硬件配置要求; 3. 操作系統(tǒng)所提供的用戶(hù)接口環(huán)境的熟悉; 4. 了解主要 BIOS CMOS 參數(shù)的含義及其設(shè)置方法; 5. 掌握程序編寫(xiě)中系統(tǒng)調(diào)用的方法。
四、主要實(shí)驗(yàn)步驟 1、可以通過(guò) Vmware workstation 虛擬機(jī)來(lái)模擬并記錄安裝 Windows 和 Linux 的過(guò)程,主要要準(zhǔn)備光盤(pán)(虛擬機(jī)也可使用光盤(pán)鏡像 ISO 文件或精靈虛擬光驅(qū)),若計(jì)算機(jī)已經(jīng)裝有一個(gè)操作系統(tǒng),則在安裝之前要注意:如果是使用光盤(pán)用電腦自帶光驅(qū)安裝,則安裝之前必須設(shè)定計(jì)算機(jī)的 BIOS,讓計(jì)算機(jī)從光驅(qū)啟動(dòng);若是使用 USB 光驅(qū)或者是 U 盤(pán)引導(dǎo),則要設(shè)定 BIOS 使計(jì)算機(jī)從 USB 接口啟動(dòng)。安裝系統(tǒng)主要需要輸入序列號(hào),設(shè)定管理員及使用者姓名和身份密碼。用戶(hù)可以選擇要安裝的系統(tǒng)程序(Linux 為軟件包),或者也可以在安裝完后在控制面板的添加/刪除程序中選擇。安裝方法一般來(lái)說(shuō)使用光盤(pán)直接安裝,將光盤(pán)放入光驅(qū)中,沒(méi)有光驅(qū)的電腦可以使用 USB 光驅(qū)或者使用 U 盤(pán)安裝。
2、熟悉查看用戶(hù)的接口環(huán)境可以使用系統(tǒng)自帶的管理程序,操作如下:
“右擊我的電腦”——“管理”——“設(shè)備管理器”,也可以“右擊我的電腦”——“屬性”——“硬件”——“設(shè)備管理器”,進(jìn)入設(shè)備管理器可以看到計(jì)算機(jī)的設(shè)備情況,包括計(jì)算機(jī)的各個(gè)接口。
3、查看系統(tǒng)中的用戶(hù)情況、進(jìn)程、線(xiàn)程、內(nèi)存使用情況,可進(jìn)行如下操作:
“右擊我的電腦”——“管理”——“本地用戶(hù)和組”——“用戶(hù)”,這樣就可以查看系統(tǒng)中的用戶(hù)情況,并可以對(duì)用戶(hù)進(jìn)行添加、刪除、禁用、修改等操作。
使用任務(wù)管理器可以看到系統(tǒng)中活動(dòng)的用戶(hù)、系統(tǒng)中的進(jìn)程、線(xiàn)程和內(nèi)存的使用情況,進(jìn)行的操作如下:
“右擊任務(wù)欄”——“任務(wù)管理器”,或者直接在鍵盤(pán)上使用 ctrl+alt+delete 的快捷鍵打開(kāi)任
務(wù)管理器。在任務(wù)管理器中,點(diǎn)擊“進(jìn)程”就可以看見(jiàn)當(dāng)前計(jì)算機(jī)在運(yùn)行的進(jìn)程及該進(jìn)程的用戶(hù)、CPU 占用率和內(nèi)存使用情況。點(diǎn)擊“性能”即可看見(jiàn)計(jì)算機(jī)當(dāng)前 CPU 的使用、CPU 使用記錄、PF 使用率、頁(yè)面文件使用記錄和線(xiàn)程數(shù)。點(diǎn)擊“用戶(hù)”就可以看見(jiàn)當(dāng)前計(jì)算機(jī)活動(dòng)的用戶(hù)。
4、調(diào)用系統(tǒng)服務(wù):
打開(kāi) Microsoft Visual C++ 6.0,新建 C++ Sourse File,寫(xiě)入以下代碼:
#include<stdlib.h> void main() {
system("date"); } 保存,使用工具編譯,得到結(jié)果。
五、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果 安裝 Windows Xp Sp2 的過(guò)程:
安裝 Ubuntu Linux 10.04 的過(guò)程:
以下是計(jì)算機(jī) Xs19 的情況,Xs19 中 Windows Xp 的設(shè)備管理器:
Xs19 中 Windows Xp 的用戶(hù)情況:
Xs19 的任務(wù)管理器:
調(diào)度服務(wù)的結(jié)果:
六、實(shí)驗(yàn)體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議 感覺(jué)這個(gè)實(shí)驗(yàn)不是光靠掌握書(shū)上內(nèi)容就能做的,平時(shí)的實(shí)踐也是非常重要的,如果對(duì)計(jì)算機(jī)非常熟悉的話(huà),這個(gè)實(shí)驗(yàn)做起來(lái)難度很小。在做的時(shí)候基本上可以完成,中間碰到一個(gè)問(wèn)題,就是對(duì)計(jì)算機(jī)有的系統(tǒng)服務(wù)不熟悉,所以要用 C 語(yǔ)言編程時(shí)感覺(jué)有點(diǎn)不知所措。
七、參考資料 《計(jì)算機(jī)操作系統(tǒng)》(第三版)
《計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書(shū)》
告 南昌大學(xué)實(shí)驗(yàn)報(bào)告 ---編程實(shí)現(xiàn)銀行家安全算法 學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專(zhuān)業(yè)班級(jí):
電Ⅲ091 班
實(shí)驗(yàn)類(lèi)型:□ 驗(yàn)證 ■ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新
實(shí)驗(yàn)日期:
實(shí)驗(yàn)成績(jī):
一、實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)加強(qiáng)對(duì)銀行家安全算法的理解和掌握。
二、實(shí)驗(yàn)內(nèi)容 熟悉避免死鎖發(fā)生的方法,死鎖與安全序列的關(guān)系,編程實(shí)現(xiàn)銀行家算法,要求輸出進(jìn)程的安全序列。
三、實(shí)驗(yàn)要求 1、 需寫(xiě)出設(shè)計(jì)說(shuō)明; 2、 設(shè)計(jì)實(shí)現(xiàn)代碼及說(shuō)明 3、 運(yùn)行結(jié)果; 四、主要實(shí)驗(yàn)步驟 1、 分析銀行家算法結(jié)構(gòu); 2、 畫(huà)出銀行家算法的流程圖,即設(shè)計(jì)說(shuō)明; 3、 根據(jù)畫(huà)出的流程圖使用 C 語(yǔ)言編寫(xiě)相應(yīng)的代碼(代碼過(guò)長(zhǎng),放到最后); 程序主要由 main 函數(shù)和以下幾個(gè)函數(shù)組成:
void input();用戶(hù)輸入銀行家算法的初始數(shù)據(jù); void output();輸出當(dāng)前系統(tǒng)資源分配情況; void change();當(dāng)請(qǐng)求資源滿(mǎn)足要求時(shí),進(jìn)行分配,系統(tǒng)資源發(fā)生改變; int check();安全性算法,檢查是否存在安全序列; void outputsafe();輸出安全序列的資源分配表。
4、 檢查代碼,將編出的代碼編譯、鏈接,驗(yàn)證其正確性。
開(kāi)始輸入銀行家算法初始數(shù)據(jù)執(zhí)行安全性算法數(shù)據(jù)是否正確是否存在安全序列輸入進(jìn)程Pi 發(fā)出的請(qǐng)求向量請(qǐng)求資源是否小于需求資源系統(tǒng)將資源分配給 Pi執(zhí)行算法的是否為初始數(shù)據(jù)結(jié)束資源分配無(wú)效 , 恢復(fù)分配前的系統(tǒng)資源情況輸出當(dāng)前資源分配表N NY YN NY YN NY Y輸出安全序列的資源情況是否有進(jìn)程發(fā)出請(qǐng)求向量N NY YN NY Y請(qǐng)求資源是否小于系統(tǒng)資源Y Y進(jìn)程Pi需等待N NY Y
五、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果
六、實(shí)驗(yàn)體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議 體會(huì):編寫(xiě)銀行家算法需要較好分析能力,C 語(yǔ)言也要掌握的很好,而且需要細(xì)心和極大地耐心。我的程序在最開(kāi)始編出來(lái)的第一份代碼編譯時(shí)大大小小一堆錯(cuò)誤,有些是一個(gè)小錯(cuò)誤導(dǎo)致了下面全錯(cuò),這些小錯(cuò)誤在一百多行里找起來(lái)非常費(fèi)勁。然后小錯(cuò)誤全部找出來(lái)以后,再編譯,錯(cuò)誤沒(méi)有了,但是得到的結(jié)果卻是錯(cuò)誤的,這樣又要開(kāi)始一行一行分析,看是哪里出了問(wèn)題。到最后得到了想要的結(jié)果以后,程序還需要修飾,至少要輸出要簡(jiǎn)潔明朗,要讓別人一運(yùn)行這個(gè)程序就知道自己在什么時(shí)候該輸入什么數(shù)據(jù),數(shù)據(jù)是什么作用,而不是只有自己知道輸進(jìn)去的是什么東西。
七、參考資料 《計(jì)算機(jī)操作系統(tǒng)》 《C 程序設(shè)計(jì)》 《C 語(yǔ)言程序設(shè)計(jì)_現(xiàn)代方法》 八、實(shí)驗(yàn)代碼 #include <stdio.h> #include <stdlib.h> #include <string.h> int max[5][3];
//開(kāi)始定義銀行家算法中需要用到的數(shù)據(jù) int allocation[5][3]; int need[5][3]; int available[3]; int request[5][3]; char *finish[5]; int safe[5]; int n,i,m; int k=0;
int j=0; int work[3]; int works[5][3]; void start(); //表示程序開(kāi)始 void end(); //表示程序結(jié)束 void input(); //輸入數(shù)據(jù) void output(); //輸出數(shù)據(jù) void change(); //系統(tǒng)分配資源,原有資源情況改變 void outputsafe(); //輸出安全序列的資源分配情況 int check(); //安全性算法 void main()
//主程序開(kāi)始 {
start();
for (;j==0;)
//確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入
{
input();
printf("以下為進(jìn)程資源情況,請(qǐng)確認(rèn)其是否正確:\n");
output();
printf("數(shù)據(jù)是否無(wú)誤:\n 正確:輸入\n 錯(cuò)誤:輸入\n 請(qǐng)輸入:");
scanf("%d",&j);
}
printf("數(shù)據(jù)確認(rèn)無(wú)誤,算法繼續(xù)。\n");
if (check()==0)
//若 check 函數(shù)返回值為,表示輸入的初始數(shù)據(jù)找不到安全序列,無(wú)法進(jìn)行下一步,程序結(jié)束
{
end();
exit(0);
}
for(;j==1;)
//當(dāng)有多個(gè)進(jìn)程請(qǐng)求資源時(shí),循環(huán)開(kāi)始
{
printf("請(qǐng)輸入請(qǐng)求資源的進(jìn)程 i(0、、、、):");
//輸入發(fā)出請(qǐng)求向量的進(jìn)程及請(qǐng)求向量
scanf("%d",&i);
printf("請(qǐng)輸入進(jìn)程 P%d 的請(qǐng)求向量 Request%d:",i,i);
for(n=0;n<3;n++)
scanf("%d",&request[i][n]);
for (;request[i][0]>need[i][0] || request[i][1]>need[i][1] || request[i][2]>need[i][2];) //若請(qǐng)求向量大于需求資源,則認(rèn)為是輸入錯(cuò)誤,要求重新輸入
{
printf("數(shù)據(jù)輸入有誤,請(qǐng)重試!\n 請(qǐng)輸入進(jìn)程 P%d 的請(qǐng)求向量 Request%d:",i,i);
for(n=0;n<3;n++)
scanf("%d",&request[i][n]);
}
if(request[i][0]<=available[0] && request[i][1]<=available[1] && request[i][2]<=available[2])
//判斷系統(tǒng)是否有足夠資源提供分配
{
printf("系統(tǒng)正在為進(jìn)程 P%d 分配資源……\n",i);
change();
//分配資源
j=0;
}
else
printf("系統(tǒng)沒(méi)有足夠的資源,進(jìn)程 P%d 需要等待。\n",i);
if (j==0)
//j=0 表示系統(tǒng)有足夠資源分配的情況
{
printf("當(dāng)前系統(tǒng)資源情況如下:\n");
//輸出分配資源后的系統(tǒng)資源分配情況
output();
if(check()==0)
//若找不到安全系列,則之前的資源分配無(wú)效
{
printf("本次資源分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài)。\n");
for (m=0;m<3;m++)
//恢復(fù)分配資源前的系統(tǒng)資源狀態(tài)
{
available[m]+=request[i][m];
allocation[i][m]-=request[i][m];
need[i][m]+=request[i][m];
}
output();
//輸出系統(tǒng)資源狀態(tài)
}
}
printf("是否還有進(jìn)程請(qǐng)求資源?\n 是:輸入\n 否:輸入\n 請(qǐng)輸入:");
scanf("%d",&j);
//若還有進(jìn)程請(qǐng)求資源,j=1,之前的 for 循環(huán)條件滿(mǎn)足
}
end(); } void line()
//美化程序,使程序運(yùn)行時(shí)更加明朗美觀 {
printf("------------------------------------------------------------------\n"); }
void start()
//表示銀行家算法開(kāi)始 {
line();
printf("
銀行家算法開(kāi)始\n");
printf("
——Designed by Zhang Hong\n");
line(); }
void end()
//表示銀行家算法結(jié)束
{
line();
printf("
銀行家算法結(jié)束,謝謝使用\n");
line(); }
void input()
//輸入銀行家算法起始各項(xiàng)數(shù)據(jù) {
for (n=0;n<5;n++)
{
printf("請(qǐng)輸入進(jìn)程 P%d 的相關(guān)信息:\n",n);
printf("Max:");
for (m=0;m<3;m++)
scanf("%d",&max[n][m]);
printf("Allocation:");
for (m=0;m<3;m++)
scanf("%d",&allocation[n][m]);
for (m=0;m<3;m++)
need[n][m]=max[n][m]-allocation[n][m];
}
printf("請(qǐng)輸入系統(tǒng)可利用資源數(shù) Available:");
for (m=0;m<3;m++)
scanf("%d",&available[m]); }
void output()
//輸出系統(tǒng)現(xiàn)有資源情況 {
line();
printf("資源情況
Max
Allocation
Need
Available\n");
printf("進(jìn)程
A
B
C
A
B
C
A
B
C
A
B
C\n");
line();
for(n=0;n<5;n++)
{
printf("P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d",n,max[n][0],max[n][1],max[n][2],allocation[n][0],allocation[n][1],allocation[n][2],need[n][0],need[n][1],need[n][2]);
if (n==0)
printf("%6d%3d%3d\n",available[0],available[1],available[2]);
else
printf("\n");
}
line(); }
void change()
//當(dāng) Request[i,j]<=Available[j]時(shí),系統(tǒng)把資源分配給進(jìn)程 P[i],Available[j]和 Need[i,j]發(fā)生改變 {
for (m=0;m<3;m++)
{
available[m]-=request[i][m];
allocation[i][m]+=request[i][m];
need[i][m]-=request[i][m];
} }
void outputsafe()
//輸出安全序列的資源分配表 {
printf("該安全序列的資源分配圖如下:\n");
line();
printf("資源情況
Work
Need
Allocation Work+Allocation
Finish\n");
printf("進(jìn)程
A
B
C
A
B
C
A
B
C
A
B
C\n");
line();
for(n=0;n<5;n++)
printf("P%d%9d%3d%3d%5d%3d%3d%5d%3d%3d%6d%3d%3d%12s\n",safe[n],works[safe[n]][0],works[safe[n]][1],works[safe[n]][2],need[safe[n]][0],need[safe[n]][1],need[safe[n]][2],allocation[safe[n]][0],allocation[safe[n]][1],allocation[safe[n]][2],works[safe[n]][0]+allocation[safe[n]][0],works[safe[n]][1]+allocation[safe[n]][1],works[safe[n]][2]+allocation[safe[n]][2],finish[n]);
line(); }
int check()
//安全性算法 {
printf("開(kāi)始執(zhí)行安全性算法……\n");
for (m=0;m<3;m++)
//數(shù)組 work 和 finish 初始化
work[m]=available[m];
for (n=0;n<5;n++)
{
finish[n]="false";
safe[n]=0;
}
k=0;
for (m=0;m<5;m++)
for (n=0;n<5;n++)
if(strcmp(finish[n],"false")==0 && need[n][0]<=work[0] && need[n][1]<=work[1] && need[n][2]<=work[2])
//查找可以分配資源但尚未分配到資源的進(jìn)程
{
safe[k]=n;
//以數(shù)組 safe[k]記下各個(gè)進(jìn)程得到分配的資源的順序
works[safe[k]][0]=work[0];
works[safe[k]][1]=work[1];
works[safe[k]][2]=work[2];
work[0]+=allocation[n][0];
//進(jìn)程執(zhí)行后釋放出分配給它的資源
work[1]+=allocation[n][1];
work[2]+=allocation[n][2];
finish[n]="ture"; //finish[n]變?yōu)橐允驹撨M(jìn)程完成本次分
k++;
}
for (m=0;m<5;m++)
//判斷是否所有進(jìn)程分配資源完成
{
if (strcmp(finish[m],"false")==0)
{
printf("找不到安全序列,系統(tǒng)處于不安全狀態(tài)。\n");
return 0;
//找不到安全序列,結(jié)束 check 函數(shù),返回
}
else
if (m==4)
//此處 m=4 表示所有數(shù)組 finish 的所有元素都為 ture
{
printf("找到安全序列 P%d->P%d->P%d->P%d->P%d,系統(tǒng)是安全的\n",safe[0],safe[1],safe[2],safe[3],safe[4]);
j=1;
outputsafe();
//輸出安全序列的資源分配表
}
}
return 1; }
告 南昌大學(xué)實(shí)驗(yàn)報(bào)告
---進(jìn)程調(diào)度算法的實(shí)現(xiàn) 學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專(zhuān)業(yè)班級(jí):
電Ⅲ091 班
實(shí)驗(yàn)類(lèi)型:□ 驗(yàn)證 ■ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新
實(shí)驗(yàn)日期:
實(shí)驗(yàn)成績(jī):
一、實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)加強(qiáng)對(duì)進(jìn)程調(diào)度算法的理解和掌握。
二、實(shí)驗(yàn)內(nèi)容 編寫(xiě)程序?qū)崿F(xiàn)進(jìn)程調(diào)度算法,具體可以編寫(xiě)程序?qū)崿F(xiàn)先來(lái)先服務(wù)算法或優(yōu)先度高者調(diào)度算法。
三 、實(shí)驗(yàn)要求 1、 需寫(xiě)出設(shè)計(jì)說(shuō)明; 2、 設(shè)計(jì)實(shí)現(xiàn)代碼及說(shuō)明 3、 運(yùn)行結(jié)果; 四、主要實(shí)驗(yàn)步驟 1、 分析實(shí)驗(yàn)內(nèi)容,畫(huà)出算法流程圖; 2、 根據(jù)流程圖寫(xiě)出實(shí)驗(yàn)代碼; 3、 編譯代碼,驗(yàn)證結(jié)果正確與否; 4、 對(duì)程序進(jìn)行修改,得到最后結(jié)果。
流程圖如下:
開(kāi)始系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)將數(shù)據(jù)按照到達(dá)時(shí)間從小到大排序用戶(hù)輸入數(shù)據(jù)進(jìn)程到達(dá)時(shí)前一個(gè)進(jìn)程是否已經(jīng)完成完成時(shí)間=服務(wù)時(shí)間+前一個(gè)進(jìn)程完成時(shí)間完成時(shí)間=服務(wù)時(shí)間+到達(dá)時(shí)間周轉(zhuǎn)時(shí)間=完成時(shí)間-到達(dá)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間=完成時(shí)間/服務(wù)時(shí)間是否所有進(jìn)程已完成計(jì)算輸出結(jié)果結(jié)束YNYNYN
五、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果
六、實(shí)驗(yàn)體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議 在做這個(gè)實(shí)驗(yàn)的時(shí)候,一開(kāi)始以為很簡(jiǎn)單,只要做簡(jiǎn)單的加減乘除就行了,但是仔細(xì)做過(guò)以后發(fā)現(xiàn)需要考慮很多情況。比如說(shuō)輸入進(jìn)程到達(dá)時(shí)間的時(shí)候,要是亂序的該怎么辦?還有到達(dá)時(shí)間和服務(wù)時(shí)間等等定義的都是整型變量,但是帶權(quán)周轉(zhuǎn)時(shí)間確會(huì)得到小數(shù),此時(shí)就需要用到強(qiáng)制轉(zhuǎn)換。在做系統(tǒng)產(chǎn)生隨機(jī)數(shù)的時(shí)候也要考慮隨機(jī)數(shù)的范圍,如到達(dá)時(shí)間可以為0,但是服務(wù)時(shí)間卻不能為 0,否則帶權(quán)周轉(zhuǎn)時(shí)間的計(jì)算會(huì)出錯(cuò)。
七、參考資料 《計(jì)算機(jī)操作系統(tǒng)》 《計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書(shū)》 《C 程序設(shè)計(jì)》 《C 語(yǔ)言程序設(shè)計(jì)_現(xiàn)代方法》 八、實(shí)驗(yàn)代碼 #include <stdio.h>
#include <stdlib.h> #include <time.h> #define N 5
//進(jìn)程個(gè)數(shù),可改變 int rt[N];
//到達(dá)時(shí)間 int st[N];
//服務(wù)時(shí)間 int ct[N];
//完成時(shí)間 int cyt[N]; //周轉(zhuǎn)時(shí)間 float rct[N]; //帶權(quán)周轉(zhuǎn)時(shí)間 float av[2]; //平均數(shù) int n,m; void start(); //表示程序開(kāi)始 void end(); //表示程序結(jié)束 void input(); //輸入數(shù)據(jù) void random(); //系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù) void ordination(); //對(duì)數(shù)據(jù)按到達(dá)時(shí)間進(jìn)行排序 void fcfs(); //先來(lái)先服務(wù)計(jì)算 void output(); //輸出結(jié)果 void main() {
start();
int which;
int c=1;
for (;c==1;)
{
for (;;)
{
printf("輸入數(shù)據(jù)還是由系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)?\n1、輸入數(shù)據(jù)\t2、系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)\n 請(qǐng)輸入:");
scanf("%d",&which);
if (which==1)
{
input();
break;
}
else
if (which==2)
{
random();
break;
}
else
printf("輸入錯(cuò)誤,請(qǐng)重新輸入!");
}
ordination();
//進(jìn)程按照到達(dá)時(shí)間進(jìn)行排序
fcfs();
output();
printf("繼續(xù)輸入,退出輸入。請(qǐng)輸入:");
scanf("%d",&c);
}
end(); } void line()
//美化程序,使程序運(yùn)行時(shí)更加明朗美觀 {
printf("------------------------------------------------------------------\n"); } void start()
//表示 FCFS 算法開(kāi)始 {
line();
printf("
FCFS 算法開(kāi)始\n");
printf("
——Designed by Zhang Hong\n");
line(); } void end()
//表示 FCFS 算法結(jié)束 {
line();
printf("
FCFS 算法結(jié)束,謝謝使用\n");
line(); } void input() {
printf("請(qǐng)輸入%d 個(gè)進(jìn)程的到達(dá)時(shí)間:",N);
for (n=0;n<N;n++)
scanf("%d",&rt[n]);
printf("請(qǐng)輸入%d 個(gè)進(jìn)程對(duì)應(yīng)的服務(wù)時(shí)間:",N);
for (n=0;n<N;n++)
scanf("%d",&st[n]); } void random() {
srand((unsigned)time(NULL));
for (n=0;n<N;n++)
{
rt[n]=rand()%100;
for (m=0;m<n;m++)
if (n!=0 && rt[n]==rt[m])
{
rt[n]=rand()%100;
m=0;
}
st[n]=rand()%98+1;
for (m=0;m<n;m++)
if (n!=0 && st[n]==st[m])
{
st[n]=rand()%98+1;
m=0;
}
} } void ordination()
//重新排序,應(yīng)對(duì)出現(xiàn)輸入的到達(dá)時(shí)間為亂序的情況 {
int temp;
for (n=0;n<N;n++)
for (m=0;m<N-n-1;m++)
if (rt[m+1]<rt[m])
{
temp=rt[m+1];
rt[m+1]=rt[m];
rt[m]=temp;
temp=st[m+1];
st[m+1]=st[m];
st[m]=temp;
} } void fcfs()
//執(zhí)行 fcfs 算法 {
av[0]=0;
av[1]=0;
ct[0]=rt[0]+st[0];
for (n=1;n<N;n++)
{
if (ct[n-1]>=rt[n])
//考慮當(dāng)前一個(gè)進(jìn)程完成而后一個(gè)進(jìn)程還沒(méi)有到達(dá)的情況
ct[n]=ct[n-1]+st[n];
else
ct[n]=rt[n]+st[n];
}
for (n=0;n<N;n++)
cyt[n]=ct[n]-rt[n];
for (n=0;n<N;n++)
rct[n]=(float)cyt[n]/(float)st[n];
for (n=0;n<N;n++)
{
av[0]+=(float)cyt[n]/N;
av[1]+=rct[n]/N;
} } void output()
//輸出結(jié)果 {
line();
printf("進(jìn)程名\t");
for (n=0;n<N;n++)
printf("\t%c",65+n);
printf("\t 平均\n 到達(dá)時(shí)間");
for (n=0;n<N;n++)
printf("\t%d",rt[n]);
printf("\n 服務(wù)時(shí)間");
for (n=0;n<N;n++)
printf("\t%d",st[n]);
printf("\n 完成時(shí)間");
for (n=0;n<N;n++)
printf("\t%d",ct[n]);
printf("\n 周轉(zhuǎn)時(shí)間");
for (n=0;n<N;n++)
printf("\t%d",cyt[n]);
printf("\t%0.1f",av[0]);
printf("\n 帶權(quán)周轉(zhuǎn)時(shí)間");
for (n=0;n<N;n++)
printf("\t%0.1f",rct[n]);
printf("\t%0.1f",av[1]);
printf("\n");
line(); }
南昌大學(xué)實(shí)驗(yàn)報(bào)告
---存儲(chǔ)管理的模擬實(shí)現(xiàn) 學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專(zhuān)業(yè)班級(jí):
電Ⅲ091 班
實(shí)驗(yàn)類(lèi)型:□ 驗(yàn)證 ■ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新
實(shí)驗(yàn)日期:
實(shí)驗(yàn)成績(jī):
一、
實(shí)驗(yàn)?zāi)康?存儲(chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本實(shí)驗(yàn)的目的是通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式管理的頁(yè)面置換算法。
二、
實(shí)驗(yàn)內(nèi)容 1. 過(guò)隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共 320 條指令。其地址按下述原則生成:
①50%的指令是順序執(zhí)行的; ②25%的指令是均勻分布在前地址部分; ③25%的指令是均勻分布在后地址部分; 具體的實(shí)施方法是:
A. 在[0,319]的指令地址之間隨機(jī)選區(qū)一起點(diǎn) M; B. 順序執(zhí)行一條指令,即執(zhí)行地址為 M+1 的指令; C. 在前地址[0,M+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為 M’; D. 順序執(zhí)行一條指令,其地址為 M’+1; E. 在后地址[M’+2,319]中隨機(jī)選取一條指令并執(zhí)行; F. 重復(fù) A—E,直到執(zhí)行 320 次指令。
2. 指令序列變換成頁(yè)地址流,設(shè):
(1)
頁(yè)面大小為 1K; (2)
用戶(hù)內(nèi)存容量為 4 頁(yè)到 32 頁(yè); (3)
用戶(hù)虛存容量為 32K。
在用戶(hù)虛存中,按每 K 存放 10 條指令排列虛存地址,即 320 條指令在虛存中的存放方式為:
第 0 條—第 9 條指令為第 0 頁(yè)(對(duì)應(yīng)虛存地址為[0,9]); 第 10 條—第 19 條指令為第 1 頁(yè)(對(duì)應(yīng)虛存地址為[10,19]); 。。。。。。。。。。。。。。。。。。。。。
第 310 條—第 319 條指令為第 31 頁(yè)(對(duì)應(yīng)虛存地址為[310,319]); 按以上方式,用戶(hù)指令可組成 32 頁(yè)。
3. 計(jì)算并輸出下述各種算法在不同內(nèi)存容量下的命中率。
A. FIFO 先進(jìn)先出的算法 B. LRU 最近最少使用算法 C. LFU 最少訪(fǎng)問(wèn)頁(yè)面算法 三、
實(shí)驗(yàn)要求 1、 需寫(xiě)出設(shè)計(jì)說(shuō)明; 2、 設(shè)計(jì)實(shí)現(xiàn)代碼及說(shuō)明 3、 運(yùn)行結(jié)果;
四、
主要實(shí)驗(yàn)步驟 1、 分析算法結(jié)構(gòu); 2、 畫(huà)出算法的流程圖,即設(shè)計(jì)說(shuō)明; 3、 根據(jù)畫(huà)出的流程圖使用 C 語(yǔ)言編寫(xiě)相應(yīng)的代碼(代碼過(guò)長(zhǎng),放到最后); 程序主要由 main 函數(shù)和以下幾個(gè)函數(shù)組成:
void initialization();初始化內(nèi)存數(shù)據(jù) void FIFO();FIFO 先進(jìn)先出算法; void LRU();LRU 最久未使用算法; void LFU();LFU 最近最久未使用算法; 4、 檢查代碼,將編出的代碼編譯、鏈接,驗(yàn)證其正確性。
開(kāi)始按要求產(chǎn)生 320個(gè)隨機(jī)數(shù)將隨機(jī)數(shù)轉(zhuǎn)換成頁(yè)面用戶(hù)內(nèi)存容量i i= =4 4i i> > 32? ?FIFO 頁(yè)面置換算法LRU 頁(yè)面置換算法LFU 頁(yè)面置換算法i i= =i i+ +1 1結(jié)束N NY Y 頁(yè)面置換算法整體結(jié)構(gòu)
開(kāi)始內(nèi)存數(shù)據(jù)初始化 , 物理塊0 0< <m m< <i i 中頁(yè)面停留時(shí)間time[ [m m ]=m m+ +1 1n n= =0 0用戶(hù)內(nèi)存中是否已存在要調(diào)用的頁(yè)面用戶(hù)內(nèi)存中是否存在空物理塊N N將頁(yè)面調(diào)入空物理塊中 , 該物理塊time[ [m m ]=0 0比較所有物理塊的time[ [m m] ] , 找到最大值 ,將頁(yè)面調(diào)入最大值所在物理塊 , 該物理塊time[ [m m ]=0 0所有已經(jīng)存入頁(yè)面的內(nèi)存 time[ [m m ]++ ,n n ++N NY YY Yn n> > 320? ?結(jié)束將頁(yè)面p p[ [n n] ] 調(diào)入內(nèi)存Y YN N FIFO 頁(yè)面置換算法
開(kāi)始內(nèi)存數(shù)據(jù)初始化 , 物理塊0 0< <m m< <i i 中頁(yè)面停留時(shí)間time[ [m m ]=m m+ +1 1n n= =0 0用戶(hù)內(nèi)存中是否已存在要調(diào)用的頁(yè)面用戶(hù)內(nèi)存中是否存在空物理塊N N將頁(yè)面調(diào)入空物理塊中 , 該物理塊time[ [m m ]=0 0比較所有物理塊的time[ [m m] ] , 找到最大值 ,將頁(yè)面調(diào)入最大值所在物理塊 , 該物理塊time[ [m m ]=0 0所有已經(jīng)存入頁(yè)面的內(nèi)存 time[ [m m ]++ ,n n ++N NY YY Yn n> > 320? ?結(jié)束將頁(yè)面p p[ [n n] ] 調(diào)入內(nèi)存Y YN N存在該頁(yè)面的物理塊timg[ [m m ]=0 0 LRU 頁(yè)面置換算法
開(kāi)始內(nèi)存數(shù)據(jù)初始化 , 物理塊0 0< <m m< <i i 中頁(yè)面停留時(shí)間time[ [m m ]=m m+ +1 1n n= =0 0n n> > 50? ?將頁(yè)面p p[ [n n] ] 調(diào)入內(nèi)存比較物理塊中頁(yè)面在之前的 50 次調(diào)用中出現(xiàn)的次數(shù) , 將頁(yè)面p p[ [n n] ] 調(diào)入使用最少的頁(yè)面占用的物理塊n n> > 320? ?結(jié)束按照 LRU 頁(yè)面置換算法調(diào)入頁(yè)面n n ++Y YN NY YN N LFU 頁(yè)面置換算法
五、
實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果
六、
實(shí)驗(yàn)體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議 我做實(shí)驗(yàn)的時(shí)候,主要的難度是在幾個(gè)特殊情況的處理上,如 LRU 內(nèi)存中的頁(yè)面都是之前沒(méi)有調(diào)用過(guò)的,那怎么辦,還有就是 LFU 中還沒(méi)有達(dá)到“一定時(shí)間間隔”的條件時(shí)怎么辦?另外就是由于實(shí)驗(yàn)使用的是系統(tǒng)產(chǎn)生的隨機(jī)數(shù),所以難以驗(yàn)證實(shí)驗(yàn)結(jié)果的正確性。
實(shí)驗(yàn)產(chǎn)生隨機(jī)指令的方法是:
1、 在[0,319]的指令地址之間隨機(jī)選區(qū)一起點(diǎn) M; 2、 順序執(zhí)行一條指令,即執(zhí)行地址為 M+1 的指令; 3、 在前地址[0,M+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為 M’; 4、 順序執(zhí)行一條指令,其地址為 M’+1; 5、 在后地址[M’+2,319]中隨機(jī)選取一條指令并執(zhí)行; 6、 重復(fù) A—E,直到執(zhí)行 320 次指令。
那么,產(chǎn)生的第一個(gè)隨機(jī)起點(diǎn) M 指令是否執(zhí)行?這對(duì)結(jié)果影響比較大,若起點(diǎn) M 執(zhí)行,那么命中率至少能提高 0.2 以上!
七、
參考資料 《計(jì)算機(jī)操作系統(tǒng)》 《計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書(shū)》 《C 程序設(shè)計(jì)》 《C 語(yǔ)言程序設(shè)計(jì)_現(xiàn)代方法》 《計(jì)算機(jī)操作系統(tǒng)教程習(xí)題解答與實(shí)驗(yàn)指導(dǎo)(第二版)》 八、
實(shí)驗(yàn)代碼 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 320 #define M 32 #define R 32 #define runtime 100 //程序運(yùn)行次數(shù),保證結(jié)果的準(zhǔn)確性 int run; float average[3][32]; //取平均數(shù),使結(jié)果更加準(zhǔn)確 int s,i; //s表示產(chǎn)生的隨機(jī)數(shù),i表示物理塊數(shù) int m,n,h; //循環(huán)專(zhuān)用 int k,g,f; int sum; //缺頁(yè)次數(shù) float r; //rate命中率 int p[N]; //page頁(yè)數(shù) int a[N]; //執(zhí)行的指令 int pb[M]; //physical block用戶(hù)內(nèi)存容量(物理塊)
void FIFO(); void LRU(); void LFU(); void line(); void start(); void end(); void main() {
start();
srand((int) time (NULL)); //以計(jì)算機(jī)當(dāng)前時(shí)間作為隨機(jī)數(shù)種子
for (run=0;run<runtime;run++) //共產(chǎn)生“runtime”次隨機(jī)數(shù),保證結(jié)果的準(zhǔn)確性
{
for (n=0;n<N;n+=3)
{
s=rand()%N+0; //隨機(jī)產(chǎn)生一條指令
a[n]=s+1; //順序執(zhí)行一條指令
s=rand()%(a[n]+1); //執(zhí)行前地址指令M`
a[n+1]=s+1;
s=rand()%(N-a[n+1]-1)+(a[n+1]+1);
a[n+2]=s;
}
for (n=0;n<N;n++)
p[n]=a[n]/10; //得到指令相對(duì)的頁(yè)數(shù)
for (i=4;i<=32;i++)
{
FIFO();
LRU();
LFU();
}
}
printf("物理塊數(shù)\t FIFO\t\t LRU\t\t LFU\n");
line();
for (i=4;i<=32;i++)
{
printf("\n
%2d:",i);
for (m=0;m<3;m++)
printf("\t\t%6.4f",average[m][i]); //輸出“runtime”次運(yùn)行后的平均數(shù)
}
end(); } void initialization() //用戶(hù)內(nèi)存及相關(guān)數(shù)據(jù)初始化 {
for (n=0;n<M;n++)
pb[n]=-1;
sum=0;
r=0;
k=0;
g=-1;
f=-1; }
void FIFO() //先進(jìn)先出置換算法 {
int time[M]; //定義進(jìn)入內(nèi)存時(shí)間長(zhǎng)度數(shù)組
int max; //max表示進(jìn)入內(nèi)存時(shí)間最久的,即最先進(jìn)去的
initialization();
for(m=0;m<i;m++)
time[m]=m+1;
for (n=0;n<N;n++)
{
k=0;
for (m=0;m<i;m++)
if (pb[m]==p[n]) //表示內(nèi)存中已有當(dāng)前要調(diào)入的頁(yè)面
{
g=m;
break;
}
for (m=0;m<i;m++)
if (pb[m]==-1) //用戶(hù)內(nèi)存中存在空的物理塊
{
f=m;
break;
}
if (g!=-1)
g=-1;
else
{
if (f==-1) //找到最先進(jìn)入內(nèi)存的頁(yè)面
{
max=time[0];
for(m=0;m<i;m++)
if(time[m]>max)
{
max=time[m];
k=m;
}
pb[k]=p[n];
time[k]=0; //該物理塊中頁(yè)面停留時(shí)間置零
sum++; //缺頁(yè)數(shù)+1
}
else
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for (m=0;m<i && pb[m]!=-1;m++)
time[m]++; //物理塊中現(xiàn)有頁(yè)面停留時(shí)間+1
/*if (n==0 && i==6)
printf("\n");
if (i==6 && n<=30)
{
printf("%d......",p[n]);
for (m=0;m<i;m++)
printf("%d ",pb[m]);
printf("\n");
}*/
}
r=1-(float)sum/N;
average[0][i]+=r/runtime; }
void LRU() //最近最少使用算法 {
int time[M];
int max;
initialization();
for (m=0;m<i;m++)
time[m]=m+1;
for (n=0;n<N;n++)
{
k=0;
for (m=0;m<i;m++)
if (pb[m]==p[n])
{
g=m;
break;
}
for (m=0;m<i;m++)
if (pb[m]==-1)
{
f=m;
break;
}
if (g!=-1)
{
time[g]=0;
g=-1;
}
else
{
if (f==-1)
{
max=time[0];
for (m=0;m<i;m++)
if (time[m]>max)
{
k=m;
max=time[m];
}
pb[k]=p[n];
time[k]=0;
sum++;
}
else
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for (m=0;m<i && pb[m]!=-1;m++)
time[m]++;
}
r=1-(float)sum/N;
average[1][i]+=r/runtime; }
void LFU() //最少訪(fǎng)問(wèn)頁(yè)面算法 {
initialization();
int time_lru[M],time[M],min,max_lru,t;
for (m=0;m<i;m++)
{
time[m]=0;
time_lru[m]=m+1;
}
for (n=0;n<N;n++)
{
k=0;
t=1;
for (m=0;m<i;m++)
if (pb[m]==p[n])
{
g=m;
break;
}
for (m=0;m<i;m++)
if (pb[m]==-1)
{
f=m;
break;
}
if (g!=-1)
{
time_lru[g]=0;
g=-1;
}
else
{
if (f==-1)
{
if (n<=R) //將最少使用的間隔時(shí)間定位為R個(gè)單位
{
max_lru=time_lru[0]; //在未達(dá)到“一定時(shí)間”的要求時(shí),先采用LRU進(jìn)行頁(yè)面置換
for (m=0;m<i;m++)
if (time_lru[m]>max_lru)
{
k=m;
max_lru=time_lru[m];
}
pb[k]=p[n];
time_lru[k]=0;
sum++;
}
else
{
for (m=0;m<i;m++) //計(jì)算一定時(shí)間間隔內(nèi)物理塊中的頁(yè)面使用次數(shù)
for (h=n-1;h>=n-R-1;h--)
if (pb[m]==p[h])
time[m]++;
min=time[0];
for (m=0;m<i;m++)
if (time[m]<min)
{
min=time[m];
k=m;
}
for (m=0;m<i;m++) //應(yīng)對(duì)出現(xiàn)頁(yè)面使用次數(shù)同樣少的情況
if (time[m]==min)
t++;
if (t>1) //若使用次數(shù)同樣少,將次數(shù)相同的頁(yè)面按照LRU進(jìn)行頁(yè)面置換
{
max_lru=time_lru[k];
for (m=0;m<i && time[m]==min;m++)
if (time_lru[m]>max_lru)
{
k=m;
max_lru=time_lru[m];
}
}
pb[k]=p[n];
time_lru[k]=0;
sum++;
}
}
else
{
pb[f]=p[n];
time_lru[f]=0;
sum++;
f=-1;
}
}
for (m=0;m<i && pb[m]!=-1;m++)
time_lru[m]++;
}
r=1-(float)sum/N;
average[2][i]+=r/runtime; } void line()
//美化程序,使程序運(yùn)行時(shí)更加明朗美觀 {
printf("------------------------------------------------------------------"); } void start()
//表示算法開(kāi)始 {
line();
printf("\n
頁(yè)面置換算法開(kāi)始\n");
printf("
——Designed by Zhang Hong\n");
line();
printf("\n\n"); } void end()
//表示算法結(jié)束 {
printf("\n");
line();
printf("\n
頁(yè)面置換算法結(jié)束,謝謝使用\n");
line(); }
推薦訪(fǎng)問(wèn): 操作系統(tǒng) 實(shí)驗(yàn) 報(bào)告同志們:今天這個(gè)大會(huì),是市委全面落實(shí)黨要管黨、從嚴(yán)治黨要求的一項(xiàng)重大舉措,也是對(duì)縣市區(qū)委書(shū)記履行基層黨建工作第一責(zé)任人情況的一次集中檢閱,同時(shí)是對(duì)全市基層黨建工作的一次再部署、再落實(shí)的會(huì)議。前面,**
***年,我認(rèn)真履行領(lǐng)班子、帶隊(duì)伍、抓黨員、保穩(wěn)定的基層黨建工作思路,以學(xué)習(xí)貫徹習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想和黨的十九大歷次全會(huì)精神為主線(xiàn),以市局基層黨建工作考核細(xì)則為落腳點(diǎn),落實(shí)全面從嚴(yán)治黨主體
根據(jù)會(huì)議安排,現(xiàn)將2022年履行抓基層黨建工作職責(zé)情況報(bào)告如下:一、履職工作特色和亮點(diǎn)1 突出政治建設(shè),著力在思想認(rèn)識(shí)上提高。牢固樹(shù)立抓黨建就是抓政績(jī)的理念,以“黨建工作抓引領(lǐng)、社區(qū)治理求突破,為民服
2022年以來(lái),在**黨委的正確領(lǐng)導(dǎo)下,堅(jiān)持以習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想為指導(dǎo),深入學(xué)習(xí)宣傳貫徹黨的二十大精神,以黨建工作為統(tǒng)領(lǐng),扎實(shí)開(kāi)展夯實(shí)“三個(gè)基本”活動(dòng),以“四化四力”行動(dòng)為抓手,聚力創(chuàng)建
各位領(lǐng)導(dǎo),同志們:根據(jù)會(huì)議安排,現(xiàn)就2022年度抓基層黨建工作情況匯報(bào)如下:一、主要做法及成效(一)強(qiáng)化政治引領(lǐng)。一是不斷強(qiáng)化理論武裝。堅(jiān)持通過(guò)黨組會(huì)、中心組學(xué)習(xí)會(huì)和“三會(huì)一課”,第一時(shí)間、第一議題學(xué)
2022年度抓基層黨建工作述職報(bào)告按照黨委工作部署,現(xiàn)將本人2022年度抓基層黨建工作情況報(bào)告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發(fā)展首要位置,積極開(kāi)展
2022年,是我在數(shù)計(jì)系黨總支書(shū)記這個(gè)新崗位上度過(guò)的第一個(gè)完整的工作年度。回首一年來(lái)在校黨委的正確領(lǐng)導(dǎo)下,與數(shù)計(jì)系領(lǐng)導(dǎo)班子和全體師生共同走過(guò)的日子,艱辛歷歷在目,收獲溫潤(rùn)心田。作為黨總支書(shū)記,我始終牢
按照考核要求,現(xiàn)將本人一年來(lái),作為統(tǒng)戰(zhàn)部長(zhǎng)履行職責(zé)、廉潔自律等方面情況報(bào)告如下:一、著眼增強(qiáng)政治素質(zhì),不斷深化理論學(xué)習(xí)堅(jiān)持把旗幟鮮明講政治作為履職從政的第一位要求,帶領(lǐng)統(tǒng)戰(zhàn)系統(tǒng)干部堅(jiān)決擁護(hù)“兩個(gè)確立”
**年,緊緊圍繞黨工委、管委會(huì)的決策部署,全體人員團(tuán)結(jié)協(xié)作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開(kāi)拓進(jìn)取,認(rèn)真履職盡責(zé),圓滿(mǎn)完成各項(xiàng)工作任務(wù)。一、個(gè)人思想政治狀況檸檬文苑www bgzjy
按照縣委關(guān)于開(kāi)展抓基層黨建述職評(píng)議會(huì)議的有關(guān)要求,經(jīng)請(qǐng)示縣委組織部同意,今天,我們?cè)诖苏匍_(kāi)2022年度基層黨組織書(shū)記抓基層黨建述職評(píng)議會(huì)議。1 首先,請(qǐng)**黨委書(shū)記,**同志述職。**黨委能夠主動(dòng)研究