第八章 中断与系统功能调用
- 格式:pptx
- 大小:1.00 MB
- 文档页数:126
操作系统的中断、异常和系统调⽤操作系统的中断、异常和系统调⽤
中断
硬件
设置中断标记【CPU初始化】
将内部、外部事件设置中断标记
中断事件的ID
软件
保存当前处理状态
中断服务程序处理
清除中断标记
恢复之前保存的处理状态
异常
异常编号
保存现场
异常处理
杀死产⽣异常程序
重新执⾏异常指令
恢复现场
系统调⽤
应⽤程序调⽤printf(),会触发write()。
程序访问主要是通过⾼层次的api接⼝⽽不是直接进⾏系统调⽤。
win32 api ⽤于 Windows
POSIX api ⽤于 Unix,Linux,MacOSX
Java api ⽤于java虚拟机(JVM)
其实也实现调⽤java api随后调⽤对应操作系统的api
操作系统如何完成系统调⽤(⽤户态到<--->内核态)
通常情况,与每个系统调⽤相关的序号
系统调⽤接⼝根据序号维护表的索引
系统调⽤接⼝调⽤内核态中预期的系统调⽤
并返回系统调⽤的状态和其他任何返回值
⽤户不需要知道系统调⽤是如何实现的
只需要获取API和了解操作系统讲什么作为返回结果
操作系统接⼝细节⼤部分都隐藏在API中
系统调⽤中,操作系统和应⽤程序的堆栈是不同的。
跨越操作系统便边界的代价
在执⾏时间上的开销超过程序调⽤
对应中断号,堆栈切换保存与恢复
开销:
建⽴中断/异常/系统调⽤号与对应服务例程映射关系的初始化开销
建⽴内核堆栈
验证参数
内核态映射到⽤户态的地址空间
更新页⾯映射
内核独⽴地址空间
TLB。
MS-DOS软件中断与系统功能调用-吉林大学-徐嵩MS-DOS软件中断与系统功能调用操作系统是系统软件的核心,它负责管理计算机的所有资源,协调计算机的各种操作。
操作系统和编辑程序、汇编程序、连接程序、调试程序等一系列系统实用程序一起组成微型计算机的系统软件。
MS-DOS是PC机上用得最普遍的操作系统,其主要功能可以分为两方面。
一个是设备管理功能,管理显示器、键盘、磁盘、打印机、异步通信口等各种设备资源;另一个是文件管理功能,包括如何在磁盘上建立文件、删除文件、读/写文件和检索文件等。
MS-DOS采用层次化模块结构,它有基本输入/输出模块BIOS、磁盘管理模块、命令处理模块这3个主要模块。
它从两个层次上向用户提供了接口,普通用户可以通过键盘命令在命令处理模块这个层次上和操作系统打交道。
高级用户可以通过软件中断和系统功能调用在MS-DOS的较低层次上,即磁盘管理模块和基本输入/输出模块,和操作系统打交道。
MS-DOS能处理的命令分内部命令和外部命令两类。
内部命令往往是最常用的一些命令,如目录显示命令DIR、复制文件命令COPY、文件改名命令REN等,它们所对应的命令执行模块就在/doc/4a11835156.html,程序内部。
大部分命令属于外部命令,一个外部命令的处理要通过此命令所对应的一个命令文件的执行来实现。
例如,我们要设计、运行用汇编语言编写的程序,就要用到下列外部命令,用编辑命令EDLIN来编辑文件,用汇编命令MASM来得到目标文件,用连接命令LINK来得到可执行文件,在程序被确认完全正确之前,还要用调试命令DEBUG进行调试。
MS-DOS的主要系统功能都是用中断处理程序的形式来提供的,用户可以按照一定的格式在指定寄存器中存放好某一适当的参数,再用一条INT中断指令,便可调用某个中断子程序,这就是利用软件中断方法来调用操作系统的功能。
因为类型为21H的软件中断所对应的中断处理程序中包含了实现外部设备管理功能、文件读/写功能和管理功能、目录管理功能等最常用的功能子程序,它们几乎包括了整个系统的功能,所以系统功能调用这个术语通常指对类型为21H的软件中断。
中断处理和函数调用中断处理和函数调用是计算机编程中常见的两个概念,它们在程序执行过程中起着重要的作用。
本文将分别详细介绍中断处理和函数调用的概念、原理和应用。
一、中断处理中断处理是指在计算机执行程序的过程中,当发生某些特定事件时,会暂停当前程序的执行,转而执行中断处理程序。
中断处理可以分为硬件中断和软件中断两种类型。
硬件中断是由计算机硬件设备发出的信号,用于通知CPU某种事件的发生,如键盘输入、鼠标移动等。
当发生硬件中断时,CPU会立即停止当前正在执行的指令,保存当前执行环境的状态,然后转而执行与中断相关的中断处理程序。
中断处理程序执行完毕后,CPU 会回到中断发生的地方,继续执行原来的程序。
软件中断是由程序中的特定指令触发的中断。
在程序中通过软件中断指令,可以主动暂停当前程序的执行,并转而执行与中断相关的中断处理程序。
软件中断通常用于实现一些特定功能,如系统调用、异常处理等。
中断处理在操作系统、驱动程序等领域有着广泛的应用。
通过中断处理,计算机可以及时响应外部设备的请求,提高系统的实时性和可靠性。
二、函数调用函数调用是指在程序中通过函数名和参数列表来调用特定的函数。
函数是一段封装了特定功能的代码块,通过函数调用可以在程序中多次使用同一段代码,提高了代码的复用性和可维护性。
在函数调用过程中,首先需要将函数的参数传递给函数,然后执行函数体中的代码。
函数执行完毕后,会返回一个返回值,并将控制权交还给调用函数的位置。
函数调用可以嵌套,即在一个函数内部调用另一个函数。
函数调用可以分为有返回值和无返回值两种类型。
有返回值的函数可以将计算结果返回给调用者,无返回值的函数则仅执行一些操作而不返回结果。
函数调用是程序结构化的基础,通过合理的函数调用可以使程序结构清晰、模块化,便于理解和维护。
函数调用也是实现面向对象编程的重要手段,通过定义类和方法,可以将函数调用封装成对象的方法调用。
三、中断处理与函数调用的关系中断处理和函数调用在程序执行过程中有着密切的联系。
系统调用与中断的关系系统调用与中断的关系1.中断课本中“中断”的定义:所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序的预先安排引起CPU暂停正在运行程序,而转到为内部/外部事件或为预先安排事件服务的程序中去。
服务完毕,再返回去继续执行被暂停的程序。
中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。
第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。
第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。
前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。
2.系统调用所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。
这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。
系统调用是用户程序和内核交互的接口。
操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用的(system call)的接口呈现给用户。
系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。
整个系统调用的过程可以总结如下:1.执行用户程序(如:fork)2.根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断。
3.进行地址空间的转换和堆栈的切换,执行SAVE_ALL。
(进行内核模式)4.进行中断处理,根据系统调用表调用内核函数。
5.执行内核函数。
6.执行RESTORE_ALL并返回用户模式那么,系统调用和中断调用有什么联系和区别呢?首先它们都是操作系统概念。
中断处理和函数调用中断处理和函数调用是计算机系统中两个重要的概念,它们在程序设计和系统运行中起着不可或缺的作用。
本文将从中断处理和函数调用两个方面,详细介绍它们的概念、原理和应用。
一、中断处理中断是指计算机在执行程序的过程中,由于外部事件(如硬件设备的输入、定时器的触发等)而打断正常的程序流程,转而处理其他任务的一种机制。
中断处理的目的是为了提高系统的响应能力和并发性。
中断处理过程主要包括中断请求、中断响应和中断处理程序三个阶段。
当外部事件发生时,硬件会发出中断请求信号,CPU会立即响应并转移到中断处理程序进行处理。
中断处理程序是一段特殊的代码,用于处理特定的中断事件,并保存和恢复现场。
中断处理的优点是可以提高系统的实时性和响应能力。
通过中断处理,系统可以在处理外部事件的同时,继续执行其他任务,从而实现并发处理。
但中断处理也有一定的开销,因为中断会引起上下文的切换和状态的保存,而且中断处理程序需要占用一定的系统资源。
二、函数调用函数调用是程序设计中常用的一种模块化编程方式。
函数是一段完成特定任务的代码块,通过函数调用可以在程序中重复使用这段代码,提高代码的可读性和重用性。
函数调用的过程主要包括函数调用、参数传递、函数执行和返回值等几个步骤。
当程序执行到函数调用语句时,会跳转到函数的入口地址,并将参数传递给函数。
函数执行完成后,会返回到函数调用的位置,并将返回值传递给调用者。
函数调用的优点是可以将复杂的程序分解成多个小模块,提高代码的可维护性和可测试性。
通过函数调用,可以将不同的功能封装到不同的函数中,便于代码的复用和维护。
但函数调用也会引入一定的开销,因为函数调用需要保存和恢复现场,而且函数调用过程需要消耗一定的时间和空间。
三、中断处理和函数调用的联系和区别中断处理和函数调用在计算机系统中起着不同的作用,但它们也有一些联系和区别。
中断处理和函数调用都是程序执行流程的转移。
中断处理是由外部事件触发,用于打断正常的程序流程,转而处理其他任务。
Linux的中断和系统调⽤esp、eip等寄存器⼀共三篇中断⼀般分为三类:1、由计算机硬件异常或故障引起的中断,称为内部异常中断;2、由程序中执⾏了引起中断的指令⽽造成的中断,称为软中断(这也是和我们将要说明的系统调⽤相关的中断);3、由外部设备请求引起的中断,称为外部中断。
简单来说,对中断的理解就是对⼀些特殊事情的处理。
当发⽣软件中断时,其他所有的中断都可能发⽣并被处理;但当发⽣磁盘中断时,就只有时钟中断和机器错误中断能被处理了。
⽤户态和核⼼态之间的区别是什么呢?(以下区别摘⾄《UNIX操作系统设计》)1、⽤户态的进程能存取它们⾃⼰的指令和数据,但不能存取内核指令和数据(或其他进程的指令和数据)。
然⽽,核⼼态下的进程能够存取内核和⽤户地址2、某些机器指令是特权指令,在⽤户态下执⾏特权指令会引起错误对此要理解的⼀个是,在系统中内核并不是作为⼀个与⽤户进程平⾏的估计的进程的集合,内核是为⽤户进程运⾏的。
内核⾃⼰的栈这在最上层的1G的地址空间内,这是只能由内核访问的部分。
⽤户态:Ring3运⾏于⽤户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在⽤户态下可访问页⾯的虚拟地址,且只能对任务状态段(TSS)中I/O许可位图(I/O Permission Bitmap)中规定的可访问端⼝进⾏直接访问。
内核态:Ring0在处理器的存储保护中,核⼼态,或者特权态(与之相对应的是⽤户态),是操作系统内核所运⾏的模式。
运⾏在该模式的代码,可以⽆限制地对系统存储、外部设备进⾏访问。
⼆、什么情况下会发⽣从⽤户态向内核态切换。
这⾥细分为3种情况。
1、发⽣系统调⽤时这是处于⽤户态的进程主动请求切换到内核态的⼀种⽅式。
⽤户态的进程通过系统调⽤申请使⽤操作系统提供的系统调⽤服务例程来处理任务。
⽽系统调⽤的机制,其核⼼仍是使⽤了操作系统为⽤户特别开发的⼀个中断机制来实现的,即软中断2、产⽣异常时当CPU执⾏运⾏在⽤户态下的程序时,发⽣了某些事先不可知的异常,这时会触发由当前运⾏的进程切换到处理此异常的内核相关的程序中,也就是转到了内核态,如缺页异常。