1、前言
本文主要讲解哪些是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以以便读者能快速理解哪些是Linux内核,能读懂Linux内核。
拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,而且内核是哪些,它用于哪些?
2、什么是内核
内核是与计算机硬件插口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序联接到化学硬件,并容许称为服务器的进程使用进程间通讯(IPC)彼此获取信息。
3、内核还要分种类?
是的,没错。
3.1微内核
微内核只管理它必须管理的东西:CPU、内存和IPC。计算机中几乎所有的东西都可以被看作是一个附件,而且可以在用户模式下处理。微内核具有可移植性的优势,由于只要操作系统一直企图以相同的方法访问硬件,就毋须害怕您是否修改了视频卡,甚至是操作系统。
微内核对显存和安装空间的占用也十分小,但是它们常常更安全,由于只有特定的进程在用户模式下运行,而用户模式不具有管理员模式的高权限。
3.1.1Pros
3.1.2Cons
3.2单内核
单内核与微内核相反,由于它们除了包含CPU、内存和IPC,并且还包含设备驱动程序、文件系统管理和系统服务器调用等内容。单内核更擅长于访问硬件和多任务处理,由于假如一个程序须要从显存或运行中的其他进程中获取信息,这么它就有一条更直接的线路来访问信息,而不须要在队列中等待来完成任务。并且,这可能会造成问题,由于在管理模式下运行的东西越多,假如行为不正常,才会有越多的东西造成系统崩溃。
3.2.1Pros3.2.2Cons4、混合的内核
混和内核才能选择在用户模式下运行哪些,以及在管理模式下运行哪些。一般情况下,设备驱动程序和文件系统I/O将在用户模式下运行,而IPC和服务器调用将保持在管理器模式下。这是两全其美,但一般须要硬件制造商做更多的工作,由于所有驱动程序的责任都由她们来承当。它还可能存在一些与微内核固有的延后问题。
4.1Pros4.2Cons5、Linux内核文件在那里
Ubuntu中的内核文件储存在/boot文件夹中,称为vmlinux-version。vmlinuz这个名子来自于unix世界,早在60年代,她们就把内核简单地称为“unix”,所以当内核在90年代首次开发时,Linux就开始把内核称为“Linux”。
当开发虚拟显存便于更容易地进行多任务处理时,将“vm”放在文件的后面,以显示内核支持虚拟显存。有一段时间,Linux内核被称为vmlinux,而且内核显得太大,难以放入可用的引导显存,因而压缩了内核映像,并将末尾的x修改为z,以显示它是用zlib压缩的。并不总是使用相同的压缩,一般用LZMA或BZIP2替换,一些内核简单地称为zImage。
在/boot文件夹中还有其他特别重要的文件linux内核原理,称为initrd.img-version、system.map-version,config-version。initrd文件用作一个小RAMc盘,用于提取和执行实际的内核文件。这个系统。map文件用于内核完全加载之前的显存管理,配置文件告诉内核在编译内核映像时要加载什么选项和模块。
6、Linux内核体系结构
由于Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。这是一个设计特点,在Linux初期造成了相当多的争辩,但是依然带有一些与单内核固有的相同的设计缺陷。
为了解决这种缺陷,Linux内核开发人员所做的一件事就是使内核模块可以在运行时加载和卸载,这意味着您可以动态地添加或删掉内核的特点。这除了可以向内核添加硬件功能,还可以包括运行服务器进程的模块,例如低级别虚拟化,但也可以替换整个内核,而不须要在个别情况下重启计算机。
想像一下,假若您可以升级到Windows服务包,而不须要重新启动……
7、内核模块
假如Windows早已安装了所有可用的驱动程序,而您只须要打开所需的驱动程序如何办?这本质上就是内核模块为Linux所做的。内核模块,亦称为可加载内核模块(LKM),对于保持内核在不消耗所有可用显存的情况下与所有硬件一起工作是必不可少的。
模块一般向基本内核添加设备、文件系统和系统调用等功能。lkm的文件扩充名是.ko,一般储存在/lib/modules目录中。因为模块的特点,您可以通过在启动时使用menuconfig命令将模块设置为load或notload,或则通过编辑/boot/config文件,或则使用modprobe命令动态地加载和卸载模块,轻松订制内核。
第三方和封闭源码模块在一些发行版中是可用的,例如Ubuntu,默认情况下可能难以安装,由于这种模块的源代码是不可用的。该软件的开发人员(即nVidia、ATI等)不提供源代码,而是建立自己的模块并编译所需的.ko文件便于分发。其实这种模块像beer一样是免费的,但它们不像speech那样是免费的,因而不包括在一些发行版中,由于维护人员觉得它通过提供非免费软件“污染”了内核。
内核并不神奇,但对于任何正常运行的计算机来说,它都是必不可少的。Linux内核不同于OSX和Windows,由于它包含内核级别的驱动程序,并使许多东西“开箱即用”。希望您能对软件和硬件怎么协同工作以及启动计算机所需的文件有更多的了解。
8、Linux内核学习经验总结开篇
学习内核,每位人都有自己的学习方式,仁者见仁智者见智。以下是我在学习过程中总结下来的东西,对自身来说,我觉得比较有效率,掏出来跟你们交流一下。
内核学习,一偏之见;疏忽难免,请求见谅。
为何写这篇博客
刚开始学内核的时侯,不要执著于一个方面,不要专注于一个子系统就一头扎到实际的代码行中去,由于这样的话,牵连的面会很广,会遇到好多困难,容易形成挫败感,一个函数体中(假定刚开始的时侯正在学习某个方面的某个具体的功能函数)很可能参杂着其他各个子系统方面设计理念(多是大量相关的数据结构或则全局变量,用于支撑该子系统的管理工作)下相应的代码实现,这个时侯见到这种东西,错综芜杂,是没有头绪并且很不理解的,会形成好多好多的疑惑,
(这个时侯假如对这种疑惑纠缠不清,刨根问底linux内核原理linux操作系统版本,这么事实上就是在学习当前子系统的过程中频繁的去进军其他子系统,这时侯注意力就分散了),而事实上等了解了各个子系统后再回头看那些东西的话,就简单多了,但是思路也会比较清晰。所以,要防止“只见行道树,不见森林”,不要急于深入到底层代码中去,不要过早研究底层代码。
我的学习方式
刚开始,我觉得主要的问题在于你晓得不晓得,而不是理解不理解,某个子系统的实现采用了某种策略、方法,而你在学习中须要做的就是晓得有如此一回事儿,之后才是理解所描述的策略或则方式。
按照自己的学习经验,刚开始学习内核的时侯,我觉得要做的是在自己的脑海中构建起内核的大体框架,理解各个子系统的设计理念和建立思想,这种理念和思想会从宏观上呈送给你清晰的脉络,如同一个去不仅枝树叶叶的小树的主干,一目了然;
其实,肯定都会涉及到具体的实现方式、函数,并且此时接触到的函数或则方式坐落内核实现的较高的层次,是主(要)函数,早已了解到这种函数,针对的是什么设计思想,实现了哪些样的功能,达成了哪些样的目的,混个脸熟的说法在这里也是创立的。
至于该主函数所调用的其它的辅助性函数就等同于枝树叶叶了,何必太早就去揣测。此时linux命令tar,也就初步构建起了内核子系统框架和代码实现之间的关联,关联虽然很简单,例如一听到某个函数名子,就想起这个函数是针对那个子系统的,实现了哪些功能。
好了昨晚的分享就到这儿,涉及到内核的东西通常都比较沉闷无味,一旦你吃透了,才会恍然活泼,加油吧!