linux 中断 查看,linux查看版本命令

大家好,今天给各位分享linux 中断 查看的一些知识,其中也会对linux查看版本命令进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

linux signal 11 是什么意思

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。 1、基本概念软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。收到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处理。第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,但对于同一个信号,进程并不知道在处理之前来过多少个。 2、信号的类型发出信号的原因很多,这里按发出信号的原因简单分类,以了解各种信号:(1)与进程终止相关的信号。当进程退出,或者子进程终止时,发出这类信号。(2)与进程例外事件相关的信号。如进程越界,或企图写一个只读的内存区域(如程序正文区),或执行一个特权指令及其他各种硬件错误。(3)与在系统调用期间遇到不可恢复条件相关的信号。如执行系统调用exec时,原有资源已经释放,而目前系统资源又已经耗尽。(4)与执行系统调用时遇到非预测错误条件相关的信号。如执行一个并不存在的系统调用。(5)在用户态下的进程发出的信号。如进程调用系统调用kill向其他进程发送信号。(6)与终端交互相关的信号。如用户关闭一个终端,或按下break键等情况。(7)跟踪进程执行的信号。 Linux支持的信号列表如下。很多信号是与机器的体系结构相关的,首先列出的是POSIX_sec= 1; value_usec= 0; value_sec= 1; value_usec= 0; setitimer(ITIMER_REAL,&value,&ovalue); value2_sec= 0; value2_usec= 500000; value2_sec= 0; value2_usec= 500000; setitimer(ITIMER_VIRTUAL,&value2,&ovalue); for(;;);}该例子的屏幕拷贝如下: localhost:~$./timer_test process id is 579 Catch a signal– SIGVTALRM Catch a signal– SIGALRM Catch a signal– SIGVTALRM Catch a signal– SIGVTALRM Catch a signal– SIGALRM Catch a signal–GVTALRM

Linux内核中断上半部处理程序

硬件中断--异步中断中断本质上是一种电信号,由硬件设备发出,用于通知处理器特定事件。不同设备对应不同中断,每个中断通过唯一的数字标识,称为中断请求(IRQ)线。处理器内部对其编号,也称为中断号。

异常--同步中断异常不同于中断,产生时必须考虑与处理器时钟同步。异常常称为同步中断,是处理器执行时由于编程失误而导致的错误指令(如除0),或者执行期间出现特殊情况(如缺页),必须靠内核来处理时,处理器就会产生一个异常。我们通常所说的是中断,是指由硬件产生的异步中断。

软中断工作方式类似于异步中断,区别是它是通过软件引起的中断,异步中断是由硬件引起的。

中断处理程序中断处理程序(interrupt handler)或中断服务例程(interrupt service routine,ISR)响应一个特定中断时执行的函数。设备产生的每个中断,都有一个中断处理程序关联。一个设备可能产生多种不同的中断,那么该设备就可以对应多个中断处理程序。相应地,设备驱动程序就需要准备多个这样的函数。

Linux中断处理程序特点 Linux中,中断处理程序看起来像普通C函数,按特定类型声明,以便内核能以标准的方式传递处理程序的信息。中断处理程序与其他内核函数的区别:中断处理程序是被内核调用来响应中断的,而它们运行于被称为中断上下文的特殊上下文中。由于中断随时可能产生,因此中断处理程序必须随时、尽快执行,这样才能尽快响应中断,同时恢复中断代码的执行。

上下半部的对比一般把中断处理切分为2个部分或两半:1)上半部(top half)中断处理程序是上半部,接收到一个中断,就立即开始执行,但只做严格时限的工作。如对接收中断进行应答或复位硬件,这些工作都是在所有中断被禁止的情况下完成的。2)下半部(bottom half)中断处理程序中,能被允许稍后完成的工作会推迟到下半部。Linux提供下半部的各种机制。

编写中断处理程序一个典型的中断处理程序声明:其签名必须与request_irq()中参数handler所要求函数类型一致。参数说明:返回值:返回值是一个特殊类型:irqerturn_t。实际是int类型,为了与早期内核兼容,因为2.6以前实际是void类型。可能返回2个特殊值:IRQ_NONE和IRQ_HANDLED。当中断处理程序检测到一个中断,但该中断并非注册处理函数时指定的产生源时,返回IRQ_NONE;当中断处理程序被正确调用,而且确实是它所对应的设备产生的中断时,返回IRQ_HANDLED。返回值也可以用宏IRQ_RETVAL(x):x为非0,宏返回IRQ_HANDLED;x为0,返回IRQ_NONE。定义说明:中断处理程序通常标记为static,因为从来不会在其他文件被直接调用。可重入性 Linux中中断处理程序无需重入。当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽,以防在同一个中断线上接收另一个新的中断。也就是说,同一个中断线,同一个中断处理程序,在执行完毕之前不可能同时在2个处理器上执行,加上中断处理程序不能休眠,因此无需考虑可重入性。

中断控制 Linux内核提供一组接口用于操作机器上的中断状态:能用于禁止当前处理器的中断系统,屏蔽整个机器的一条中断线。例程与体系结构相关,位于。

禁止内核抢占:preempt_disable、preempt_enable等;禁止和激活中断用于禁止当前处理器上的本地中断,随后由激活:。由于flags包含具体体系结构的数据,即中断系统的状态,因此,flags不能传递给另一个函数,必须驻留在同一栈帧中。基于此,local_irq_save和restore的调用必须在同一个函数中。

中断系统的状态如何了解中断系统的状态,如中断当前是禁止的还是激活的?或者当前是否正处于中断上下文的执行状态中?本小节提供这方面回答。中 irqs_disable()如果本地处理器上的中断系统被禁止,则返回非0;否则,返回0。中 in_interrupt()如果内核处于中断上下文,则返回非0;如果在进程上下文,返回0。in_irq()如果当前正在执行中断处理程序,则返回非0;否则,返回0.

中断处理机制的实现中断处理系统的实现依赖于体系结构。中断的入口点是:硬件产生了中断,处理器开始跳转到对应的一个唯一位置,在栈中保存这个号,并存放当前寄存器的值(被中断任务),开始处理中断。中断产生到内核处理中断的步骤:1)硬件产生中断。2)处理器跳转到中断向量表对应的中断处理程序,栈中保存中断号及打断任务保存线程。3)内核调用do_IRQ()。之后,大多数中断处理代码用C编写。do_IRQ()提取中断号,对应x86代码:计算出中断号后,do_IRQ()对所接收的中断进行应答,禁止这条线上的中断传递。这些操作通过调用mask_and_ack_8259A()来完成。4)处理中断如果中断线上已安装中断处理程序,就调用handle_IRQ_event()处理;如果没有,就直接调用ret_from_intr(),返回内核运行中断的代码。x86上,handle_IRQ_event():5)调用ret_from_intr()类似于初始入口代码,用汇编编写。用于检查重新调度释放正在挂起(意味着设置了need_resched)。如果重新调度正在挂起,并且内核正在返回用户空间(i.e.中断了用户进程),那么schedule()被调用。如果内核正在返回内核空间(i.e.中断了内核本身),只有preempt_count(抢占计数器)为0时,schedule()才会被调用(否则,抢占内核便是不安全的)。schedule()返回后,或者如果没有挂起的工作,那么原来的寄存器被恢复,内核恢复到曾经中断的点。

/proc/interrupts查看中断统计信息 procfs是一个虚拟文件系统,只存在于内核内存,一般安装于/proc目录下。在procfs中读写文件都要调用内核函数,这些函数模拟从真实文件中读或写。/proc/interrupts文件存放系统中与中断相关的统计信息。

中断处理程序实例一个来自RTC驱动程序的中断处理程序,可在drivers/char/rtc.c中找到。RTC用于设置系统时钟,提供alarm或周期性定时器。

Linux里面grep -v命令作用是什么

grep命令

grep

1.作用

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

2.格式及主要参数

grep [options]

主要参数: grep--help可查看

-c:只输出匹配行的计数。

-i:不区分大小写。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

--color=auto:可以将找到的关键词部分加上颜色的显示。

pattern正则表达式主要参数:

\:忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$:匹配正则表达式的结束行。

\<:从匹配正则表达式的行开始。

\>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求。

[- ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。

.:所有的单个字符。

*:所有字符,长度可以为0。

3.grep命令使用简单实例

itcast$ grep‘test’ d*

显示所有以d开头的文件中包含 test的行

itcast$ grep‘test’ aa bb cc

显示在aa,bb,cc文件中匹配test的行。

itcast$ grep‘[a-z]\{5\}’ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

itcast$ grep‘wesest.*\1′ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep-E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。

4.grep命令使用复杂实例

明确要求搜索子目录:

grep-r

或忽略子目录

grep-d skip

如果有很多输出时,您可以通过管道将其转到’less’上阅读:

itcast$ grep magic/usr/src/Linux/Documentation/*| less

这样,您就可以更方便地阅读。

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用*)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按,然后再试。

下面还有一些有意思的命令行参数:

grep-i pattern files:不区分大小写地搜索。默认情况区分大小写,

grep-l pattern files:只列出匹配的文件名,

grep-L pattern files:列出不匹配的文件名,

grep-w pattern files:只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

grep-C number pattern files:匹配的上下文分别显示[number]行,

grep pattern1| pattern2 files:显示匹配 pattern1或 pattern2的行,

例如:grep"abc\|xyz" testfile表示过滤包含abc或xyz的行

grep pattern1 files| grep pattern2:显示既匹配 pattern1又匹配 pattern2的行。

grep-n pattern files即可显示行号信息

grep-c pattern files即可查找总行数

还有些用于搜索的特殊符号:\<和\>分别标注单词的开始与结尾。

例如:

grep man*会匹配‘Batman’、’manic’、’man’等,

grep‘\<man’*匹配’manic’和’man’,但不是’Batman’,

grep‘\<man\>’只匹配’man’,而不是’Batman’或’manic’等其他的字符串。

‘^’:指匹配的字符串在行首,

阅读剩余
THE END