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

学习笔记8

时间:2023-11-05 20:35:09浏览次数:42  
标签:ld 定时器 tv 笔记 学习 int printf include

并行计算

  1. 硬件定时器是计算机系统中的一个重要组件,由时钟源和可编程计数器组成。时钟源通常是晶体振荡器,驱动计数器以固定频率生成定时器中断。

  2. 实时时钟(RTC):用于提供系统的实时时间和日期信息,通常由小型备用电池供电,即使计算机关闭也能继续运行。

  3. 可编程间隔定时器(PIT):是一个独立于CPU的硬件定时器,可编程以提供毫秒级的定时器刻度。

  4. 多核CPU中的本地定时器:每个核都有自己的本地定时器,由CPU时钟驱动,可用于测量各核心的执行时间。

  5. 高分辨率定时器:通常用时间戳计时器(TSC)实现,提供高精度的时间测量。

CPU操作

  1. CPU拥有多个寄存器,包括程序计数器(PC)、状态寄存器(SR)、堆栈指针(SP)和通用寄存器。

  2. PC (Program Counter):指向下一条要执行的指令的地址。

  3. SR (Status Register):包含有关CPU当前状态的信息,如操作模式、中断掩码和条件码。

  4. SP (Stack Pointer):指向当前堆栈的栈顶。

时间相关系统调用

  1. time系统调用:用于获取当前时间,以秒为单位。可通过参数传递给应用程序。

  2. times系统调用:用于获取进程的执行时间信息,包括用户模式时间和系统模式时间。结果存储在tms结构中。

间隔定时器

  1. ITIMER_REAL:在到期时生成SIGALRM信号。

  2. ITIMER_VIRTUAL:在用户模式下执行时减少,到期时生成SIGVTALRM信号。

  3. ITIMER_PROF:在用户模式和系统模式下执行时减少,通常与ITIMER_VIRTUAL结合使用,用于分析用户模式和内核模式下的执行时间,生成SIGPROF信号。

命令行工具

  1. date:用于打印或设置系统的日期和时间。

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

  3. hwclock:查询和设置硬件时钟(RTC),也可以通过BIOS来完成。

这些知识点对于理解并行计算和处理与时间相关的任务非常重要。硬件定时器和系统调用可帮助操作系统和应用程序精确测量时间,从而支持定时、调度和性能分析。

实践过程

通过gettimeofday()获取系统时间

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

struct timeval t;

int main() {
    gettimeofday(&t, NULL);
    printf("sec=%ld usec=%ld\n", t.tv_sec, t.tv_usec);
    printf((char *)ctime(&t.tv_sec));
}

通过settimeofday()设置系统时间

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

struct timeval t;

int main() {
    int r;
    t.tv_sec = 123456789;
    t.tv_usec = 0;
    r = settimeofday(&t, NULL);
    if (!r) {
        printf("settimeofday() failed\n");
        exit(1);
    }
    gettimeofday(&t, NULL);
    printf("sec=%ld usec=%ld\n", t.tv_sec, t.tv_usec);
    printf("%s", ctime(&t.tv_sec));
}

使用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 < 20201307; i++)
        end = time(NULL);
    printf("end=%ld time=%ld\n", end, end - start);
}

sigaction使用示例

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
//#include <siginfo.h>
void handler(int sig, siginfo_t *siginfo, void *context) {
    printf("handler: sig=%d from PID=%d UID=%d\n", sig, siginfo->si_pid, siginfo->si_uid);
}

int main(int argc, char *argv[]) {
    struct sigaction act;
    memset(&act, 0, sizeof(act));
    act.sa_sigaction = &handler;
    act.sa_flags = SA_SIGINFO;
    sigaction(SIGTERM, &act, NULL);
    printf("proc PID=%d looping\n", getpid());
    printf("Enter 'kill PID' to send SIGTERM signal to it\n");
    while (1) {
        sleep(10);
    }
}


标签:ld,定时器,tv,笔记,学习,int,printf,include
From: https://www.cnblogs.com/zsy1748774883/p/17811084.html

相关文章

  • JUC并发编程学习笔记(十二)Stream流式计算
    Stream流式计算什么是Stream流式计算大数据:存储+计算集合、MySql这些的本质都是存储东西的;计算都应该交给流来操作!一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算packageorg.example.stream;importjava.util.Arrays;importjava.util.List;impo......
  • 2023-2024-1 20231420 《计算机基础与程序设计》第六周学习总结
    2023-2024-120231420《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第六周作业这个作业的目标1.学习《计算机科学概论》第7章并完成云班课测试;2.......
  • 2023-2024-1 20231309 《计算机基础与程序设计》第六周学习总结
    2023-2024-120231309《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第六周作业这个作业的目标作业正文2023-2024-120231309《计算机基础与程......
  • linux学习-3
    I/O重定向与管道(I/O即输入输出)输出重定向:在date命令后加“>”,并指向date.txt文件,那么结果就会写入date.txt。将date的输出结果重定向到一个普通文件。再打开一个终端。  在第1个终端中敲“date>/dev/pts/2”,这样就会在第二个终端中显示date的内容。passwd命令:passwd......
  • 2023-2024-1 20231321 《计算机基础与程序设计》第6周学习总结
    2023-2024-120231321《计算机基础与程序设计》第6周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第6周作业)这个作业的目标<计算机科学概论第7......
  • 前端开发笔记[5]-rust的webassembly
    摘要基于rust开发webassembly入门,通过rust实现在网页中弹出警告框.rust的webassembly开发方式https://zhuanlan.zhihu.com/p/104299612入门Rust开发WebAssemblyRust编译为WebAssembly在前端项目中使用https://zhuanlan.zhihu.com/p/662991464相对来说,使用Rust开发......
  • 2023-2024-1 20231421 《计算机基础与程序设计》第六周学习总结
    ------------恢复内容开始------------------------恢复内容开始------------------------恢复内容开始------------作业信息作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06作业目标:自学《计算机科学概论》第七章、《c语言程序设计》第五章作业正文:教材学......
  • 11月3日前端需要学习的知识、自闭合标签、meta标签、div标签
    目录前端需要学习的知识生成的网页类型静态网页动态网页网页的架构c/s架构b/s架构浏览器的特别用法第一种结合python来使用第二种将文件拖入浏览器里面(这就符合渲染了)重点HTML首先!DOCTYPEhtml其次就是html到/html还有就是head到/head的内部最后就是body到/body总结其它的标签......
  • Prüfer 序列随便学习
    引入首先这是个啥玩意呢?Prüfer序列可以将带标号的\(n\)个节点的树用一个序列表示。可以理解为完全图生成树与Prüfer序列构建了双射。建立每次选择一个编号最小的叶结点并删掉它,然后在序列中记录下它连接到的那个结点。重复\(n-2\)次后就只剩下两个结点,算法结束。......
  • Linux学习日志
    Linux学习日志1、走近Linux系统1.1、开机登录开机会启动许多程序。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。开机成功后,它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传......