• 20191320-2021-2022-1-diocs 学习笔记8


    第7章 定时器及时钟服务

    5.1~5.2 硬件定时器

    硬件定时器

    定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。注意定时器是一个单独的硬件。

    个人计算机定时器

    基于Intel x86的个人计算机有数个定时器(Bovet和 Cesati 2005)。

    1. 实时时钟(RTC):用小电池供电,记录和提供日期和时间信息。
    2. 可编程间隔定时器(PIT)(Wang2015):可以进行编程,以毫秒为精度。
    3. 多核CPU中的本地定时器(Intel1997;Wang2015):在多核CPU中,每个核都是一个独立的处理器,它有自已的本地定时器,由 CPU时钟驱动。
    4. 高分辨率定时器:大多数电脑都有一个时间戳定时器(TSC),由系统时钟驱动。它的内容可通过64位TSC寄存器读取。由于不同系统主板的时钟频率可能不同,TSC不适合作为实时设备,但它可提供纳秒级的定时器分辨率。一些高端个人计算机可能还配备有专用高速定时器,以提供纳秒级定时器分辨率。

    5.3~5.6 相关实际操作

    CPU操作

    CPU有程序计数器(PC)用于标记当前执行到的指令的位置。标志或状态寄存器(SR)包含CPU的当前状态,堆栈指针(SP)指向堆栈顶。

    时钟服务函数

    1. gettimeofday():系统调用,获取系统时间。
    2. settimeofday():系统调用,设置系统时间。
    3. time():系统调用,获取以秒为单位的当前时间。
    4. times():系统调用,可以用于获取某进程的具体执行时间。

    间隔定时器

    Linux中为每个进程都提供了3种不同类型的间隔计时器,用来作进程计时的虚拟时钟。间隔定时器由settimer()系统调用创建,由gettimer()系统调用返回间隔定时器的状态。

    实践内容过程、问题解决过程

    使用gettimeofday()系统调用

    使用gettimeofday()获取当前时间。
    代码:

    #include <stdio.h>
    #include <string.h>
    #include <sys/time.h>
    #include <time.h>
    
    int main()
    {
        struct timeval t;
    
        gettimeofday(&t, NULL);
        printf("sec= %ld usec=%d
    ", t.tv_sec, t.tv_usec);
        printf((char*)ctime(&t.tv_sec));
        return 0;
    }
    

    使用time()获取时间

    使用time()可以获取以秒为单位的时间,为1970年1月1日0时到现在为止的秒数。通过time可以实现计算程序中代码段执行消耗的时间秒数,如下。
    代码:

    #include <stdio.h>
    #include <time.h>
    
    time_t start, end;
    
    int main()
    {
    	int i;
    	start = time(NULL);
    	printf("start=%ld
    ",start);
    	for(i=0;i<2019132000;i++);
    	end = time(NULL);
    	printf("end = %ld
    ");
    	printf("time of for is %ld
    ",end-start);
    	return 0;
    
    }
    
    

    代码链接

    代码包括一些以前的代码,在码云。链接:https://gitee.com/Ressurection20191320/code/tree/master/IS

  • 相关阅读:
    代码走读 airflow 2
    sql 查询相关
    控制你的鼠标和键盘
    TODO
    二进制流的操作收集
    daterangepicker-双日历
    datetimepicker使用
    ADO执行事务
    动态添加表sql
    执行带返回值的存储过程
  • 原文地址:https://www.cnblogs.com/Ressurection-20191320/p/15508684.html
Copyright © 2020-2023  润新知