当前位置:首页 » 软件系统 » 系统调用可以被中断
扩展阅读
春香暖玉哪个软件可以看 2024-09-22 21:24:49

系统调用可以被中断

发布时间: 2022-01-12 07:49:47

1. linux系统调用为什么会被中断

于中断为什么不能进入休眠,今天再网上查阅并总结了一下: 中断处理的时候,不应该发生进程切换,因为在中断上下文中,唯一能打断当前中断handler的只有更高优先级的中断, 它不会被进程打断(这点对于softirq,tasklet也一样

2. 如何处理被中断的系统调用

所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。 中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时...

3. 操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为【 】A初始化程序 B子程序 C原

正确答案:原语

原语是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性,即原语的执行必须是连续的。原语在执行过程中不允许被中断,不同层次之间对话的语言称为原语,即不同层之间通过原语来实现信息交换。

4. 抢占式内核中,线程在系统调用过程中被抢占,然后又被重新调度时,如何返回至被中断的系统调用的

首先,一般配置的linux,如果进程正在进行
系统调用
,那么此时进程就是正运行在内核态,而内核态的进程是不可被抢占的。
你说的这种情况,属于编译内核的时候开启了“内核可抢占”这个特性,这种情况下,即使进程正在内核态
执行系统
调用,也可以被其他进程抢占,这时,首先系统会在进程
结构体
中记录下这个进程当前是在内核态运行,然后,每个进程都有专属于自己的内核栈,系统会把当前的执行上下文信息都记录到这个进程的内核堆栈上。
以后这个进程恢复运行的时候,内核会从它的结构体中读到被打断前它处于内核态,进而从它的内核栈中读取当时的上下文信息并进行恢复,这样,进程就得以重新运行了。
有问题请追问

5. Linux中断 异常 系统调用 中断上半部 中断下半部 这些有什么区别和联系

中断分软中断跟硬中断,硬中断是由硬件从外部触发,软中断由软件触发,就像linux系统调用int 80一样。至于中断的上下部其实就是因为中断的处理时间跟它的优先级不一定成正比,所以一般先处理中断最重要的部分(上半部),待到不怎么忙的时候,再来处理比较悠闲的部分(下半部)。就像输入的时候,拿到键盘输入的是什么才是最重要的(上半部),显示字符才是次要的(下半部)。

6. 系统调用怎么实现

所谓系统调用,就是用户在程序中调用操作系统所提供的一些子功能。它是通过系统调用命令,中段现行程序而转去执行相应的子程序,以完成特定的系统功能。完成后,控制又返回到发出系统调用命令之后的一条指令,被中断的程序将继续执行下去。

系统调用与一般过程调用不同,其主要区别是:

1.运行的状态不同。在程序中的过程一般或者都是用户程序,或者都是系统程序,即都是运行在同一个系统状态的(用户态或系统态)。

2.进入的方式不同。一般的过程调用可以直接由调用过程转向被调用的过程。而执行系统调用时,由于调用过程与被调用过程是处于不同的状态,因而不允许由调用过程直接转向被调用过程,通常是通过访问管中断(即软中断)进入,先进入操作系统,经分析后,才能转向相应的命令处理程序。

3.返回方式的不同。

4.代码层次不同。一般过程调用中的被调用程序是用户级程序,而系统调用是操作系统中的代码程序,是系统级程序。
度规定为度,在度和度之间分成等分,每一等分为℃。

7. 系统调用被信号中断产生EINTR错误怎么解

001信号中断有以下几种可能性:一、天线移位,就是说方向完全没有对好卫星!提示如参考资料的图片;二、线头或者是线路中断,相当于接收器没有链接天线;三、天气不好或者是暴风雨现象!出现以上情况,请按此步骤操作:按遥控上的菜单-系统设置-选择安装与信号检测(然后再按以下确认键),此时看看信号强度和信号质量,若信号由信号强度出现,信号质量是0,证明是天线移位。若信号强度很信号质量都为0证明线路出现故障。问题可以这样排除,以便调整。

8. 什么是中断系统调用

所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。

第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。

1.中断处理

中断处理一般分为中断响应和中断处理两个步骤。中断响应由硬件实施,中断处理主要由软件实施。

(1)中断响应

对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU暂停执行当前的程序,而转去处理中断。这个由硬件对中断请求作出反应的过程,称为中断响应。一般说来,中断响应顺序执行下述三步动作:

◆中止当前程序的执行;

◆保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容);

◆从中断控制器取出中断向量,转到相应的处理程序。

通常CPU在执行完一条指令后,立即检查有无中断请求,如果有,则立即做出响应。

当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”—Software Interrupts),或者来自意外事件(如访问页面不在内存)。

如果当前CPU的执行优先级低于中断的优先级,那么它就中止对当前程序下条指令的执行,接受该中断,并提升处理机的执行级别(一般与中断优先级相同),以便在CPU处理当前中断时,能屏蔽其它同级的或低级的中断,然后保存断点现场信息,通过取得的中断向量转到相应的中断处理程序的入口。

(2)中断处理

CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到相应的表项,该表项应是一个中断门。于是,CPU就根据中断门的设置而到达了该通道的总服务程序的入口。

核心对中断处理的顺序主要由以下动作完成:

◆保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。

◆确定“中断源”或核查中断发生,识别中断的类型(如时钟中断或盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。

◆核心调用中断处理程序,对中断进行处理。

◆中断处理完成并返回。中断处理程序执行完以后,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。如果设置了重调度标志,则在本进程返回到用户态时做进程调度。

2.系统调用

在Unix/Linux系统中,系统调用像普通C函数调用那样出现在C程序中。但是一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到。

C语言编译程序利用一个预先确定的函数库(一般称为C库),其中有各系统调用的名字。C库中的函数都专门使用一条指令,把进程的运行状态改为核心态。Linux的系统调用是通过中断指令“INT 0x80”实现的。

每个系统调用都有惟一的号码,称作系统调用号。所有的系统调用都集中在系统调用入口表中统一管理。

系统调用入口表是一个函数指针数组,以系统调用号为下标在该数组中找到相应的函数指针,进而就能确定用户使用的是哪一个系统调用。不同系统中系统调用的个数是不同的,目前Linux系统中共定义了221个系统调用。

另外,系统调用表中还留有一些余项,可供用户自行添加。

当CPU执行到中断指令“INT 0x80”时,硬件就做出一系列响应,其动作与上述的中断响应相同。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。

接着运行内核函数system_call()。首先,进一步保存各寄存器的内容;接着调用syscall_trace( ),以系统调用号为下标检索系统调用入口表sys_call_table,从中找到相应的函数;然后转去执行该函数,完成具体的服务。

执行完服务程序,核心检查是否发生错误,并作相应处理。如果本进程收到信号,则对信号作相应处理。最后进程从系统空间返回到用户空间。

上面两讲简要介绍了Linux内核的主要数据结构和相应的算法。Linux内核包含了丰富的内容,这里仅是其中的一点点,以求起到“抛砖引玉”的作用。

9. 系统调用与中断调用有什么联系与区别

它们都是操作系统概念。中断调用是DOS操作系统中,系统调用的特殊形式而已。

系统调用,都是指操作系统的开发者,提供了许多系统的程序库,实现输入/输出等基本的功能,我们编写程序的时候就调用这些程序库,不必要自己到显示器上绘图和读取键盘端口。

在UNIX操作系统下,系统调用主要是C语言格式调用的一些函数库。比如printf和scanf函数,我们写程序的时候直接可以用,编译系统把它转变为对操作系统函数库调用的代码,目标文件可以独立运行。

在WINDOWS系统,系统调用主要是以一系列的DLL、EXE文件方式给出,比如USER32.DLL、NTDLL.DLL等,编写程序的时候可以直接调用里面的GETDC等函数库。

在DOS系统下,操作系统不以函数库形式提供系统调用,而是把整个操作系统的所有代码都LOAD到内存里面,把相关系统调用功能安装到中断接口里面,我们写的程序需要调用的时候,调用相应的中断。比如打开文件等操作,就调用INT 21

10. 操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为什么

操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为原语。