1基本概念

中断

q  中断是系统对于异步事件的响应

q  中断信号

q  中断源

q  现场信息

q  中断处理程序

q  中断向量表

异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序

生活中的中断和计算机系统中的中断

1)  无中断生活场景

张三看书,厨房烧水

2)有中断的生活场景

张三看书,设置闹钟,厨房烧水。

闹钟发出中断信号,张三把书合好(第20页),去厨房把开水事情处理好,张三重新打开20页进行阅读。

3)计算机系统的中断场景

中断源发出中断信号,CPU判断中断是否屏蔽屏蔽、保护现场 ,cpu执行中断处理程序, cpu恢复现场,继续原来的任务。
4)中断的其他概念

中断向量表保存了中断处理程序的入口地址。

中断个数固定,操作系统启动时初始化中断向量表。

中断有优先级(有人敲门,有人打电话,有优先级)

中断可以屏蔽(张三可以屏蔽电话)。

中断分类


硬件中断(外部中断)

外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断


软件中断(内部中断)

内部中断是由CPU运行程序错误或执行内部程序调用引起的一种中断,也称为软件中断。


x86平台INT指令 ARM软中断指令SWI

信号概念


信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。


信号是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令等


信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断

信号和中断的区别


信号与中断的相似点:


(1)采用了相同的异步通信方式;


(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;


(3)都在处理完毕后返回到原来的断点;


(4)对信号或中断都可进行屏蔽。


信号与中断的区别:


(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;


(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;


(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。

2信号名称及常用信号

信号名称         描述

SIGABRT  进程停止运行 6

SIGALRM 警告钟

SIGFPE      算述运算例外

SIGHUP    系统挂断

SIGILL       非法指令

SIGINT      终端中断  2

SIGKILL     停止进程(此信号不能被忽略或捕获)

SIGPIPE    向没有读者的管道写入数据

SIGSEGV  无效内存段访问

SIGQUIT   终端退出   3

SIGTERM 终止

SIGUSR1  用户定义信号1

SIGUSR2  用户定义信号2

SIGCHLD  子进程已经停止或退出

SIGCONT 如果被停止则继续执行

SIGSTOP   停止执行

SIGTSTP   终端停止信号

SIGTOUT  后台进程请求进行写操作

SIGTTIN   后台进程请求进行读操作

实验1:

kill –l   
可以查看linux内核支持的信号

Man 7 signal 查看信号的默认动作、信号的含义

3信号处理

进程对信号的三种相应


忽略信号

不采取任何操作、有两个信号不能被忽略:SIGKILL(9号信号)和SIGSTOP。

思考1:为什么进程不能忽略SIGKILL、SIGSTOP信号。(如果应用程序可以忽略这2个信号,系统管理无法杀死、暂停进程,无法对系统进行管理。)。SIGKILL(9号信号)和SIGSTOP信号是不能被捕获的。


捕获并处理信号

内核中断正在执行的代码,转去执行先前注册过的处理程序。


执行默认操作

默认操作通常是终止进程,这取决于被发送的信号。

信号的默认操作:通过 man 7
signal 进程查看

man 7 signal

编程实践:让应用程序捕捉ctrl+c信号

以ctrl+c 会产生一个中断。当前应用程序捕捉ctrl+c中断信号。

4信号signal函数编程实践

signal信号安装函数

signal函数,作用1:站在应用程序的角度,注册一个信号处理函数。

作用2:忽略信号、设置信号默认处理  信号的安装和恢复


typedef
void (*__sighandler_t) (int);


#define
SIG_ERR ((__sighandler_t) -1)


#define
SIG_DFL ((__sighandler_t) 0)


#define
SIG_IGN ((__sighandler_t) 1)


函数原型:

         __sighandler_t
signal(int signum, __sighandler_t handler);


参数


signal是一个带signum和handler两个参数的函数,准备捕捉或屏蔽的信号由参数signum给出,接收到指定信号时将要调用的函数由handler给出


handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是void


handler也可以是下面两个特殊值:

SIG_IGN     屏蔽该信号

SIG_DFL     恢复默认行为

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h> /*
typedef void (*sighandler_t)(int); sighandler_t signal(int signum,
sighandler_t handler); */ int g_tag = ; __sighandler_t old;
// Linux内核调用这个函数 void myhandle(int num)
{
printf("recv signal id num : %d\n", num);
if ( == num)
{
g_tag = ;
   // signal(SIGINT, SIG_DFL); 
   // signal(SIGINT, old);
}
return;
} int main(void)
{ // 信号的安装 old = signal(SIGINT, myhandle)
if ( signal(SIGINT, myhandle) == SIG_ERR )
{
perror("signal err");
return ;
} if ( signal(SIGQUIT, myhandle) == SIG_ERR )
{
perror("signal err");
return ;
} /*
无效的参数
if ( signal(SIGKILL, myhandle) == SIG_ERR )
{
perror("signal err");
return 0;
}
*/
while(g_tag); return ;
}

[学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践的更多相关文章

  1. DSP EPWM学习笔记1 - EPWM定时中断

    DSP EPWM学习笔记1 - EPWM定时中断 彭会锋 EPWM模块组成 EPWM有7个子模块组成:时间基准 TB.比较功能 CC.动作限定 AQ.死区产生 DB.斩波控制 PC.故障捕获 TZ.事 ...

  2. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  3. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  4. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  5. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  6. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  7. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  8. (1)《Head First HTML与CSS》学习笔记---HTML基本概念

    前言: 1.     这本书并没有面面俱到,涵盖所有内容,只提供作为初学者真正需要的东西:基本知识和信心.所以这不是唯一的参考书.(我买了一本<HTML5权威指南>作为参考书和这本一起看, ...

  9. 自然语言处理NLP学习笔记一:概念与模型初探

    前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. http://xiaosi.trs.cn/demo/rs/demo 知识图 ...

随机推荐

  1. 无状态服务 VS 有状态服务

    无状态服务 VS 有状态服务 https://blog.csdn.net/mysee1989/article/details/51381435 对服务器程序来说,究竟是有状态服务,还是无状态服务,其判 ...

  2. Yii错误404页面

    'errorHandler'=>array( // use 'site/error' action to display errors 'errorAction'=>YII_DEBUG ? ...

  3. nginx之 nginx-1.9.7 编译安装、理论简介

    nginx是一个web网站常用的高性能http和反向代理服务器,其具有较好的并发能力,被网易.百度.腾讯.新浪等网站广泛使用. 一. 理论简介 1.首先弄清楚正向代理和反向代理 正向代理:代理客户端, ...

  4. bzoj 4712 洪水——动态DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4712 因为作为动态DP练习而找到,所以就用动态DP做了,也没管那种二分的方法. 感觉理解似乎 ...

  5. 洛谷P4721 【模板】分治 FFT(分治FFT)

    传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_ ...

  6. Linux网络编程——I/O复用之poll函数

    一.回顾前面的select select优点: 目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点 select缺点: 1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核 ...

  7. Erlang pool management -- Emysql pool optimize

    在上一篇关于Emysql pool (http://www.cnblogs.com/--00/p/4281938.html)的分析的最后提到 现在的emysql_conn_mgr gen_server ...

  8. minidump-DMP文件的生成和使用

    转载地址点击打开链接 1.生成dmp的程序 #include  <dbghelp.h> #pragma comment(lib,  "dbghelp.lib") //设 ...

  9. Oracle 内存结构

     内存结构 Oracle内存,进程与数据库的图 sga:系统全局区,用来存放操作的数据,库缓存,数据字典等控制信息的内存区域, pga:进程全局区,服务进程专用的内存区域,大多数内容非共享 uga:用 ...

  10. 1 ignite核心特性

    1 Ignite是什么? Apache Ignite是一个以内存为中心的分布式数据库.缓存和处理平台,支持事务.分析以及流式负载,可以在PB级数据上享有内存级的性能. 2 Ignite是不是内存数据库 ...