os之中断,异常,系统调用

计算机系统加载过程:

    bios:基本io系统调用

    disk:os存放在disk上

    bootloader:将os加载到内存中去

  计算机打开电源后,bios对计算机进行基本的检测(比如显卡,声卡,外设等),接着会找到磁盘里的BootLoader程序并执行BootLoader程序,BootLoader会将位于disk的os加载到内存中去;

1.首先中断是外设需要操作系统的支持,从而给出标记,CPU执行到这个标记的时候发现他是一个中断标记,根据这个标记查找到具体的中断服务例程,并执行,处理完以后再回到原来的程序接着执行;

2.异常:是应用程序执行过程中遇到的意想不到的事件,比如除0等,一般发生异常以后,也会一个异常表,根据异常表查找到发生异常之后需要的处理操作,处理结果有两种情况:异常应用程序被杀死,结束执行;异常处理完成,应用程序接着执行(从发生异常的指令开始);

3.系统调用:是应用程序主动调用操作系统的某个接口,让操作系统完成某项操作;一般win32和posix都提供了api供应用程序调用;系统调用最重要的部分牵涉到用户态和核心态的转换,就是应用程序在执行的时候CPU所处的状态是用户态,操作系统程序在执行的时候CPU所处的是核心态;相比较,用户态有一些机器执行没有权限执行;

时间: 2024-10-29 19:25:06

os之中断,异常,系统调用的相关文章

interrupts & exceptions中断异常

中断分为同步和异步: 同步中断是指当指令时由cpu控制单元产生的,因为只有在一条指令终止执行后CPU才会产生中断:我们称为异常 异常由程序错误产生,此时会发送一个信号处理异常,或者由内核必须处理的异常条件产生此时比如缺页或者 对内核服务请求(int 或者 sysenter指令) : 异步中断是指由其他硬件设备和定时器产生的中断信号:我们称为中断 每个进程的thread_info 描述符与thread_union 中内核栈紧邻,如果thread_union 结构大小为8KB.那么当前进程的内核栈被

Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理

我们用慢系统调用来描写叙述那些可能永远阻塞的系统调用(函数调用),如:accept.read等.永远阻塞的系统调用是指调用有可能永远无法返回.多数网络支持函数都属于这一类.比如,假设没有客户连接到server上,则server对accept的调用就没有返回保证.类似的.假设客户从未发送过一行要求server回射的文本.则server对read的调用将永不返回.其它慢系统调用的样例是对管道和终端设备的读写. 有一个例外,就是磁盘IO.他一般都返回调用者. 当一个进程阻塞与慢系统调用时捕获到一个信号

中断的系统调用

早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行.该系统调用返回出错,其errno设置为EINTR.这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用. 在这里,我们必须区分系统调用和函数.当捕捉到某个信号时,被中断的是内核中的执行的系统调用. 为了支持这种特性,将系统调用分成两类:低速系统调用和其他系统调用.低速系统调用是可能会使进程永远阻塞的一类系统调用,

Linux环境编程之信号(二):不可靠信号、中断的系统调用、可重入函数

(一)不可靠信号 对前面说的信号,是不可靠的,不可靠指的是信号可能会丢失:一个信号发生了,但进程却可能一直不知道这一点.另外,进程对信号的控制能力有限,只能捕捉信号或忽略它.有时用户希望通知内核阻塞一个信号:不要忽略它,在其发生时记住它,然后在进程做好准备时再通知它.这种阻塞信号的能力并不具备. 之前的版本中村咋一个问题:在进程每次接到信号对其进行处理时,随即将该信号动作复位为默认值.另一个问题是,在进程不希望某种信号发生时,它不能关闭该信号.进程能做的一切就是忽略该信号. (二)中断的系统调用

Linux中断的系统调用

早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行.该系统调用返回出错,其errno设置为EINTR.这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用. 在这里,我们必须区分系统调用和函数.当捕捉到某个信号时,被中断的是内核中的执行的系统调用. 为了支持这种特性,将系统调用分成两类:低速系统调用和其他系统调用.低速系统调用是可能会使进程永远阻塞的一类系统调用,

Linux的中断和系统调用 & esp、eip等寄存器

http://www.linuxidc.com/Linux/2012-11/74486.htm 一共三篇 中断一般分为三类: 1.由计算机硬件异常或故障引起的中断,称为内部异常中断: 2.由程序中执行了引起中断的指令而造成的中断,称为软中断(这也是和我们将要说明的系统调用相关的中断): 3.由外部设备请求引起的中断,称为外部中断.简单来说,对中断的理解就是对一些特殊事情的处理. 当发生软件中断时,其他所有的中断都可能发生并被处理:但当发生磁盘中断时,就只有时钟中断和机器错误中断能被处理了. 用户

Linux系统的中断、系统调用和调度概述【转】

转自:http://blog.csdn.net/yanlinwang/article/details/8169725 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近学习Linux操作系统,关于中断系统调用和进程的级别总是感觉有些模糊的地方,特在此做个小结,整理下思路. 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序.等这些特殊事情处理完之后再回去执行之前的程序.中断一般分为三类:1.由计算机硬件异常或故障引起的

中断 异常

8086/8088把中断分为内部中断和外部中断两大类. 为了支持多任务和虚拟存储器等功能,80386把外部中断称为“中断”,把内部中断称为“异常”. 与8086/8088一样,80386通常在两条指令之间响应中断或异常. 80386最多处理256种中断或异常. 1.中断 对80386而言,中断是由异步的外部事件引起的. 外部事件及中断响应与正执行 的指令没有关系. 通常,中断用于指示I/O设备的一次操作已完成. 与8086/8088一样,80386有两根引脚INTR和NMI接受外部中断请求信号.

用os&sys模块进行系统调用

系统调用sys模块 sys.argv 命令行参数List,第一元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version   获取python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用pythonpath环境变量的值 sys.platform 返回操作系统平台名称 sys.stdout.write('please') #标准输出,引出进度条的例子, 注:在py3上不行,可以用print代替 val = sys.stdin.r