[C 语言笔记--Day12] system call 的执行步骤

为什麽需要 system call

因为有些行为是很危险的,

所以 C 以提供 C library 的方式来让写程序的人可以做到一些较高权限的事情

不过也并非所有的 library 内容都是为了提供 system call

1. 呼叫 function

步骤一为,一个程序执行到了 wrapper function
( C library 中,会需要执行 system call 的 funciton )

2. 传递 arguments

在 wrapper 传递到 system call 之前,必须要把资料给放到特定的 register 里

3. 指定要哪一个 system call 的方式

以 x86-32 为例,wrapper function 先把 register %eax

放入 system call 的编号,这样真的要执行 system call

的时候就知道要用哪一个 system call 了

4. the trap instruction

trap 是一个 x86-32 的 instruction,执行完这个 instruction 後

就会开始真的执行 system call 的内容了

5. 真的执行 system call 的内容

a) 把 register 存放到 kernel stack 中(跟一般的 function 对待 callee-saved register 一样)

b) 检查 system call 的编号(先前被 wrapper function 放在 %eax 中)

c) 根据 system call 的编号,执行相对应的行为

d) 复元 register 的值,对应於步骤 a)

e) return 回 wrapper function

6. 回传值

如果执行的过程有出错, wrapper function 会把 global variable errno set 好,

wrapper function return 回去

参考资料

The Linux Programming Interface: A Linux and UNIX System Programming Handbook


<<:  【Day08】for 回圈在硬体的使用及该注意的那些事

>>:  予焦啦!Ethanol 记忆体映像规划

Day9 - 2D渲染环境基础篇 V[Canvas动画概论] - 成为Canvas Ninja ~ 理解2D渲染的精髓

OK, 我们终於来到了基础篇最後的部分,也就是Canvas动画~!(撒花) 在这个部分,我们会介绍:...

【Day 30】情境模拟:专案协作,我都交设计稿啦 ! Delay 跟我有关系 !?

专案协作常见问题:我都交设计稿啦 ! Delay 跟我有什麽关系 !? 专案协作中,最常碰到的问题就...

.NET、托管代码(managed code)、反射

托管代码(managed code) 微软特定用语 简单来说 managed code 就是由一个 ...

Urban Kitchen 名厨都汇自助餐厅 #万豪酒店 #澳门银河渡假村 Galaxy Macau

因为朋友说,澳门很值得去看看,所以我就冲了~ 2016年,我有一位很要好的「酒肉朋友」(就是在「韩乡...

Day6:最邻近点规则(k-Nearest Neighbor,KNN

  最邻近点规则(以下简称为KNN,因为每个人对此的中文称呼不一样)是在一个地方上有很多个点,将所有...