首页 > 其他分享 >教材第五章学习笔记

教材第五章学习笔记

时间:2022-10-22 18:47:05浏览次数:64  
标签:中断 笔记 tv 第五章 sec printf 教材 include CPU

知识点归纳

定时器是由时钟源和可编程计数器组成的硬件

时钟源通常是一个晶体震荡器,产生周期性电信号

当计数器减为0时,向CPU生成定时器中断

当CPU遇到异常时,会进行预设的异常处理

中断是外部设备请求CPU服务

CPU是否处理中断取决于它的状态寄存器是否屏蔽了中断

问题与解决思路

中断是如何实现的?

中断的本质是处理器对外开放的实时受控接口。
一个没有中断的计算机体系是决定论的:得知某个时刻CPU和内存的全部数据状态,就可以推衍出未来的全部过程。这样的计算机无法交互,只是个加速器。
添加中断后,计算机指定了会兼容哪些外部命令,并设定服务程序,这种服务可能打断当前任务。这使得CPU“正在执行的程序”与“随时可能发生的服务”,二者形成了异步关系,外界输入的引入使得计算机程序不再是决定论。由人实时控制的中断输入,是无法预测的。再将中断响应规则化,推广开,非计算机科学人群就能控制计算机,发挥创造力。

既然硬件能干扰到CPU的正常的指令执行,那么CPU就必须能感知到干扰信号,所谓的干扰信号就是这里所说的中断信号。

CPU的工作粒度是机器指令级别,那么在每条机器指令执行结束后都会检查一下是否中断信号产生。

这里的实现可能是轮询。这就好比你在玩游戏,此时如果有人喊你的名字(中断信号)干扰你玩游戏那么你立刻就能听到
但人的大脑里有一直在轮询“有没有人喊我的名字?有没有人喊我的名字?有没有人喊我的名字?”了吗?并没有。人脑的中断检查机制是及其高效的。

CPU的硬件特性决定中断处理机制也及其高效。

当那个管脚电平变低(或者变高)的时候,cpu就会被打断,并从特定地址开始执行。
就像cpu的reset被拉低的时候一定会复位并从0地址开始执行一样,都是硬件的结构决定的。

实践内容

gettimeofday()

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <sys/time.h>
  4 #include <time.h>
  5 
  6 int main(){
  7     struct timeval t;
  8     gettimeofday(&t,NULL);
  9     printf("sec = %ld , usec = %d\n",t.tv_sec,t.tv_usec);
 10     printf((char*)ctime(&t.tv_sec));
 11     return 0;
 12 }


settimeofday()

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <sys/time.h>
  4 #include <time.h>
  5 
  6 int main(){
  7     struct timeval t;
  8     t.tv_sec = 123456789;
  9     t.tv_usec = 0;
 10     int r = settimeofday(&t,NULL);
 11     if(!r){
 12         printf("settimeofdat() failed\n");
 13         return -1;
 14     }
 15     gettimeofday(&t,NULL);
 16     printf("sec = %ld , usec = %ld\n",t.tv_sec,t.tv_usec);
 17     printf("%s",ctime(&t.tv_sec));
 18     return 0;
 19 }

Linux内核能够纠正系统时间和实时时间的偏差

标签:中断,笔记,tv,第五章,sec,printf,教材,include,CPU
From: https://www.cnblogs.com/zhou-huilin/p/16816924.html

相关文章

  • Markdown学习的笔记
    Markdown学习标题三级标题两边**是粗体两边一个*是斜体两边三个*是加粗斜体两边两个~是删除线的效果引用一个>加空格分割线三个减号、三个*图片!加中括号加小......
  • 《Unix/Linux系统编程》学习笔记8
    第五章定时器及时钟服务一、知识点归纳(一)硬件定时器  定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以料青确的......
  • UniTask使用笔记,将Action回调改写成await,以PlayableDirector的Stopped为例
    UniTask提供了很多异步方法,如Resources.LoadAsync,UniTask.NextFrame,UniTask.WaitUntil,按钮事件button.OnClickAsync等当没有内置方法时,我们希望能将自己的回调方法改写为a......
  • Kruskal 重构树 学习笔记
    参考资料:Kruskal重构树学习笔记-ImmortalWatcher定义顾名思义,Kruskal重构树就是用Kruskal生成树算法在无向图上得到的树所构建出的新树。Kruskal重构树具有良好......
  • kubernetes笔记-2-基本操作
    一、kubectl的基本操作语法:  kubectl[command][type][name][flags]语法说明:  command:对资源执行相应操作的子命令,如:get、create、delete、run等;  type:要操......
  • 模拟退火学习笔记
    虽然说考前不应该碰这些随机化算法,容易影响思考,但是还是写一写吧,对于一些问题还是很好用的。概念什么是模拟退火。一句话解释,我们从一个旧状态随机出一个新状态,要从旧状......
  • SpringCloud-02 Eureka学习笔记
    ​一、Eureka简介1、什么Eureka?Netflix在涉及Eureka时,遵循的就是API原则.Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服雾,用于定位服雾,以实现云端中......
  • 敏捷(SCRUM)学习笔记 1 —— 《SCRUM敏捷软件开发》 (美)Mike Cohn)著 清华大学出版社2
     关键词:《SCRUM敏捷软件开发》——(美)MikeCohn著,清华大学出版社2011版,读书笔记(一) 第一章  为什么敏捷转型难(但值得) 为什么转型困难一、变化来得比以往更快......
  • Vue 笔记6 模板分离
                   ......
  • 深度学习入门书籍笔记
    title:深度学习入门书籍笔记date:2022-08-0212:57:39mathjax:truetags:深度学习python第3章神经网络3.2激活函数将输入信号的总和转换为输出信号,一般称为......