首页 > 其他分享 >20211105李宜时信息安全系统设计与基础学习笔记八

20211105李宜时信息安全系统设计与基础学习笔记八

时间:2023-11-04 12:45:09浏览次数:35  
标签:20211105 定时器 pthread int 信息安全 timer timers 李宜时 include

Ubuntu中的定时器及时钟服务学习笔记

基础概念

在Ubuntu系统中,定时器和时钟服务是操作系统时间管理的基础。定时器用于在特定时间点或经过特定时间间隔后触发事件。时钟服务则提供当前时间和日期信息。

硬件定时器

硬件定时器是由计算机硬件提供的计时设备,它可以在不同时间间隔发出信号。

  • 个人计算机定时器:这些定时器通常与系统的实时时钟(RTC)一起工作,提供定时功能。
  • CPU定时器:大多数现代CPU提供内置的定时器,如程序性间隔定时器(PIT),高精度事件定时器(HPET),以及其他高级定时器。

软件定时器

软件定时器是由操作系统内核管理的,它利用硬件定时器的功能来实现。

  • 中断处理:当定时器到时,硬件定时器会产生一个中断,由操作系统内核处理。
  • 时钟服务函数:操作系统提供的API,如 gettimeofday()clock_gettime(),可以用于获取当前时间或计算时间差。

定时器的类型

  • 间隔定时器:在固定时间间隔重复触发的定时器。
  • PEAL模式间隔定时器:一种高级的定时器,可以更精确地控制时间间隔和持续时间。

理解和代码实现

接下来,我们将讨论如何在Ubuntu中实现和使用这些概念。

系统基本代码

系统级编程常常需要使用C语言和系统调用。下面是一个简单的例子,演示如何获取当前时间。

#include <stdio.h>
#include <time.h>

int main() {
    time_t now;
    time(&now);
    printf("The current time is: %s", ctime(&now));
    return 0;
}

定时器中断

在C语言中,我们可以设置一个定时器,当时间到达时,操作系统会向我们的程序发送一个SIGALRM信号。

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void alarm_handler(int sig) {
    printf("Timer expired\n");
}

int main() {
    signal(SIGALRM, alarm_handler);
    alarm(5); // Set a timer for 5 seconds
    pause(); // Wait for any signal
    return 0;
}

定时器队列

在更复杂的应用中,可能需要管理多个定时器。这可以通过使用定时器队列来完成。

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

#define NUM_TIMERS 3

void timer_handler(int signum) {
    static int count = 0;
    printf("timer expired %d times\n", ++count);
}

int main() {
    struct itimerval timers[NUM_TIMERS];
    signal(SIGALRM, timer_handler);

    for (int i = 0; i < NUM_TIMERS; ++i) {
        timers[i].it_value.tv_sec = (i+1) * 2; // first timer expiration
        timers[i].it_value.tv_usec = 0;
        timers[i].it_interval.tv_sec = (i+1) * 2; // subsequent expirations
        timers[i].it_interval.tv_usec = 0;

        // Set the timer. Note that ITIMER_REAL decrements in real time.
        if (setitimer(ITIMER_REAL, &timers[i], NULL) == -1) {
            perror("setitimer error");
            exit(EXIT_FAILURE);
        }
    }

    // An infinite loop to keep the program running while timers are ticking
    while (1) {
        pause(); // Wait for any signal
    }
    return 0;
}

临界区

当定时器中断发生时,可能会访问共享资源。在这种情况下,需要确保这些资源的访问是同步的,这通常涉及到临界区的概念。

#include <stdio.h>
#include <pthread.h>

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

void* thread_function(void* arg) {
    // Lock the mutex before accessing the shared variable
    pthread_mutex_lock(&lock);

    // Critical section starts
    // ... (access shared variables)
    // Critical section ends

    // Unlock the mutex after accessing the shared variables
    pthread_mutex_unlock(&lock);

    return NULL;
}

int main() {
    pthread_t thread1, thread2;

    pthread_create(&thread1, NULL, &thread_function, NULL);
    pthread_create(&thread2, NULL, &thread_function, NULL);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    pthread_mutex_destroy(&lock);

    return 0;
}```

### 高级主题

对于高级用户,可能需要深入研究内核级别的时钟服务实现,如内核定时器和高分辨率定时器(hrtimer)。

```c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/timer.h>

MODULE_LICENSE("GPL");

struct timer_list my_timer;

void my_timer_callback(struct timer_list *t) {
    printk("my_timer_callback called (%ld).\n", jiffies);
}

int init_module(void) {
    printk("Module init: Hello, world\n");

    // Setup the timer
    timer_setup(&my_timer, my_timer_callback, 0);

    // Set timer expiration time (in jiffies)
    my_timer.expires = jiffies + HZ; // 1 second delay

    // Add the timer to the list of active timers
    add_timer(&my_timer);

    return 0;
}

void cleanup_module(void) {
    printk("Module cleanup: Goodbye, world\n");

    // Remove the timer if it's still active
    del_timer(&my_timer);
}

module_init(init_module);
module_exit(cleanup_module);

总结

Ubuntu系统中的定时器和时钟服务是对操作系统时间管理能力的体现。了解和掌握这些工具不仅可以帮助我们更好地理解操作系统的工作原理,还可以在需要进行时间控制或度量时提供必要的工具。

以下是我的苏格拉底挑战





标签:20211105,定时器,pthread,int,信息安全,timer,timers,李宜时,include
From: https://www.cnblogs.com/liyishi1110/p/17809196.html

相关文章

  • 《信息安全系统设计与实现》第九周学习笔记
    《信息安全系统设计与实现》第九周学习笔记第五章定时器及时钟服务硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计数减为0时,计数器......
  • 《信息安全系统设计与实现》第九周学习笔记
    一、第五章定时器及时钟服务1、并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速的解决问题顺序算法与并行算法并行性与并发性并行算法只识别可并行执行的任务。CPU系统中,并发性是通过多任务处理来实现的2、线程线程的原理:某进程同一地址空间上的独立......
  • 《信息安全系统设计与实现》第九周学习笔记
    第五章定时器及时钟服务硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计数减为0时,计数器向CPU生成一个定时器中断,将计数值重新加载到......
  • 《信息安全系统设计与实现》第八次学习笔记
    第四章:并发编程并行计算导论顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立任务,所有任务都是并行执行的,紧接着cobegin-coend代码块的下一个步骤将只在所有这些任务完成之后执......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记7
    学习笔记7顺序算法与并行算法线程的原理与优缺点线程管理函数线程同步实践过程顺序算法与并行算法顺序算法(SequentialAlgorithm)原理:顺序算法是一种线性执行的算法,它按照顺序一步一步地解决问题。这意味着每个操作都依赖于前一个操作的结果,只有在前一个操作完成之后才......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • [学习笔记]--信息安全
    信息系统安全属性安全属性属性描述保密性最小授权原则,防暴露,信息加密,物理保密完整性安全协议,校验码,密码校验,数字签名,公证可用性综合保障(IP过滤,业务流程控制,路由选择控制,审计跟踪)不可抵赖性数字签名对称加密与非对称加密对称加密:加密和......
  • 《信息安全系统设计与实现》第八周学习笔记
    《信息安全系统设计与实现》第八周学习笔记第四章并发编程并行计算尝试使用多个执行并行算法的处理器更快速的解决问题顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立......
  • 《信息安全系统设计与实现》学习笔记7
    第四章并发编程并行计算要求解某个问题,先要设计一种算法,描述如何一步步地解决问题,然后用计算机程序以串行指令流的形式实现该算法。在只有一个CPU的情况下,每次只能按顺序执行某算法的一个指令和步骤。但是,基于分治原则(如二又树查找和快速排序等)的算法经常表现出高度的并行性......
  • 《信息安全与设计》第四章学习笔记
    《信息安全与设计》第四章学习笔记第四章并发编程并行计算导论顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立任务,所有任务都是并行执行的,紧接着代码块的下一个步骤将只在......