Linux内核介绍

                           Linux内核介绍

严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。所以,Linux真正的全名也可以叫做:GNU/Linux

Linux是一个一体化内核(monolithic kernel)系统。“内核”指的是一个提供硬件抽象层磁盘及文件系统控制多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。设备驱动程序可以完全访问硬件。Linux内核的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。

Linux内核的版本

Linux内核使用三种不同的版本编号方式。
  第一种方式用于1.0版本之前(包括1.0)。第一个版本是0.01,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。

第二种方式用于1.0之后到2.6,数字由三部分“A.B.C”,A代表主版本号,B代表次主版本号,C代表较小的末版本号。只有在内核发生很大变化时(历史上只发生过两次,1994年的1.0,1996年的2.0),A才变化。可以通过数字B来判断Linux是否稳定,偶数的B代表稳定版,奇数的B代表开发版。C代表一些bug修复,安全更新,新特性和驱动的次数。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。

第三种方式从2004年2.6.0版本开始,使用一种“time-based”的方式。3.0版本之前,是一种“A.B.C.D”的格式。七年里,前两个数字A.B即“2.6”保持不变,C随着新版本的发布而增加,D代表一些bug修复,安全更新,添加新特性和驱动的次数。3.0版本之后是“A.B.C”格式,B随着新版本的发布而增加,C代表一些bug修复,安全更新,新特性和驱动的次数。第三种方式中不再使用偶数代表稳定版,奇数代表开发版这样的命名方式。举个例子:3.7.0代表的不是开发版,而是稳定版!

1.1内核的功能

Linux内核的主要模块(或组件)分以下几个部分:内存管理、进程管理、文件系统、设备管理和驱动、网络通信,系统调用等。

具体可以查看下图,我觉得大致上应该将内核的功能全都描述出来了。现在,我们分别介绍下:

              blob.png                                 

系统调用接口

系统调用就是一种特殊的接口。通过这个接口,用户可以访问内核空间。系统调用规定了用户进程进入内核的具体位置。具体步骤:

用户进程–>系统调用–>内核–>返回用户空间。

系统调用就是为了解决上述问题而引入的,是提供给用户的“特殊接口”。系统调用规定用户进程进入内核空间的具体位置。

1.程序运行空间从用户空间进入内核空间。

2. 处理完后再返回用户空间。

所以我们大致可以知道,系统功能调用是操作系统提供给程序设计人员的一种服务。程序设计人员在编写程序时,可以利用系统调用来请求操作系统的服务。而且通过观察上图我们也知道,调用系统调用接口进程需要从用户形态切换到内核形态,那么进程之间想内核申请功能。而调用API接口进程则不需要切换形态,一直处于用户层,用户无须和内核打交道。

进程管理

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。在大多数系统中,需要运行的进程数是多于可以运行它们的CPU 个数的。传统系统在一个时刻只能执行一个程序,而先进的多核处理器同时能够执行多个程序。无论是在单核还是多核系统中,一个CPU看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上下文切换。(相对于进程而言,上下文就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。)

所以我们可以这样理解,系统将CPU分成了多个时间片,并且将这些时间片分配给进程使用。这就让进程觉得自己在一个人使用着CPU资源。 如果进程在CPU分配的时间内还没有完成任务,那么此任务就会暂停下来,等下CPU下一个周期的时间片的分配。

内存管理

这里就提一个虚拟地址空间的概念吧。虚拟存储器是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间。这样做的好处就是:

进程与进程之间,进程与内核之间互相独立,即进程不能修改内核的数据,也不能修改其它进程的数据。

文件管理

虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在系统调用接口和内核所支持的文件系统之间提供了一个交换层。

VFS 在用户和文件系统之间提供了一个交换层,在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。

文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

       这里我们到后面还会讲述,现在有个概念就行。

网络功能

至于网络功能,我们这样理解:内核以用户进程的的名义来收发数据包,所以主机与主机之间的通信我们可以理解为进程与进程之间的通信

1.2 Linux的哲学思想

说到这里,我们来说一下Linux的哲学思想:

Linux的哲学思想:

    1、一切皆文件:把几乎所有资源统统抽象为文件形式;包括硬件设备,甚至通信接口等;

    2、 由众多功能单一的程序组成;一个程序只做一件事,并且做好;

           组合小程序完成复杂任务;

    3、尽量避免跟用户交互;

           目标:易于以编程的方式实现自动化任务;

    4、使用文本文件保存配置信息;

至于这四点,我们可以先记着,当然,要是理解了它们的含义会更好,但是不理解也没关系,相信日后学完再回过头,我们迟早会理解的。

那么我们说Linux一切皆文件,这里问题来了,什么是文件?

文件就是字节序列,仅此而已。每个I/O 设备,包括磁盘、键盘、显示器,甚至网络,都可以视为文件。系统中的所有输入输出都是通过使用一小组称为Unix I/O 的系统函数调用读写文件来实现的。

另外,我们要知道的是,抽象这个概念在计算机系统中尤为重要:例如,我们谈到程序员在进行程序开发的时候,需要通过系统调用去实现某种功能,这种调用过于底层,而是程序的移植性也非常难。于是我们把这个接口抽象化,使用API接口来进行程序开发,这样程序员需要某种功能时直接调用API中的共享库就行,而不需要通过系统调用去重新编写这个功能。再比如,文件则是对I/O设备的抽象,用户应用程序与操作系统进行交互的方式取决于系统是如何有效的组织块设备上的文件的,故而为什么需要文件系统来管理文件;另外,进程是资源分配的基本单位,它有属于自己的虚拟地址空间,而虚拟地址空间则可以看作是对程序存储的抽象

这里我们就大概了解一下,日后的学习相信还会更加深入的去理解学习。

1.3 Linux的发行版本

我们知道,linux负责开发的linux内核是由高级语言编写的源代码,并没有进行编译转换成计算机所识别的二进制文件,所以这就造成了一般用户的使用困难。为了让使用者能够接触到linux,发行商或非营利团体就将linux内核和已经编译好的二进制文件打包。再加上自己具有创意的工具程序。成为一个发行版。所以不同发行版,他们的内核是一样的所以功能上可以说是大同小易。但是他们的程序包管理器可能不一样。

那我们大致来说一下,一般来说,由发行商编译好的应用程序,应该包括:

1.  二进制程序

2.  配置文件

3.  库文件

4.  帮助文档

这些文件通过程序包管理器所管理,比如安装程序的时候,程序包管理器会将这四个文件分别放在他们应该呆的地方,删除文件的时候的时候,又能从不同位置一一删除。当然,后续我们会介绍的更详细,这里有个概念就好。

目前,市场上三大主流的Linux发现版:Debian、Slackware、RedHat。下面我们来描述一下。

Debian

广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Debian项目众多内核分支中以Linux宏内核为主,而且 Debian开发者所创建的操作系统中绝大部分基础工具来自于GNU工程 ,所以“Debian” 常指Debian GNU/Linux。blob.png

Ubuntu

Ubuntu是基于Debian的二次衍生版。Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统,基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统

blob.png





Mint

Linux Mint由Linux Mint Team团队于2006年开始发行,是一份基于Ubuntu的二次衍生Linux发行版。其目标是提供一种更完整的即刻可用体验,这包括提供浏览器插件、多媒体编解码器、对DVD播放的支持、Java和其他组件,它也增加了一套定制桌面及各种菜单,一些独特的配置工具,以及一份基于web的软件包安装界面。Linux Mint是对用户友好而功能强大的操作系统。它诞生的目的是为家庭用户和企业提供一个免费的,易用的,舒适而优雅的桌面操作系统。

blob.png





Knoppix      

KNOPPIX是基于Debian的二次衍生版,不必安装,直接可以在硬盘上使用,它既可以用来当桌面工作站使用,也可以用来当网络服务主机。KNOPPIX是使用特殊的压缩技术,将约2GB的文件压缩在一片700MB的光盘上,另外透过一支内附的小程式,还可以将光盘上的系统安装到硬盘中。KNOPPIX在2000年时初步完成,今年是第三版,可以从网络上下载ISO档自行烧录成光盘,并且允许自由散布与修改。

blob.png







Slackware

Slackware Linux是由Patrick Volkerding开发的GNU/Linux发行版。与很多其他的发行版不同,它坚持KISS(Keep It Simple Stupid)的原则。一开始,配置系统会有一些困难,但是更有经验的用户会喜欢这种方式的透明性和灵活性。 Slackware 很多特性体现出了KISS原则,最为有名的一些例子就是不依赖图形界面的文本化系统配置、传统的服务管理方式和不解决依赖的包管理方式。它的最大特点就是安装灵活,目录结构严谨,版本力求稳定而非追新。Slackware的软件包都是通常的tgz(tar/gzip) 或者txz(xz) 格式文件再加上安装脚本。Tgz/Txz 对于有经验的用户来说,比RPM更为灵活,并避免了APT 之类管理器可能带来的的依赖地狱。那么要知道的是基于Slackware的二次衍生版有:SUSE。这里如有需要了解,请上网查阅相关资料。

blob.png





RedHat

Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商。总部位于美国北卡罗来纳州的罗利市,截止2015年3月3日,共有80多个分公司。红帽公司为诸多重要IT技术如操作系统、存储、中间件、虚拟化和云计算提供关键任务的软件与服务。红帽的开放源码模式提供跨物理、虚拟和云端环境的企业运算解决方案,以帮助企业降低成本并提升效能、稳定性与安全性。红帽公司同时也为全球客户或通过领先合作伙伴为客户提供技术支持、培训和咨询服务。

blob.png

CentOS

CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件

blob.png






Fedora

Fedora 被红帽公司定位为新技术的实验场,与 Red Hat Enterprise Linux 被定位为稳定性优先不同。许多新的技术都会在 Fedora Core 中检验,如果稳定的话红帽公司则会考虑 加入 Red Hat Enterprise Linux 中。Fedora 预计每年发布 2 次发行版本

blob.png






Gentoo

Gentoo是一个基于Linux的自由操作系统,它能为几乎任何应用程序或需求自动地作出优化和定制。追求极限的配置、性能,以及顶尖的用户和开发者社区,都是Gentoo体验的标志特点。 Gentoo的哲学是自由和选择。得益于一种称为Portage的技术,Gentoo能成为理想的安全服务器、开发工作站、专业桌面、游戏系统、嵌入式解决方案或者别的东西——你想让它成为什么,它就可以成为什么。

blob.png






      

ArchLinux

Arch Linux是起源于加拿大的一份致力于使用简单、系统轻量、软件更新速度快的GNU/Linux发行版。创始人Judd Vinet出于对Debian以及Red Hat的包管理器不满,以及受CRUX影响而创立。最初针对i686,但是如今对x86_64也支持良好,而且还派生出了针对ARM平台的Arch Linux ARM以及针对HURD内核的Arch Hurd(发展缓慢)。

blob.png



对于Linux的发现版有数百种,这里就不一一列举了,我们这里学习的环境已CentOS为主,至于其他版本的Linux,我们可以有兴趣去学习。



原创文章,作者:N24_小辉,如若转载,请注明出处:http://www.178linux.com/54908

(2)
N24_小辉N24_小辉
上一篇 2016-10-27
下一篇 2016-10-27

相关推荐

  • N_28文件类管理命令

    1.linux文件管理类命令有:mkdir ,rmdir,cp ,mv,rm,ls,vi,cat ,cut,sort,wc等 mkdir –make directories  (创建目录) 用法 :mkdir [OPTION]… DIRECTORY… -P  按需要创建目录的父目录; -v  显示创建的详细过程; -m M…

    2017-12-09
  • 千里眼–用NFS和Samba实现共享网页文件

     目的:使用网络文件系实现LAMP的分步式资源共享 配置过程– 搭建nfs服务器:(centos 6.8) 安装yum install mysql-server nfs-utils httpd #这里安装httpd是为了方便后面共享文件的属主属组定义 启动nfs服务 #service nfs start  mkdir /dat…

    2017-04-30
  • 第五周练习

    1、显示当前系统上root、fedora或user1用户的默认shell 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一小组括号的行,刑如:hello() 3、使用echo命令输出一个绝对路径,使用grep取出基名 4、找出ifconfig命令结果中的1-255之间的数字 5、查找/var目录下属主为root,且属组为mai…

    2017-10-29
  • 内部命令与外部命令

    内部命令与外部命令 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。 外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。 1.type type COMMAND 判断一个命令的类型即判断一个命令是否为内置命令。   2.enable(内部命令) enable既可以查看内部命令,同时也可以判断是否为内部命令 enable 显示所有…

    2017-07-15
  • 设计模式(六)桥连模式Bridge(结构型)

    1. 概述       在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的…

    Linux干货 2015-06-26
  • 从Linux小白到大牛——与狼共舞的日子8

    马哥教育网络班21期+第8周课程练习 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥是第2层的设备,它设计用来创建两个或多个LAN分段。其中,每一个分段都是一个独立的冲突域。网桥设计用来产生更大可用宽带。它的目的是过滤LAN的通信流,使得本地的通信流保留在本地,而让那些定向到LAN其他部分(分段)的通信流转发到那里去。每…

    Linux干货 2016-11-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-02 15:55

    内容格式把握得很好,希望可以将这段发展史和几个关键性时间点熟知,加油!