system calls
========================================
Linux的系统调用是通过软中断swi来实现的从用户态到内核态.
swi
----------------------------------------
用swi #0指令即可触发软中断,并切换到内核态(管理模式)。
https://github.com/novelinux/arch-arm-common/tree/master/swi/README.md
user --> kernel
----------------------------------------
在系统调用通过软中断swi从用户态切换到内核态的压栈过程如下所示:
```
| kernel stack | struct pt_regs
|--------------|-----------------------
| r0 ~ r12 |
| sp_usr | sp
| lr_usr | lr
| lr_svc | pc
| cpsr | cpsr
| r0 |
| |------------------------ <- sp_svc
```
**注意**:
1.lr_svc中是指向swi中断指令的下一条指令.
2.这里r0会存两个位置: 一个代表第一个参数,另一个代表返回值。
### vector_swi
软中断处理函数:
https://github.com/novelinux/linux-4.x.y/tree/master/arch/arm/kernel/entry-common.S/vector_swi.md
### struct pt_regs
https://github.com/novelinux/linux-4.x.y/tree/master/arch/arm/include/asm/ptrace.h/struct_pt_regs.md
sys_call_table
----------------------------------------
系统调用表.
https://github.com/novelinux/linux-4.x.y/tree/master/arch/arm/kernel/entry-common.S/sys_call_table.md
kernel --> user
----------------------------------------
在系统调用从内核态返回到用户态的调用过程如下所示:
```
| kernel stack | struct pt_regs
|--------------|----------------------- <- sp_svc
| r0 ~ r12 | --> r1 ~ r12
| sp_usr | sp --> sp_usr
| lr_usr | lr --> lr_usr
| lr_svc | pc --> lr_svc --> pc
| cpsr | cpsr --> spsr_cxsf
| r0 |
| |------------------------
```
**注意**: ret_fast_syscall不会将r0寄存器值恢复,r0要用来保存返回值.
在从内核态返回到用户态的过程是由ret_fast_syscall来完成的:
### ret_fast_syscall
https://github.com/novelinux/linux-4.x.y/tree/master/arch/arm/kernel/entry-common.S/ret_fast_syscall.md
没有合适的资源?快使用搜索试试~ 我知道了~
linux项目工程资料-Linux系统调用由浅入深.zip
共38个文件
md:24个
pdf:4个
png:2个
需积分: 5 0 下载量 176 浏览量
2024-03-05
16:25:44
上传
评论
收藏 2.62MB ZIP 举报
温馨提示
【无积分此资源可私信博主有偿获取】 Linux项目是一个开放源代码的操作系统项目,由林纳斯·托瓦兹(Linus Torvalds)于1991年首次发布。该项目以Linux内核为核心,围绕其构建了一个完整的操作系统,包括各种系统工具、库、应用程序和硬件支持。 以下是Linux项目的一些主要特点和资料介绍: 开放源代码:Linux项目的所有源代码都是公开的,并允许任何人自由使用和修改。这为开发者提供了极大的灵活性和创新能力,同时也促进了全球范围内的协作和发展。 跨平台性:Linux操作系统可以在多种硬件架构和平台上运行,包括x86、ARM、MIPS等。这使得Linux成为了一种非常灵活的操作系统,适用于各种设备和应用场景。 可定制性:由于Linux的源代码是公开的,用户可以根据自己的需求进行定制和修改。这使得Linux成为了一种非常适合企业级应用的操作系统,可以根据企业的特定需求进行定制和优化。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
资源推荐
资源详情
资源评论
收起资源包目录
Linux系统调用由浅入深.zip (38个子文件)
资料总结
exec
execvp.md 325B
execlp.md 726B
execvpe.md 3KB
execve.md 635B
execve.dot 950B
execv.md 267B
execl.md 663B
execve.png 96KB
README.md 1012B
execle.md 701B
mmap
__mmap2.md 1KB
mmap.md 3KB
fork.md 5KB
pthread
pthread_key.md 4KB
pthread_cond.md 3KB
README.md 2KB
fs
tools
fincore
Android.mk 390B
fincore.c 15KB
test-cases
test-open-write 6KB
test-open-write-fsync 6KB
test-read 10KB
test-open-write-O_SYNC 6KB
read
Linux.Kernel.Read.Procedure.pdf 533KB
read.dot 2KB
read.png 299KB
README.md 396B
open
ext4-open.md 2KB
open.md 2KB
write
Linux.Kernel.Delay.Write.pdf 690KB
mount.md 874B
Linux.Kernel.Write.Procedure.pdf 579KB
ext4-fsync.md 6KB
ext4-write.md 10KB
ext4-jbd2-open-write-fsync_nobarrier_traces.md 44KB
write.md 2KB
ext4-jbd2-open-write-fsync_traces.md 39KB
create_pdf.pdf 632KB
ext4-barrier.md 1KB
共 38 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功