Linux测试基础-Linux内核剖析
2009-10-12 10:38
225 查看
牛津字典中对"kernel"一词的定义是:"较软的、通常是一个坚果可食用的部分。"当然还有第二种定义:"某个东西核心或者最重要的部分。"对Linux来说,它的Kernel无疑属于第二种解释。让我们来看看这个重要的东西是如何工作的,先从一点理论说起。
广义地来说kernel就是一个软件,它在硬件和运行在计算机上的应用程序之间提供了一个层。严格点从计算机科学的角度来说,Linux中的Kernel指的是Linus Torvalds在90年代初期写的那点代码。
所有的你在Linux各版本中看到的其他东西--Bash shell、KDE窗口管理器、web浏览器、X服务器、Tux Racer以及所有的其他,都不过是运行在Linux上的应用而已,而不是操作系统自身的一部分。为了给大家一个更加直观的感觉,我来举个例子,比如RHEL5的安装大概要占据2.5GB的硬盘空间(具体多大当然视你的选择安装来定),在这其中,kernel以及它的各个模块组件,只有47MB,所占比例约为2%。
在kernel内部
那么kernel到底是如何工作的呢?如下面的图表。Kernel通过许多的进入端口也就是我们从技术角度所说的系统调用,来使得运行在它上面的应用程序可用。Kernel使用的系统调用比如"读"和"写"来提供你硬件的抽象(abstraction)。
详细<图>:http://www.51qa.net/Category_32/Index.aspx
从程序员的视角来看,这些看起来只是普通的功能调用,然而实际上系统调用在处理器的操作模式上,从用户空间到Kernel空间有一个明显的切换。同时,系统调用提供了一个"Linux虚拟机",可以被认为是对硬件的抽象。
Kernel提供的更明显的抽象之一是文件系统。举例来说,这里有一段短的程序是用C写的,它打开了一个文件并将内容拷贝到标准的输出:
#include <fcntl.h>
int main()
{
int fd, count; char buf[1000];
fd=open("mydata", O_RDONLY);
count = read(fd, buf, 1000);
write(1, buf, count);
close(fd);
}
在这里,你可以看到四个系统调用的例子:打开、读、写和关闭。不谈这段程序语法的细节,重点是:通过这些系统调用Linux Kernel提供了一个文件的"错觉",而实际上它不过是一堆数据有了个名字,这样一来你就不必去与硬件底层的堆栈、分区、头和指针、分区等交涉了,而是直接以例子中的方式与硬件"交流",这也就是我们所说的抽象(abstraction),将底层的东西以更易懂的方式表达出来。
相关文章推荐
- Linux内核基础--事件通知链(notifier chain)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】深入剖析Linux中断机制之三--Linux对异常和中断的处理
- 剖析SQL Server 2005查询通知之基础篇
- ucos在s3c2410上运行过程整体剖析之基础知识--关于ADS编译、链接器
- linux内核剖析
- [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析
- ucos在s3c2410上运行过程整体剖析之基础知识-与UCOS运行有关的ARM9芯片知识--续
- WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)
- 剖析开源云和基础架构技术(1)
- VS2005数据存取层深入剖析之基础篇
- 构建源码树----Linux内核剖析(三)
- 和菜鸟一起学linux内核源码之基础准备篇
- 深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(3)
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(4)
- Android多线程研究(1)——线程基础及源码剖析
- linux内核完全剖析0.12笔记--第一章,概述
- 《Linux内核完全剖析——基于0.12内核》第3章P31 引导扇区源代码boot.s
- 黑马程序员-iOS基础-C语言基础(四)内存剖析、数组、字符串
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 【Java基础】--深入剖析基础语法