현재 FCFS 및 라운드 로빈 알고리즘을 사용하는 프로세스 스케줄러의 시뮬레이션을 시작합니다.프로세스 스케줄러 시뮬레이션 파싱 입력
첫째, 나는
나는 특정 정보를 보유 할 수있는 몇 가지 구조를 가지고 ... 가능한 입력의 구문 분석이 간단하고 싶다. 다음과 같이 프로그램 작동 다음과 같이my_project FCFS in.file
OR
my_project RR 2 in.file
in.file 보이는 :
./Job1.txt
./Job2.txt
./Job3.txt
./Job4.txt
그래서 나는이 입력 파일을 처리하고 작업을 주문하고 싶습니다.
텍스트 파일은 다음과 같습니다.
10
1fi
if i < 3 i=i+1 goto 8
3sdkfj
4ksdkk
5kdkfk
6kdkjf
7dkjkfd
if k < 2 k=k+1 goto 2
9dkkf
10dku
if j < 2 j=j+1 goto 2
첫 줄 (이 작업의 시작 시간을 나타냄)과 if로 시작하는 줄을 제외하고 모든 줄은 의미가 없습니다. 즉, 내가 < 3 i = i + 1 goto 4는 3보다 작 으면 line4로 점프를 의미합니다.
기본적으로 위의 명령 줄을 통해 입력 파일을 구문 분석하고 작업을 주문하려고합니다 시작 시간 (첫 번째 줄). 나는이 단계를 가능한 한 효율적으로 수행하기를 정말로 원합니다. 지금까지 내가 코드를 아래에 작성했습니다 :
/* I/O Files */
static char *inputFile;
static FILE *input;
/*Scheduled jobs indexed by PID*/
struct job list[20];
/* the next job to schedule */
static struct job *job_next = NULL;
/* Time */
time clock;
/*Initialises job list*/
static void initialise_list(void) {
for(int i = 0; i < sizeof(job_list); i++) {
job_list[i].params.pid = -1;
}
}
/** 읽기 및 입력 파일에서 입력을 구문 분석 */ 정적 무효 parse_input (무효) {지금까지 사용
char buffer[BUFSIZ];
unsigned int jobs;
struct job *current;
jobs = 0;
initialise_list();
/** Read input file **/
while(fgets(buffer, sizeof(buffer), input)) {
time start, finish;
pid job;
//if(buffer[0] == '#') {
// continue;
//}
sscanf(buffer, "Job%d%ld", &job, &start);
if(start < 0) {
fprintf(stderr, "Job start time must be greater than or equal to 0, found %ld.\n", start);
exit(EXIT_FAILURE);
}
if(finish <= 0) {
fprintf(stderr, "Job finish time must be greater than 0, found %ld. \n", arrival);
exit(EXIT_FAILURE);
}
current = &list[job];
current->parameters.pid = job;
current->parameters.start = start;
jobs++;
}
int main(int argc, char **argv) {
/* Open input and output files */
for(int i = 0; i < argc; i++) {
if(strcmp(argv[i], "in.file") {
inputFile = argv[i];
input = fopen(inputFile,"r");
}
}
if(!inputFile) {
exit(EXIT_FAILURE);
}
parse_input();
fclose;
return EXIT_SUCCESS;
}
구조 임. 결국
/**
* Simulation of a process scheduler
*/
#ifndef SCHEDULER_H_
#define SCHEDULER_H_
#include <stddef.h>
/* types */
/** units of time */
typedef long time;
/** process identifier */
typedef int pid;
/** Information about a job of interest to the task scheduler */
struct job_data {
/* pid of this process */
pid pid;
/* time process starts */
time start;
/* time needed to finish */
time finish;
/* time spent processing so far */
time scheduled;
/* size of the process */
size_t size;
};
struct job {
/* Various parameters used by the scheduler */
struct job_data parameters;
/* next job to be scheduled */
struct job *next;
};
, 나는 그들이 특정 알고리즘에 의해 예약 할 준비가되어 있도록 시작 시간의 순서대로 작업을 주문할 수 있어야합니다.
입력 파일 in.file을 전달하는 방법에 대한 도움이 필요합니다. 작업을 읽고 시작 시간과 순서를 얻고 'tick'시간, 즉 텍스트 파일의 첫 줄을 시작하십시오.
도움이 될 것입니다 !!
나는 sscanf가 전혀 이해가되지 않을지도 모른다는 것을 이해한다 ... 도움이 필요한 부분은 대체로 ......... –