欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux内核学习(2)-系统调用

程序员文章站 2022-05-09 21:24:41
...

1. 概念

系统调用是内核空间和用户空间的中间层。有如下作用:
Linux内核学习(2)-系统调用

  • 为用户空间程序提供一层硬件抽象接口
  • 保证系统稳定和安全
  • 可移植性

2.系统调用表

  • Linux的每一个系统调用都存在一个系统调用号,一旦分配不可更改。
  • 对于ARM32定义在arch/arm/include/uapi/asm/unistd.h文件中:
/*
 * This file contains the system call numbers.
 */

#define __NR_restart_syscall            (__NR_SYSCALL_BASE+  0)
#define __NR_exit                       (__NR_SYSCALL_BASE+  1)
#define __NR_fork                       (__NR_SYSCALL_BASE+  2)
#define __NR_read                       (__NR_SYSCALL_BASE+  3)
#define __NR_write                      (__NR_SYSCALL_BASE+  4)
#define __NR_open                       (__NR_SYSCALL_BASE+  5)
#define __NR_close                      (__NR_SYSCALL_BASE+  6)
                                        /* 7 was sys_waitpid */
#define __NR_creat                      (__NR_SYSCALL_BASE+  8)
#define __NR_link                       (__NR_SYSCALL_BASE+  9)
#define __NR_unlink                     (__NR_SYSCALL_BASE+ 10)
#define __NR_execve                     (__NR_SYSCALL_BASE+ 11)
#define __NR_chdir                      (__NR_SYSCALL_BASE+ 12)
#define __NR_time                       (__NR_SYSCALL_BASE+ 13)
#define __NR_mknod                      (__NR_SYSCALL_BASE+ 14)
#define __NR_chmod                      (__NR_SYSCALL_BASE+ 15)
#define __NR_lchown                     (__NR_SYSCALL_BASE+ 16)

3.用程序访问系统调用和新增系统调用

  • 通常应用程序不会直接访问系统调用,而是通过C标准库来访问系统调用
  • 不提倡新增系统调用,会降低可移植性,且需要在linux和glibc社区进行讨论和沟通