Linux操作系统源代码详细分析(三)

http://tech.ddvip.com   2007年03月08日    社区交流

本文详细介绍Linux操作系统源代码详细分析(三)

  进程和内核的交互通常需要通过如下步骤:

  1) 用户应用程序调用系统调用,通常是使用libc。

  2) 该调用被内核的system_call函数截获(第5章,171行),此后该函数会将调用请求转发给另外的执行请求的内核函数。

  3) 该函数随即和相关内部代码模块建立通讯,而这些模块还可能需要和其他的代码模块或者底层硬件通讯。

  4) 结果按照同样的路径依次返回。

  然而,并不是所有内核和进程间的交互都是由进程发起的。内核有时也会自行决定同哪个进程交互,例如通过释放信号或者简单的采用直接杀死进程的方法终止该进程的执行(如当进程用完所有可用的CPU时间片),以便使其他进程有机会运行。这些交互过程在该图中并没有表示,主要是因为它们通常都只是内核对自己的内部数据结构的修改(信号传递对于这种规则来说是一个例外)。

  3.4 Linux 内核的类型

  解决复杂性的所有方法都基于一个基本原理:问题分解和各个击破。也就是说,都是把大型的、难以解决的问题(或系统)分解成一定数量的复杂度较低的子问题(或子系统),再根据需要重复这一过程直到每一部分都小到可以解决为止,而各种方法只是这种原理的一些不同运用而已。

  计算机科学中有三种经典的方法比较适合于构建大型系统(我首先必须说明的是,这些定义都是经过我深思熟虑的讨论对象)。

  1) 层次(Layer)—将解决方案分解成若干部分,在这些部分中存在一个问题域的最底层,它为上层的抽象层次较高的工作提供基础。较高层建立在其低层基础之上。OSI和TCP/IP协议堆栈是众所周知的层次化软件设计的成功的例子。操作系统设计的层次化解决方案可能会包含一个可以直接和硬件通讯的层次,然后在其上提供为更高层提供抽象支持的层次。这样更高层就可以对磁盘、网卡等硬件进行访问,而并不需要了解这些设备的具体细节。

作者:henyuan    责编:豆豆技术应用

正在加载评论...