首页 > 其他分享 >20201220蔡笃俊《信息安全系统设计与实现》第六章学习笔记

20201220蔡笃俊《信息安全系统设计与实现》第六章学习笔记

时间:2022-10-29 16:56:11浏览次数:93  
标签:函数 中断 蔡笃俊 信息安全 捕捉 信号 进程 20201220 define

一、任务内容

  • 自学教材第6章,提交学习笔记(10分)
  • 知识点归纳以及自己最有收获的内容 (3分)
  • 问题与解决思路(2分)
  • 实践内容与截图,代码链接(3分)
  • ...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)

二、知识点归纳以及自己最有收获的内容

(一)知识点归纳

本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了Unix/Linux中的信号处理,包括信号类型、信号向量位、信号掩码位、进程PROC结构体中的信号处理程序以及信号处理步骤;用示例展示了如何安装信号捕捉器来处·理程序异常,如用户模式下的段错误;还讨论了将信号用作进程间通信(IPC)机制的适用性。

1. 信号和中断

  • 人员中断

    • 来自硬件的中断:大楼着火,闹钟响了等

    • 来自其他人的中断:电话响了,有人敲门等。

    • 自己造成的中断:切到手指,吃得太多等。

    • 按照紧急程度,中断可分为以下几类:

      • 不可屏蔽(NMI):大楼着火!
      • 可屏蔽:有人敲门等。
  • 进程中断

    • 这类中断是发送给进程的中断。当某进程正在执行时,可能会收到来自3个不同来源的中断:

      • 来自硬件的中断:终端、间隔定时器的“Ctrl+C”组合键等。
      • 来自其他进程的中断:kill(pid,SIG#), death_of_child等。
      • 自己造成的中断:除以0、无效地址等。
    • 每个进程中断都被转换为一个唯一ID号,发送给进程。与多种类的人员中断不同,我们始终可限制在一个进程中的中断的数量。Unix/Linux中的进程中断称为信号,编号为1到31。进程的PROC结构体中有对应每个信号的动作函数,进程可在收到信号后执行该动作函数。与人员类似,进程也可屏蔽某些类型的信号,以推迟处理。必要时,进程还可能会修改信号动作函数。

  • 硬件中断

    • 这类中断是发送给处理器或CPU的信号。它们也有三个可能的来源:

      • 来自硬件的中断:定时器、1/O设备等
      • 来自其他处理器的中断:FFP、DMA、多处理器系统中的其他CPU
      • 自己造成的中断:除以О、保护错误、INT指令。
    • 每个中断都有唯一的中断向量号。动作函数是中断向量表中的中断处理程序。CPU不会导致任何自己造成的中断(除非出错)。这种中断是由于进程正在使用或在大多数情况下误用CPU造成的。

  • 进程的陷阱错误

    • 进程可能会自己造成中断。这些中断是由被CPU识别为异常的错误引起的,例如除以0、无效地址、非法指令、越权等。当进程遇到异常时,它会陷入操作系统内核,将陷阱原因转换为信号编号,并将信号发送给自己。如果在用户模式下发生异常,则进程的默认操作是终止,并使用一个可选的内存转储进行调试。

2.Unix/Linux中的信号处理

1.信号类型

Unix/Linux支持的31种信号,在signal.h文件中均有定义:

#define  	SIGHUP  	1
#define  	SIGINT  	2
#define  	SIGQUIT  	3
#define  	SIGILL  	4
#define  	SIGTRAP  	5
#define  	SIGABRT  	6
#define  	SIGIOT  	6
#define  	SIGBUS  	7
#define  	SIGFPE  	8
#define  	SIGKILL  	9
#define  	SIGUSR1  	10
#define  	SIGSEGV  	11
#define  	SIGUSR2  	12
#define  	SIGPIPE  	13
#define  	SIGALRM  	14
#define  	SIGTERM	        15
#define  	SIGSTKFLT	16
#define  	SIGCHLD    	17
#define  	SIGCONT	        18
#define  	SIGSTOP      	19
#define  	SIGTSTP	        20
#dpfine  	STGTTTN	        21
#define  	SIGTTOU	        22
#define  	SIGURG	        23
#define  	SIGXCPU	        24
#define  	SIGXFSZ    	25
#define  	SIGVTALRM	26
#define  	SIGPROF  	27
#define  	SIGWINCH	28
#define  	SIGPOLL  	29
#define  	SIGPWR	        30
#define  	SIGSYS	        31

2.信号来源

  • 来自硬件的中断信号:在执行过程中,一些硬件中断被转换为信号发送给进程硬件信号。
  • 来自异常的信号:当用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号,并发送给自己。
  • 来自其他进程的信号:进程可以使用kill(pid,sig)系统调用向pid标识的目标进程发送信号。

3. 信号处理步骤

  • 当某进程处于内核模式时,会检查信号并处理未完成的信号。如果某信号有用户安装的捕捉函数,该进程会先清除信号,获取捕捉函数地址,对于大多数陷阱信号,则将已安装的捕捉函数重置为DEFault。然后,它会在用户模式下返回,以执行捕捉函数,以这种方式篡改返回路径。当捕捉函数结束时,它会返回到最初的中断点,即它最后进入内核模式的地方。因此,该进程会先迁回执行捕捉函数,然后再恢复正常执行。
  • 用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误。由于捕捉函数也在用户模式下执行,因此可能会再次出现同样的错误。如果是这样,该进程最终会陷入无限循环,一直在用户模式和内核模式之间跳跃。为了防止这种情况,Unix内核通常会在允许进程执行捕捉函数之前先将处理函数重置为 DEFault。这意味着用户安装的捕捉函数只对首次出现的信号有效。若要捕捉再次出现的同一信号,则必须重新安装捕捉函数。但是,用户安装的信号捕捉函数的处理方法并不都一样,在不同Unix版本中会有所不同。例如,在 BSD Unix中,信号处理函数不会被重置,但是该信号在执行信号捕捉函数时会被阻塞。
  • 信号和唤醒:在Unix/Lintx内核中有两种SLEEP进程;深度休眠进程和浅度休眠进程。前一种进程不可中断,而后一种进程可由信号中断。如果某进程处于不可中断的SLEEP状态,到达的信号(必须来自硬件中断或其他进程)不会唤醒进程。如果它处于可中断的SLEEP状态,到达的信号将会唤醒它。例如,当某进程等待终端输入时,它会以低优先级休眠,这种休眠是可中断的,SIGINT这类信号即可唤醒它。

4. 信号与异常

作为进程异常的统一处理方法:当进程遇到异常时,它会陷人内核模式,将陷阱原因转换为信号编号,并将信号发送给自己。如果在内核模式下发生异常,内核只打印一条PANIC错误消息,然后就停止了。如果在用户模式下发生异常,则进程通常会终止,并以内存转储进行调试。

三、实践过程与截图

sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)
执行该程序时,ctrl+c,第一次不会导致程序的结束。而是继续执行,当用户再次执行ctrl+c的时候,程序采用结束。

#include <stdio.h>  
#include <signal.h>  
  
  
void WrkProcess(int nsig)  
{  
        printf("WrkProcess .I get signal.%d threadid:%d/n",nsig,pthread_self());  
  
  
        int i=0;  
        while(i<5){  
                printf("%d/n",i);  
                sleep(1);  
                i++;  
        }  
}  
  
int main()  
{  
        struct sigaction act,oldact;  
        act.sa_handler  = WrkProcess;  
        act.sa_flags = SA_NODEFER | SA_RESETHAND;     
  
        sigaction(SIGINT,&act,&oldact);  
  
        printf("main threadid:%d/n",pthread_self());  
  
        while(1)sleep(5);  
  
        return 0;  
}  

sig 是需要捕获的 signal number, 后一个是捕获到信号后的处理函数指针,接收到quit信号时,结束进程

三、问题与解决思路

之前的signal(SIGALARM,function)函数设置的处理函数和本次不一样,那么本次signal函数怎样在不覆盖前次信号处理函数的基础上继续工作呢?

经查找资料,找到了这个。signal的返回值,要么是SIG_ERR,要么是前次信号处理的函数指针,同样在注册函数时,保存上次函数,在函数处理结束前回复原来的值。SIGALARM的默认动作是终止进程。设置SIGALARM信号是为了给调用者一个闹钟,应用的场所一般是在低速设备阻塞时,例如read/write,设置alarm函数可以防止系统长期阻塞,但这里有一个问题就是,在alarm(nsec)和read()之间有一个竞争关系,如果在read()之前调用了alarm()函数,那么read()还是会长期阻塞。解决这个问题可以通过setjmp和longjmp函数来解决,因为setjmp设置的时候返回0,longjmp可以设置不同的返回值,可以将read函数包裹在setjmp = 0里面,这样如果处理函数里面的longjmp跳转了也不会出现上面的问题了。

标签:函数,中断,蔡笃俊,信息安全,捕捉,信号,进程,20201220,define
From: https://www.cnblogs.com/acacacaac/p/16837814.html

相关文章

  • 信息安全-概论
    信息安全的目标三个关键目标两个概念不可否认性(可追溯性):无法否认不是自己的OSI安全框架安全攻击被动攻击:窃听、检测(流量分析)主动攻击:伪装、重播、消息修改、......
  • 2022-2023 20211404《信息安全专业导论》 第九周学习总结
    **作业信息**作业模板:https://www.cnblogs.com/rocedu/p/9577842.html#JXJC作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09**教材学习内容总结**《计算机......
  • 信息安全系统设计与实现学习笔记8
    一、知识点归纳以及自己最有收获的内容1、知识点归纳第5章定时器及时钟服务1、硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡......
  • 20201220蔡笃俊《信息安全系统设计与实现》第五章学习笔记
    一、任务内容自学教材第5章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)...(知识的结构化,知识的完整性等,提交m......
  • 2022-2023-1 20211319《信息安全专业导论》第八周学习总结
    2022-2023-120211319《信息安全专业导论》第八周学习总结2021-2022-120211326《信息安全专业导论》第八周学习总结作业信息加入云班课,参考本周学习资源自学教材......
  • 《信息安全与设计》第五章学习笔记
    第五章定时器及时钟服务知识点归纳硬件定时器(1)定时器是由时钟源和可编程计数器组成的硬件设备。(2)时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数......
  • 第五届浙江省大学生网络与信息安全竞赛--吃豆人
    第一步:先看题目题目描述:吃豆人,吃豆豆,一起来玩吃豆人吧! 题目没什么重要的信息,就是让我们玩游戏,我们先玩一把,输了,发现也没什么变化然后F12观察一下,看见在index.js里面有......
  • 信息安全系统设计与实现学习笔记7
    一、知识点归纳以及自己最有收获的内容1、知识点归纳第4章并发编程1、并行顺序算法——begin-end包含多个步骤,通过单个任务依次执行,每次执行一个步骤并行算法—......
  • 2022-2023-1 20201324《信息安全系统设计与实现(上)》第4章
    目录1并发计算导论(1)顺序算法与并行算法(2)并行性与并发性2线程(1)线程的原理(2)线程的优点(3)线程的缺点3线程操作4线程管理函数(1)创建线程(2)线程ID(3)线程终止(4)线程连接(5)用线程快......
  • 《信息安全与设计》第四章学习笔记
    第4章并发编程知识点归纳并行性和并发性1.真正的并行执行只能在多个处理组件的系统中实现,比如多处理器或多核系统。2.在单CPU系统中,并发性是通过多任务处理实现的。......