Linux系统编程—6(信 的机制,信 4要素,Linu常规信 表,定时器)

信 的概念

信 在我们的生活中随处可见, 如:古代战争中摔杯为 ;现代战争中的信 弹;体育比赛中使用的信 枪… 他们都有共性:

  1. 简单
  2. 不能携带大量信息,只能带一个标志。
  3. 满足某个特设条件才发送。
    Unix 早期版本就提供了信 机制,但不可靠,信 可能丢失。Berkeley 和 AT&T 都对信 模型做了更改,增加 了可靠信 机制。但彼此不兼容。POSIX.1 对可靠信 例程进行了标准化。

信 的机制

A 给 B 发送信 ,B 收到信 之前执行自己的代码,收到信 后,不管执行到程序的什么位置,都要暂停运行, 去处理信 ,处理完毕再继续执行。与硬件中断类似——异步模式。但信 是软件层面上实现的中断,早期常被称 为“软中断”。

信 的特质

由于信 是通过软件方法实现,其实现手段导致信 有很强的延时性。但对于用户来说,这个延 迟时间非常短,不易察觉。

每个进程收到的所有信 ,都是由内核负责发送的,内核处理。

与信 相关的事件和状态

产生信 :

  1. 按键产生,如:Ctrl+c(死循环终止)、Ctrl+z、Ctrl+
  2. 系统调用产生,如:kill、raise、abort
  3. 软件条件产生,如:定时器 alarm
  4. 硬件异常产生,如:非法访问内存(段错误)、除 0(浮点数例外)、内存对齐出错(总线错误)
  5. 命令产生,如:kill 命令

递达:

递送并且到达进程。产生到递达是瞬时的

未决:

产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。

信 的处理方式:

  1. 执行默认动作
  2. . 忽略(丢弃)
  3. 捕捉(调用户处理函数) (不让它执行默认动作)
    Linux 内核的进程控制块 PCB 是一个结构体,task_struct, 除了包含进程 id,状态,工作目录,用户 id,组 id, 文件描述符表,还包含了信 相关的信息,主要指阻塞信 集和未决信 集。

阻塞信 集(信 屏蔽字):

描述信 屏蔽状态,将某些信 加入集合,对他们设置屏蔽,当屏蔽 x 信 后,再收到该信 ,该信 的处理将推后(解除屏蔽后) 阻塞信 集影响未决信 集。

未决信 集:

没有处理掉

  1. 信 产生,未决信 集中描述该信 的位立刻翻转为 1,表信 处于未决状态。当信 被处理对应位翻 转回为 0。这一时刻往往非常短暂。
  2. 信 产生后由于某些原因(主要是阻塞)不能抵达。这类信 的集合称之为未决信 集。在屏蔽解除前, 信 一直处于未决状态。

信 的编

可以使用 kill–l 命令查看当前系统可使用的信 有哪些。

setitimer 函数

设置定时器(闹钟)。 可代替 alarm 函数。精度微秒 us,可以实现周期定时。

成功:0;失败:-1,设置 errno

参数:

which:指定定时方式

  1. 自然定时:ITIMER_REAL → 14)SIGLARM 计算自然时间
  2. 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM 只计算进程占用 cpu 的时间
  3. 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF 计算占用 cpu 及执行系统调用的时间
使用 setitimer 函数实现 alarm 函数,计算1是内计算机计算次数
结合 manpage 编写程序,测试 it_interval、it_value 这两个参数的作用。

void (*signal (int signum,void ( *sighandler_t)(int)))(int);

Linux系统编程---6(信 的机制,信 4要素,Linu常规信 表,定时器)

注意

  1. it_inter :用来设定两次定时任务之间间隔的时间。
  2. it_value:定时的时长 两个参数都设置为 0,即清 0 操作。

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25019 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月12日
下一篇 2019年7月12日

相关推荐