需要走的路还很长呀。。。。
分类: LINUX
2013-08-22 19:11:19
Linux 系统调用是内核提供给用户态程序使用的一组函数接口。通过系统调用,用户态程序可以使用内核提供的服务。系统调用在X86体系结构中通过软中断0X80陷入内核,在内核中通过系统调用对应的系统调用服务例程实现。
Linux下每个进程都有4GB的虚拟空间, 但这4GB的空间分成两部分: 0~3GB部分称为用户空间,它是用户进程的私有空间; 3~4GB成为内核空间, 由所有进程及内核共享使用。
Linux系统调用可分成三个部分:接口函数、系统调用处理函数、系统调用服务例程。接口函数是提供给用户态的应用程序接口, 一般以C形式的库函数给出。系统调用服务例程是Linux内核中设置的用于实现系统调用的功能的子程序,它是系统调用在内核中的具体实现。每个系统调用在内核中都有自己唯一对应的系统调用服务例程,而系统调用处理函数用于衔接用户态的系统调用接口和内核态的系统调用服务例程的,使系统调用通过0x80号软中断找到自己的对应的内核服务例程。挂起用户进程、将接口函数转到内核态并找到自己的服务例程、把内核的服务例程执行结果返回给用户态进程 这些都是系统调用服务程序要做的工作。
Linux系统中每个系统调用都有一个系统调用号,在linux-3.5.4内核中,可以通过文件/linux/arch/x86/syacalls/syscall_32.tbl查看系统调用号。系统调用号也是系统调用表的下标。系统调用表是一个函数指针数组,每个函数指针指向其系统调用对应的函数调用服务例程,这样通过系统调用号可以找到其对应的内核服务例程。向系统中添加一个自己的系统调用的步骤可简单分为:(1)添加系统调用好(2)在系统调用表中添加相应的表项(3)实现自己的系统调用服务例程(5)编译安装内核。
一个Linux系统有多少个系统调用,可在文件/linux/arch/x86/syacalls/syscall_32.tbl(我自己是在linux-3.5.4内核源码中查看的,不同版本源码可能路径有些区别)文件中查看。Linux系统调用按照功能用途可以大致分为以下几类: