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

Method schedule

lab8/src/5/src/kernel/program.cpp:93–133  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91}
92
93void ProgramManager::schedule()
94{
95 bool status = interruptManager.getInterruptStatus();
96 interruptManager.disableInterrupt();
97
98 if (readyPrograms.size() == 0)
99 {
100 interruptManager.setInterruptStatus(status);
101 return;
102 }
103 else
104 {
105 //printf("amount of ready programs: %d\n", readyPrograms.size());
106 }
107
108 if (running->status == ProgramStatus::RUNNING)
109 {
110 running->status = ProgramStatus::READY;
111 running->ticks = running->priority * 10;
112 readyPrograms.push_back(&(running->tagInGeneralList));
113 }
114 else if (running->status == ProgramStatus::DEAD)
115 {
116 releasePCB(running);
117 }
118
119 ListItem *item = readyPrograms.front();
120 PCB *next = ListItem2PCB(item, tagInGeneralList);
121 PCB *cur = running;
122 next->status = ProgramStatus::RUNNING;
123 running = next;
124 readyPrograms.pop_front();
125
126 //printf("schedule: %x %x\n", cur, next);
127
128 activateProgramPage(next);
129
130 asm_switch_thread(cur, next);
131
132 interruptManager.setInterruptStatus(status);
133}
134
135void program_exit()
136{

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