操作系统为用户提供了两种调用其服务和功能的接口:程序接口和操作接口
1.程序接口又称为应用编程接口(API),供程序员在编制程序时以程序语句或指令的形式调用操作系统的服务和功能。许多操作系统的程序接口由一组系统调用(System Call)组成,用户程序使用“系统调用”即可获得操作系统的底层服务,使用或访问系统中的各种软硬件资源。
系统调用是为了扩充机器功能,增强系统能力,方便用户使用而在内核中建立的过程(函数),它是用户程序或其他系统程序获得操作系统服务的唯一途径,系统调用也称为广义指令
机器指令由硬件实现,广义指令(系统调用)是由操作系统在机器指令基础上实现的过程或子程序,其使用形式与机器指令非常相似,区别在于广义指令由软件过程实现,机器指令由硬件实现。
系统调用采用汇编语言或者C语言来实现。早期操作系统的系统调用使用汇编语言编写。而UNIX新版本,Linux,Windows,OS2等,其系统调用采用C语言编写。
系统调用的分类
1.进程和作业管理
2.文件管理 包括文件的建立,装入,执行,撤销,终止,进程属性的获取和设置等。
3.设备管理 内存的申请个释放
4.内存管理
5.信息维护 日期,时间及系统数据的获取和设置
6.通信 包括通信的建立 。链接和断开,信息的发送和接收。
系统调用的实现原理:
陷入或异常处理机制:在操作系统中,实现系统调用功能的机制称为陷入或异常处理机制。
访管指令(陷入指令或异常终端指令):由于系统调用而引起处理器中断的机器指令称为访管指令
系统调用的实现要点
{ 编写系统调用的处理程序
设计一张系统调用入口地址表,每个入口地址都指向一个系统调用的处理程序。
陷入处理机制需要开辟现场保护区 以保存发生关系调用时的处理器现场。
}
系统调用处理过程
当处理器执行到系统调用指令时,其工作状态由用户态切换到核心态。处理器将由执行用户指令变为执行操作系统指令,即执行系统调用处理程序,该程序的入口地址根据系统调用号从中断向量表中获得。包括用户进程下一条指令地址(即返回地址在内)的处理器现场被保存起来,然后系统调用处理程序开始执行.结束时,通过中断返回指令,用户进程的现场信息被恢复,处理器重返用户进程后续指令执行。
系统调用与过程(函数)调用的区别
1.调用形式不同。函数调用一般调用指令,其转向地址包含在跳转语句中,但系统调用不包含处理程序入口,仅仅提供功能号,按功能号调用。
2.被调用代码的位置不同,在函数调用中,调用程序和被调用代价在同一程序内,经过连接编译后作为目标代码的一部分。当函数升级或修改时,必须重新编译连接。系统调用的处理代码在调用程序之外(在操作系统中),系统调用处理代码升级或修改时与调用程序无关。