学习笔记8

20211301 学习笔记8

教材知识点总结

5.1硬件定时器

  • 定时器:时钟源和可编程计数器组成的硬件设备

  • 时钟源:晶体振荡器,产生周期性电信号

  • 定时器中断:计数减到0

5.2 个人计算机定时器

  • 实时时钟:RTC,小型备用电池供电,PC关机也能持续运行,提供时间和日期

  • 可编程间隔定时器:PIT,与CPU分离的一个硬件定时器

  • 多核CPU中的本地定时器:多核CPU中,每个核都是一个独立的处理器,有自己的本地定时器,由CPU时钟驱动

  • 高分辨率定时器:时间戳定时器(TSC)。由系统时钟驱动,通过寄存器读取,不同系统主板的时钟频率可能不同,TSC不适合作为实时设备

5.3 CPU操作

  • 每个CPU都有一个程序计数器PC,也称为指针IP,以及一个标志或状态寄存器SR,一个堆栈指针SP和几个通用寄存器,PC指向内存中要执行的下一条指令时,SR包含CPU的当前状态

  • 异常(陷阱):错误状态,由于无效地址、非法指令、越权

  • 中断:I/O设备或协处理器发送给CPU的外部信号,请求CPU服务

5.4 中断处理

  • 中断控制器:外部设备的中断被馈送到中断控制器的预定义输入行,按优先级对中断输入排序,并将最高优先级的中断作为中断请求

  • 中断向量:对于每个中断,生成一个唯一编号

  • 中断向量表:获取中断向量号后,CPU用它作为内存中中断向量表中的条目索引

  • 中断处理程序:条目包含一个指向~的入口地址来实际处理中断

5.5 时钟服务函数

  • timezone已经过期,应设置为NULL

  • 系统调用:

  • settimeofday系统调用

  • time系统调用time_t time(time_t*t)

  • times系统调用

  • data:打印或设置系统日期和时间

  • time:报告进程在用户模式和系统模式下的执行时间和总时间

  • hwclock:查询并设置硬件时钟,也可以通过BIOS来完成

5.6 间隔定时器

  • 三种类型:虚拟时钟

  • setitimer():系统调用创建

  • getitimer():系统调用返回间隔定时器状态

  • 函数setitimer():用当前值填充,指定的定时器在下次到期之前剩余的时间

  • 函数getitimer():指定定时器设置为new_value的值

  • 示例:

代码实现

  • 通过settimeofday设置系统时间

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

int main() {
    struct timeval tv;

    // 设置要设置的时间,这里假设要设置为2023年11月5日 12:00:00
    tv.tv_sec = 1735615200;  // 时间戳表示的秒数
    tv.tv_usec = 0;          // 微秒数

    // 调用 settimeofday 函数设置系统时间
    if (settimeofday(&tv, NULL) == -1) {
        perror("settimeofday");
        return 1;
    }

    printf("系统时间已设置成功!\n");

    return 0;
}

  • time系统调用示例
#include<stdio.h>
#include<time.h>

time_t start,end;
int main()
{
int i;
start = time(NULL);
printf("start=%ld\n",start);
for (i=0;i<123456789;i++);
end = time(NULL);
printf("end =%ld time = %ld\n",end,end-start);

}

问题与解决方案

  • 问题一:进程和线程的区别

  • 问题一解决方案:

  • 问题二:kill 的用法

  • 问题二解决方案:

苏格拉底提问

  • 硬件计时器:



  • 时钟服务函数:




posted @ 2023-11-05 13:25  20211301郑润芃  阅读(4)  评论(0编辑  收藏  举报