@[TOC]
1.什么是系统调用,有何作用?
操作系统作为用户和计算机之间的接口,需要向上层提供一些简单易用的服务,主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。应用程序可以通过系统调用来请求获得操作系统内核的服务。
2.系统调用和库函数的区别
C语言库函数有些就会执行系统调用,C语言将系统调用封装成库函数,以隐藏系统调用的一些细节,是程序员编程更加方便。
应用程序可以直接进行系统调用,也可以使用库函数。
并不是所有的库函数都会进行系统调用,比如”取最大值“就不会有系统调用,而”创建一个新文件“函数就回进行系统调用。
:question: 为什么系统调用是必须的?
这里如果两台打印机并发执行的话,那么打印出来的一定会很乱。所以不能这两个程序都同时使用打印机。
如何解决:操作系统内核对共享资源进行统一管理,并向上提供”系统调用“,用户进程想要使用打印机这种资源,只能通过系统调用向操作系统内核发出请求,内核对各个请求进行协调处理。 如果打印机已经被使用了,那么其他程序要想使用打印机就只能等待。
3.什么功能要用到系统调用
凡是和共享资源有关的操作(如存储分配、I/O操作,文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成,这样可以保证系统的稳定性和安全性,防止用户进行非法操作。也就是说只要是很重要的东西都需要由操作系统内核来完成,所以就需要通过系统调用。
4.系统调用的过程
一个程序想要使用系统调用的话会先将一些要执行系统调用的类型和参数存放入寄存器中,然后执行“陷入指令”,随后转入内核态,这里会有一个系统调用入口程序,根据寄存器中的参数判断用户需要那种系统调用服务。随后在转入那种系统调用的处理程序。
简单来说就是:
- 存参数
- 变态
- 取参数
- 调入程序
- 变回去
细节
总结