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