Linux scheduler User Space
От: atatart  
Дата: 01.10.09 15:51
Оценка:
Здравствуйте, Моя работа заключается в создании планировщика в пользовательском пространстве,Я имею общую картину, как узнать или где можно взглянуть подробнее на точную структуру программы в памяти.Будет создан вектор в котором будут хранится процессы.init_sched инициализирует библиотеку,new_proc(void (*)f (int), int arg) регистрирует новый процесс к исполнению,start_sched() начинает планировщик, mysetjmp(int) mylongjmp(int) принимают номер следующего избранника в векторе, сохраняют нынешнего и передают исполнение другому, вот пока сделал это — правильно или нет? Может где то есть уже решение похожей задачи?

Код:
#define init_sched() ({char var; top_stack = & var;})
#define SRUN 1
#define NOPROCESS 0

#include <setjmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Tproc{
jmp_buf regs;
char pile[SIZE_PILE];
int taille_pile;
int etat;
/* 0 – нет процесса, SRUN == 1 готов к исполнению */
} ;

struct Tproc proc[NPROC];
/* будет NPROC процессов */

//int setjmp(jmp_buf env);

int elu;

char * top_stack;


int mysetjmp (int ind);
void mylongjmp (int ind);

int main(int argc, char ** argv ){
elu = 1;
init_sched();
printf("в вершине стека %i\n", top_stack);

return 0;
}

int mysetjmp(int ind){
if( setjmp(proc[ind].regs)== 0){
memcpy(proc[ind].pile,top_stack — SIZE_PILE, SIZE_PILE);
return 0;
/* если здесь значит сохраняемся*/
}
else
{
/* значит восстанавливаемся */
memcpy(top_stack — SIZE_PILE, proc[ind].pile, SIZE_PILE);
elu = ind;
return 1;
}
}
void mylongjmp(int ind){
elu = ind;
mysetjmp(ind);
proc[ind].regs;
}
linux scheduler
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.