Linux内核剖析(二)Linux内核绪论
什么是内核
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
内核是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。
程序可以直接地被调入计算机中执行,这样的设计说明了设计者不希望提供任何硬件抽象和操作系统的支持,它常见于早期计算机系统的设计中。最终,一些辅助性程序,例如程序加载器和调试器,被设计到机器核心当中,或者固化在只读存储器里。这些变化发生时,操作系统内核的概念就渐渐明晰起来了。
Linux内核版本
Linux内核有两种:稳定的和处于开发中的。
稳定的内核具有工业级的强度,可以广泛的应用和部署。新推出的稳定内核大部分都只是修正了一些bug或是加入了一些新的设备驱动程序。
相反的,处于开发中的内核中许多东西变化的都很快。而且由于开发者不断实验新的解决方案,内核常常发生剧烈的变化。
Linux的第一个公开版本是1991年10月的0.02版本,两个月以后,在1991年12月,Linux发布了0.11版本,这是第一个可以不依赖于Minix就可以使用的独立内核。
0.12版本发布一个月以后,在3月,版本号跳到了0.95,反映出系统正变得成熟,不仅如此,直到两年后,也就是1994年3月,具有里程碑意义的1.0.0才完成。
大约从这时起开始使用两“路”编号方法标注内核的开发,一直到2.5版本的内核,都通过这种简单的命名机制来区分稳定的和处于开发中的内核。
这种机制使用三个“或者四个.”分隔的数字来代表不同的内核。第一个数组是主版本号,第二个版本从版本号,第三个数字是修订版本号,第四个可选的数字是稳定版本号(stable version)
从版本号还可以反应出该内核是一个稳定版本还是一个粗语开发中的版本:该数字如果是偶数就是稳定版,如果是奇数就是开发版。
偶数号的内核(比如1.0、2.2、2.4、2.6)是稳定的,“产品”型号,
奇数号的内核版本(1.1、2.3)是前沿的或者“发展中的”内核。在这个特定的发布机制下,Linus会定期发布新内核,每个内核都是一个新的修订版本,比如2.6内核系列的第一个版本是2.6.0,第二个版本是2.6.1,这个修订版包含了BUG修复,新的驱动和一些新特性,但是,像2.6.3到2.6.4修订版本之间的差别是很微小的。
这种开发方式一直延续到2004年,当时在受邀参加的linux开发者峰会上,内核开发者门确定延长2.6内核系列,从而推迟 进入到2.7系统的步伐。。。。
同时为了解决版本发布周期变长的副作用。内核开发者们引入了上面提到的稳定版本号,这个稳定版本号(如2.6.32.8中的8)包含了一些关键性的BUG的修改,并且常会向前移植处于开发版内核(如2.6.33)的重要修改。依靠这种方式,一起拿版本保证了仍然能将重点放在稳定性上。
Linux2.x和Linux3.x
2011年7月21日,Linus Torvalds宣布正式发布Linux 3.0 kernel。
Linus表示,正如以前多次申明的,Linux 3.0并无具有重要意义的新特性或者是与之前的版本存在不兼容的地方,它只是在Linux
20周年之际放弃不方便的版本编号系统。Linux Kernel
3.0版本虽然从内核的更新内容上跟普通的2.6.40没什么两样,不过版本号的修改,无疑在Linux内核20周年之际,被赋予了特殊的意义。
实际上,Linux 3.0新版本就是Linux 2.6.40版本的新名称,没有什么里程碑式的变化。从2.6到3.0走过了8个年头,人都变老了,外间世界也有不少变化。
因此目前位置linux2.x和linux3.x是同步维护的,我们从linux内核官网上可以看到目前内核有两种不同的版本
longterm support
提供长期支持的内核版本
stable
稳定版本,而不是Beta测试版
关系就是:稳定版本不一定都提供长期支持,而提供长期支持的一定是稳定版本。
当年Linus 的建议是将版本号跳到 3.0,而不是 2.8.x 或其它,并且主版本号(mainline)将只包含 major 与 minor 号,也就是说下一个 Kernel 版本将有可能是 3.0,而不是 3.0.0。Linus 表示这样做有两个优点,一是去掉一个版本级数可以使得 stable 版本的维护人员直接使用第三个数字来标识相应的发布;其次由于传统上 Kernel 使用偶数版本号表示发布的版本,切换到 3.x 的版本号后,使用奇数(比如 3.0 之后是 3.1)作为发布的版本号也不会显得太让人难以接受。
因此在现在的3.x的内核中不再遵循以前的偶数标识稳定版本,奇数标识开发版本的标识信息
具体信息请参见Linux 2.6内核走向终结?下一版本3.0?
Linux内核体系结构
Linux内核剖析(二)Linux内核绪论的更多相关文章
- Linux学习之二-Linux系统的目录结构
Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...
- linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)
一.介绍linux-2.6.32: Linux-2.6.32的网上介绍:增添了虚拟化内存 de-duplicacion.重写了 writeback 代码.改进了 Btrfs 文件系统.添加了 ATI ...
- Linux入门基础(二):Linux磁盘及文件管理系统
磁盘管理 fdisk分区工具 只支持MBR分区 fdisk命令只有root用户能用 fdisk -l 列出所有安装磁盘及分区信息 fdisk /dev/sda (操作磁盘,按m可列出帮助界面,常用的操 ...
- Linux命令-文本编辑(二)
Linux命令-文本编辑(二) Linux mtype命令 mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容. 语法: mtype [-st][文件] 参 ...
- Linux命令-文件管理(二)
Linux命令-文件管理(二) Linux gitview命令 Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码. 语法:gitview [-bchilv] ...
- Linux课程实践二:编译模块实现内核数据操控
一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...
- 【转帖】Linux的历史----Linux内核剖析(一)
Linux的历史----Linux内核剖析(一) 2015年04月09日 10:51:09 JeanCheng 阅读数:11351更多 所属专栏: Linux内核剖析 版权声明:本文为博主原创文 ...
- linux内核剖析(十)进程间通信之-信号量semaphore
信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线 ...
- linux内核剖析(六)Linux系统调用详解(实现机制分析)
本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...
随机推荐
- 【LeetCode算法-7】Reverse Integer
LeetCode第7题: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outp ...
- cmd使用notepad++为打开方式打开文件
想放一个txt进入vstart中,但是又不想用系统自带的记事本打开,想在vstart中双击时使用notepad++打开. cmd命令如下: "D:\notepad++\notepad++.e ...
- SpringBoot邮件发送
这篇文章介绍springboot的邮件发送. 由于很简单就没有分出server和imp之类,只是在controller简单写个方法进行测试. 首先pom文件加入spring-boot-starter- ...
- VMware5.5-VMware补丁程序VUM
VUM 官方文档 https://docs.vmware.com/cn/VMware-vSphere/5.5/com.vmware.vsphere.update_manager.doc/GUID-F7 ...
- LOJ.6235.区间素数个数(Min_25筛)
题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\ ...
- Java笔记(七)HashMap和HashSet
HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> { int size();//查看Map中的键值对个数 boolean isEmp ...
- php 将两个数组进行相加 http://blog.csdn.net/lcstrive/article/details/38331487
刚刚在网上看到一个提问. 数组Array ( [0] => 1 [1] => 2 )和数组Array ( [0] => 5 [1] => 6 ) 怎么让他们想加得出: 数组Ar ...
- Django——分页
必要属性和方法 per_page: 每页显示条目数量 count: 数据总个数 num_pages:总页数 page_range:页面范围,从1开始,例如[1,2,3,4]. page: page对象 ...
- JS引用类型之Array
ECMAScript中的数组可以说是比较神奇了, ECMAScript中定义的数组每一项可以保存不同的数据类型,如第一项为字符串,第二项为数值等等 1. 那怎么创建一个数组呢? 方法和创建对象实例类似 ...
- 搭建TFS 2015 Build Agent环境(四)
在通过TFS做DI时,我们经常用到FTP文件上传.TFS发布中,提供了cURL上载文件功能.要想使用此功能,请参考下面步骤启用: 1.登录BuildAgent所在的机器 2.打开cmd(以管理员权限运 ...