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)
上一篇 2016-10-27 13:27
下一篇 2016-10-27 14:57

相关推荐

  • 初识MySQL(二)SQL语句

        MySQL是关系型数据库的一种,基于二维表实现数据的存储与读取,通过索引实现快速查询,而实现数据库、表、索引的操作则是由SQL语句来完成的。     1、MySQL中字符大小写       (1)、SQL关键字以及函数名不…

    Linux干货 2015-08-26
  • 第四周博客分享

                    时间匆匆,转眼来马哥已经快一个月了,这一个月对我来说是收获满满,每天都在学到新的东西。       &nbs…

    2017-08-06
  • Linux终端类型

    目录 1. 终端概述 2. 串行端口终端(/dev/ttySn) 3. 伪终端(/dev/pty/) 4. 控制终端(/dev/tty) 5. 控制台终端(/dev/ttyn, /dev/console) 6. 虚拟终端(/dev/pts/n) 7. 其它类型   终端概述 终端…

    Linux干货 2016-10-18
  • vim文本编辑器和sed用法汇总

    1. Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进 和增加了很多特性。 VIM是纯粹的自由软件。 2. vim的三种工作模式: (1) 编辑模式:也叫命令模式,可以执行个各种快捷键的命令 (2) 插入模式:在文本文件中可以直接输入内容。 (3) 末行模式:红帽官方叫扩展命令行模式vim内置命令行接口  注:vi…

    Linux干货 2016-08-12
  • Linux 第五天: (08月01日) 练习和作业

    Linux 第五天: (08月01日) 练习和作业         创建用户gentoo, 附加组为bin和root, 默认shell为/bin/csh, 注释信息为"Gentoo Distribution" useradd -G bin,root -c "Gentoo Distribut…

    Linux干货 2016-08-08
  • Linux文件系统

    Linux:glibc 程序编译方式: 动态链接 静态编译 进程的类型: 终端:硬件设备,关联一个用户接口 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 操作系统的组成: 静态:kernel, application 文件系统:层级结构 FHS: Filesystem Hierarchy Standard /bin:所有用户可用的基本命…

    Linux干货 2016-11-10

评论列表(1条)

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

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