系统调用和程序接口

1、系统调用

系统调用是操作系统内核用户态运行程序之间的接口,它把用户程序的请求传送至内核,调用相应的内核函数完成所需的处理,将处理结果返回给用户程序。

系统中各种共享资源都由操作系统统一管理,因此在操作系统的外层软件或用户程序中,凡是与资源有关的操作(如存储分配、I/O等)都必须通过系统调用的方式向操作系统提出服务请求,并由操作系统代为完成,所以系统调用是用户程序获得操作系统服务的唯一途径。

---- 操作系统提供的系统调用很多,按功能分为:

进程和作业管理文件操作设备管理内存管理信息维护进程通信系统调用六大类。

---- 操作系统实现系统调用功能的机制称为陷阱异常处理器机制。

由于系统调用而引起处理器中断机器指令称为访管指令、自陷指令或中断指令

其中,访管指令为非特权指令,在用户态下执行时会将CPU转换为内核态。

--------  系统调用的实现要点

---- 1)编写系统调用处理内核函数

---- 2)设计一张系统调用入口地址表,每个入口地址都指向一个系统调用的处理内核函数,有的系统还包含系统调用自带参数的个数;

---- 3)陷阱处理器机制需开辟现场保护区,以保存发生系统调用时的处理器现场。

2、程序接口

尽管应用程序可以直接使用系统调用完成相关的功能,但系统调用的参数复杂,使用困难,所以操作系统通常提供了相应的程序接口,如UNIX/Linux在标准C函数库中为每个系统调用构造一个同名的封装函数,由它来屏蔽下层的复杂性,负责把操作系统的服务接口即系统调用封装成应用程序能够直接使用的API. API(Application Programming Interface)应用程序接口:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

---- 应用程序采用标准C调用序列来调用封装函数,封装函数又按系统所要求的形式和方法传递参数,执行访管指令,调用内核相应的内核函数。

---- 一个库函数(封装函数)就是一种API,它介于应用程序和操作系统之间。API是一个函数定义,说明如何获得一个给定的服务。一个API的实现可能会用到一个或多个系统调用,此时库函数调用系统调用完成其部分工作(如fprintf())库函数也可能与系统调用无关(如strcpy()).

---- 库函数与系统调用的联系和差别如下:

1)从应用程序使用角度来看,库函数与系统调用没有差别。从实现的角度来看,两者有重大区别。

2)使用库函数的好处是隐藏访管指令细节,使系统调用更像函数调用。对用户隐蔽系统调用,使得在改动内核时,不影响应用程序的正确性。

3)库函数属于应用程序,在用户态运行,系统调用属于系统程序,在内核态运行。

4)如果需要的话,用户可以替换库函数,但是通常不能替换系统调用。

  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 系统调用源程序的逻辑结构可以分为以下几个部分: 1. 引入头文件:包含系统调用所需的头文件,例如stdio.h、unistd.h等。 2. 定义变量:定义需要使用的变量,例如文件描述符、缓冲区等。 3. 调用系统调用函数:使用系统调用函数进行对应的操作,例如读写文件、创建进程等。 4. 错误处理:判断系统调用函数是否执行成功,并进行相应的错误处理。 5. 关闭文件描述符等资源:在使用完毕后,需要及时释放资源,例如关闭文件描述符、释放内存等。 6. 返回值:根据需要返回相应的值,例如读取的字节数、进程ID等。 总体上来说,系统调用源程序的逻辑结构与普通的C语言程序类似,只不过需要使用特定的系统调用函数来进行系统级别的操作。 ### 回答2: 系统调用源程序逻辑结构是指系统调用的源代码的组织结构和执行流程。通常,系统调用源程序逻辑结构包含以下几个部分: 1. 函数声明:系统调用的源程序通常会先声明所使用的函数,包括系统调用函数本身和一些辅助函数。函数声明一般位于源代码的开头部分,它定义了函数名、参数和返回值的类型,并指明了函数所在的库或模块。 2. 主函数:在系统调用的源程序中,主函数是程序的入口,它负责调用其他函数或模块,协调各个部分并实现系统调用的逻辑。主函数可能包含一些初始化操作,如获取用户输入、设置变量等,然后根据用户的需求选择合适的系统调用函数进行调用。 3. 系统调用函数:系统调用源程序的核心是系统调用函数。系统调用函数封装了底层的系统调用接口,通过调用操作系统提供的系统调用功能来实现相应的功能。系统调用函数一般接受用户传递的参数,并通过特定的系统调用号将控制权交给操作系统内核,由内核来完成系统级的操作。系统调用函数可能需要进行一些错误处理和结果返回的处理。 4. 辅助函数:辅助函数在系统调用源程序中起到支持和辅助系统调用函数的作用。辅助函数可以是一些宏定义、工具函数或其他模块的函数。它们用于实现与系统调用相关的操作,以提供更加方便和高效的功能。 在系统调用源程序的逻辑结构中,这些部分相互配合、协调工作,根据系统调用功能和需求,通过函数间的调用和数据的传递等方式,实现了系统调用的功能和效果。这些源程序的逻辑结构能够满足用户的需求,提供稳定可靠的系统调用功能。 ### 回答3: 系统调用源程序逻辑结构指的是系统调用所使用的源代码的组织结构和执行流程。 系统调用源程序逻辑结构通常包含以下几个关键部分: 1. 函数声明和系统调用号:首先需要声明系统调用函数,通常会定义一个函数原型或者声明一个函数指针,以及对应的系统调用号。系统调用号是唯一标识一个系统调用的整数,用来告知系统调用的类型。 2. 参数的传递:系统调用通常需要参数来指定操作的对象或其他必要的信息。在系统调用源程序中,需要使用合适的方式将参数传递给系统调用函数。通常可以使用寄存器或堆栈等方式进行参数传递。 3. 系统调用的执行:在调用系统调用函数之前,需要将系统调用号和参数传递给操作系统内核。操作系统会根据系统调用号找到对应的系统调用函数,并执行相应的操作。系统调用函数执行完毕之后,返回相应的结果给用户程序。 4. 错误处理:在系统调用执行过程中,可能会发生错误。在源程序中,需要对错误进行处理,通常通过检查返回值或设置全局错误变量来判断是否发生错误,并采取相应的措施进行处理。 总体来说,系统调用源程序的逻辑结构包括函数声明和系统调用号、参数传递、系统调用的执行以及错误处理等部分。通过合理组织和编写这些部分,可以实现对操作系统提供的不同功能的调用和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值