linux内核,用户态,系统调用

接下来我们来详细的介绍一下linux文件的IO细节

废话不多说 先来一张图 看看

 

错了   再来

一.要想 了解文件IO的具体细节我们就要先了解什么是用户空间,什么是内核空间,什么是系统调用

我们来看看图

1)内核空间  - 存放的是整个内核代码和所有内核模块,以及内核所维护的数据。

2)用户空间  - 用户程序的代码和数据。

3)系统调用 (一幅图就行了)

我们在来文字叙述一下

系统调用可被看成一个用户空间于内核空间交互的一个接口,好比一个信使,把进程的请求传给内核,待内核把请求得事情处理之后,在把结果返回给用户空间。

先说好 这个 open是 glibc库得函数 并不是系统调用。它是通过 软件中断来实现得系统调用然后把心痛调用得编号传给内核,内核有一个系统调用表,通过下标访问 调用真正得系统调用(本质就是 用户中断内核空间,这里得延申就是 linux得信号机制,信号是内核中断用户空间)。

4)这里我们抛出一个问题:为什么要设置系统调用

1)把用户从底层的硬件编程中解放出来     与具体的硬件完全隔离,用户不需要面向具体的硬件编码,降低了开发的复杂性和难度。

2)极大的提高了系统的安全性      将用户进程隔离实现内核“保护”,用户进程不允许访问内核数据,也无法使用内核函数。用户访问内核的路径是事先规定好的,只能从规定位置进入内核,而不准许肆意跳入内核。

3)有了这样的陷入内核的统一访问路径限制才能保证内核安全无误。 使用户程序具有可移植性      不同平台不同硬件。

弄清楚这个然后 我们在来下一步的介绍,上面说到了 系统调用是通过软件中断实现得,传入一个系统调用号给内核,那具体得过程是什么样子的呢?

1. 在进程的内核态堆栈中保存大多数寄存器的内容(即保存恢复进程到用户态执行所需要的上下文)

2. 根据用户态传递的系统调用号,确定系统调用的执行程序

3. 调用相应的执行程序来处理系统调用

4. 从系统调用返回

今天就介绍到这里 接下来 还有很多非常有意思的文章

猜你喜欢

转载自blog.csdn.net/qq_44065088/article/details/108421298