Linux中的信号 SIGNAL

推荐博客: system_call到iret过程分析 https://cloud.tencent.com/developer/article/1396091?from=article.detail.1585838

  • 进程间通信常用以下几种方式

信号

信号量

消息队列

共享内存

  • 信号量(semaphore)和信号(signal)是完全不同的东西

信号量:用来同步和互斥,PV操作,进程间通信用有名信号量,一个进程内通信用无名信号量

信号:类似于DOS下的中断,Linux中有31必须要记住的通用信号,是一种简单的进程间通信的方式

  • Linu信号

SIGHUP

SIGINT

SIGQUIT

SIGILL

SIGTRAP

SIGPIPE

SIGCHLD

SIGTTOU

  1. 什么是信号,有什么作用

是一个中断,每个信号对应各自的信号处理函数

do_signal函数是系统调用中断的执行函数,处理task_struct current中的sigaction的信号函数

signal的重要结构体 sigaction

  1. 系统调用int 80h 做了什么?
  1. 会去执行系统调用system_call函数进入内核态
  2. 识别对应的信号
  3. 调用do-signal函数,将对应的信号处理函数插入到用户的堆栈中
  4. 继续执行用户空间被插入的信号处理函数
  5. 返回原有用户程序
  1. 什么是POSIX接口协议?

全称为可移植性操作系统接口,标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境,来支持源代码级的可移植性

总结:定义了一套unix操作系统环境下的函数和环境变量,实现不同os之间代码可移植,不用换函数和变量的名字

  1. 在系统收到signal后是怎么操作的?
  1. 执行system_call
  2. call sys_call_table(,%eax,4)
  3. sys_signal 做了信号的预处理与设置
中断的分类

(1)中断有两种,一种是由CPU外部硬件产生的,另一种是由CPU本身执行程序的过程中产生的;外部中断即我们所说的中断(interrupt),外部中断是异步的,由硬件产生,我们无法预测它什么时候发生;

(2)x86软件产生的中断是由“INT n”同步产生的,由程序产生,只要CPU执行了一条INT指令,就知道在开始执行下一条指令前就会进入中断服务程序,我们又称此类中断为“陷阱”;int 80为系统调用的陷阱号;

(3)异常,是被动的,如页面异常,除数为0的异常; 因此系统调用是中断中的陷阱的一种,系统调用只发生在用户空间,必然会发生用户栈和内核栈的切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值