首页 > 其他分享 >学习笔记8

学习笔记8

时间:2023-11-05 13:33:04浏览次数:35  
标签:定时器 中断 笔记 学习 tv time CPU 时钟

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);

}

苏格拉底提问

  • 硬件计时器:



  • 时钟服务函数:




标签:定时器,中断,笔记,学习,tv,time,CPU,时钟
From: https://www.cnblogs.com/pengqiqi/p/17810419.html

相关文章

  • python——基础学习篇(7)
    【集合】可变:   set()  update(others)不可变: frozenset()  ( 交集,差集,对称差集)+update(others)删:remove()——如果指定元素不存在,会抛出异常discard()——静默处理pop()——随机从集合中弹出一个元素clear()清空【可哈希】正确创建集合和字典,要求字典的键和集合的元......
  • 软考学习
    计算机组成与体系结构(6分)数据的表示****进制进制转换1二进制转十进制从右往左  0b111=1*20+1*21 +1*22 =1+2+4八进制转十进制从右往左  0111=1*80 +1*81+1*82=1+8+64十六进制转十进制从右往左  0x111=1*160 +1*161+1*162=......
  • 学习笔记8
    目录知识点归纳第5章并行计算硬件定时器个人计算机定时器CPU操作中断处理时钟服务函数time系统调用times系统调用time和date命令间隔定时器苏格拉底挑战可能遇到的问题与解决方案实践过程知识点归纳第5章并行计算硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备......
  • JUC并发编程学习(十一)四大函数式接口(必备)
    四大函数式接口(必备)程序员:泛型、反射、注解、枚举新时代程序员:lambda表达式、链式编程、函数式接口、Stream流式计算函数式接口:只有一个方法的接口@FunctionalInterfacepublicinterfaceRunnable{publicabstractvoidrun();}//@FunctionalInterface函数式接口,超......
  • 2023-2024-1 20231302《计算机基础与程序设计》第六周学习总结
    这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第六周作业这个作业的目标Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂度、递归、代码安全教材学习内容总结《计算......
  • 串串题笔记
    串串题笔记P6216回文匹配又一个harbinbeer先对原串做\(kmp\),记录数组\(S\),当从\(i\)开始可以匹配时\(S_i=1\),否则\(S_i=0\),对\(S_i\)做前缀和manacher求回文,设当前回文的区间在原来的串上是\([L,R]\)则这个区间对答案的贡献就是\((S_r-S_{mid})-(S_{mid......
  • 【笔者感悟】笔者的学习感悟【十一】
    写在前面  今天笔者想和大家来讨论一下做个人项目的问题。想必不用笔者强调了,作为码农,做个人项目是增添履历很重要的一环。笔者也不例外,但是既然做个人项目,就要做值钱的项目,像图书管理系统啥的,在网上都已经做烂掉了。做了也没啥意义,那么要做一个好项目出来,就目前这个互联网环境......
  • MarkDown用法学习笔记
    标题:用'#'标识,可以到从1到6级标题设置,有多少个'#'符号就对应多少级标题粗体:用''标识,如果两边只有一个''标识是斜体,如果两有2个这符号标题是加粗,如果有3个这符号标识是斜体和加粗效果。删除:用'~'标识,两边加上这符号即可将对应的文字加上删除线。引用:用'>'标识,文字前面加上......
  • 2023-2024-20231317《计算机程序与设计》第六周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第六周作业)这个作业的目标<《计算机科学概论第7章》,《C语言程序设计》第5章>作业正文本博客原链接https......
  • 2023-2024-1 20211211 第五章学习笔记
    第五章学习笔记一、知识点归纳二、苏格拉底挑战三、问题解决四、实践过程截图time系统调用C语言实现......