91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

SPOOLING技術 一、實驗目的 理解和掌握SPOOLING技術。 二、實驗內容 編寫程序實現SPOOLING技術的模擬。 三、實驗要求 1、設計一個實現SPOOLING技術的進程 設計一個SPOOLING輸出進程和兩個請求輸出的用戶進程及一個SPOOLING輸出服務程序。 SPOOLING輸出進程工作時,根據請求塊記錄的各進程要輸出的信息,將其實際輸出到打印機或顯示器。這里,SPOOLING進程與請求輸出的用戶進程可并發運行。 2、設計進程調度算法 進程調度采用隨機算法,這與進程輸出信息的隨機性相一致。兩個請求輸出的用戶進程的調度概率各為45%,SPOOLING輸出進程為10%,這由隨機數發生器產生的隨機數模擬決定。 3、進程狀態 進程基本狀態有3種,分別為可執行、等待和結束??蓤绦袪顟B就是進程正在運行或等待調度的狀態;等待狀態又分為等待狀態1、等待狀態2、等待狀態3。 狀態變化的條件為: (1)進程執行完成時,置為“結束”狀態。 (2)服務程序在將輸出信息送至輸出井時,如發現輸出井已滿,將調用進程置為“等待狀態1”。 (3)SPOOLING進程在進行輸出時,若輸出井空,則進入“等待狀態2”。 (4)SPOOLING進程輸出一個信息塊后,應立即釋放該信息塊所占的輸出井空間,并將正在等待輸出的進程置為“可執行狀態”。 (5)服務程序在輸出信息到輸出井并形成輸出請求信息塊后,若SPOOLING進程處于等待狀態則將其置為“可執行狀態”。 (6)當用戶進程申請請求輸出塊時,若沒有可用請求塊時,調用進程進入“等待狀態3”。 4、數據結構 1)進程控制塊PCB struct pcb { int status; int length; }pcb[3]; 其中status表示進程狀態,其取值: 0 表示可執行狀態; 1 表示等待狀態1; 2 表示等待狀態2; 3 表示等待狀態3 2)請求輸出塊reqblock struct{ int reqname;//請求進程名 int length;// 本次輸出信息長度 int addr;// 信息在輸出井的首地址 }reqblock[10]; 3)輸出井BUFFER SPOOLING系統為每個請求輸出的進程在輸出井中分別開辟一個區。本實驗可設計一個二維數組(int buffer[2][10])作為輸出井。每個進程在輸出井最多可占用10個位置。 5、編程說明 為兩個請求輸出的用戶進程設計兩個輸出井。每個可存放10個信息,即buffer[2][10]。當用戶進程將其所有文件輸出完時,終止運行。 為簡單起見,用戶進程簡單的設計成:每運行一次,隨機輸出數字0~9之間的一個數,當輸入10個數時形成一個請求信息塊,填入請求輸出信息塊reqblock結構中。

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
using?namespace?std;

struct?pcb
{
int?status;?//進程狀態
int?length;//輸出長度
}*PCB[3];
/*
進程狀態status的可能取值:
0:可執行
1:輸出井滿等待
2:輸出井空等待
3:請求輸出塊用完時等待
4:進程結束
*/
struct?req
{
int?reqname;
int?length;
int?addr;
}reqblock[10];
int?buffer[2][100];
int?head=0tail=0;
int?t1=5t2=5;
void?request(int?i);//i=1?表示用戶進程1;i=2?表示用戶進程2
void?spooling();

int?main()
{
for(int?l=0;l<2;l++)
for(int?j=0;j<100;j++)
buffer[l][j]=0;
for(int?n=0;n<3;n++)
{
struct?pcb?*?tmpPcb?=?(struct?pcb*)malloc(sizeof(struct?pcb));
tmpPcb->status?=0;
tmpPcb->length?=?0;
PCB[n]=tmpPcb;
}
// cout<<“兩個用戶進程的請求分別為55“< cout<<“輸入第一個用戶的請求:“;cin>>t1;
cout<<“輸入第二個用戶的請求:“;cin>>t2;
srand((unsigned)time(NULL));
while(1)
{
int?k;
k=rand()%100;
if(k<=45)
{
if((PCB[0]->status==0)&&(t1>0))
{request(1);}
}
else?if((k<=90)&&(t2>0))
{
if(PCB[1]->status==0)
{request(2);}
}
else
{spooling();}
if((t1==0)&&(t2==0)&&(head==tail))
break;
}
for(int?m=0;m<3;m++)
{

評論

共有 條評論