进程的通信,信号入门

消息队列;用于多个进程间有类型的数据块传输
原理;内核中的一个优先级队列;
信号量;用于实现进程间的同步与互斥
同步;保证多个进程之间对临界资源访问的时序合理性。
互斥;保证多个进程之间同一时间对临界资源访问的唯一性。
本质;内核中的一个计数器+等待队列 等待+唤醒功能
原理;进程对临界资源访问前先进行资源技术判断
若计数>0;表示可以操作;则计数-1;判断操作直接返回。

信号;是一个软件中断;通知进程发生了某件事情,中断进程当前操作;让进成区处理处理
信号有很多种;62种信号-两大类型
查看信号种类;

kill -l

kill杀死进程的原理;kill通知进程
信号的生命周期;信号产生-》在进程中注册-》在进程中注销-》信号的处理。
信号的产生;
硬件产生;

Ctrl+c   

信号在进程中的注册;早进程pcb中坐标记,标记进程收到了那些信息。

kill-1 -p 1234

非可靠信号注册;判断pcb中的pending位图中相应信号是否已经注册(位图是否已经置1);若未注册则位图修改为1,想siqqueue链表中添加一个信号节点。
可靠信号注册;不管是否已经注册,都会向链表添加一个信号节点

信号在进程的注销;
非可靠信号;节点只有一个,注销就是删除节点。、
可靠信号;节点有多点;注销就是删除一个节点,判断链表中是否还有相同信号的节点:若没有则位图置零;否则位图不变依然需要标记有这个信号待处理。
信号处理;
信号处理并不是立即被处理:而是选择一个合适的时机去处理
进程的运行从内核态返回用户的时候
进程如何从用户态切换到内核态;发起系统调用

memcpy read write 程序异常

进程运行的代码若是和库函数或者用户自己写的函数,就说进程当前运行在用户态;
信号处理有多种方式;

默认处理方式;既定义好的处理方式
忽略处理方式--处理动作中神魔都没有做;
自定义处理方式--用户自己都来定信号如何处--修改信号的处理函数
自定义信号的处理函数替换

如何修改信号处理方式;

sighandler_tsignal(int signum,  signhandler_t handler);
signum:信号编号----替换signum这个信号的处理函数
handler; 函数指针 用户传入的处理函数
SIG DFL;信号的默认处理动作
SIG IGN;

信号的阻塞;阻止吸纳后被递达
递达;一个动作–信号的处理。
在pcb中还有一个集合–阻塞信号集合–标记那些信号暂时不被处理。

int sigprocmask(int how, const sigset_t*set, sigset_t*oldset);
how;
SIG_BLOOK;   向阻塞集合中加入set集合中
SIG_UNBLOOK\
SIG_SETMASK

可重入函数与不可重入函数:
可重入;多个执行流程同时执行进入笑你相同的函数,不会造成数据二义性以及代码逻辑混乱
不可重入;多个执行流程同时执行进入相同的函数,有可能造成数据二义性以及代码逻辑混乱。当用户设计一个函数或者使用一个函数的时候在多个执行流中,那么这时候就也需要考虑函数是否可重入情况。
函数可重入与不可重入的关键点;、
这个函数中是否对临界资源(全局数据)进行了非原子操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童无极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值