信号:给进程发送的,用来进行事件异步通知的一种方式 属于软中断
产生信号的方式非常多
键盘产生信号 ctrl+c给目标进程发送信号,很多信号的处理动作是终止
收到信号,处理信号
1.默认处理动作
2.自定义信号处理动作
3.忽略处理
发送信号的本质是向目标进程写信号 修改位图
修改位图本质是修改内核的数据
后台进程无法从标准输入中获取内容
前台进程可以
前台进程必须只有一个
后台进程可以有多个
但是都可以向标准输出上打印
系统调用可产生信号
调用系统命令可向进程发信号
硬件异常也可产生信号 除零 野指针
软件条件可产生信号
信号保存
实际执行信号的处理动作称为信号递达
信号从产生到递达之间的状态 成为信号未决
进程可选择阻塞某个信号
被阻塞的信号产生时将保持在未决状态 直到进程解除阻塞
信号的处理要在合适的时候
a.合适的时候处理信号 进程从内核态,返回到用户态的时候
检查信号的捕捉
b.如果信号是默认呢 忽略呢
比自定义捕捉简单
c.重谈捕捉过程
c1:我们在执行自定义方法(用户写的)->os也要在做身份切换 必须以用户身份执行
c2:在执行主控制流程的某条指令时因为中断、异常或系统调用进入内核;
内核处理完异常准备回用户模式之前,先处理当前进程中可以递送的信号;
如果信号的处理动作是自定义的信号处理函数,则回到用户模式,执行信号处理函数;
信号处理函数返回时执行特殊的系统调用sigreturn再次进入内核sys_sigreturn;
返回用户模式从主控制流程中上次被中断的地方继续向下执行
硬件中断
外设就绪时 向中断控制器发起中断 中断控制器通知cpu cpu得知中断后获取中断号 cpu保护现场
根据中断号 执行中断处理例程 执行中断方法 执行完毕后恢复现场 处理完毕中断 继续之前的工作
os怎么知道键盘上有数据了? 硬件中断
当没有中断到来的时候 os是暂停的
os是基于中断进行工作的软件
时钟源放在cpu 外设没有中断 cpu自己触发中断 调用schedule()
处理器频率即中断触发频率
volatile 修饰的变量要占用空间 操作系统要保证内存空间可见性
防止优化编译器把变量从内存装入 CPU 寄存器中
volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值
子进程在终止时会给父进程发SIGCHLD
7876

被折叠的 条评论
为什么被折叠?



