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

Method schedule

lab6/src/2/src/kernel/program.cpp:76–108  ·  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 }
86
87 if (running->status == ProgramStatus::RUNNING)
88 {
89 running->status = ProgramStatus::READY;
90 running->ticks = running->priority * 10;
91 readyPrograms.push_back(&(running->tagInGeneralList));
92 }
93 else if (running->status == ProgramStatus::DEAD)
94 {
95 releasePCB(running);
96 }
97
98 ListItem *item = readyPrograms.front();
99 PCB *next = ListItem2PCB(item, tagInGeneralList);
100 PCB *cur = running;
101 next->status = ProgramStatus::RUNNING;
102 running = next;
103 readyPrograms.pop_front();
104
105 asm_switch_thread(cur, next);
106
107 interruptManager.setInterruptStatus(status);
108}
109
110void program_exit()
111{

Callers 2

program_exitFunction · 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