xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡介

SPOOLING假脫機輸入/輸出技術廣泛應用于各種計算機的I/O。該技術通過采用預輸入和緩輸出的方法,使用共享設備的一部分空間來模擬獨占設備,以提高獨占設備的利用效率。為了理解該技術,設計一個SPOOLING假脫機輸出的模擬程序。

資源截圖

代碼片段和文件信息

#include/*包含隨機函數的頭文件*/
#include/*包含時間函數的頭文件*/
#include/*包含標準輸入輸出函數的頭文件*/
struct?pcb{ /*定義進程控制塊結構體*/
int?status;
int?length;
}*PCB[3];
struct?req{ /*定義請求輸出塊結構體*/
int?reqname;
int?length;
int?addr;
}reqblock[10];/*申請10個輸出請求塊*/
int?buffer[2][100];/*定義一個而維數組*/
int?head=0tail=0;
int?t1=5t2=5;/*t1t2各可以申請數據5次*/
void?request(int?i);/*定義一個request()函數*/
void?spooling();/*定義一個spooling()函數*/


/*在主函數里,初始化而維數組Buffer[l][j]、pcb。對于三個進程,誰先執行,我們用了一個隨機函數K,根據K的值和進程的狀態來決定誰先執行*/
void?main()/*定義一個main()函數*/
{
int?ljnkm;
for(l=0;l<2;l++)
for(j=0;j<100;j++)
buffer[l][j]=0;
for(n=0;n<3;n++)/*有三個進程控制塊*/
{
struct?pcb?*tmpPcb=(struct?pcb*)malloc(sizeof(struct?pcb));?/*為pcb申請空間*/
tmpPcb->status=0;
tmpPcb->length=0;
PCB[n]=tmpPcb; /*初始化pcb*/
}
printf(“兩個用戶進程的請求分別為5,5\n“);
srand((unsigned)time(NULL)); /* 產生一個隨即數*/
while(1)
{
k=rand()%100;
printf(“K=%d\n“k);
if(k<=45)
{
if((PCB[0]->status==0)&&(t1>0))
request(1);/*如果k在0-45執行用戶進程1*/
}
else?if((k<=90)&&(t2>0))
{
if(PCB[1]->status==0)
request(2);/*如果k在46-90執行用戶進程1*/
}
else??/*?90 {
printf(“執行SPLOOING語句!!\n“);
spooling();
}
if((t1==0)&&(t2==0)&&(head==tail))
break;/*進程都結束時返回*/
}
for(m=0;m<3;m++)
{
free(PCB[m]);/*輸出#輸出信息時刪除該信息塊所占輸出#的空間*/
PCB[m]=NULL;
}
getchar();/*停一下*/
}


/*request()函數里,主要把模擬請求的用戶信息輸入到二維數組里,t1,t2各請求5次,,每請求完一次,t1t2中就有一個減一,Head加一(意思是指向下一個請求),Tail是統計請求個數,Tail=9時用戶請求完畢。至于模擬什么數據,也是由一個隨機數J決定的*/
void?request(int?i)
{
int?index;
int?jmlength=0;
int?s=0;
struct?req*run;/*給req定義一個指針run*/
if(i==1)
t1--;/*每執行一次用戶1請求的數據,t1都減1*/
else
t2--;/*每執行一次用戶2請求的數據,t2都減1*/
printf(“執行請求語句!!、\n用戶%d?“i);
printf(“請求數據:\n“);
run=&reqblock[tail%10];
run->reqname=i;
run->length=0;
if(tail==0)
run->addr=0;
else
{
printf(“tail=%d\n“tail);
index=(tail-1)%10;
run->addr=reqblock[index].addr+reqblock[index].length;/*輸出塊的地址變成上一個地址頭加上一個塊長*/
}
for(m=0;m<100;m++)
{
if(buffer[i-1][m]==0)??/*如果輸出塊的?。。。。。。。。。?!*/
{
run->addr=m;
break;
}
}
srand((unsigned)time(NULL));
while(1)
{
j=rand()%10; /*j=0表示什么??????形成一個請求信息塊*/
printf(“j=%d\n“j);
if(j==0)
{
run->length=length;
break;/*j=0時退出模擬請求信息輸出*/
}
buffer[i-1][(run->addr+length)]=s;
printf(“buffer[%d][%d]=%d?“i-1run->addr+lengths);/*模擬請求數據存入輸出#*/
s++;
length++;
}
printf(“\n“);
PCB[i-1]->length=length+1;/*進程長度為length*/
length=0;
if(2==PCB[2]->status)
PCB[2]->status=0;
tail++; /*每一次請求tail加一*/
}


/*spooling()函數里主要用來把處理過的用戶信息輸出到二維數組里(即輸出#)以及進行進程狀態的改變*/
void?spooling()
{
int?ij;
struct?req*run;
printf(“調用SPOOLING輸出服務程序輸出數據:\n“);
run=&reqblock[head%10];/*從第一個請求開始*/
printf(“reqname=%d“run->reqname);
printf(“\n“);
for(i=0;ilength;i++)??/*輸出輸出井數據*/
{
printf(“buffer[%d][%d]=%d“run->reqnamerun->addr+ibuffer[run->reqname-1][run->addr+i]);
printf(“ “)

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????3718??2009-12-04?09:21??spooling\spooling.cpp

?????文件???????3425??2009-12-04?09:21??spooling\spooling.dsp

?????文件????????524??2009-12-04?09:27??spooling\spooling.dsw

?????文件??????33792??2009-12-04?09:27??spooling\spooling.ncb

?????文件??????48640??2009-12-04?09:27??spooling\spooling.opt

?????文件????????754??2009-12-04?09:22??spooling\spooling.plg

?????文件????????203??2009-12-04?09:27??spooling\spooling.sln

?????目錄??????????0??2009-12-04?09:28??spooling

-----------?---------??----------?-----??----

????????????????91056????????????????????8


評論

共有 條評論