추천자료
운영체제론 시험대비(총정리)
[IT, 운영체제, OS, SYSTEM] 응용운영체제 설명
[정보처리,정보처리기사,정보처리산업기사,기사,산업기사,기출문제,요점정리] 정보처리기사,산업기사 요점정리 및 기출문제
무역개론 레포트
[컴공]네트웍과 NT에 관한 자료입니다.
[컴공]컴퓨터 구조 TP.
[컴공]WWW과 데이터베이스
[전략정보시스템] Web Log Mining `웹로그마이닝`
■조지 W.부시 정부의 신군사전략과 동북아 안보정책
페덱스(FedEx) 마케팅 전략
소개글
[컴퓨터운영체제] The HOST Dispatcher Shell에 대한 자료입니다.
목차
목차
I. 프로그램 개요
1. Purpose of Project
2. Project Specification
II. Dispatcher의 구조
1. 메모리 & 리소스 할당
2. Dispatching(CPU 할당)
Ⅲ. 메모리 할당 알고리즘
1. First-fit Algorithm
Ⅳ. Multilevel Dispatching Scheme
1. Multilevel dispatching scheme
2. 메모리 할당 Scheme
3. 리소스 할당 Scheme
4. Schemes Used by Real-OS
5. 개선할 사항
Ⅴ. 실행 내용 및 결과
Ⅵ. 소스 코드
본문내용
Resource* leftResource = NULL; // allocate resource
mainMemory* mainMemory; //main Mem
char *filename;
qHeader* DispatchQueue; // Dispatch Queue
qHeader* UserJobQueue; // user job Queue
qHeader* RealTimeQueue; // Realtime Queue
qHeader* firstQueue; // priority is 1
qHeader* secondQueue; // priority is 2
qHeader* thirdQueue; // priority is 3
// make headers
DispatchQueue = makeHeader();
UserJobQueue = makeHeader();
RealTimeQueue = makeHeader();
firstQueue = makeHeader();
secondQueue = makeHeader();
thirdQueue = makeHeader();
//init resource
leftResource = (Resource*)malloc(sizeof(Resource));
leftResource->CDdriver = NUMOFCDROM;
leftResource->modem = NUMOFMODEM;
leftResource->printer = NUMOFPRINTER;
leftResource->scanner = NUMOFSCANNER;
//init mainMemory
mainMemory = getmainMemory(SIZE_OF_MEMORY);
if (args < 2) //show useage
{
printf("USAGE : hostd \n");
exit(0);
}else
filename = argv[1]; //filename
FILE *f = fopen(filename, "r"); //open
if (f == NULL) //can't open
{
printf("file open error\n");
exit(0);
}
// read job info. from list file
while(fscanf(f, "%d, %d, %d, %d, %d, %d, %d, %d\n",
&jobInfo[0], &jobInfo[1], &jobInfo[2], &jobInfo[3], &jobInfo[4], &jobInfo[5], &jobInfo[6], &jobInfo[7]) != EOF)
{
emptyPCB = makeNewPCB(); // make empty PCB
emptyPCB->args[0] = "./sigtrap"; // name of program
emptyPCB->args[1] = NULL; // for execvp(args[0], args)
emptyPCB->arrivaltime = jobInfo[0]; // arrival time
emptyPCB->firstPriority = jobInfo[1]; // priority
emptyPCB->currentPriority = jobInfo[1]; //
emptyPCB->leftTime = jobInfo[2]; // time left
emptyPCB->totalTime = jobInfo[2]; // total time for running
emptyPCB->memorySize = jobInfo[3]; // memory required
emptyPCB->resource->printer = jobInfo[4]; // printer
emptyPCB->resource->scanner = jobInfo[5]; // scanner
emptyPCB->resource->modem = jobInfo[6]; // modem
emptyPCB->resource->CDdriver = jobInfo[7]; // cdrom
enQueue(DispatchQueue, emptyPCB); // into dispatch Q
}
fclose(f); //finish reading file
//start dispatch
timer = 0;
while(1)
{
//If all queue are empty...
if(((emptyPCB = checkQueue(DispatchQueue)) == NULL) &&
((emptyPCB = checkQueue(RealTimeQueue)) == NULL) &&
((emptyPCB = checkQueue(UserJobQueue)) == NULL) &&
((emptyPCB = checkQueue(firstQueue)) == NULL) &&
((emptyPCB = checkQueue(secondQueue)) == NULL) &&
((emptyPCB = checkQueue(thirdQueue)) == NULL) &&
(runningUPCB == NULL)) break;
// job dispatching
// movePCB :: from RealTimeQueue to UserJobQueue
while((movePCB = checkQueue(DispatchQueue)) != NULL){
// process arrives
if(movePCB->arrivaltime firstPriority == 0){
enQueue(RealTimeQueue,movePCB);
}
//to user job queue
else if(movePCB->firstPriority firstPriority >= 1) {
enQueue(UserJobQueue,movePCB);
}else
break;
}else
break;
} //finish dispatching
//resource and memory allocation for User Process
while((tempPCB = checkQueue(UserJobQueue)) != NULL )
{
//check resource and memory
if(isEnoughMemory(mainMemory, tempPCB) && checkResource(leftResource, tempPCB)){
//there are enough resources and memory for process
movePCB = deQueue(UserJobQueue);
//allocate memory and resource
movePCB->allocatedMemory = memoryAllocate(mainMemory,movePCB);