gpt4 book ai didi

c++ - 流程经理

转载 作者:行者123 更新时间:2023-11-28 08:23:59 29 4
gpt4 key购买 nike

我正在尝试使用 C++ 将内核模拟作为我的 DSA(数据结构和算法)项目。其中会有不同的模块(进程管理器、内存管理器等)。现在我必须制作一个流程管理器,我对此只有一点点想法(比如,我可以使用队列)。任何人都可以帮助我如何在 C++ 中创建进程管理器。

最佳答案

首先制作一个调度程序(除非您将“进程管理器”理解为通常所说的“调度程序”。)您必须决定多任务处理模型,合作还是抢占。抢先可能很困难 - 使用某种中断等等......对于学校项目来说可能不必要地复杂。

如果您不知道选择哪种模式,我强烈建议合作多任务处理。这是每个进程花费一定的一小段时间,然后自行将控制权返回给调度程序的地方 - 比如说,在经历其“主循环”的一次迭代之后。通常由主循环调用进程类的某种“task()”函数来完成,task() 以“return”结束,没有正在进行的长循环。

从“任务/流程”模型开始。它应该是可加载的(比如,作为共享对象文件),还是在启动时预定义(一个类)。入口点、持久状态存储、带有有限状态机的“主循环”例程(通常实现为在各种状态之间移动的开关)。该任务通过重复启动“入口点”例程来工作。

要实现的状态可能是:

  • init,在启动时启动,一次
  • idle - 检查事件请求,如果没有,返回控制权
  • 各种“工作”状态。

完成后,准​​备一个此类任务的动态队列。添加、删除、迭代、提升优先级 = 乱序调用,等等。 “调度程序”遍历所有任务并启动每个任务的“启动例程”。

准备就绪后,您可以编写通常称为“任务管理器”的程序 - 一个编辑列表的程序。从队列中删除节目、添加新节目、更改优先级、暂停等。

为了帮助您想象,您目前通常会这样写:

 int main()
{

do_something1();
do_something2();
}

void do_something1()
{

//initialize
...perform stuff
int x=0;
//main loop
do {
if(condition...) {
...perform stuff
} else {
...perform other stuff
blargh(x);
x++;
}
} while(!end);

//ending

//finish...
...mop up.
}

你需要写什么:

 int main()
{

//main loop
do {
do_something1();
do_something2();

} while(!global_end);
}

void do_something1()
{
static state_enum state = STATE_INI;
static int x=0;

switch(state)
{
case STATE_INI:
//initialize
...perform stuff
state = STATE_WORK1;
x=0;
break;
case STATE_WORK1:
//main loop, mode 1
...perform stuff
if(condition) state = STATE_WORK2;
if(condition2) state = STATE_END;
if(condition4) state = STATE_IDLE;
break;
case STATE_WORK2:
//main loop, mode 2
...perform stuff
blargh(x);
x++;
if(condition3) state = STATE_WORK1;
if(condition4) state = STATE_IDLE;
break;
case STATE_IDLE:
//do nothing
//don't do any stuff.
if(any_condition) state = STATE_WORK1;
break;
case STATE_END:
//finish...
...mop up.
break;
}

return;
}

...您的流程管理器将替换构成对

的静态调用的内容
           do_something1();
do_something2();

带有要调用的函数的动态列表。

仅供引用,为抢占式调度系统编写应用程序要容易得多,您只需像在第一个版本中那样编写它们,而不必担心在调用之间保留状态 (static),或返回控制权,或保留每个case 语句简短而甜美,内部有非常短的循环,展开更大的循环。但是编写调度程序本身、中断程序并保存其状态、然后恢复它并从中断的地方恢复要困难得多。

关于c++ - 流程经理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725819/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com