20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结

发布时间 2023-11-11 20:02:52作者: 20211316郭佳昊

一、任务要求

[ 1 ] 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)
我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题

核心是要求GPT:请你以苏格拉底的方式对我进行提问

然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:你的理解(回答)是什么?

如果你觉得差不多了,可以先问问GPT:针对我XXX知识点,我理解了吗?

GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:我的回答结束了,请对我的回答进行评价总结,让它帮你总结一下。

[ 2 ] 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)

[ 3 ] 实践过程截图,代码链接(2分)

[ 4 ] 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识点总结

信号和中断

进程

一个“进程”就是一系列活动,广义的“进程”包括

  • 从事日常事务的人
  • 在用户模式或内核模式运行下的Unix/Linux程序
  • 执行机器指令的CPU

中断

“中断”是发送给“进程”的事件,他将“进程”从正常活动转移到其他活动,称为“中断处理”,“中断”可应用于任何“进程”,并不限于计算机中的CPU。

中断类型:

  1. 人员中断
  2. 进程中断
  3. 硬件中断
  4. 进程中的陷阱错误

根据来源

  • 来自硬件的中断
  • 来自其他人的中断
  • 自己造成的中断

根据紧急程度

  • 不可屏蔽(NMI)
  • 可屏蔽

Unix/Linux信号示例

  • CTRL+C组合键通常会导致当前运行的进程终止。原因:“CTRL+C”生成一个键盘硬件中断,键盘中断处理程序将”CTRL+C”转换为SIGINT(2)信号,发送给终端上的所有进程,并唤醒等待键盘输入的进程,在内核模式下,每个进程都要检查和处理未完成的信号,在Linux中,exitValue函数的低位字节是导致进程终止的信号编号。
  • 可使用nohup a.out &命令在后台运行一个程序,即使在用户退出后,进程将继续运行。
  • kill pid(kill -s 9 pid)

Unix/Linux中的信号处理

信号类型

Unix/Linux支持31种不同的信号,每种信号在signal.h文件中都有定义

信号的来源

  • 来自硬件中断的信号:在进程执行中,一些硬件中断被转换为信号发送给进程。示例有中断键、间隔定时器、其他硬件错误等。
  • 来自异常的信号:用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号并发送给自己。常见的陷阱信号有SIGNAL(8),表示浮点异常(除以0),SIGSEGV(11),表示段错误等。
  • 来自其他进程的信号

进程PROC结构体中的信号

每个进程PROC都有一个32位向量,用来记录发送给进程的信号。

信号处理函数

每个进程PROC都有一个信号处理数组int sig[32],sig[32]数组的每个条目都指定了如何处理相应的信号,其中0表示“默认”,1代表“忽略”,其他非0值表示用户模式下预先安装的信号捕捉函数。
image
如果信号位向量中的位I为1,则会生成一个信号I或将其发送给进程。如果屏蔽位向量的位I为1,则信号会被阻塞或屏蔽。否则,信号未被阻塞。只有当信号存在并且未被阳塞时,信号才会生效或传递给进程。当内核模式下的进程发现一个未阻塞信号时,会将信号位清除为0,并尝试通过信号处理数组中的处理函数来处理该信号。0表示DEFault,1表示IGNore,其他数值表示用户空间内预先安装的捕捉函数。

安装信号处理函数

进程可使用系统调用:int r = signal(int signal_number, void *handler);来修改选定信号编号的处理函数。

三、苏格拉底挑战

image
image