Linux系统调用原理

来源:互联网 发布:bluehost域名跳转 编辑:程序博客网 时间:2024/06/01 09:41

linux系统的系统调用原理

rootfs (用户空间)    |kernel (内核空间)   ---  文件系统 设备驱动  网络协议栈 进程管理  内存管理  平台代码  系统调用 --- 七大子系统    |uboot    |         硬件

Linux系统分为用户空间和内核空间
用户空间的特性:
包含了应用软件, C库,对应的CPU的工作模式为USR模式;不能直接访问硬件设备;
如果进行内存的非法访问,应用程序会崩溃,但是系统不会崩溃! ((int )0 = 0;)
4G虚拟内存,用户空间独占前3G;

内核空间的特性

包含了7大子系统
文件系统,设备驱动,网络协议栈,进程管理,内存管理,平台代码,系统调用
对应的CPU的工作模式为SVC模式;
可以直接对硬件进行访问操作;
如果进行内存的非法访问,操作系统直接崩溃!
(int )0 = 0;
4G虚拟内存,内核空间独占后1G;

 空间的划分的本质目的:实现操作系统的自我保护

用户和内核如何交互 –>通过系统调用

系统调用的实现基本原理是什么

应用程序调用系统调用函数

概念

系统调用号:linux系统给每一个系统调用函数都分配一个唯一的号码,类似人的身份证号;
系统调用表:本质上就是一个大数组,每个元素保存着一个内核函数名(函数地址),数组元素对应的下标就是系统调用号;

1.应用程序调用系统调用函数,首先调用到C库的对应函数的定义地方;
例如read系统调用函数的定义在C库中;

2.调用到C库的函数定义的地方后,将会做如下工作:
    2.1首先保存read函数对应的系统调用号到R7寄存器

    2.2调用svc指令触发软中断异常
     老ARM体系结构:swi
    新ARM体系结构:svc
软中断:实现CPU的工作模式由USR切换到SVC
此时:用户程序由用户空间“陷入”内核空间

3.一旦触发异常,CPU跳转到异常向量表软中断的处理入口,至此进入内核空间

4.进入软中断的处理入口以后,将会做如下事情:
    1.从R7寄存器中取出系统调用号
    2.2.以系统调用号为下标(索引)在系统调用表中找到对应的内核函数sys_read

5.找到对应的内核函数以后,调用这个内核函数,调用完毕,原路返回到用户空间,至此应用程序的read函数调用完毕

这里写图片描述