[컴퓨터운영체제] The HOST Dispatcher Shell

 1  [컴퓨터운영체제] The HOST Dispatcher Shell-1
 2  [컴퓨터운영체제] The HOST Dispatcher Shell-2
 3  [컴퓨터운영체제] The HOST Dispatcher Shell-3
 4  [컴퓨터운영체제] The HOST Dispatcher Shell-4
 5  [컴퓨터운영체제] The HOST Dispatcher Shell-5
 6  [컴퓨터운영체제] The HOST Dispatcher Shell-6
 7  [컴퓨터운영체제] The HOST Dispatcher Shell-7
 8  [컴퓨터운영체제] The HOST Dispatcher Shell-8
 9  [컴퓨터운영체제] The HOST Dispatcher Shell-9
 10  [컴퓨터운영체제] The HOST Dispatcher Shell-10
 11  [컴퓨터운영체제] The HOST Dispatcher Shell-11
 12  [컴퓨터운영체제] The HOST Dispatcher Shell-12
 13  [컴퓨터운영체제] The HOST Dispatcher Shell-13
 14  [컴퓨터운영체제] The HOST Dispatcher Shell-14
 15  [컴퓨터운영체제] The HOST Dispatcher Shell-15
 16  [컴퓨터운영체제] The HOST Dispatcher Shell-16
 17  [컴퓨터운영체제] The HOST Dispatcher Shell-17
 18  [컴퓨터운영체제] The HOST Dispatcher Shell-18
 19  [컴퓨터운영체제] The HOST Dispatcher Shell-19
 20  [컴퓨터운영체제] The HOST Dispatcher Shell-20
※ 미리보기 이미지는 최대 20페이지까지만 지원합니다.
  • 분야
  • 등록일
  • 페이지/형식
  • 구매가격
  • 적립금
자료 다운로드  네이버 로그인
소개글
[컴퓨터운영체제] 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);
오늘 본 자료
더보기
  • 오늘 본 자료가 없습니다.
해당 정보 및 게시물의 저작권과 기타 법적 책임은 자료 등록자에게 있습니다. 위 정보 및 게시물 내용의 불법적 이용,무단 전재·배포는 금지되어 있습니다. 저작권침해, 명예훼손 등 분쟁요소 발견 시 고객센터에 신고해 주시기 바랍니다.