学习笔记8(定时器及时钟服务)
一、知识点梳理
(一)硬件定时器
硬件定时器是一种嵌入在计算机系统或微控制器芯片内部的计时器,主要用于精确计时、中断触发和周期性操作。它通常由计算机硬件提供支持,与软件定时器不同,硬件定时器的计时操作是由硬件电路和时钟信号来完成的,因此它的精度往往更高,可以达到纳秒级别。
(二)个人计算机定时器
个人计算机通常具有多种定时器,用于各种用途,包括系统时钟、硬件计时器和软件计时器。以下是一些常见的个人计算机定时器:
-
实时时钟(RTC):每台个人计算机都有一个实时时钟,它由备用电池供电,即使计算机关机也能继续运行。RTC用于实时提供时间和日期信息,当计算机启动时,它会使用RTC来更新系统时间变量,以保持与当前时间的一致。
-
可编程间隔定时器(PIT):PIT是与CPU分离的硬件定时器,通常用于操作系统和应用程序的计时操作。它可以用来生成定期中断,触发特定任务的执行,或者用于测量时间间隔。PIT通常由操作系统或应用程序通过相应的驱动程序进行配置和控制。
-
高精度事件定时器(HPET):HPET是一种更现代的硬件定时器,它提供更高的精度和更多的计时选项。它通常用于支持高性能计算和实时操作系统,以提供更准确的时间测量和事件同步。
(三)CPU操作
CPU执行操作系统和应用程序的指令,其中包括配置和管理定时器、处理定时器中断以及与时钟服务交互的操作。
当定时器生成中断时,CPU会暂停当前的执行任务,跳转到中断服务程序,执行与定时器中断相关的任务,例如定时任务或事件处理。
时钟服务通过定时器来保持系统时间的准确性,并确保各个任务和进程在合适的时间进行调度和执行。
(四)中断处理
中断处理是计算机系统中的一种关键机制,用于响应外部事件、硬件设备的请求或其他系统事件,以暂时中断当前的CPU执行流程,并执行相关的中断处理程序。以下是中断处理的基本步骤:
-
中断触发:中断可以由多种事件触发,例如硬件设备发出的信号(硬件中断)、特定条件的发生(如除零错误)、系统调用请求(软中断),或者定时器到达特定时间(定时中断)等。当中断事件发生时,相关的中断请求被发送到CPU。
-
中断请求(Interrupt Request):中断请求是一个信号或标志,它通知CPU有中断事件需要处理。中断请求通常与特定的中断向量或编号相关联,以便CPU知道如何识别和处理特定中断。
-
保存上下文:在处理中断之前,CPU通常会保存当前执行任务的上下文信息,包括寄存器内容、程序计数器、栈指针等。这是为了确保中断处理完成后可以正确地返回到原来的执行状态。
-
中断服务程序(Interrupt Service Routine,ISR):每个中断都有一个相应的中断服务程序,用于处理特定类型的中断事件。ISR是一段特定的代码,它会根据中断类型执行相关操作,然后返回到原来的执行流程。
-
执行中断处理:CPU跳转到相应的中断服务程序,执行其中的指令,以满足中断事件的要求。中断服务程序可能包括了设备驱动程序、错误处理、系统调用处理等。
-
恢复上下文:在中断服务程序执行完毕后,CPU会恢复之前保存的上下文信息,包括寄存器内容和程序计数器,以便继续原来的任务执行。
-
中断结束:一旦中断处理完成,CPU会继续执行原来的任务。如果有多个中断请求,操作系统会根据优先级和中断类型来确定哪个中断被处理。
(五)Linux的基本时钟服务函数
-
gettimeofday函数:gettimeofday函数用于获取当前的系统时间,以微秒为单位。- 语法:
int gettimeofday(struct timeval *tv, struct timezone *tz);
-
settimeofday函数:settimeofday函数允许用户设置系统时间,但需要足够的权限。- 语法:
int settimeofday(const struct timeval *tv, const struct timezone *tz);
-
time函数:time函数用于获取自1970年1月1日以来的秒数,通常用于获取时间戳。- 语法:
time_t time(time_t *t);
-
times函数:times函数用于获取进程的执行时间。它返回一个结构体,其中包含进程及其子进程的各种时间统计信息,如用户CPU时间、系统CPU时间等。
-
date函数:date用于显示系统的当前日期和时间,通常以默认格式(例如,"Wed Nov 2 14:40:01 UTC 2023")显示。
二、自主学习
(一)苏格拉底挑战


(二)实战演练




浙公网安备 33010602011771号