當前位置:首頁 » 課程設計 » 生產調度課程

生產調度課程

發布時間: 2020-11-18 05:26:29

⑴ 操作系統課程設計《兩道批處理系統的兩級調度-2》 請發郵箱[email protected],多謝各位大神啦!

設計1 進程管理
設計內容
進程的創建和控制
編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。每個進程在屏幕上顯示一個字元,記錄屏幕上的顯示結果,並分析原因。修改以編寫的程序,將每個進程輸出一個字元改為每個進程輸出一句話。
進程的軟中斷通信
使用系統調用fork()創建兩個子進程,使用系統調用signal()讓父進程捕捉用alarm函數設置時鍾的時間段終止時產生的信號,當捕捉到該信號後,父進程使用系統調用Kill()向兩個子進程發出信號,子進程捕捉到信號後分別輸出子進程被殺死信息後終止,父進程等待兩個子進程終止後,輸出父進程被殺死信息後終止程序。記錄屏幕上的顯示結果,並分析原因。
進程的管道通信
使用系統調用pipe()建立一個管道;兩個子進程分別向管道寫信息,父進程則從管道讀出來自子進程的信息,顯示在屏幕上。
記錄屏幕上的顯示結果,並分析原因。
設計2 進程的同步與互斥
設計內容
用程序實現生產者-消費者問題
問題描述: 一個倉庫可以存放K件物品。生產者每生產一件產品,將產品放入倉庫,倉庫滿了就停止生產。消費者每次從倉庫中去一件物品,然後進行消費,倉庫空時就停止消費。
設計3 存儲管理
設計內容
將指令序列轉換為用戶虛存中的請求調用頁面流。
頁面大小為1K
用戶內存容量為4頁到40頁
用戶外存的容量為40k
在用戶外存中,按每K存放10條指令,400條指令在外存中的存放方式為:
0-9條指令為第0頁
10-19條指令為第1頁
。。。。。
390-399條指令為第39頁
按以上方式,用戶指令可組成40頁
通過隨機數產生一個指令序列,共400個指令(0-399)
模擬請求頁式存儲管理中頁面置換演算法
執行一條指令,首先在外存中查找所對應的頁面和頁面號,然後將此頁面調入內存中,模擬並計算下列各述演算法在不同內存容量下的命中率(頁面有效次數/頁面流的個數)
先進先出的演算法(FIFO)
最久未使用演算法(LRU)
提示
隨機指令的產生
rand() 或srand()
用戶內存中頁面控制結構採用鏈表
頁面控制結構
struct p_str{
int pagenum; /* 頁號 */
int count; /* 訪問頁面的次數 */
struct p_str next; /* 下一指針 */
}p_str;
#define false 0
#define true 1
#define n 4
#define m 10
struct
{
char type[10];
int count;
int remain;
int address;
}equiptype[n];
struct
{
int number;
int status;
int remain;
char jobname[4];
int lnumber;
}equipment[m];
allocate(J,type,mm)
char *J,*type;
int mm;
{
int i,t,j;

i=0;
while(i<n&&strcmp(equiptype[i].type,type)!=0)
i++;
if(i>=n)
{
printf("該類設備,設備配失敗");
return(false);
}
if(equiptype[i].remain<1)
{
printf("該類設備足配失敗");
return(false);
}
t=equiptype[i].address;
while(!(equipment[t].status==1 && equipment[t].remain==0))
t++;

equiptype[i].remain--;
equipment[t].remain=1;
strcpy(equipment[t].jobname,J);
equipment[t].lnumber=mm;
}
reclaim (J,type)
char J,type;
{
int i,t,j,k,nn;
i=0;
while(i<n&&strcmp(equiptype[i].type,type)!=0)
i++;
if(i>=n)
{
printf("該類設備,設備收失敗");
return(false);
}
t=equiptype[i].address;
j=equiptype[i].count;
k=0;
nn=t+j;
for(;t<nn;t++)
if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1)
{
equipment[t].remain=0;
k++;
}
equiptype[i].remain= equiptype[i].remain+k;
if(k==0)
printf("該作業沒使用該類設備\n");
}
main( )
{
char J[4];
int i,mm,a;
char type[10];

strcpy(equiptype[0].type,"input");
equiptype[0].count=2;
equiptype[0].remain=2;
equiptype[0].address=0;
strcpy(equiptype[1].type,"printer");
equiptype[1].count=3;
equiptype[1].remain=3;
equiptype[1].address=2;
strcpy(equiptype[2].type,"disk");
equiptype[2].count=4;
equiptype[2].remain=4;
equiptype[2].address=5;
strcpy(equiptype[3].type,"tape");
equiptype[3].count=1;
equiptype[3].remain=1;
equiptype[3].address=9;

for(i=0;i<10;i++)
{
equipment[i].number=i;
equipment[i].status=1;
equipment[i].remain=0;
}
while(1)
{
printf("\n0-退1-配2-收3-顯示");
printf("\n選擇功能項(0~3):");
scanf("%d",&a);
switch(a)
{
case 0 :
exit(0);
case 1 :
printf("輸入作業名、作業所需設備類設備相號");
scanf("%s%s%d",J,type,&mm);
allocate(J,type,mm);
break;
case 2:
printf("輸入作業名作業歸設備類");
scanf("%s%s",J,type);
reclaim(J,type);
break;
case 3:
printf("\n輸設備類表\n");
printf(" 設備類型 設備總量 空閑設備\n");
for(i=0;i<n;i++)
printf("%9s%8d%9d\n",equiptype[i].type,equiptype[i].count, equiptype[i].remain);
printf("輸設備表:\n");
printf("絕號 /壞 已/未配 佔用作業名 相號\n");
for(i=0;i<m;i++)
printf("%3d%8d%9d%12s%8d\n",equipment[i].number, equipment[i].status,equipment[i].remain,equipment[i].jobname,
equipment[i].lnumber);
}
}
}

⑵ 只要流程圖車廂調度問題

通過考察各個站點間的距離,發現每6秒將可能出現車到站的事件。

假設車站總有足夠的車發出,考慮單行方向。

Bus_on_e為發車次數,Bus_on_e – bus_on_s為在線車數

初始化t=0

bus_on_e=0;

bus_on_s=0;

站點人數station(i)(j)=0;

站點將下車人數free(i)(j)=0;

開始(以6秒為步長)(每6秒線上將有可能有一輛車到某一站)

站點人數改變:station(i)(j)= station(i)(j)+p(i)(j)*6

站點將下車人數改變:free(i)(j)=free(i)(j)+f(i)(j)*6

遍歷所有在線車的位置(車是否到達站點bus_opp(i)?=車站位置)i=bus_on_s:1:bus_on_e




判斷車是否在終點bus_opp(n)?=end?
改變車的位置bus_opp(n)+=(6*20/60)




減少在線車數量bus_on_s+=1

改變車上人數Num(n)=Num(n)+station(i)(j)-free(i)(j)

車到終點不再行駛bus_opp(n)=10000

改變車的位置bus_opp(n)+=(6*20/60)

計算滿意率

計算滿意率

判斷是否為發車時間(最短發車間隔為60秒)Now-last(上一次發車時間)?=T(發車間隔)




增加車數bus_on_e+=1,bus_on_e+1即為車的編號

初始化車bus_opp(bus_on_e+1)=0;

初始化車人數為第一站人數Num(bus_on_e+1)=station(i)(1)

結束:t=60*60*18;

⑶ 操作系統這門課程第十章I/O管理和磁碟調度的知識點有哪些

操作系統這門課第十章I/O管理和磁碟調度的知識點包含章節導引,第一節I/O設備及功能,第二節I/O管理設計及I/O緩沖,第三節磁碟調度,第四節RAID,第五節磁碟緩存與LinuxI/O,。

⑷ 運籌學的課程綜合性實驗報告《航班降落調度》

sets:
plane/1..10/:x,fine,earliest,lastest,target;
link(plane,plane):wait,y;
endsets

data:
!最早到達時間;
earliest=129 195 89 96 110 120 124 126 135 160;

!最晚到達時間;
lastest=559 744 510 521 555 576 577 573 591 657;

!目標時間;
target=155 258 98 106 123 135 138 140 150 180;

!罰金;
fine=10 10 30 30 30 30 30 30 30 30;

!相鄰降落之間的間隔時間矩陣;
wait=0 3 15 15 15 15 15 15 15 15 !1;
3 0 15 15 15 15 15 15 15 15 !2;
15 15 0 8 8 8 8 8 8 8 !3;
15 15 8 0 8 8 8 8 8 8 !4;
15 15 8 8 0 8 8 8 8 8 !5;
15 15 8 8 8 0 8 8 8 8 !6;
15 15 8 8 8 8 0 8 8 8 !7;
15 15 8 8 8 8 8 0 8 8 !8;
15 15 8 8 8 8 8 8 0 8 !9;
15 15 8 8 8 8 8 8 8 0; !10;
enddata

min=@sum( plane:fine(i)*@abs( x(i)-target(i) ) );
@for(plane(i):@bnd(earliest(i),x(i),lastest(i)));!最早降落時間和最遲降落時間限制;
@for(plane(i):@for(plane(j) | i#ne#j:y(i,j)=@if(x(i) #le# x(j),1,0)));!飛機i比飛機j早降落,y(i,j)=1,否則為0;
@for(link(i,j) | i#ne#j:(y(i,j)+y(j,i))=1);
@for(plane(i):@for(plane(j) | i#ne#j:x(i)+wait(i,j)<=x(j)));
@for(plane:@gin(x));
@for(link:@bin(y));

這個代碼大概可以表示,但是還是有錯誤,期待高手修改一下。

⑸ 有誰有程式控制交換的課程設計 周期級調度管理程序設計 具體任務是 1)用戶群摘掛機識別程序設計。 2)脈沖號

這個嘛,我不了解!

⑹ 操作系統這門課程第八章單處理器調度的知識點有哪些

操作系統這門課第八章單處理器調度的知識點包含章節導引,第一節進程調度類型及基本概念,第二節調度演算法,。

⑺ 操作系統課程設計

完整的設計報告和應用程序,已經發你郵箱了!

⑻ 操作系統課程設計任務書:進程調度演算法的設計

哥們不是華航的吧,,怎麼都一樣的作業啊

⑼ 數據結構課程設計 車廂調度問題

隨便測試了點數據, 沒發現有什麼錯誤...

#include <stdio.h>
#include <stdlib.h>
#define LEN 16384
typedef char Data;
typedef struct Stack
{
Data *data;
Data *end;
}Stack;
Stack A,B,C,D;
int total;
Data head;
Data end;
Data a,b,c;
int ns;
unsigned long min = 0x7FFFFFFF, count;
char res[LEN], tmp[LEN], *p = tmp;
#define EOD (127)

void Init ( Stack *a, int len )
{
a->data = (Data*) malloc ( len * sizeof(Data) );
memset ( a->data, 0, len * sizeof(Data) );
a->end = a->data - 1;
}
void ReadData ( void )
{
int i;
FILE *fp;
fp = fopen ( "input.txt", "r" );
if ( fp == NULL )
exit ( __COUNTER__ );

fscanf ( fp, "%d", &total );
if ( total < 1 )
{
fclose ( fp );
exit ( __COUNTER__ );
}

Init ( &A, total+1 );
Init ( &B, total+1 );
Init ( &C, total );
Init ( &D, total+1 );
fscanf ( fp, "%s", A.data );
end = head = A.data[0];
for ( i = 1; A.data[i] != 0; i++ )
{
if ( head > A.data[i] ) head = A.data[i];
if ( end < A.data[i] ) end = A.data[i];
}
A.end = A.data + i - 1;
ns = 1;
a = b = c = EOD;
end++;
fclose ( fp );
}

void End ( void )
{
FILE *fp;
free ( A.data );
free ( B.data );
free ( C.data );
free ( D.data );
fp = fopen ( "output.txt", "w" );
if ( fp == NULL )
{
fclose ( fp );
exit ( __COUNTER__ );
}
if ( min == 0x7FFFFFFF )
sprintf ( tmp, "No Solution!\n" );
else
sprintf ( tmp, "%d\n%s", min, res );
fprintf ( fp, "%s", tmp );
fprintf ( stdout, "%s", tmp );
fclose ( fp );
}

void Show ( Stack a, char *s )
{
char *tmp, *pc;
char *p = (char*)a.data;
pc = tmp = (char*) malloc ( total + 1 );
while ( p <= a.end )
*pc++ = *p++;
*pc = 0;
printf ( "%s%s", tmp, s );
}

void Calc ( Data d )
{
if ( p > tmp + LEN )
{
fprintf ( stdout, "!!\n" );
return;
}
printf ( "===================================\nA: " );
Show ( A, "\tB: " );
Show ( B, "\tC: " );
Show ( C, "\tD: " );
Show ( D, "\n" );
if ( d == end )
{
if ( min > count )
{
min = count;
strcpy ( res, tmp );
return;
}
}
count++;
if ( A.end >= A.data )
a = *A.end;
else
a = EOD;
if ( B.end >= B.data )
b = *B.end;
else
b = EOD;
if ( C.end >= C.data )
c = *C.end;
else
c = EOD;
if ( a == d )
{
*++D.end = a;
A.end--;
p += sprintf ( p, "%cAD\n", a );
Calc ( d + 1 );
p -= 4;
count--;
D.end--;
A.end++;
return;
}
if ( b == d )
{
*++D.end = b;
B.end--;
p += sprintf ( p, "%cBD\n", b );
Calc ( d + 1 );
p -= 4;
count--;
D.end--;
B.end++;
return;
}
if ( c == d )
{
*++D.end = c;
C.end--;
p += sprintf ( p, "%cCD\n", c );
Calc ( d + 1 );
p -= 4;
count--;
C.end++;
D.end--;
return;
}
if ( a != EOD )
{
Data tmpA = a;
*++B.end = a;
A.end--;
p += sprintf ( p, "%cAB\n", a );
Calc ( d );
p -= 4;
B.end--;
a = tmpA;
*++C.end = a;
p += sprintf ( p, "%cAC\n", a );
Calc ( d );
p -= 4;
C.end--;
A.end++;
}
if ( b != EOD )
{
*++C.end = b;
B.end--;
p += sprintf ( p, "%cBC\n", b );
Calc ( d );
p -= 4;
C.end--;
B.end++;
}
count--;
}

void main ( void )
{
ReadData();
Calc( head );
End();
}

熱點內容
幼師專業怎麼樣 發布:2021-03-16 21:42:13 瀏覽:24
音樂小毛驢故事 發布:2021-03-16 21:40:57 瀏覽:196
昂立中學生教育閘北 發布:2021-03-16 21:40:47 瀏覽:568
建築業一建報考條件 發布:2021-03-16 21:39:53 瀏覽:666
2017年教師資格注冊結果 發布:2021-03-16 21:39:49 瀏覽:642
中國教師資格證查分 發布:2021-03-16 21:39:41 瀏覽:133
踵什麼成語有哪些 發布:2021-03-16 21:38:20 瀏覽:962
東營幼師專業學校 發布:2021-03-16 21:35:26 瀏覽:467
機械電子研究生課程 發布:2021-03-16 21:33:36 瀏覽:875
杭州朝日教育培訓中心怎麼樣 發布:2021-03-16 21:33:28 瀏覽:238