Mercurial > hg > Members > kono > Cerium
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 } |