alarm.cc

来自「Nachos是个教学用的小型操作系统」· CC 代码 · 共 56 行

CC
56
字号
// alarm.cc//	Routines to use a hardware timer device to provide a//	software alarm clock.  For now, we just provide time-slicing.////	Not completely implemented.//// Copyright (c) 1992-1996 The Regents of the University of California.// All rights reserved.  See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#include "copyright.h"#include "alarm.h"#include "main.h"//----------------------------------------------------------------------// Alarm::Alarm//      Initialize a software alarm clock.  Start up a timer device////      "doRandom" -- if true, arrange for the hardware interrupts to //		occur at random, instead of fixed, intervals.//----------------------------------------------------------------------Alarm::Alarm(bool doRandom){    timer = new Timer(doRandom, this);}//----------------------------------------------------------------------// Alarm::CallBack//	Software interrupt handler for the timer device. The timer device is//	set up to interrupt the CPU periodically (once every TimerTicks).//	This routine is called each time there is a timer interrupt,//	with interrupts disabled.////	Note that instead of calling Yield() directly (which would//	suspend the interrupt handler, not the interrupted thread//	which is what we wanted to context switch), we set a flag//	so that once the interrupt handler is done, it will appear as //	if the interrupted thread called Yield at the point it is //	was interrupted.////	For now, just provide time-slicing.  Only need to time slice //      if we're currently running something (in other words, not idle).//----------------------------------------------------------------------void Alarm::CallBack() {    Interrupt *interrupt = kernel->interrupt;    MachineStatus status = interrupt->getStatus();        if (status != IdleMode) {	interrupt->YieldOnReturn();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?