当前位置: 首页 > wzjs >正文

网站制作应用搭建个人主页

网站制作应用,搭建个人主页,龙岗网站建设哪家技术好,一个新产品的营销方案信号的产生 信号就是操作系统对用户操作做出的反应,但它的本质就是往操作系统写入信号,这是由操作系统的结构决定的。通过修改比特位来告诉操作系统接收信号和传了几号信号。 也正是因为我们身为用户无法亲自修改内核数据,所以我们需要通过操…

信号的产生

信号就是操作系统对用户操作做出的反应,但它的本质就是往操作系统写入信号,这是由操作系统的结构决定的。通过修改比特位来告诉操作系统接收信号和传了几号信号。

也正是因为我们身为用户无法亲自修改内核数据,所以我们需要通过操作系统提供的系统调用来让操作系统帮我们做修改操作。

kill -l

我们可以通过kill -l来查看系统提供的命令列表

但是并非所有信号我们都能用到,一般情况下,我们只会用1-31号信号,这也是为什么我们程序正常结束是返回0了,因为0号信号不存在,也就不会报错。

signal

如果我们想要自定义信号的转化方式,那么必须是这样空返回值,一个整型参数的函数

这个整型参数就是用来接收转化前收到的信号的。

这样当我们遇到了sigint时就会转化成对我们handlersig的调用

那么当我们运行这个文件时,一旦我们想要ctrl+c终止时,就会被转化成对handlersig的调用

可是新的问题来了,我们要是所有信号都自定义了,那么会不会永远退不出来呢,其实不会的,因为操作系统为了防止恶意进程专门设置了一个kill -9信号,它无法被自定义,所以我们可以用它来终止进程。

这样进程依旧被我们终止了。

我们也可以重写一个直接用来删除的文件

上面这一类我们都可以归类于是键盘产生的信号。

系统调用信号

这个理解起来挺简单的,我们调用的每一个系统函数都会有信号产生,不过我们可以通过系统调用了解一下系统的信号是怎么产生的。

raise

abort

这个系统函数会强制让信号执行它的默认操作,这样即使我们捕捉了对应信号想要执行自定义操作也不行了。

异常产生信号

信号的产生还有一种,就是异常。如果我们的进程有什么问题,也会触发异常信号,比如说 /0 或者说野指针问题。

可以看到 /0的异常是8号信号,而野指针则是11号信号。

那么操作系统是怎么知道这些问题的呢。

首先操作系统管理着软硬件,而硬件里的寄存器会记录当前进程的状态,那么一旦状态出了问题,它就会通过上下文和task_struct找到进程然后发送对应的异常信号。

野指针问题也差不多,它是属于CR3存储的目录地址和虚拟地址给MMU转化后没有对应的映射关系,所以失败了,那么寄存器同样记录异常状态然后返回给进程。

alarm以及pause

alarm就单纯是个闹钟而已。

通过捕捉闹钟信号,实现个闹钟死循环。

pause则是只有信号返回时它才有反应,否则就一直暂停着。

这俩单看都没啥用的感觉,但是结合起来,它就接近操作系统的本质了。

操作系统本身也是一个死循环,只有收到对应信号才会做出对应的操作,是不是没事的时候就像上面的pause暂停,有事的时候就像接收到闹钟信号做出反应。不过操作系统里的闹钟可能是一个结构体,存储着对应任务的触发时间和优先级,再由堆管理起来,这样操作系统拿堆顶的进程开始运行,这样就知道什么时候运行上面进程又返回什么信号。

以上就是信号产生的过程。

信号的保存

信号的保存又分为三种情况 递达、未决、阻塞

递达

递达就是操作系统成功接收之后的状态。

递达又分为自定义、默认、忽略

自定义就是我们之前的signal把捕捉的信号自定义成我们想要的方法。

默认就是不捕捉,按照信号表里的方法执行信号操作。

忽略则是虽然我接收了信号,但是无视你 你哪里凉快哪里待着。

未决

未决指的是信号产生到递达前的状态。

阻塞(屏蔽)

阻塞是我专门在你递达之前卡住你,等我有空处理你的时候再让你递达。

它和忽略是前后者的关系,并不相同,忽略是已递达但是不处理,阻塞是我可能暂时没空接收你,你先别等着。

block pending handler

操作系统用三个表来标识上面的状态

横着看来判断X号信号属于什么情况。

比如一号信号已被接收未阻塞执行方法为默认。

既然有这张表那么操作系统就为我们提供了一个函数来修改它.

sigprocmask

这个函数可以修改block表内的数据

第一个是我们用什么方法修改,第二个则是根据第一个参数给,第三个是为了防止你改错了改不回来,所以需要提供一个容器存旧数据。

第一个参数block是直接新增信号到block表里。

第二个则是通过先取反再与的操作修改信号。

第三个是我们直接提供整张修改后的block表覆盖旧表。

实际上用起来第三种才方便。

这里的sigset_t 就是容器的类型,它是一个系统定义的结构体。我们把它初始化后作为参数传入

sigprocmask里,这样就设置出了一个全部不阻塞的block表,但是这些操作都只在当前作用域

所以我们需要使用sigaddset把它添加到信号集内,我们可以理解为上传存档。

然后我们就可以用sigpending查看它的数据变化了,一旦我们传入任何一个信号

那么它的全0就会被改变。

最后我们输入2号信号,我们可以看到一开始为全为0的pending表第二位变成了1,这就代表它成功接收到了我们的2号信号。

sigpending

pending表只支持查看,我们同样传入一个容器,它会把数据拷贝进容器然后返回,至于为什么不支持修改,因为我们的信号产生那么多种方式,我们大可以直接用键盘异常这样的修改。


文章转载自:

http://WNtcVhjd.rycbz.cn
http://pm4a8I7C.rycbz.cn
http://sND1asIq.rycbz.cn
http://OHF8tNOO.rycbz.cn
http://r4YQ1E27.rycbz.cn
http://xhBQKy3e.rycbz.cn
http://5KwquE4J.rycbz.cn
http://OSZqRyN2.rycbz.cn
http://v4BZruvs.rycbz.cn
http://L1fmgwzG.rycbz.cn
http://F6uSOODd.rycbz.cn
http://kh0lmaC9.rycbz.cn
http://L56Wn9e6.rycbz.cn
http://UDQRBFdo.rycbz.cn
http://wSN2PM8k.rycbz.cn
http://lreAnntG.rycbz.cn
http://mcDaNbgH.rycbz.cn
http://eisDvY9J.rycbz.cn
http://sP83J0bJ.rycbz.cn
http://9uYNdHxN.rycbz.cn
http://0WYC4Zin.rycbz.cn
http://S169qlYk.rycbz.cn
http://96HBMwok.rycbz.cn
http://J3yJnXSP.rycbz.cn
http://ZQZg3suf.rycbz.cn
http://99FGg88l.rycbz.cn
http://HTf99Ohb.rycbz.cn
http://cfJ8NhQa.rycbz.cn
http://t3xM8WEv.rycbz.cn
http://Ii5rVoqk.rycbz.cn
http://www.dtcms.com/wzjs/737431.html

相关文章:

  • 中山 环保 骏域网站建设专家销客多分销小程序价格
  • 网站优化推广哪家好深喘旋磨做紧夹断妖精网站
  • 大网站服务器维护费用怎么制作ppt 教程
  • 企业网站建设费用属于什么科目平台推广方案模板
  • python手机编程软件长沙网站优化指导
  • 新河网站快排seo建筑网课平台
  • 山东 网站建设 公司太原市住房与城乡建设厅网站
  • 南阳理工网站建设私人可以有官方网址吗
  • 深圳网站建设 宝华大厦泰兴网页定制
  • 网站后台策划书2024年还会封城吗
  • 开网站需要哪些程序莆田网站建设方案优化
  • 什么样的资质做电子商务网站python 网站建设
  • 广东装饰公司网站建设国家企业信用信息查询系统
  • 建设银行 福州招聘网站湖北seo服务
  • 贵港市网站建设搭建企业网站公司
  • 专门做搞笑视频的网站遮罩层怎么做网页
  • 建立用模板建立网站html超链接
  • 门户网站优化报价江苏省网站建设哪家好
  • 网站开发平台的公司dede如何制作网站地图
  • 南京网站建设小程酒店网站建设方案结束语
  • 温州建设工程信息网站做的最好的本地生活网站
  • 黄山网站建设哪家好企业网站建设专业精准丨 鸣远科技
  • 网站维护服务内容淘宝客api调用到网站
  • 做5173这样的网站要多少人微信公众号怎么推广和引流
  • 如何写网站优化目标免费注册网站云空间
  • 境内境外网站区别企业宣传
  • 北京南站在哪个街道网站建设的几个阶段
  • 如何在交易网站做电子印章济南网站建设就选搜点网络ok
  • 建筑设计招标网站湖南响应式网站哪家好
  • 导航网站怎么做湖北百度seo厂家