UNIX时钟中断设备处理子程序(clock)源代码分析

UNIX时钟中断设备处理子程序(clock)源代码分析

ID:38099132

大小:601.69 KB

页数:5页

时间:2019-05-24

UNIX时钟中断设备处理子程序(clock)源代码分析_第1页
UNIX时钟中断设备处理子程序(clock)源代码分析_第2页
UNIX时钟中断设备处理子程序(clock)源代码分析_第3页
UNIX时钟中断设备处理子程序(clock)源代码分析_第4页
UNIX时钟中断设备处理子程序(clock)源代码分析_第5页
资源描述:

《UNIX时钟中断设备处理子程序(clock)源代码分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、同济大学计算机软件教研室《操作系统》UNIX时钟中断设备处理子程序源代码分析1.基本概念1.1.相关全局变量/unix/systm.h0212intlbolt;/*timeofdayin60thnotintime记录当前的时钟滴答,一般每到HZ就清零*/0213inttime[2];/*timeinsecfrom1970记录系统时间,从1970.1.1以来的秒*//unix/param.h0147#defineHZ60/*Ticks/secondoftheclock,每秒钟时钟中断的次数*/1.2.函数定义时钟中

2、断的设备处理子程序为clock,是C语言编写的,位于clock.c文件中。函数原型:voidclock(intdev,intsp,intr1,intnps,intr0,intpc,intps)功能描述:时钟中断的C语言处理函数。它的主要功能包括:(1)调度、触发内核定时器;(2)系统计时;(3)如果睡眠时间已到,唤醒调用sleep进入睡眠的进程;(4)每隔4秒,设置调度标志runrun,并且唤醒挂起在lbolt上的进程,实际就是调用纸带打孔机初始化函数而没有完成的进程;(5)更新进程驻留在内存或磁盘上的时间;(6

3、)更新进程执行时间;(7)调整进程优先数p_pri,如果有进程优先数被调后低于当前进程优先数,则设置调度标志runrun;(8)更新进程统计直方图中的CPU使用信息;(9)最后判断进程是否接收到信号signal,如果接收到,则处理该信号。参数说明:(1)dev:当前ps的最后5位,它主要在trap函数中标识自陷类型。对于本中断并没有作用。(2)sp:先前态下的栈指针。(3)r1:进入中断函数前寄存器r1的值。(4)nps:当前ps寄存器的值(5)r0:进入中断函数前寄存器r0的值;(6)pc:中断函数的返回地址(

4、7)ps:中断前ps寄存器的值2.代码分析3700#3701#include"../param.h"3702#include"../systm.h"3703#include"../user.h"3704#include"../proc.h"3705同济大学计算机软件教研室《操作系统》3706#defineUMODE01700003707#defineSCHMAG1037083709/*3710*clockiscalledstraightfrom3711*therealtimeclockinterrupt.3712

5、*3713*Functions:3714*reprimeclock3715*copy*switchestodisplay3716*implementcallouts3717*maintainuser/systemtimes3718*maintaindate3719*profile3720*toutwakeup(syssleep)3721*lightningboltwakeup(every4sec)3722*alarmclocksignals3723*jabthescheduler3724*/3725clock(d

6、ev,sp,r1,nps,r0,pc,ps)3726{3727registerstructcallo*p1,*p2;3728registerstructproc*pp;37293730/*3731*restartclock/*进入clock函数以后,处理机优先级为6,3732*//*即:6级以下的中断(含)都关闭37333734*lks=0115;/*打开中断控制寄存器37353736/*3737*displayregister3738*/37393740display();/*更新显示寄存器37413742/*

7、3743*callouts3744*ifdone,justreturn3745*elseupdatefirstnon-zerotime/*触发内核定时器,或更新各定时器的触发时间3746*/37473748if(callout[0].c_func==0)3749gotoout;3750p2=&callout[0];3751while(p2->c_time<=0&&p2->c_func!=0)3752p2++;3753p2->c_time--;37543755/*3756*ifpsishigh,justreturn

8、3757*/37583759if((ps&0340)!=0)/*如果中断前处理机优先级>0,则直接跳转到out3760gotoout;37613762/*3763*callout3764*/37653766spl5();/*处理机优先级降为53767if(callout[0].c_time<=0){3768p1=&callout[0];3769while(p1->c_fu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。