操作系统为用户提供的接口体现在:
一是为用户提供的各种命令控制界面接口(菜单、命令行、图形界面、作业控制语言等),用户可利用这些操作命令来组织和控制作业的执行或管理计算机系统;
二是操作系统为用户提供的系统调用(程序接口),用户可以在源程序一级使用这些系统调用,请求操作系统提供的服务(如,请求使用各种外部设备进行信息传输、向系统申请资源等)
为了保护系统程序不被应用程序有意或无意地破坏,为计算机设置了两种状态:
系统态(管态、内核态或核心态)、用户态(目态)。
操作系统在系统态运行,而应用程序只能在用户态运行。当应用程序中需要操作系统提供服务时,如请求 I/O 资源或执行 I/O 操作,应用程序必须使用系统调用命令。由操作系统捕获到命令后,便将 CPU 的状态从用户态转换到系统态,然后执行操作系统中相应的子程序,完成所需的功能。执行完成后,系统又将 CPU 状态从系统态转换到用户态,再继续执行应用程序。
系统调用是操作系统提供给编程人员的唯一接口,编程人员利用系统调用,在源程序一级动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作。因此,系统调用像一个黑箱子,对用户屏蔽了操作系统的具体动作而只提供操作有关的功能
系统调用的实现要点
(1)编写系统调用处理程序
(2)设计一张系统调用入口地址表,每个入口地址都指向一个系统调用的处理程序
(3)陷阱(trap或称陷入)处理机制,将陷阱指令中所包含的指令号与该入口地址表对应起来(4)需开辟现场保护区,以保存发生系统调用时的处理器现场
中断(Interruption)也称外中断,是指来自CPU执行指令外部的事件,通常用于信息输入/ 输出,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成。
异常(Exception)也称内中断,是指来自CPU执行 指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事 件。异常不能被屏蔽,一旦岀现,就应立即处理。
异常可分为故障、自陷。故障(Fault)通常是由指令执行引起的异常,如非法操作码、 缺页故障、除数为0、运算溢出等。系统调用是一种自陷(Trap),是一种事先安排的“异常”事件,用于在用户态下调用操作系统内核程序。
库函数是语言或应用程序的一部分,可以运行在用户空间中。系统调用是操作系统的一部分,是内核提供给用户的程序接口,运行在内核空间中,库函数可以理解为是对系统调用的一层封装。
系统调用和普通函数调用的区别:
(1)运行状态不同
系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。
(2)调用方法不同
系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。 ?
(3)返回问题
在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。