⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.c

📁 著名操作系统Plan 9的第三版的部分核心源代码。现在很难找到了。Plan 9是bell实验室开发的Unix后继者。
💻 C
字号:
#include "u.h"#include "../port/lib.h"#include "mem.h"#include "dat.h"#include "fns.h"#include "io.h"#include "ureg.h"void (*kproftimer)(ulong);typedef struct Clock0link Clock0link;typedef struct Clock0link {	void		(*clock)(void);	Clock0link*	link;} Clock0link;static Clock0link *clock0link;static Lock clock0lock;voidaddclock0link(void (*clock)(void)){	Clock0link *lp;	if((lp = malloc(sizeof(Clock0link))) == 0){		print("addclock0link: too many links\n");		return;	}	ilock(&clock0lock);	lp->clock = clock;	lp->link = clock0link;	clock0link = lp;	iunlock(&clock0lock);}voidclockintr(Ureg* ureg, void*){	Clock0link *lp;	// this needs to be here for synchronizing mp clocks	// see mp.c's squidboy()	fastticks(nil);	m->ticks++;	if(m->proc)		m->proc->pc = ureg->pc;	accounttime();	if(kproftimer != nil)		kproftimer(ureg->pc);	if((active.machs & (1<<m->machno)) == 0)		return;	if(active.exiting && (active.machs & (1<<m->machno)))		exit(0);	checkalarms();	if(m->machno == 0){		ilock(&clock0lock);		for(lp = clock0link; lp; lp = lp->link)			lp->clock();		iunlock(&clock0lock);	}	if(m->flushmmu){		if(up)			flushmmu();		m->flushmmu = 0;	}	if(up == 0 || up->state != Running)		return;	if(anyready())		sched();		if((ureg->cs & 0xFFFF) == UESEL) {		(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);		segclock(ureg->pc);	}}voiddelay(int millisecs){	millisecs *= m->loopconst;	if(millisecs <= 0)		millisecs = 1;	aamloop(millisecs);}voidmicrodelay(int microsecs){	microsecs *= m->loopconst;	microsecs /= 1000;	if(microsecs <= 0)		microsecs = 1;	aamloop(microsecs);}ulongTK2MS(ulong ticks){	uvlong t, hz;	t = ticks;	hz = HZ;	t *= 1000L;	t = t/hz;	ticks = t;	return ticks;}

⌨️ 快捷键说明

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