精华内容
下载资源
问答
  • 时钟中断处理程序的主要功能
    千次阅读
    2019-08-20 15:40:54

    在所有的外部中断中,时钟中断起特殊的作用。因为计算机是以精确的时间进行数值运算和数据处理的,最基本的时间单元是时钟周期,例如取指令、执行指令、存取内存等,这里讨论的是操作系统建立的时间系统,这个时间系统是整个操作系统活动的动力。

    一、时钟硬件

    大部分PC中有两个时钟源,分别是RTC和OS(操作系统)时钟RTC(实时时钟)也叫做CMOS(互补金属氧化物半导体)时钟,是PC主板上的一块芯片(时钟电路),靠电池供电,即使系统断电,也可以维持日期和时间。由于RTC独立于操作系统,所以也被称为硬件时钟,为整个计算机提供一个计时标准,是最原始最底层的时钟数据。

    OS时钟产生于PC主板上的定时/计数芯片,由操作系统控制这个芯片的工作,OS时钟基本单位是该芯片的计数周期。开机时操作系统取得RTC中的时间数据来初始化OS时钟,然后通过计数芯片的向下计数形成OS时钟,所以OS时钟并不是本质意义上的时钟,更应该被称为一个计数器。OS时钟只在开机时才有效,完全由操作系统控制,也被称为

    更多相关内容
  • Linux之时钟中断详解

    2021-01-20 16:27:30
    另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度出去而放弃CPU使用权。 时钟中断的产生 Linux的OS时钟的...
  • 什么是时钟中断时钟中断的举例

    千次阅读 2021-07-21 03:25:26
    在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。那么你对时钟中断了解多少呢?以下是由学习啦小编整理关于什么是时钟中断的内容...

    在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。那么你对时钟中断了解多少呢?以下是由学习啦小编整理关于什么是时钟中断的内容,希望大家喜欢!

    时钟中断的电路

    一种时钟中断检测电路,包括:对输入时钟以不同分度值进行分频并输出多个分频时钟的分频器电路;对输入时钟和多个分频时钟进行“与”操作的“与”电路;将具有最大分度值的分频时钟反相的反相器;对输入时钟中其余分频时钟和反相器输出进行“与”操作的“与”电路;第一和第二开关,具有被提供以各个“与”电路输出的控制端,控制第一和第二电容器放电路径的开/关;第一和第二波形形成缓冲器电路,被提供以第一和第二电容器的端电压;根据延迟电路中使反相器输出延迟预定时间长度所得的选择控制信号选择第一和第二波形形成缓冲器电路的一个输出的选择电路。其通过单输入时钟系统使时钟中断能被检测,集成更容易,并使时钟中断时间能精确地检测。

    时钟中断的举例

    定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及PSW的值压入堆栈,然后即把0D8F7h装入T0。

    设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。

    在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。

    主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。

    例:在P1.1输出1秒的高电平脉冲

    MOV A,INCPI

    INC A

    CJNE A,INCPI$ ;等待一次中断处理完成

    SETB P1.1 ;设P1.1为H,脉冲开始

    ADD A,#50 ;50个20mS为1秒

    CJNE A,INCPI,$ ;等中断将INCPI加一50次

    CLR P1.1 ;设P1.1为L,脉冲结束

    下面用MCS-51为例:

    MCS-51的中断响应过程:

    1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人可以响应外界的事件,是因为我们有多种“传感器“――眼、耳可以接受不同的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。

    了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU将封锁对中断的响应:

    CPU正在处理一个同级或更高级别的中断请求。 现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

    当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。

    2、中断响应过程

    CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。这些工作都是由硬件来完成的,不必我们去考虑。这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?

    一个完整的主程序看起来应该是这样的:

    ORG 0000H

    LJMP START

    ORG 0003H

    LJMP INT0 ;转外中断0

    ORG 000BH

    RETI ;没有用定时器0中断,在此放一条RETI,万一 “不小心“产生了中断,也不会有太大的后果。

    中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。注意:CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来。

    时钟中断的评价

    要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。这其中的技巧还需要大家在实践中多多摸索与体会。另外要注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。

    看过“时钟中断的举例”的人还看了:

    展开全文
  • 一、设计内容 ...通过实习了解中断及中断处理程序作用。本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,然后依照本实习,自行设计。
  • 模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟...通过实习了解中断及中断处理程序作用。本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法。
  • 在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断...
  • 单片机编程技巧-功能强大的时钟中断 功能强大的时钟中断 在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序
  • Linux 时钟中断详解

    2022-02-17 21:58:47
    另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度出去而放弃CPU使用权。 时钟中断的产生 Linux的OS时钟的...

    在Linux的0号中断是一个定时器中断。在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的。该频率是常量HZ,该值一般是在100 ~ 1000之间。该中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度出去而放弃CPU使用权。

    时钟中断的产生

    Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU,就可以引发一个中断请求信号,我们就把它叫做时钟中断。

    “时钟中断”是特别重要的一个中断,因为整个操作系统的活动都受到它的激励。系统利用时钟中断维持系统时间、促使环境的切换,以保证所有进程共享CPU;利用时钟中断进行记帐、监督系统工作以及确定未来的调度优先级等工作。可以说,“时钟中断”是整个操作系统的脉搏。

    时钟中断的物理产生如图所示:
    在这里插入图片描述
    操作系统对可编程定时/计数器进行有关初始化,然后定时/计数器就对输入脉冲进行计数(分频),产生的三个输出脉冲Out0、Out1、Out2各有用途,很多接口书都介绍了这个问题,我们只看Out0上的输出脉冲,这个脉冲信号接到中断控制器8259A_1的0号管脚,触发一个周期性的中断,我们就把这个中断叫做时钟中断,时钟中断的周期,也就是脉冲信号的周期,我们叫做“滴答”或“时标”(tick)。从本质上说,时钟中断只是一个周期性的信号,完全是硬件行为,该信号触发CPU去执行一个中断服务程序,但是为了方便,我们就把这个服务程序叫做时钟中断。

    Linux实现时钟中断的全过程

    1.可编程定时/计数器的初始化

    IBM PC中使用的是8253或8254芯片。有关该芯片的详细知识我们不再详述,只大体介绍以下它的组成和作用,如下表5.1所示:

    表 8253/8254的组成及作用

    名称端口地址工作方式产生的输出脉冲的用途
    计数器00x40方式3时钟中断,也叫系统时钟
    计数器10x41方式2动态存储器刷新
    计数器20x42方式3扬声器发声
    控制寄存器0x43/用于8253的初始化,接收控制字

    计数器0的输出就是图中的Out0,它的频率由操作系统的设计者确定,Linux对8253的初始化程序段如下(在/arch/i386/kernel/i8259.c的init_IRQ()函数中):

    set_intr_gate(ox20, interrupt[0]); 
     
    /*在IDT的第0x20个表项中插入一个中断门。这个门中的段选择符设置成内核代码段的选择符,偏移域设置成0号中断处理程序的入口地址。*/ 
     
    outb_p(0x34,0x43);  /* 写计数器0的控制字:工作方式2*/ 
     
    outb_p(LATCH & 0xff , 0x40); /* 写计数初值LSB 计数初值低位字节*/ 
     
    outb(LATCH >> 8 , 0x40); /* 写计数初值MSB 计数初值高位字节*/ 
     
    LATCH(英文意思为:锁存器,即其中锁存了计数器0的初值)为计数器0的计数初值,在/include/linux/timex.h中定义如下: 
     
    #define CLOCK_TICK_RATE 1193180 /* 图5.3中的输入脉冲 */ 
     
    #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* 计数器0的计数初值 */ 
    

    CLOCK_TICK_RATE是整个8253的输入脉冲,如图5.3中所示为1.193180MHz,是近似为1MHz的方波信号,8253内部的三个计数器都对这个时钟进行计数,进而产生不同的输出信号,用于不同的用途。

    HZ表示计数器0的频率,也就是时钟中断或系统时钟的频率,在/include/asm/param.h中定义如下:

    #define HZ 100
    

    2.与时钟中断相关的函数

    下面我们看时钟中断触发的服务程序,该程序代码比较复杂,分布在不同的源文件中,主要包括如下函数:

    时钟中断程序:timer_interrupt( );

    中断服务通用例程do_timer_interrupt();

    时钟函数:do_timer( );

    中断安装程序:setup_irq( );

    中断返回函数:ret_from_intr( );

    (1) timer_interrupt( )

    这个函数大约每10ms被调用一次,实际上, timer_interrupt( )函数是一个封装例程,它真正做的事情并不多,但是,作为一个中断程序,它必须在关中断的情况下执行。如果只考虑单处理机的情况,该函数主要语句就是调用do_timer_interrupt()函数。

    (2) do_timer_interrupt()

    do_timer_interrupt()函数有两个主要任务,一个是调用do_timer( ),另一个是维持实时时钟(RTC,每隔一定时间段要回写),其实现代码在/arch/i386/kernel/time.c中, 为了突出主题,笔者对以下函数作了改写,以便于读者理解:

    static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 
    { 
     do_timer(regs); /* 调用时钟函数,将时钟函数等同于时钟中断未尝不可*/ 
     if(xtime.tv_sec > last_rtc_update + 660) 
     update_RTC(); 
     /*每隔11分钟就更新RTC中的时间信息,以使OS时钟和RTC时钟保持同步,11分钟即660秒,xtime.tv_sec的单位是秒,last_rtc_update记录的是上次RTC更新时的值 */             
    } 
    

    其中,xtime是前面所提到的timeval类型,这是一个全局变量。

    (3) 时钟函数do_timer() (在/kernel/sched.c中)

    void do_timer(struct pt_regs * regs) 
    { 
     (*(unsigned long *)&jiffies)++; /*更新系统时间,这种写法保证对jiffies 
     
    操作的原子性*/ 
     update_process_times(); 
     ++lost_ticks; 
     if( ! user_mode ( regs ) ) 
      ++lost_ticks_system; 
      mark_bh(TIMER_BH);    
     if (tq_timer)      
      mark_bh(TQUEUE_BH); 
    } 
    

    其中,update_process_times()函数与进程调度有关,从函数的名子可以看出,它处理的是与当前进程与时间有关的变量,例如,要更新当前进程的时间片计数器counter,如果counter<=0,则要调用调度程序,要处理进程的所有定时器:实时、虚拟、概况,另外还要做一些统计工作。

    与时间有关的事情很多,不能全都让这个函数去完成,这是因为这个函数是在关中断的情况下执行,必须处理完最重要的时间信息后退出,以处理其他事情。那么,与时间相关的其他信息谁去处理,何时处理?这就是由第三章讨论的后半部分去去处理。 上面timer_interrupt()(包括它所调用的函数)所做的事情就是上半部分。

    在该函数中还有两个变量lost_ticks和lost_ticks_system,这是用来记录timer_bh()执行前时钟中断发生的次数。因为时钟中断发生的频率很高(每10ms一次),所以在timer_bh()执行之前,可能已经有时钟中断发生了,而timer_bh()要提供定时、记费等重要操作,所以为了保证时间计量的准确性,使用了这两个变量。lost_ticks用来记录timer_bh()执行前时钟中断发生的次数,如果时钟中断发生时当前进程运行于内核态,则lost_ticks_system用来记录timer_bh()执行前在内核态发生时钟中断的次数,这样可以对当前进程精确记费。
    在这里插入图片描述
    (4)中断安装程序

    从上面的介绍可以看出,时钟中断与进程调度密不可分,因此,一旦开始有时钟中断就可能要进行调度,在系统进行初始化时,所做的大量工作之一就是对时钟进行初始化,其函数time_init ()的代码在/arch/i386/kernel/time.c中,对其简写如下:

     void __init time_init(void) 
     { 
    xtime.tv_sec=get_cmos_time(); 
    xtime.tv_usec=0; 
    setup_irq(0,&irq0); 
    } 
    

    其中的get_cmos_time()函数就是把当时的实际时间从CMOS时钟芯片读入变量xtime中,时间精度为秒。而setup_irq(0,&irq0)就是时钟中断安装函数,那么irq0指的是什么呢,它是一个结构类型irqaction,其定义及初值如下:

    static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL};
    

    setup_irq(0, &irq0)的代码在/arch/i386/kernel/irq.c中,其主要功能就是将中断程序连入相应的中断请求队列,以等待中断到来时相应的中断程序被执行。

    struct irqaction { 
      irq_handler_t handler;  //中断处理函数,注册时提供  
      unsigned long flags;   //中断标志,注册时提供  
      cpumask_t mask;    //中断掩码  
      const char *name;   //中断名称 
      void *dev_id;      //设备id,本文后面部分介绍中断共享时会详细说明这个参数的作用 
      struct irqaction *next;  //如果有中断共享,则继续执行,  
      int irq;        //中断号,注册时提供 
      struct proc_dir_entry *dir; //指向IRQn相关的/proc/irq/n目录的描述符 
    }; 
    

    这个结构体包含了处理一种中断所需要的各种信息,它代表了内核接受到特定IRQ之后应该采取的操作。

    1.handler:该指针所指向的函数就是在中断服务程序,当中断发生时内核便会调用这个指针指向的函数。

    2.flags:该标志位可以是0,也可以是:

    SA_INTERRUPT:表示此中断处理程序是一个快速中断处理程序,在2.6中默认情况下没有这个标志;设置该标志位,中断处理程序禁止任何中断运行,没有该标志,仅屏蔽正在运行的IRQ线;

    SA_SAMPLE_RANDOM:表示这个中断对内核池有贡献,在中断时产生一些随机数;

    SA_SHIRQ:此标志位表示允许多个中断服务程序共享一个中断号,如不设则一个程序对应一个中断线;

    3.mask:在x86上不会用到。

    4.name:产生中断的硬件的名字.

    5.dev_id:该标志位主要在共享中断号时使用,即你设置flags=SA_SHIRQ时,有多个中断服务程序共享一个中断号时,内核就需要知道在用完中断程序后该删除那个中断服务程序。不共享时此成员为null。

    6.next:如果flags=SA_SHIRQ,那么这就是指向对列中下一个struct irqaction结构体的指针,否则为空。

    7.irq:不用说这就是中断号了。

    到现在为止,我们仅仅是把时钟中断程序挂入中断请求队列,什么时候执行,怎样执行,这是一个复杂的过程(参见第三章),为了让读者对时钟中断有一个完整的认识,我们忽略中间过程,而给出一个整体描述。我们将有关函数改写如下,体现时钟中断的大意:

    do_timer_interrupt( )   /*这是一个伪函数 */ 
    {            
     SAVE_ALL     /*保存处理机现场 */ 
     intr_count += 1;    /* 这段操作不允许被中断 */ 
     timer_interrupt()    /* 调用时钟中断程序 */ 
     intr_count -= 1;    
     jmp ret_from_intr    /* 中断返回函数 */ 
    } 
    

    其中,jmp ret_from_intr 是一段汇编代码,也是一个较为复杂的过程,它最终要调用jmp ret_from_sys_call,即系统调用返回函数,而这个函数与进程的调度又密切相关,,因此,我们重点分析 jmp ret_from_sys_call。

    3.系统调用返回函数:

    系统调用返回函数的源代码在/arch/i386/kernel/entry.S中

    ENTRY(ret_from_sys_call) 
       cli     # need_resched and signals atomic test 
       cmpl $0,need_resched(%ebx) 
       jne reschedule 
       cmpl $0,sigpending(%ebx) 
       jne signal_return 
     restore_all: 
       RESTORE_ALL 
       ALIGN 
     signal_return: 
       sti    # we can get here from an interrupt handler 
       testl $(VM_MASK),EFLAGS(%esp) 
       movl %esp,%eax 
       jne v86_signal_return 
       xorl %edx,%edx 
       call SYMBOL_NAME(do_signal) 
       jmp restore_all 
       ALIGN 
      v86_signal_return: 
       call SYMBOL_NAME(save_v86_state) 
       movl %eax,%esp 
       xorl %edx,%edx 
       call SYMBOL_NAME(do_signal) 
       jmp restore_all 
     …. 
     reschedule: 
       call SYMBOL_NAME(schedule) # test 
      jmp ret_from_sys_call 
    

    这一段汇编代码就是前面我们所说的“从系统调用返回函数”ret_from_sys_call,它是从中断、异常及系统调用返回时的通用接口。这段代码主体就是ret_from_sys_call函数,其执行过程中要调用其它一些函数(实际上是一段代码,不是真正的函数),在此我们列出相关的几个函数:

    (1)ret_from_sys_call:主体

    (2)reschedule:检测是否需要重新调度

    (3)signal_return:处理当前进程接收到的信号

    (4)v86_signal_return:处理虚拟86模式下当前进程接收到的信号

    (5)RESTORE_ALL:我们把这个函数叫做彻底返回函数,因为执行该函数之后,就返回到当前进程的地址空间中去了。

    可以看到ret_from_sys_call的主要作用有:

    检测调度标志need_resched,决定是否要执行调度程序;处理当前进程的信号;恢复当前进程的环境使之继续执行。

    最后我们再次从总体上浏览一下时钟中断:

    每个时钟滴答,时钟中断得到执行。时钟中断执行的频率很高:100次/秒,时钟中断的主要工作是处理和时间有关的所有信息、决定是否执行调度程序以及处理下半部分。和时间有关的所有信息包括系统时间、进程的时间片、延时、使用CPU的时间、各种定时器,进程更新后的时间片为进程调度提供依据,然后在时钟中断返回时决定是否要执行调度程序。下半部分处理程序是Linux提供的一种机制,它使一部分工作推迟执行。时钟中断要绝对保证维持系统时间的准确性,而下半部分这种机制的提供不但保证了这种准确性,还大幅提高了系统性能。

    Linux服务器开发/架构师面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)
    分享有需要的可以自行添加学习交流群

    C/C++Linux服务器开发/高级架构师 技术分析教程

    展开全文
  • 操作系统第3次理论课作业(时钟中断-访管中断-系统功能调用) ** 一. 单选题(共5题,5分) 1. (单选题, 1分) (2010年统考真题)下列选项中,操作系统提供的给应用程序的接口是()。 A. 系统功能调用 B. 中断 C. ...

    **

    操作系统第3次理论课作业(时钟中断-访管中断-系统功能调用)

    **

    . 单选题(共5题,5分)
    1. (单选题, 1)
    (2010年统考真题)下列选项中,操作系统提供的给应用程序的接口是()。
    A. 系统功能调用
    B. 中断
    C. 库函数
    D. 原语(注:一类不可中断的系统功能调用)
    
    我的答案: A正确答案: A
    1分
    
    
    答案解析:见图3.2。虽然说实际编程时调用的是库函数,但真正的“操作系统-应用程序”的接口是系统功能调用(原题为系统调用)。原语只是系统功能的一个子集,说法不够准确。
    
    2. (单选题, 1.5)
    (改自2017年统考真题)执行系统调用的过程包括如下主要操作:
    1. 返回用户态
    2. 执行陷入(trap)指令 
    3. 传递系统调用参数(注:首先即包括系统功能号)
    4.执行相应的服务程序。
    正确的执行顺序的最后两步为
    
    A. 2,1
    B. 3,2
    C. 4,1
    D. 3,4
    
    我的答案: C正确答案: C
    1.5分
    
    
    答案解析:根据教材64页图3.3即可知,当提供服务的例程在管态下执行完毕后,即可返回用户程序继续以目态执行。
    
    
    7. (单选题, 1)
    (2011年统考真题)下列选项中,在用户态执行的是()。
    A. 命令解释程序(注:是指分析用户输入的命令内容,即理解用户意图的程序,在unix/linux中即shell)
    B. 缺页处理程序(注:是指处理内存内容缺失的程序)
    C. 进程调度程序(注:是指为程序分配CPU时间的程序)
    D. 时钟中断处理程序
    
    我的答案: A正确答案: A
    1分
    答案解析:BCD均应由操作系统内核处理,排除法即可得答案。内核之外还有命令解释程序,供以解释用户输入的命令。
    
    
    8. (单选题, 1)
    (2013年统考真题)下列选项中,会导致用户进程从用户态切换到内核的操作是 ()
    I. 整数除以零        II. sin()函数调用        III. read系统调用
    A. 仅I、II
    B. 仅I、III 
    C. 仅II、III 
    D. 全部
    
    我的答案: B正确答案: B
    1分
    答案解析:整数除以零会被判定为非法操作,产生程序性中断后操作系统接管CPU控制权。read系统调用等相关介绍见教材66页。sin函数不是系统功能调用,仅属于科学计算功能。
    
    
    5. (单选题, 0.5)
    当用户程序执行访管指令时,中断装置将使中央处理器()工作。
    A. 维持在目态
    B. 从目态转换到管态
    C. 维持在管态
    D. 从管态转换到目态
    
    
    我的答案: B正确答案: B
    
    展开全文
  • 在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断...
  • Linux中断时钟

    2022-05-01 15:30:00
    所谓中断是指 CPU 在执行程序过程中,出现了某些突发事件时 CPU 必须暂停执行当前的程序,转去处理突发事件,处理完毕后 CPU 又返回原程序中断的位置并继续执行。 根据中断的来源,中断可分为内部中断和外部中断,...
  • 时钟中断处理程序

    千次阅读 2008-12-23 11:33:00
    时钟中断处理程序可以划分为两个部分:体系结构相关部分和体系结构无关部分。 与体系结构相关的例程作为系统定时器的中断处理程序而注册到内核中,以便在产生时钟中断时,它都能够相应地运行。这部分处理程序主要...
  • 时钟中断非常特殊而且在系统作用也非常重大。 1.他用做记时。这点显而易见。 2.现在流行的操作系统linux和windows他们都是多进程并发执行的,为什么多进程可以并发,这是由中断支持的。一个进程执行的脚本是
  • linux内核-时钟中断

    2021-11-06 21:15:27
    在所有的外部中断中,时钟中断起着特殊的作用,其作用远非单纯的计时所能相比。当然,即使是单纯的计时也已经足够重要了。别的不说,没有正确的时间关系,你用来重建内核的工具make就不能正常运行了,因为make是靠...
  • 因此我们需要时间,需要管理时间,此篇文章主要就是来与大家介绍一下计算机里的时间与时间管理和储存时间的时钟。有关计算机时间的时钟有多种,在这儿介绍两种比较重要的两种:实时时钟,可编程间隔计数器。 实时...
  • 展开全部1)中断e69da5e6ba903231313335323631343130323136353331333431366338响应的事前准备:系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序...
  • linux的时间与时钟中断处理

    千次阅读 2012-09-28 16:13:45
    本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理。 一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入。这三种时钟为:(1)实时时钟RTC( Real Time ...
  • 模拟中断事件的处理

    2018-03-08 11:19:27
    模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加 1 来模拟处理器执行了一条指令。每模拟一条指令执行后,从键盘读入...中断处理程序
  • 中断时钟

    2021-11-22 19:19:49
    中断处理 中断指CPU在执行程序过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行。 中断分类: 外部中断 VS 内部中断 可屏蔽中断 VS ...
  • Linux实现时钟中断的全过程

    千次阅读 2015-09-21 09:16:48
    有关该芯片的详细知识我们不再详述,只大体介绍以下它的组成和作用,如下表5.1所示:   表5.1 8253/8254的组成及作用 名称 端口地址 工作方式 产生的输出脉冲的用途 计数器0 ...
  • 一、回顾 前面的课程,我们分析了API主动切换线程的流程,分析了 KiSwapContext 和 SwapContext 函数,这两个是切换线程的函数。分析了 KiSwapThread ...Windows系统每隔10-20毫秒会触发一次时钟中断,可以调用 GetS
  • 中断和中断处理流程

    2020-08-18 21:16:43
    1. 中断概念 ...软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统
  • 本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理。 一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入。这三种时钟为: 实时时钟RTC ( Real Time Clock) ...
  • stm32 中断处理

    2022-03-14 20:15:17
    中断:有优先级和中断嵌套 中断分配:控制中断的优先级(NVIC) 响应优先级: 优先进行排队处理(上个事件完成后,来进行处理你) 抢占优先级:优先处理,即使正在处理别的事件 抢占优先级和响应优先级进行了...
  • 日期 内核版本 CPU架构 作者 2019.04.06 Linux-5.0 ...时钟中断是系统中调度和抢占的驱动因素,在时钟中断中会进行进程运行时间的更新等,并更新调度标志,以决定是否进行调度。下面以Pow...
  • linux时间管理,时钟中断,系统节拍

    千次阅读 2020-08-03 18:10:19
    1.2 系统时钟中断需要处理的事情 2 HZ 2.1 简介 2.2 动态调节时钟中断 / CONFIG_NO_HZ / 降低功耗/tickless mode 2.3 获取当前运行系统的HZ值 / USER_HZ 3 jiffies和jiffies_64(记录系统启动以来产生的节拍数...
  • 一、中断处理程序概述 在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler) 或中断服务例程(interrupt service routine, ISR) 产生中断的每个设备都有一个相应的中断处理...
  • C++编程实现模拟中断处理

    千次阅读 2021-12-04 23:15:48
    操作系统的课程实验,C++编程实现模拟中断处理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,492
精华内容 31,396
关键字:

时钟中断处理程序的主要功能