导航:首页 > 操作系统 > linux内核之旅

linux内核之旅

发布时间:2023-07-24 20:38:38

linux操作系统的内核有哪几个子系统组成,简要说明各子系统的作用

Linux是一个一体化内核(monolithic kernel)系统。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。

一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。设备驱动程序可以完全访问硬件。Linux内的设备驱动程序可以方便地以模块化(molarize)的形式设置,并在系统运行期间可直接装载或卸载。

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

版本号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代表的不是开发版,而是稳定版!

Ⅱ linux的内核运行原理是怎么样的呢如何从开机,到加载内核镜像到内存

当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处
的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位
于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x7C00,并开始执行此处
的代码。这就是对内核初始化过程的一个最简单的描述。
最初,linux核心的最开始部分是用8086汇编语言编写的。当开始运行时,核心将自
己装入到绝对地址0x90000,再将其后的2k字节装入到地址0x90200处,最后将核心的其余
部分装入到0x10000。
当系统装入时,会显示Loading...信息。装入完成后,控制转向另一个实模式下的汇
编语言代码boot/Setup.S。Setup部分首先设置一些系统的硬件设备,然后将核心从
0x10000处移至0x1000处。这时系统转入保护模式,开始执行位于0x1000处的代码。
接下来是内核的解压缩。0x1000处的代码来自于文件Boot/head.S,它用来初始化寄
存器和调用decompress_kernel( )程序。decompress_kernel( )程序由Boot/inflate.c,
Boot/unzip.c和Boot../misc.c组成。解压缩后的数据被装入到了0x100000处,这也是
linux不能在内存小于2M的环境下运行的主要原因。
解压后的代码在0x1010000处开始执行,紧接着所有的32位的设置都将完成: IDT、
GDT和LDT将被装入,处理器初始化完毕,设置好内存页面,最终调用start_kernel过程。
这大概是整个内核中最为复杂的部分。
[系统开始运行]
linux kernel 最早的C代码从汇编标记startup_32开始执行
startup_32:
start_kernel
lock_kernel
trap_init
init_IRQ
sched_init
softirq_init
time_init
console_init
#ifdef CONFIG_MODULES
init_moles
#endif
kmem_cache_init
sti
calibrate_delay
mem_init
kmem_cache_sizes_init
pgtable_cache_init
fork_init
proc_caches_init
vfs_caches_init
buffer_init
page_cache_init
signals_init
#ifdef CONFIG_PROC_FS
proc_root_init
#endif
#if defined(CONFIG_SYSVIPC)
ipc_init
#endif
check_bugs
smp_init
rest_init
kernel_thread
unlock_kernel
cpu_idle
・startup_32 [arch/i386/kernel/head.S]
・start_kernel [init/main.c]
・lock_kernel [include/asm/smplock.h]
・trap_init [arch/i386/kernel/traps.c]
・init_IRQ [arch/i386/kernel/i8259.c]
・sched_init [kernel/sched.c]
・softirq_init [kernel/softirq.c]
・time_init [arch/i386/kernel/time.c]
・console_init [drivers/char/tty_io.c]
・init_moles [kernel/mole.c]
・kmem_cache_init [mm/slab.c]
・sti [include/asm/system.h]
・calibrate_delay [init/main.c]
・mem_init [arch/i386/mm/init.c]
・kmem_cache_sizes_init [mm/slab.c]
・pgtable_cache_init [arch/i386/mm/init.c]
・fork_init [kernel/fork.c]
・proc_caches_init
・vfs_caches_init [fs/dcache.c]
・buffer_init [fs/buffer.c]
・page_cache_init [mm/filemap.c]
・signals_init [kernel/signal.c]
・proc_root_init [fs/proc/root.c]
・ipc_init [ipc/util.c]
・check_bugs [include/asm/bugs.h]
・smp_init [init/main.c]
・rest_init
・kernel_thread [arch/i386/kernel/process.c]
・unlock_kernel [include/asm/smplock.h]
・cpu_idle [arch/i386/kernel/process.c]
start_kernel( )程序用于初始化系统内核的各个部分,包括:
*设置内存边界,调用paging_init( )初始化内存页面。
*初始化陷阱,中断通道和调度。
*对命令行进行语法分析。
*初始化设备驱动程序和磁盘缓冲区。
*校对延迟循环。
最后的function'rest_init' 作了以下工作:
・开辟内核线程'init'
・调用unlock_kernel
・建立内核运行的cpu_idle环, 如果没有调度,就一直死循环
实际上start_kernel永远不能终止.它会无穷地循环执行cpu_idle.
最后,系统核心转向move_to_user_mode( ),以便创建初始化进程(init)。此后,进程0开始进入无限循环。
初始化进程开始执行/etc/init、/bin/init 或/sbin /init中的一个之后,系统内核就不再对程序进行直接控制了。之后系统内核的作用主要是给进程提供系统调用,以及提供异步中断事件的处理。多任务机制已经建立起来,并开始处理多个用户的登录和fork( )创建的进程。
[init]
init是第一个进程,或者说内核线程
init
lock_kernel
do_basic_setup
mtrr_init
sysctl_init
pci_init
sock_init
start_context_thread
do_init_calls
(*call())-> kswapd_init
prepare_namespace
free_initmem
unlock_kernel
execve
[目录]
--------------------------------------------------------------------------------
启动步骤
系统引导:
涉及的文件
./arch/$ARCH/boot/bootsect.s
./arch/$ARCH/boot/setup.s
bootsect.S
这个程序是linux kernel的第一个程序,包括了linux自己的bootstrap程序,
但是在说明这个程序前,必须先说明一般IBM PC开机时的动作(此处的开机是指
"打开PC的电源"):
一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定
在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此处的内容则是一个
jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作,包
括了检查RAM,keyboard,显示器,软硬磁盘等等,这些动作是由系统测试代码
(system test code)来执行的,随着制作BIOS厂商的不同而会有些许差异,但都
是大同小异,读者可自行观察自家机器开机时,萤幕上所显示的检查讯息。
紧接着系统测试码之后,控制权会转移给ROM中的启动程序
(ROM bootstrap routine),这个程序会将磁盘上的第零轨第零扇区读入
内存中(这就是一般所谓的boot sector,如果你曾接触过电脑病
毒,就大概听过它的大名),至于被读到内存的哪里呢? --绝对
位置07C0:0000(即07C00h处),这是IBM系列PC的特性。而位在linux开机
磁盘的boot sector上的正是linux的bootsect程序,也就是说,bootsect是
第一个被读入内存中并执行的程序。现在,我们可以开始来
看看到底bootsect做了什么。
第一步
首先,bootsect将它"自己"从被ROM BIOS载入的绝对地址0x7C00处搬到
0x90000处,然后利用一个jmpi(jump indirectly)的指令,跳到新位置的
jmpi的下一行去执行,
第二步
接着,将其他segment registers包括DS,ES,SS都指向0x9000这个位置,
与CS看齐。另外将SP及DX指向一任意位移地址( offset ),这个地址等一下
会用来存放磁盘参数表(disk para- meter table )
第三步
接着利用BIOS中断服务int 13h的第0号功能,重置磁盘控制器,使得刚才
的设定发挥功能。
第四步
完成重置磁盘控制器之后,bootsect就从磁盘上读入紧邻着bootsect的setup
程序,也就是setup.S,此读入动作是利用BIOS中断服务int 13h的第2号功能。
setup的image将会读入至程序所指定的内存绝对地址0x90200处,也就是在内存
中紧邻着bootsect 所在的位置。待setup的image读入内存后,利用BIOS中断服
务int 13h的第8号功能读取目前磁盘的参数。
第五步
再来,就要读入真正linux的kernel了,也就是你可以在linux的根目录下看
到的"vmlinuz" 。在读入前,将会先呼叫BIOS中断服务int 10h 的第3号功能,
读取游标位置,之后再呼叫BIOS 中断服务int 10h的第13h号功能,在萤幕上输
出字串"Loading",这个字串在boot linux时都会首先被看到,相信大家应该觉
得很眼熟吧。
第六步
接下来做的事是检查root device,之后就仿照一开始的方法,利用indirect
jump 跳至刚刚已读入的setup部份
第七步
setup.S完成在实模式下版本检查,并将硬盘,鼠标,内存参数写入到 INITSEG
中,并负责进入保护模式。
第八步
操作系统的初始化。

Ⅲ Linux内核有多大,不同Linux版本内核有什么差别呢

根据版本的不同,内核大小也不同,新版本为几百M。

1、发行版的不同,主要是对于版本的选择,稳定性的测试,还有错误修正补丁都会让每个发行版有自己特殊的内核。

2、官方内核的不同,这个区别很好说,官方的开发是基于 git 版本控制的,去看两个 git 版本就知道了。一般是硬件支持,还有新的功能算法,还有驱动增减,错误修补什么的。

Linux的内核版本编号有点像如下的样子:

2.6.32-642.el6.x86_64

主版本.次版本。发布版本-修改版本。

虽然编号就是如上的方式来编写,不过依据Linux内核的发展历程,内核版本的定义有点不太相同。

奇数、偶数版本分类:

在2.6x版本以前,托瓦斯将内核的发展方向分为两类,并根据这两类内核的发展分别给予不同的内核编号,那就是:

主、次版本为奇数:开发中版本。

如2.5.xx,这种内核版本主要用于测试与发展新功能,所以通常这种版本仅有内核开发工程师会使用。如果有新增的内核程序代码,会加到这种版本当中,等到很多工程师测试没问题后,才加入下一版本的稳定内核中;

主、次版本为偶数:稳定版本。

如2.6.xx,等到内核功能发展成熟后会加到这类版本中,主要用在一般家庭计算机以及企业版本中,重点在于提供一个用户相对稳定的Linux操作环境平台。

至于发布版本则是在主、次版本架构不变的情况下,新增的功能累积到一定程度后新发布的内核版本。而由于Linux 的内核是使用CPL的授权,因此大家都能够进行内核程序代码的修改。

因此,如果有针对一个版本的内核修改过的部分程序代码,那么这个被修改过的新内核版本就可以加上所谓的修改版本。

Linux内核版本与Linux发行版本。

Linux内核版本与发行版本的版本并不相同,因为所谓的Linux版本指的应该是内核版本,而目前最新的内核版本应该是4.7.2(2016/08)才对,并不会有7.x的版本出现。

(3)linux内核之旅扩展阅读:

Linux内核的任务:

1、从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

2、从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。

3、内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

4、内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。

Ⅳ Linux 内核的特点有哪些

Linux 是一个开放自由的操作系统内核,具有一些鲜明特点如下:
(1) Linux 是一个一体化内核;
注:“一体化内核”是也称“宏内核”,是相对于“微内核”而言的。几乎所有
的嵌入式和实时系统都采用微内核,如 VxWorks、uC/OS-II、PSOS 等。
(2) 可移植性强。尽管 Linus 最初只为在 X86 PC 上实现一个“类 UNIX”,后来随
着加入者的努力,Linux 目前已经成为支持硬件平台最广泛的操作系统;
注:目前已经在 X86、IA64、ARM、MIPS、AVR32、M68K、S390、Blackfin、M32R
等众多架构处理器上运行。
(3) 是一个可裁剪操作系统内核。Linux 极具伸缩性,内核可以任意裁剪,可以大至
几十或者上百兆,可以小至几百 K,运行的设备从超级计算机、大型服务器到
小型嵌入式系统、掌上移动设备或者嵌入式模块,都可以运行;
(4) 模块化。Linux 内核采用模块化设计,很多功能模块都可以编译为模块,可以在
内核运行中动态加载/卸载而无需重启系统;
(5) 网络支持完善。Linux 内核集成了完整的 POSIX 网络协议栈,网络功能完善;
(6) 稳定性强。运行 Linux 的内核的服务器可以做到几年不用复位重启;
(7) 安全性好。Linux 源码开放,由众多黑客参与 Linux 的开发,一旦发现漏洞都能及时修复;
(8) 支持的设备广泛。Linux 源码中,设备驱动源码占了很大比例,几乎能支持任何
常见设备,无论是很老旧的设备还是最新推出的硬件设备,几乎都能找到 Linux下的驱动。致远电子那边有很多的,你可以去看一下

Ⅳ linux的内核版本的介绍

Linux内核
Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,这里有一份Linus Torvalds当时在Usenet新闻组comp.os.minix所登载的贴子,这份着名的贴子标志着Linux计划的正式开始。
在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。
技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
具体看http://blog.csdn.net/huahuamoon/archive/2008/04/08/2259820.aspx

Ⅵ linux 内核是什么, 本人有linux基础

Linux内核:Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

Linux最早是由芬兰人Linus Torvalds设计的。当时由于UNⅨ的商业化,Andrew Tannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。

(6)linux内核之旅扩展阅读:

Linux将标准的GNU许可协议改称Copyleft,以便与Copyright相对照。通用的公共许可(GPL)允许用户销售、拷贝和改变具有Copyleft的应用程序。当然这些程序也可以是Copyright的,但是你必须允许进一步的销售、拷贝和对其代码进行改变,同时也必须使他人可以免费得到修改后的源代码。事实证明,GPL对于Linux的成功起到了极大的作用。它启动了一个十分繁荣的商用Linux阶段,还为编程人员提供了一种凝聚力,诱使大家加入这个充满了慈善精神的Linux运动。

Ⅶ 什么是linux kernel有什么作用

Linux内核(英语:Linux kernel)是一种开源的类Unix操作系统宏内核。

工作于平板电脑、智能手机及智能手表的Android操作系统同样通过Linux内核提供的服务完成自身功能。

一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。

完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

整个Linux操作系统家族基于该内核部署在传统计算机平台(如个人计算机和服务器,以Linux发行版的形式)和各种嵌入式平台,如路由器、无线接入点、专用小交换机、机顶盒、FTA接收器、智能电视、数字视频录像机、网络附加存储(NAS)等。

工作于平板电脑、智能手机及智能手表的Android操作系统同样通过Linux内核提供的服务完成自身功能。尽管于桌面电脑的占用率较低,基于Linux的操作系统统治了几乎从移动设备到主机的其他全部领域。截至2017年11月,世界前500台最强的超级计算机全部使用Linux。

(7)linux内核之旅扩展阅读:

编程语言

Linux是用C语言中的GCC版(这种C语言有对标准C进行扩展)写的,还有几个用汇编语言(用的是GCC的"AT&T风格")写的目标架构短段。因为要支持扩展的C语言,GCC在很长的时间里是唯一一个能正确编译Linux的编译器。

有许多其他的语言用在一些方面上,主要集中在内核构建过程中(这里指从源代码创建可引导镜像)。包括Perl、Python和多种脚本语言。有一些驱动可能是用C++、Fortran或其他语言写的,但是这样是强烈不建议的。

编译器兼容性

GCC是Linux内核源代码的缺省编译器。在2004年,Intel主张通过修改内核,以便Intel C++编译器能正确编译内核。在2009年,有通过修改内核2.6.22版而成功编译的报告(并带来平均8-9%性能增长)。

自从2010年,已经开始进行使用Clang建造Linux内核的努力,Clang是一个可作为替代的C语言编译器;截止2014年4月12日,官方内核几乎可以完全用Clang编译。致力于这个目标的计划叫做“LLVMLinux”,得名于Clang所基于的LLVM编译器下部构造。

LLVMLinux不意图复制Linux内核或LLVM,因此它是由最终提交给上游计划的补丁构成的一个元计划。使Linux内核可以用Clang编译最大的好处是比GCC有更快的编译速度,内核开发者可以得益于由此而来的更快的工作流程

阅读全文

与linux内核之旅相关的资料

热点内容
android滑动进度条 浏览:834
javagmt转换 浏览:826
linux查看snmp 浏览:24
ug80车床编程 浏览:516
怎么加速python计算素数 浏览:241
腰椎第五节压缩性骨折 浏览:91
程序员开会的句子 浏览:993
用哪个app写编程 浏览:645
android通讯录增删改查 浏览:731
车贷解压过户可以同时进行吗 浏览:920
java面向对象编程题目 浏览:884
二次元压缩包 浏览:700
stc仿真器编程器 浏览:155
服务器销售怎么做好 浏览:87
什么是com编程 浏览:849
算法工程师最新资讯 浏览:611
邮政银行卡怎么在app签约绑定 浏览:49
压缩卷一直转 浏览:978
初一编程小程序怎么做 浏览:828
bt软件文件夹名称 浏览:159