Linux内核百科

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核_百度百科百度首页|登录 新闻网页贴吧知道MP3图片视频百科文库
帮助设置 首页 自然 文化 地理 历史 生活 社会 艺术 人物 经济 科学 体育 核心用户 NBA
Linux内核
百科名片
GNU/Linux
操作系统的基本体系结Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客
Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix
黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。
技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
目录
特性架构
可移植性
发表形式
组成
内核概念
版本号
发展历史
体系结构属性
内核的开发和规范
主要子系统
Linux 内核的一些有用特性
发行版
常量定义1初始定义
解压缩符号 l ZTEXTADDR
内核符号 l PHYS_OFFSET
构架相关的宏l BOOT_MEM(pram,pio,vio)
特性 架构
可移植性
发表形式
组成
内核 概念
版本号
发展历史
体系结构属性
内核的开发和规范
主要子系统
Linux 内核的一些有用特性
发行版
常量定义 1初始定义
解压缩符号 l ZTEXTADDR
内核符号 l PHYS_OFFSET
构架相关的宏l BOOT_MEM(pram,pio,vio)
展开 编辑本段特性
架构
Linux是一个一体化内核(monolithic
kernel)系统。设备驱动程序可以完全访问硬件。Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。
可移植性
尽管Linus
Torvalds的初衷不是使Linux成为一个可移植的操作系统,今天的Linux却是全球被最广泛移植的操作系统内核。从掌上电脑iPaq到巨型电脑IBM
S/390,甚至于微软出品的游戏机XBOX都可以看到Linux内核的踪迹。Linux也是IBM超级计算机Blue Gene的操作系统。
Linux目前可以在以下结构上运行: Acorn:Archimedes,A5000和RiscPC系列 康柏:Alpha 惠普:PA-RISC
IA64:英特尔Itanium个人电脑 IBM的S/390和AS/400 英特尔80386及之后的兼容产品:80386,
80486和整个奔腾系列;AMD Athlon, Duron, Thunderbird; Cyrix系列。对英特尔8086, 8088, 80186,
80188和80280芯片的支持正在开发中。 Mips 摩托罗拉68020及以上: 新的Amigas, 一些苹果电脑
PowerPC:所有较新的苹果电脑 SPARC和UltraS

PARC:太阳微系统的工作站 Hitachi SuperH: SEGA
Dreamcast 索尼公司: PlayStation 2 微软公司: Xbox ARM系列
发表形式
原先Linus
Torvalds将Linux置于一个禁止任何商业行为的条例之下,但之后改用GNU通用公共许可证第二版。该协议允许任何人对软件进行修改或发行,包括商业行为,只要其遵守该协议,所有基于Linux的软件也必须以该协议的形式发表,并提供源代码。
Linus Torvalds曾经公开声称将Linux置于GNU通用公共许可证之下是他一生中所做的“最好的决定”。
编辑本段组成
进程管理(process management)、 1 定时器(timer)、 2 中断管理(interrupt management)、 3
内存管理(memory management)、 4 模块管理(module management)、 5 虚拟文件系统接口(VFS layer)、
6 文件系统(file system)、 7 设备驱动程序(device driver)、 8 进程间通信(inter-process
communication)、9 网络管理(network management)、 10 系统启动(system init)等操作系统功能的实现。
11
编辑本段内核
概念
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
版本号
一般地,可以从Linux内核版本号来区分系统是否是Linux稳定版还是测试版。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。
发展历史
Linux最早是由芬兰人Linus Torvalds设计的。当时由于UNIX的 主要 Linux 内核发行版简史商业化,Andrew
Tannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。当时发布在Internet上,免费给全世界的学生使用。Minix具有较多UNIX的特点,但与UNIX不完全兼容。1991年10月5日,Linus为了给Mi

nix用户设计一个比较有效的UNIX
PC版本,自己动手写了一个“类Minix”的操作系统。整个故事从两个在端终上打印AAAA...和BBBB...的进程开始的,当时最初的内核版本是0.02。Linus
Torvalds将它发到了Minix新闻组,很快就得到了反应。Linus
Torvalds在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了Linux的第一个稳定的工作版本。1991年11月,Linux0.10版本推出,0.11版本随后在1991年12月推出,当时将它发布在Internet上,免费供人们使用。当Linux非常接近于一种可靠的/稳定的系统时,Linus决定将0.13版本称为0.95版本。1994年3月,正式的Linux
1.0出现了,这差不多是一种正式的独立宣言。截至那时为止,它的用户基数已经发展得很大,而且Linux的核心开发队伍也建立起来了。
体系结构属性
在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码。 Linux
内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux
也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。
随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux
来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是
Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。Linux 内核的 uClinux 移植提供了对非
MMU 的支持。
内核的开发和规范
核心的开发和规范一直是由Linux社区控制着,版本也是唯一的。实际上,操作系统的内核版本指的是在Linux本人领导下的开发小组开发出的系统内核的版本号。自1994年3月14日发布了第一个正式版本Linux
1.0以来,每隔一段时间就有新的版本或其修订版公布。
Linux将标准的GNU许可协议改称Copyleft,以便与Copyright相对照。通用的公共许可(GPL)允许用户销售、拷贝和改变具有Copyleft的应用程序。当然这些程序也可以是Copyright的,但是你必须允许进一步的销售、拷贝和对其代码进行改变,同时也必须使他人可以免费得到修改后的源代码。事实证明,GPL对于Linux的成功起到了极大的作用。它启动了一个十分繁荣的商用Linux阶段,还为编程人员提供了一种凝聚力,诱使

大家加入这个充满了慈善精神的Linux运动。
主要子系统
系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI
实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch
中找到依赖于体系结构的部分。 进程管理:进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU
寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI
提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface
[POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争
CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。
O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch
中可以找到依赖于体系结构的源代码。 内存管理:内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬 VFS
在用户和文件系统之间提供了一个交换层管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux
包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。 不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如
slab 分配器。这种内存管理模式使用 4KB
缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在
./linux/mm 中找到。 虚拟文件系统:虚拟文件系统(VFS)是 Linux
内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支

持的文件系统之间提供了一个交换层。 VFS
在用户和文件系统之间提供了一个交换层 在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在
VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
Linux 内核的一些有用特性
如果 Linux 内核的可移植性和效率还不够好,Linux 还提供了其他一些特性,它们无法划分到上面的分类中。
作为一个生产操作系统和开源软件,Linux 是测试新协议及其增强的良好平台。Linux 支持大量网络协议,包括典型的 TCP/IP,以及高速网络的扩展(大于
1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比 TCP
更高级的特性(是传输层协议的接替者)。 Linux
还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。
Linux
最新的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了
KVM 的内核之上运行。除了运行 Linux 的其他实例之外, Microsoft® Windows®
也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令[1]。
编辑本段发行版
Linux内核的发展过程中,我们还不得不提一下各种Linux发行版的作用,因为正是它们推动了Linux的应用,从而也让更多的人开始关注Linux。一些组织或厂家,将Linux系统的内核与外围实用程序(Utilities)软件和文档包装起来,并提供一些系统安装界面和系统配置、设定与管理工具,就构成了一种发行版本(distribution),Linux的发行版本其实就是Linux核心再加上外围的实用程序组成的一个大软件包而已。相对于Linux操作系统内核版本,发行版本的版本号随发布者的不同而不同,与Linux系统内核的版本号是相对独立的。因此把SUSE、RedHat、Ubuntu、Slackware等直接说成是Linux是不确切的,它们是Linux的发行版本,更确切地说,应该叫做“以Linux为核心的操

作系统软件包”。根据GPL准则,这些发行版本虽然都源自一个内核,并且都有自己各自的贡献,但都没有自己的版权。Linux的各个发行版本(distribution),都是使用Linus主导开发并发布的同一个Linux内核,因此在内核层不存在什么兼容性问题。每个版本都不一样的感觉,只是在发行版本的最外层才有所体现,而绝不是Linux本身特别是内核不统一或是不兼容。
90年代初期Linux开始出现的时候,仅仅是以源代码形式出现,用户需要在其他操作系统下进行编译才能使用。后来出现了一些正式版本。目前最流行的几个正式版本有:SUSE、RedHat、Fedora、Debian、Ubuntu
编辑本段常量定义
1初始定义
宏phys定义了你的机器上的地址转换__virt_to_phys()。这个宏用于把虚拟地址转换为一个物理地址。通常情况下: phys = virt -
PAGE_OFFSET PHYS_OFFSET
解压缩符号 l ZTEXTADDR
解压缩器的地址地址。由于当你调用解压缩器代码时,通常关闭MMU,因此这里并不讨论虚拟地址和物理地址的问题。通常你在这个地址处调用内核,开始引导内核。它不需要在RAM中,只需要位于FLASH或其他只读或读/写的可寻址的存储设备中。
l ZBSSADDR 解压缩器的初始化为0的工作区的起始地址。必须位于RAM中,解压缩器会替你把它初始化为0,此外,需要关闭MMU。 l
ZRELADDR 解压缩内核将被写入的地址和最终的执行地址。必须满足: __virt_to_phys(TEXTADDR) == ZRELADDR
内核的开始部分被编码为与位置无关的代码。 l INITRD_PHYS
放置初始RAM盘的物理地址。仅当你使用bootpImage时相关(这是一种非常老的param_struct结构) l INITRD_VIRT
初始RAM盘的虚拟地址。必须满足: __virt_to_phys(INITRD_VIRT) == INITRD_PHYS l PARAMS_PHYS
param_struct 结构体或tag lis的物理地址,用于给定内核执行环境下的不同参数。
内核符号 l PHYS_OFFSET
RAM第一个BANK的物理地址地址。 l PAGE_OFFSET
RAM第一个BANK的虚拟地址地址。在内核引导阶段,虚拟地址PAGE_OFFSE将被映射为物理地址PHYS_OFFSET,它应该与TASK_SIZE具有相同的值。
l TASK_SIZE 一个用户进程的最大值,单位为byte。用户空间的堆栈从这个地址处向下增长。
任何一个低于TASK_SIZE的虚拟地址对用户进程来说都是不可见的,因此,内核通过进程偏移对每个进行进行动态的管理。我把这叫做用户段。任何高于TASK_SIZE的对所有进程都是相同的,称之为内核段。(换句话说,你不能把IO映射放在低于TASK_SIZE和PAGE_OFFSET的位置处。)
l TEXTADDR 内核的虚拟起始地址,通常为PAGE_OFFSET 0x8000。内核映射必须在此结束。 l DATAADDR

核数据段的虚拟地址,不能在使用解压缩器的情况下定义。 l VMALLOC_START l VMALLOC_END 用于限制vmalloc(
)区域的虚拟地址。此地址必须位于内核段。 通常,vmalloc( )区域在最后的虚拟RAM地址以上开始VMALLOC_OFFSET字节。 l
VMALLOC_OFFSET Offset normally incorporated into VMALLOC_START to provide a
hole between virtual RAM and the vmalloc area. We do this to allow out of bounds
memory accesses (eg, something writing off the end of the mapped memory map) to
be caught. Normally set to 8MB.
构架相关的宏l BOOT_MEM(pram,pio,vio)
pram——指定了RAM起始的物理地址,必须始终存在,并应等于PHYS_OFFSET。
pio——是供arch/arm/kernel/debug-armv.S中的调试宏使用的,包含IO的8 MB区域的物理地址。
vio——是8MB调试区域的虚拟地址。 这个调试区域将被位于代码中(通过MAPIO函数)的随后的构架相关代码再次进行初始化。 l
BOOT_PARAMS 参见 PARAMS_PHYS. l FIXUP(func) 机器相关的修正,在存储子系统被初始化前运行。 l
MAPIO(func) 机器相关的函数,用于IO区域的映射(包括上面的调试区)。 l INITIRQ(func)
用于初始化中断的机器相关的函数[2]。词条图册更多图册
参考资料
1
Linux 内核剖析
/developerworks/cn/linux/l-linux-kernel/2
Linux内核定义的常量
/article/ARM9-article/system/1606.html开放分类:
操作系统,计算机,共享,linux,os


“Linux内核”相关词条:

什么是相关词条 我来完善

百度百科中的词条内容仅供参考,如果您需要解决具体问题(尤其在法律、医学等领域),建议您咨询相关领域专业人士。253本词条对我有帮助添加到搜藏 分享到:
合作编辑者
1550911 ,百科ROBOT ,aaron089 ,淼淼淡淡 ,bvg20100117 ,huisheng1978 更多
如果您认为本词条还需进一步完善,百科欢迎您也来参与编辑词条在开始编辑前,您还可以先学习如何编辑词条
如想投诉,请到百度百科投诉中心;如想提出意见、建议,请到百度百科吧。

成长任务

词条动态
热词推送
编辑热词可获得额外经验值进入我的百科
您目前的等级是级
您目前的经验值是点
您还需点经验值即可升为级

词条统计
浏览次数:约 50134次
编辑次数:19次 历史版本
最近更新:3天前
创建者:raoping2005
更多贡献光荣榜
鼠标滑过用户名,我们有名片啦!
辛勤贡献者:
1550911 版本
sinpo1984 版本
aaron089 版本

最新动态
风华绝代随风去:

百科消息:
百科邀你国际儿童图书日共献爱心
日本大地震
百科官方微博粉

丝突破60000
百度百科人人网公共主页开通
山山水水--中国的自然美景
礼贤下士--百科分类管理员主页
科友之家--百度百科核心用户专区
百度百科“知识先锋”计划启动
我的船长我的船--百科船长日志
百度身边美食节可以白吃的地儿
科学家解读日本核泄漏影响
推广链接
卓越亚马逊,linux内核,2折..
卓越亚马逊linux内核特价,图书.音像.钟表.玩具.化妆.家居.健康...





© 2011 Baidu 权利声明
特性架构可移植性发表形式组成内核概念版本号发展历史体系结构属性内核的开发和规范主要子系统Linux 内核的一些有用特性发行版常量定义1初始定义解压缩符号 l
ZTEXTADDR内核符号 l PHYS_OFFSET构架相关的宏l BOOT_MEM(pram,pio,vio)


相关文档
最新文档