被调用代码的位置:
过程(函数) 调用是一种静态调用,程序和被调代 码在同一程序内,经过连接编辑后作为目标代码 的一部份;当过程(函数) 升级或修改时,必须重 新编译连结 系统调用是一种动态调用,系统调用的处理代码 在调用程序之外(在操作系统中) ,系统调用处理 代码升级或修改时,与调用程序无关
20.07.2021
系统调用与过程(函数) 调用的区别
提供方式:
过程(函数) 往往由编译系统提供,不同编译系统 提供的过程(函数) 可以不同 系统调用由操作系统提供,一旦操作系统设计好, 系统调用的功能、种类与数量便固定不变了
调用的实现:
程序使用一般机器指令转子指令来调用过程(函 数) ,是在用户态运行的 程序执行系统调用,是通过中断机构来实现,需要 从用户态转变到核心态,在管理状态下运行
20.07.2021
传递参数的一种方法
X: 参数 LOAD AddR X System Call 8
X 寄存器
操作系统
取参数X
系统调用8 的处理程序
20.07.2021
系统调用与过程(函数) 调用的区别
调用形式:
过程(函数) 使用一般调用指令,其转向地址是固 定不变的,包含在跳转语句中 系统调用中不包含处理程序入口,而仅仅提供功 能号,按功能号调用
20.07.2021
Linux系统调用
Linux有170个系统调用,其系统调用的组成:
核心函数:运行在核心态,是实现系统调用功能的 (内核)代码,作为操作系统的核心驻留在内存中, 是一种共享代码,用C语言书写。它运行在核心态, 数据也存放在内核空间,通常它不能使用系统调用, 也不能使用应用程序可用的库函数 接口函数:是提供给应用程序的API,以库函数形 式存在Linux的lib.a中,该库中存放了所有系统调 用的接口函数的目标代码,用汇编语言书写。其主 要功能是把:系统调用号、入口参数地址传送给相 应的核心函数,并使用户态下运行的应用程序陷入 核心态