系统调用
系统调用是操作系统提供给用户的一种服务,程序设计人员在编写程序的时候可以用来请求操作系统的服务。
百度百科的描述:由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。
常见的系统调用包括:文件相关操作、系统控制、进程控制。
内核态和用户态
CPU有两种模式:内核态和用户态,当发生用户程序系统调用时候,从用户进程进入内核态,CPU进入内核态。
用户程序只在用户态下运行,有时需要访问系统核心功能,这时通过系统调用接口使用系统调用。
Linux按照特权等级,把进程的运行空间分为内核空间和用户空间。内核空间具有最高权限,可以直接访问所有资源,用户空间只能访问首先资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。也就是说,进程既可以在用户空间运行,又可以在内核空间中运行。进程在用户空间运行时,被称为进程的用户态,陷入内核空间时,被称为进程的内核态
中断
中断是CPU的一个功能,就是CPU停下当前的工作,保留现场后自动地转去执行相应的处理程序,CPU控制权发生改变。处理完该事件后再返回断点继续执行被刚才被打断的程序。
中断分为软中断和硬中断
软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和“信号”类似。同时,软中断又是和硬中断相对应的,“硬中断是外部设备对CPU的中断”,“软中断通常是硬件中断服务程序对内核的中断”
作为系统调用而言,对于i386则是通过软中断int80实现
对于其它的软中断,则是在硬件中断之后触发的软中断!
第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。
第二类是来自CPU的内部事件或程序执行中的事件引起的 过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、
程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。
第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、
被动的,而陷入是有意和主动的。
第一类(中断)+第二类(异常)= 中断
第三类(系统调用)= 系统调用
上下文切换
CPU上下文分为:中断上下文、进程上下文、线程上下文