Mercurial > hg > Members > kono > Cerium
comparison TaskManager/kernel/schedule/Scheduler.cc @ 439:95c0457a7d31
still overlay...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 25 Sep 2009 00:46:50 +0900 |
parents | fd44dbd049aa |
children | 7bae2117f239 |
comparison
equal
deleted
inserted
replaced
438:9ebb44b7b15d | 439:95c0457a7d31 |
---|---|
360 // calcurate call address | 360 // calcurate call address |
361 TaskObjectCreator creator = | 361 TaskObjectCreator creator = |
362 (TaskObjectCreator)( | 362 (TaskObjectCreator)( |
363 (char*)task_list[task_id].segment->data + | 363 (char*)task_list[task_id].segment->data + |
364 task_list[task_id].entry_offset); | 364 task_list[task_id].entry_offset); |
365 task_list[task_id].creator = creator; | 365 // task_list[task_id].creator = creator; |
366 fprintf(stderr,"wait load task id %d done. creator = 0x%x entry_offset = 0x%x\n",task_id, | |
367 (unsigned int)creator, | |
368 task_list[task_id].entry_offset); | |
366 } | 369 } |
367 | 370 |
368 static void | 371 static void |
369 null_waiter(Scheduler *m, int task_id) | 372 null_waiter(Scheduler *m, int task_id) |
370 { | 373 { |
378 task_list[cmd].wait = null_waiter; | 381 task_list[cmd].wait = null_waiter; |
379 } | 382 } |
380 | 383 |
381 extern void | 384 extern void |
382 register_dynamic_task(int cmd, | 385 register_dynamic_task(int cmd, |
383 memaddr start, memaddr end, int entry_offset) | 386 memaddr start, memaddr end, |
384 { | 387 TaskObjectCreator creator, int entry_offset) |
385 task_list[cmd].creator = 0; | 388 { |
389 task_list[cmd].creator = creator; | |
386 task_list[cmd].location = start; | 390 task_list[cmd].location = start; |
387 task_list[cmd].end = end; | 391 task_list[cmd].end = end; |
388 task_list[cmd].entry_offset = entry_offset; | 392 task_list[cmd].entry_offset = entry_offset; |
389 task_list[cmd].load = load_task; | 393 task_list[cmd].load = load_task; |
390 task_list[cmd].wait = wait_load; | 394 task_list[cmd].wait = wait_load; |
395 fprintf(stderr,"cmd = %d\n",cmd); | |
396 fprintf(stderr,"locatation = 0x%llx\n",start); | |
397 fprintf(stderr,"end = 0x%llx\n",end); | |
398 fprintf(stderr,"entry = 0x%x\n",entry_offset); | |
399 | |
391 } | 400 } |
392 | 401 |
393 | 402 |
394 /*! | 403 /*! |
395 | 404 |
445 { | 454 { |
446 // memory segment のsizeをoverride する場合がある | 455 // memory segment のsizeをoverride する場合がある |
447 MemorySegment *s = hash->get(addr); | 456 MemorySegment *s = hash->get(addr); |
448 if (s) { | 457 if (s) { |
449 /* 既に load されている */ | 458 /* 既に load されている */ |
459 // fprintf(stderr,"get_segement loaded %llx 0x%x size 0x%d\n",addr,s->data,size); | |
450 m->moveToFirst(s); | 460 m->moveToFirst(s); |
451 return s; | 461 return s; |
452 } | 462 } |
453 | 463 |
454 /* LRU なので、もっとも使われてない segment を上書きする */ | 464 /* LRU なので、もっとも使われてない segment を上書きする */ |
463 hash->remove(old_addr); | 473 hash->remove(old_addr); |
464 /* 新しいaddress を登録 */ | 474 /* 新しいaddress を登録 */ |
465 s->address = addr; | 475 s->address = addr; |
466 hash->put(s->address, s); | 476 hash->put(s->address, s); |
467 | 477 |
478 // fprintf(stderr,"get_segement %llx 0x%x size 0x%d\n",addr, s->data,size); | |
479 | |
468 return s; | 480 return s; |
469 } | 481 } |
470 | 482 |
471 | 483 |
472 uint32 | 484 uint32 |