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

学习笔记8

时间:2023-10-30 19:55:40浏览次数:31  
标签:定时器 系统 timer 学习 Unix 计时器 笔记 实时

第5章 定时器及时钟服务

1.个人计算机定时器

定时器原理

定时器是一种硬件或软件设备,用于在指定的时间间隔内产生时间戳或触发事件。在个人计算机中,定时器分为两类:实时定时器和普通定时器。实时定时器用于精确地控制实时任务,而普通定时器则用于一般性的事件控制。

定时器驱动程序

定时器驱动程序是操作系统中负责管理定时器的内核模块。它负责将硬件定时器信号转换为系统时间戳,并触发相关事件。在 Unix/Linux 系统中,定时器驱动程序主要有以下几种:

  • ioctl 接口:用于设置和查询定时器的状态和参数。
  • 中断处理程序:当定时器到达预定时间时,产生中断信号,触发中断处理程序执行相应的操作。
  • 软中断:定期执行定时器相关任务,如更新系统时间戳等。

定时器应用

在Unix/Linux系统中,定时器广泛应用于各种场景,如:

  • 周期性任务:定期执行某个函数或任务,如每隔一段时间更新系统时间戳、执行系统维护任务等。
  • 实时任务:对实时性要求较高的任务,如实时数据采集、实时通信等。
  • 延时操作:在特定时间点执行某个任务,如延时启动、延时关闭等。

编程实践

在Unix/Linux系统编程中,可以使用以下方法实现定时器功能:

  • 使用 sys_timer_create、sys_timer_start、sys_timer_stop 等系统调用设置和控制定时器。
  • 使用 sleep、usleep 等系统调用实现延时操作。
  • 自定义中断处理程序,响应定时器中断信号。
  • 使用 pthread_timer_create、pthread_timer_delete 等线程定时器 API。

注意事项

在使用定时器时,需要注意以下几点:

  • 定时器的精度和稳定性:硬件定时器通常具有较高的精度,但受限于硬件性能;软件定时器可以通过调整操作系统的时间片来实现更高精度的定时。
  • 避免定时器溢出:长时间运行的定时器可能会出现溢出现象,导致时间戳错误。可以通过定期重置定时器或使用循环计数器等方式避免溢出。
  • 考虑实时性能:在实时系统中,需要确保定时器具有足够的实时性能。这可能涉及到使用实时操作系统、优化内核参数等。

2.时钟服务函数

系统调用函数:

在Unix/Linux系统中,系统调用是应用程序与操作系统内核之间进行通信的一种方式。以下是一些与时钟服务相关的系统调用函数:

  • settimeofday:设置系统时间。
  • gettime:获取当前系统时间。
  • clock_gettime:获取系统时间的一个精确副本。
  • clock_settime:设置系统时间的一个精确副本。

库函数:

Unix/Linux系统提供了许多库函数,以便开发者能够在程序中处理时间相关的问题。以下是一些常用的库函数:

  • time.h:包含与时间相关的函数,如 time、ctime、gmtime 等。
  • sys/time.h:包含与系统时间相关的函数,如settimeofday、gettime等。
  • unistd.h:包含与进程相关的函数,如 sleep、usleep 等。

实时信号:

Unix/Linux系统中的实时信号(Real-time signals)可以用于处理时钟相关的事件。以下是一些与实时信号相关的函数:

  • signal:设置信号处理函数。
  • sigaction:设置信号处理动作。
  • raise:发送信号给进程。

计时器库:

Unix/Linux系统提供了计时器库(timer library),允许开发者创建和管理计时器。以下是一些与计时器库相关的函数:

  • timer_create:创建一个计时器。
  • timer_delete:删除一个计时器。
  • timer_expire:设置计时器的到期时间。
  • timer_gettime:获取计时器的状态。

同步机制:

在多线程或多进程程序中,同步机制对于确保正确处理时钟服务至关重要。以下是一些与同步机制相关的函数:

  • pthread_mutex_lock:加锁。
  • pthread_mutex_unlock:解锁。
  • pthread_cond_wait:等待条件变量。
  • pthread_cond_signal:信号条件变量。

苏格拉底挑战
image

image

image

image

标签:定时器,系统,timer,学习,Unix,计时器,笔记,实时
From: https://www.cnblogs.com/1104dd/p/17798631.html

相关文章

  • javaweb学习每日总结-第十天
    第十天学习今天我没有学习什么新的知识,而且回顾我之前所学习的一切的java知识,陷入了思考。一切都是因为今天王建民老师的考试,今天的考试,我取得了相对比较优异的成绩。考试一共一个小时,虽然结果还不错,但是我心里明白,我的技术还相当不熟练,一旦动起手来敲代码,我好像就迷失了方向,我想......
  • jupyter_机器学习基础
    学习打他frame和一些基础操作importpandasaspdimportnumpyasnppd.DataFrame(np.random.randn(2,3))score=np.random.randint(40,100,(10,5))scorescore_df=pd.DataFrame(score)score_dfsubjects=['语文','数学','英语','体育',&#......
  • 第二章读书笔记
    03运行超市抹零结账行为a=float(input("商品的价格:"))print("商品总金额:",int(a))print("学号后四位:3022")   运行结果:   04计算学生成绩的分差和平均分A=96B=92C=88D=A-CE=(A+B+C)/3print("A科目和B科目的分数之差为:"+str(C)+"分\n")print("三门科......
  • 第二章读书笔记
    22信计1班廖晟崴学号2022310143023 03运行超市抹零行为a=float(input('扫描的第一个商品价格:'))b=float(input('扫描的第二个商品价格:'))c=float(input('扫描的第三个商品价格:'))d=a+b+cprint('总计:',int(d))运行结果  04计算学生成绩的分差和平均分#输入......
  • [Vue学习]使用Vue-cli脚手架快速搭建项目
    安装vue-cli3npminstall-g@vue/cli验证vue版本vue--version 使用vuecreate项目名创建(需要cd进具体的目录)npmrundev(运行)npmrunbuild(编译)(也可以使用vue ui界面图形化方式进行创建) ==================================================可以直接使用下面方式创建项......
  • openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema
    openGauss学习笔记-110openGauss数据库管理-管理用户及权限-SchemaSchema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。每个数据库包含一个或多个Schema。......
  • [学习笔记]扩展域并查集
    扩展域并查集可以维护类似于P1892[BOI2003]团伙的题目。题目中有两种关系:朋友和敌人,并规定一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友引入反集的概念,例如有三个人\(a,b,c\),他们的反集为\(a',b',c'\)。如果\(a,b\)为敌人,连接\(a,b'\)和\(a',b\);如果\(a,......
  • Django实战项目-学习任务系统-定时任务管理
    接着上期代码框架,开发第4个功能,定时任务管理,再增加一个学习定时任务表,主要用来设置周期重复性的学习任务,定时周期,定时时间,任务标题和内容,预计完成天数,奖励积分和任务状态等信息。 现实中学习一门课程或一项技能知识,需要很长时间的学习积累才能学会,不像小说世界,游戏世界等虚拟世......
  • python爬虫知识体系80页md笔记,0基础到scrapy项目高手,第(2)篇:http协议复习精讲
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。完整体系笔记直接地址:请移步这里共8章,37子模块,总计5.6w+字今天这一篇主讲:爬虫基础本阶段本文主要学......
  • 谷歌搜索引擎课程笔记
    1、bywave、lantem搜索引擎处理流程GoogleHackingDatabase:GHDB汇总了数千条谷歌搜索高级语法,涵盖了立足点、敏感路径、敏感文件、错误信息、漏洞文件、漏洞服务器、Web服务器检测等方方面面。2004年开始更名为GHDB,现在由网站exploit-db.com维护GoogleHacking操作符基础操作符:......