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

20211105李宜时信息安全系统设计与实现学习笔记9

时间:2023-11-12 15:12:47浏览次数:37  
标签:IPC 20211105 com 信息安全 202311 blog 信号 李宜时 2778425

信号和信号处理包括信号和中断

1. 信号和中断的基础

  • 定义和概述:解释信号在操作系统中的作用,它们如何与中断相关。
  • 信号类型:列出常见的 UNIX/Linux 信号,例如 SIGINT, SIGTERM, SIGKILL 等。

2. UNIX/Linux 信号示例

  • 实例演示:通过实际示例展示信号如何工作。
  • 代码段:提供简单的代码示例来演示如何生成和响应信号。

3. UNIX/Linux 中的信号处理

  • 信号的来源:解释信号是如何生成的,例如用户输入、系统事件等。
  • 进程 proc 结构体中的信号:讨论进程控制块(PCB)中与信号相关的部分。
  • 信号处理函数:介绍如何编写和使用信号处理函数。
  • 安装信号捕捉函数:演示如何安装和使用信号处理程序。

4. 信号处理步骤

  • 详细步骤:逐步介绍在接收到信号时操作系统和应用程序需要执行的操作。

5. 信号与 IPC

  • 信号用作 IPC:探讨信号如何在进程间通信(IPC)中使用。
  • Linux 中的 IPC 方法:比较管道和 FIFO、System V IPC、POSIX 消息队列等不同的 IPC 机制。
  • 线程同步机制:讨论线程间同步的方法,如互斥锁、条件变量等。
  • 套接字:解释如何使用套接字进行进程间通信。

6. 编程项目:实现一个消息 IPC

  • 项目要求:详细描述项目的目标和要求。
  • 实现步骤:分步指导如何实现该项目。
  • 代码示例:提供参考代码,帮助理解和实现。

7. 格式化和样式

  • Markdown 格式:使用 Markdown 语法来格式化笔记,例如使用标题、列表、代码块等。
  • 代码实践:确保提供足够的代码实例和实践练习。

这个结构不仅会帮助你更好地理解和组织学习内容,还可以使你的笔记更加清晰和有用。记得在编写过程中不断实践和测试代码示例,这对深入理解这些概念非常重要。

当然,我还做了一些操作和代码

1. 信号和中断的基础

信号是 UNIX 和 Linux 系统中进程间通信的一种方式。它们用于通知进程某个事件已发生。例如,SIGKILL 用于强制终止进程,SIGTERM 用于请求进程终止,SIGINT 则通常由 Ctrl+C 触发,用于中断进程。

2. UNIX/Linux 信号示例

让我们看一个简单的信号处理示例。下面的 C 代码展示了如何捕捉和处理 SIGINT 信号:

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

void signal_handler(int signal) {
    printf("捕捉到 SIGINT 信号\n");
}

int main() {
    signal(SIGINT, signal_handler);
    while(1) {
        printf("等待信号...\n");
        sleep(1);
    }
    return 0;
}

在这个程序中,我们定义了一个信号处理函数 signal_handler,当捕捉到 SIGINT 信号时,它会打印一条消息。主函数中,我们通过 signal() 函数将 SIGINT 信号与 signal_handler 函数关联起来。

3. UNIX/Linux 中的信号处理

信号可以由操作系统、用户或其他程序产生。进程可以定义自己的信号处理函数,或者使用默认的处理方式。例如,在 C 语言中,你可以使用 sigaction 函数来更精确地控制信号的处理:

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

void sigint_handler(int sig) {
    write(STDOUT_FILENO, "处理 SIGINT 信号\n", 17);
}

int main() {
    struct sigaction sa;
    sa.sa_handler = sigint_handler;
    sa.sa_flags = 0; // 或者使用 SA_RESTART
    sigemptyset(&sa.sa_mask);

    sigaction(SIGINT, &sa, NULL);

    while(1) {
        sleep(1);
    }
    return 0;
}

4. 信号处理步骤

当信号发送到进程时,操作系统暂停进程当前的活动,执行相应的信号处理函数。处理完成后,进程继续执行。

5. 信号与 IPC

在 Linux 中,信号也可以用作简单的进程间通信(IPC)。尽管它们不适合传输复杂的数据,但可以用来通知其他进程某个事件的发生。

除了信号,Linux 支持多种 IPC 机制,如管道(pipe)、命名管道(FIFO)、共享内存、信号量等。

6. 编程项目:实现一个消息 IPC

这个项目可以是创建一个简单的聊天程序,使用 POSIX 消息队列进行通信。每个进程可以发送消息到队列,并从队列接收消息。

这里是一个简单的 POSIX 消息队列示例代码片段:

#include <fcntl.h>           
#include <sys/stat.h>        
#include <mqueue.h>

int main() {
    mqd_t mq;
    struct mq_attr attr;
    char buffer[1024 + 1];
    int must_stop = 0;

    /* 设置消息队列属性 */
    attr.mq_flags = 0;
    attr.mq_maxmsg = 10;
    attr.mq_msgsize = 1024;
    attr.mq_curmsgs = 0;

    /* 创建并打开消息队列 */
    mq = mq_open("/test_queue", O_CREAT | O_RDONLY, 0644, &attr);

    do {
        ssize_t bytes_read;

        /* 接收消息 */
        bytes_read = mq_receive(mq, buffer, 1024, NULL);
        buffer[bytes_read] = '\0';
        if (!strncmp(buffer, "exit", 4)) {
            must_stop = 1;
        } else {
            printf("接收到的消息: %s\n", buffer);
        }
    } while (!must_stop);

    /* 关闭和删除消息队列


![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145809186-2055295057.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145819282-143757281.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145823684-854905790.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145827781-1064053674.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145832395-1416436939.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145836633-1284448628.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145840901-1684781644.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145848793-164338470.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145852572-2064934342.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145909272-1271830280.png)
![](/i/l/?n=23&i=blog/2778425/202311/2778425-20231112145917550-2047351553.png)

标签:IPC,20211105,com,信息安全,202311,blog,信号,李宜时,2778425
From: https://www.cnblogs.com/liyishi1110/p/17827095.html

相关文章

  • 信息安全系统设计与实现学习笔记9
    学习笔记9一、知识点归纳以及自己最有收获的内容1.信号和信号处理进程的概念一个“进程”是一系列活动,包括从事日常事物的人、在用户模式或内核模式下运行的Unix/Linux进程以及执行机器指令的CPU。中断中断可分为三类:来自硬件的中断、来自其他人的中断、自己造成的中断......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211128《信息安全系统设计与实现》第六章学习笔记
    一、任务内容自学教材第6章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格拉......
  • 《信息安全系统设计与实现》学习笔记9
    《信息安全系统设计与实现》学习笔记9第六章信号和信号处理信号和中断广义的“进程”从事日常事务的人在用户模式或内核模式下运行的Unix/Linux进程执行机器指令的CPU“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理”......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第九周学习笔记
     202113252023-2024-1《信息安全系统设计与实现(上)》第九周学习笔记一、任务要求自学教材第6章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知......
  • 《信息安全系统设计与实现》第十周学习笔记
    信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理......
  • 《信息安全系统设计与实现》第十周学习笔记
    《信息安全系统设计与实现》第十周学习笔记第六章信号和信号处理信号和中断(1)“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。(2)一个“进程”就是......
  • 信息安全系统设计与实现课程第六章学习笔记
    一、知识点归纳1.信号和中断1.1进程概念进程是计算机中的基本执行单位,可以看作是一系列活动的集合。这些活动包括从事日常事务的人、在用户模式或内核模式下运行的Unix/Linux进程,以及执行机器指令的CPU。1.2中断中断是一种事件,用于通知进程需要进行某种处理,将进程从正常活......
  • 《信息安全系统设计与实现》第十周学习笔记
    第六章信号和信号处理信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。进程:一个“进程”就是一系列活动广义的“进程”包括:从事日常......
  • 信息安全系统设计与实现 学习笔记9
    信号和信号处理信号和中断的统一处理“中断”是从I/O设备或协处理器发送CPU的外部请求,它将CPU从正常执行转移到中断处理(1)一个“进程”就是一些列活动(2)“中断”信号进程中断信号的来源硬件信号异常信号其他进程信号信号在Unix/Linux中的常见用法Unix/Linux中的信号处......