MCPcopy Create free account
hub / github.com/YatSenOS/YatSenOS-Tutorial-Volume-1 / schedule

Method schedule

lab7/src/1/src/kernel/program.cpp:76–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

74}
75
76void ProgramManager::schedule()
77{
78 bool status = interruptManager.getInterruptStatus();
79 interruptManager.disableInterrupt();
80
81 if (readyPrograms.size() == 0)
82 {
83 interruptManager.setInterruptStatus(status);
84 return;
85 } else {
86 //printf("amount of ready programs: %d\n", readyPrograms.size());
87 }
88
89 if (running->status == ProgramStatus::RUNNING)
90 {
91 running->status = ProgramStatus::READY;
92 running->ticks = running->priority * 10;
93 readyPrograms.push_back(&(running->tagInGeneralList));
94 }
95 else if (running->status == ProgramStatus::DEAD)
96 {
97 releasePCB(running);
98 }
99
100 ListItem *item = readyPrograms.front();
101 PCB *next = ListItem2PCB(item, tagInGeneralList);
102 PCB *cur = running;
103 next->status = ProgramStatus::RUNNING;
104 running = next;
105 readyPrograms.pop_front();
106
107 asm_switch_thread(cur, next);
108
109 interruptManager.setInterruptStatus(status);
110}
111
112void program_exit()
113{

Callers 3

program_exitFunction · 0.45
PMethod · 0.45
c_time_interrupt_handlerFunction · 0.45

Calls 7

getInterruptStatusMethod · 0.45
disableInterruptMethod · 0.45
sizeMethod · 0.45
setInterruptStatusMethod · 0.45
push_backMethod · 0.45
frontMethod · 0.45
pop_frontMethod · 0.45

Tested by

no test coverage detected