comparison TaskManager/kernel/schedule/Scheduler.cc @ 421:cd77224d4224

Code load implementation... (not yet tested)
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 24 Sep 2009 16:04:23 +0900
parents 8611780d479f
children 799071db126e
comparison
equal deleted inserted replaced
420:90d677a9c00b 421:cd77224d4224
323 Scheduler::mainMem_get(int id) 323 Scheduler::mainMem_get(int id)
324 { 324 {
325 return mainMemList[id]; 325 return mainMemList[id];
326 } 326 }
327 327
328 328 /**
329 /** 329 * Task load API
330 * 本当は Scheduler クラスに入れるべきなんだろうか。。。 330 */
331 * なんか手抜きの感がある 331
332 */ 332 static void
333 void register_task(int cmd, TaskObjectCreator creator) 333 load_task(Scheduler *m, int task_id)
334 {
335 MemorySegment *s = m->get_segment(
336 task_list[task_id].location,
337 m->code_segment_pool);
338 task_list[task_id].segment = s;
339 }
340
341 static void
342 null_loader(Scheduler *m, int task_id)
343 {
344 }
345
346 static void
347 wait_load(Scheduler *m, int task_id)
348 {
349 // wait for code segment load
350 m->wait_segment(task_list[task_id].segment);
351 // calcurate call address
352 TaskObjectCreator creator =
353 (TaskObjectCreator)(
354 (char*)task_list[task_id].segment->data +
355 task_list[task_id].entry_offset);
356 task_list[task_id].creator = creator;
357 }
358
359 static void
360 null_waiter(Scheduler *m, int task_id)
361 {
362 }
363
364 extern void
365 register_task(int cmd, TaskObjectCreator creator)
334 { 366 {
335 task_list[cmd].creator = creator; 367 task_list[cmd].creator = creator;
336 } 368 task_list[cmd].load = null_loader;
369 task_list[cmd].wait = null_waiter;
370 }
371
372 extern void
373 register_dynamic_task(int cmd,
374 memaddr start, memaddr end, int entry_offset)
375 {
376 task_list[cmd].creator = 0;
377 task_list[cmd].location = start;
378 task_list[cmd].end = end;
379 task_list[cmd].entry_offset = entry_offset;
380 task_list[cmd].load = load_task;
381 task_list[cmd].wait = wait_load;
382 }
383
337 384
338 /*! 385 /*!
339 386
340 size 単位のMemory Segment を count 個作る 387 size 単位のMemory Segment を count 個作る
341 388
403 hash->put(s->address, s); 450 hash->put(s->address, s);
404 451
405 return s; 452 return s;
406 } 453 }
407 454
455
408 uint32 456 uint32
409 Scheduler::get_tag() 457 Scheduler::get_tag()
410 { 458 {
411 return 0; 459 return 0;
412 } 460 }