Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 进程调度器模拟解析输入_C_Io_Scheduler - Fatal编程技术网

C 进程调度器模拟解析输入

C 进程调度器模拟解析输入,c,io,scheduler,C,Io,Scheduler,Im目前正在使用FCFS和循环算法对进程调度器进行模拟 首先,我想使输入的解析尽可能简单 我有一些结构来保存特定的信息。该计划的工作如下: my_project FCFS in.file OR my_project RR 2 in.file ./Job1.txt ./Job2.txt ./Job3.txt ./Job4.txt in.file如下所示: my_project FCFS in.file OR my_project RR 2 in.file ./Job1.txt ./Job2.

Im目前正在使用FCFS和循环算法对进程调度器进行模拟

首先,我想使输入的解析尽可能简单

我有一些结构来保存特定的信息。该计划的工作如下:

my_project FCFS in.file
OR
my_project RR 2 in.file
./Job1.txt
./Job2.txt
./Job3.txt
./Job4.txt
in.file如下所示:

my_project FCFS in.file
OR
my_project RR 2 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
10
1fi
如果i<3 i=i+1转到8
3sdkfj
4ksdkk
5kdkfk
6kdkjf
7dkjkfd
如果k<2 k=k+1转到2
9dkkf
10dku
如果j<2 j=j+1转到2
除第一行(表示此作业的开始时间)和以if开头的行外,所有行均无意义。i、 e.如果i<3 i=i+1,则转到4意味着只要i小于3,就跳到第4行

基本上,现在我想通过上面的命令行解析输入文件,并按开始时间(第一行)排序作业。我真的希望尽可能高效地完成这一步。到目前为止,我已经编写了以下代码:

/* 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;
    }
}
/*I/O文件*/
静态字符*输入文件;
静态文件*输入;
/*按PID索引的计划作业*/
结构作业列表[20];
/*下一个要安排的作业*/
静态结构作业*job_next=NULL;
/*时间*/
时钟;
/*初始化作业列表*/
静态无效初始化列表(无效){
对于(int i=0;i
/**从输入文件读取和解析输入*/ 静态void解析_输入(void){

char缓冲区[BUFSIZ];
无符号整数作业;
结构作业*当前;
工作=0;
初始化_list();
/**读取输入文件**/
while(fgets(buffer,sizeof(buffer),input)){
时间开始,结束;
pid作业;
//如果(缓冲区[0]='#'){
//继续;
//}
sscanf(缓冲区,“作业%d%ld”、&作业和启动);
如果(开始<0){
fprintf(stderr,“作业开始时间必须大于或等于0,找到%ld。\n”,开始);
退出(退出失败);
}
if(finish parameters.pid=job;
当前->参数.start=开始;
乔布斯++;
}    
int main(int argc,字符**argv){
/*打开输入和输出文件*/
对于(int i=0;i
我目前使用的结构

/**
 * 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;


};
/**
*进程调度器的仿真
*/
#ifndef调度程序_
#定义调度程序_
#包括
/*类型*/
/**时间单位*/
时间长;
/**进程标识符*/
typedef int-pid;
/**有关任务计划程序感兴趣的作业的信息*/
结构作业单元数据{
/*此过程的pid*/
pid;
/*时间进程开始*/
启动时间;
/*完成所需的时间*/
完成时间;
/*到目前为止所花的处理时间*/
预定时间;
/*流程的规模*/
大小;
};
结构作业{
/*调度器使用的各种参数*/
结构作业数据参数;
/*要安排的下一个作业*/
结构作业*下一步;
};
最后,我希望能够按照开始时间的顺序对作业进行排序,以便它们可以通过特定的算法进行调度

因此,我需要有关如何在.file中传递输入文件的帮助。读取作业并获取开始时间和顺序,然后启动“勾选”时间,即文本文件的第一行


任何帮助都会很好!!

我不知道你的问题是什么(你似乎在没有问任何问题的情况下发布了你正在做的事情的描述)。因此,我的答案不可能是答案,所以我将以“希望有用”的方式漫谈

在一个真实的系统中,不同的任务在不同的时间开始运行,在不同的时间阻塞以等待不同的事情(当它们等待的事情发生时,它们被解除阻塞),最终它们终止/退出

除此之外,还有一些高级功能;如显式任务优先级控制(例如“nice()”)、分组任务、CPU时间配额等。我不确定您是否愿意担心这些问题

您不需要实现BASIC(带有变量、循环等)的最小子集来实现这些功能,尝试这样做只会增加无意义的复杂性。每个文件都可以是一个简单的线性列表。例如:

123         ;Starting time
r22         ;Task runs for 22 ticks
s23         ;Task blocks due to "sleep()" for 23 seconds
r4          ;Task runs for 4 ticks
f4          ;Task blocks waiting for "4 units" of file IO (how quickly it unblocks depends on file system load)
r32         ;Task runs for 32 ticks
n8          ;Task blocks until it receives 8 packets from network
r22         ;Task runs for 22 ticks
            ;Task terminates
您可以在执行过程中添加命令。例如,从“r”命令开始,然后添加“由于睡眠而被阻止”,等等。最终您可以添加诸如“任务生成新任务”、“任务等待子任务退出”和“任务发送某些东西(通过.pipe、socket等)以取消阻止另一个任务”,等等


您会注意到(在我的示例中)所有命令都是“操作码,立即”形式。这是经过深思熟虑的-它使解析变得简单(获取字符,获取整数,将它们都添加到数组或链表).

我知道我的sscanf可能毫无意义……这主要是我需要帮助的地方……我在问如何解析in.file,以及如何处理输入文件中的文本文件……有什么帮助吗?