推荐博客: system_call到iret过程分析 https://cloud.tencent.com/developer/article/1396091?from=article.detail.1585838
信号
信号量
消息队列
共享内存
- 信号量(semaphore)和信号(signal)是完全不同的东西
信号量:用来同步和互斥,PV操作,进程间通信用有名信号量,一个进程内通信用无名信号量
信号:类似于DOS下的中断,Linux中有31必须要记住的通用信号,是一种简单的进程间通信的方式
SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGTRAP
SIGPIPE
SIGCHLD
SIGTTOU
…
- 什么是信号,有什么作用
是一个中断,每个信号对应各自的信号处理函数
do_signal函数是系统调用中断的执行函数,处理task_struct current中的sigaction的信号函数
signal的重要结构体 sigaction
- 系统调用int 80h 做了什么?
- 会去执行系统调用system_call函数进入内核态
- 识别对应的信号
- 调用do-signal函数,将对应的信号处理函数插入到用户的堆栈中
- 继续执行用户空间被插入的信号处理函数
- 返回原有用户程序
- 什么是POSIX接口协议?
全称为可移植性操作系统接口,标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境,来支持源代码级的可移植性
总结:定义了一套unix操作系统环境下的函数和环境变量,实现不同os之间代码可移植,不用换函数和变量的名字
- 在系统收到signal后是怎么操作的?
- 执行system_call
- call sys_call_table(,%eax,4)
- sys_signal 做了信号的预处理与设置
中断的分类
(1)中断有两种,一种是由CPU外部硬件产生的,另一种是由CPU本身执行程序的过程中产生的;外部中断即我们所说的中断(interrupt),外部中断是异步的,由硬件产生,我们无法预测它什么时候发生;
(2)x86软件产生的中断是由“INT n”同步产生的,由程序产生,只要CPU执行了一条INT指令,就知道在开始执行下一条指令前就会进入中断服务程序,我们又称此类中断为“陷阱”;int 80为系统调用的陷阱号;
(3)异常,是被动的,如页面异常,除数为0的异常; 因此系统调用是中断中的陷阱的一种,系统调用只发生在用户空间,必然会发生用户栈和内核栈的切换。
|