一些复习笔记

1. sigsetjmp,siglongjmp出现是因为setjmp,longjmp对信号的支持不明确。当进程捕捉到一个信号的时候,进入信号处理程序,那么这个时候如果再次发生这个信号,那么该信号将会自动加到信号屏蔽字中。这样处理的原因是,阻止了后来产生的信号,中断该信号的处理程序。那么这个时候,如果longjmp跳出来信号处理程序,那么进程的信号屏蔽字将会发生什么呢?书中并未给出答案,而且说明每个系统的处理方式不一样。sigsetjmp,siglongjmp只是增加来对信号屏蔽字的保存作用。siglongjmp恢复了由sigsetjmp保存的信号屏蔽字。当调用信号处理程序时,被捕捉的信号加到进程的当前信号屏蔽字当中,sigprocmask(0, NULL, &sigset),用于返回当前信号屏蔽字,当信号处理程序返回时,恢复原来的信号屏蔽字。

2. 任何事物产生都有其原因,无论是好的还是坏的。很多时候我们只关心它做的,而不知道它为什么这么做。信号的不可靠,是信号丢失,而进程却一直不知道。例如,不要忽略某信号,在发生时记住它,在进程准备好的时候,通知它。如果在进程没有准备好的时候,通知它,那么容易造成信号丢失。当保护不希望被信号中断的代码临界区,在执行临界区代码前,屏蔽中断信号,执行代码临界区后,恢复信号。当程序希望对一个信号解除堵塞后,然后pause以等待被堵塞的信号发生。书中写出代码段,但是解除信号堵塞和pause之间发生来信号,那么程序将一直堵塞下去,直到下一个信号到来。从不可靠信号的定义,这个信号是不可靠的。sigsuspend函数就是用来设置信号屏蔽字,等待某信号发生,返回后恢复设置前的信号屏蔽字。

3.不同的IPC对象具有不同的持续性,这就要求我们针对问题去选择IPC对象。如进程退出之后,IPC对象需要存在吗?是,则选择与内核持续的,不是,则选择随进程持续的。系统重新自举后,IPC对象要存在吗?是,则要求随文件系统持续的。不要因为多而慌乱,一定不会有同一个问题重复的解决方案,而是因应用的需求不同而有不同的解决方案。     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值