我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

Linux内核

最后有好处

在阅读某些GNU开源软件或阅读Linux内核和驱动程序源代码时,我相信像我一样,您经常遇到一些C语言的“怪异”语法,这些语法似乎很熟悉,但经过仔细的分析后不了解。实际上,这些都是gnu c到c语言语法的扩展。这些基本上不是在一般教科书中讨论的,因此不了解这些特殊的语法应用是正常的。

该专家类将使您在Linux内核或GNU开源软件中学习使用各种C语言的扩展语法。最终目标是了解Linux内核或GNU开源软件中的这些“怪异语法”,并消除理解Linux内核驱动程序或GNU开源软件的语法障碍。

1《Linux内核设计和实现》

2“对Linux内核的深入了解”

3“ Linux内核完整注释”

4“ Linux内核源代码方案分析”

一。 “ Linux内核设计和实现”

1。单核和微粒

linux内核版本号历史_linux内核版本发布历史_linux的内核版本号

linux内核版本发布历史_linux内核版本号历史_linux的内核版本号

尽管Linux内核基于单个内核,但是经过多年的开发,它也具有微粒的一定特征。 (它首先反映了Linux实用性的原则)

主要功能如下:

支持内核模块的动态加载支持对称的多处理(SMP)内核,可以预先权力(),允许内核运行的任务具有优先级的线程和过程执行。

2。内核版本编号

内核版本编号主要由四个数组组成。例如,版本编号:2.6.26.1,

2-主要版本号

6-从版本号或子交换号码

26-修订号

1-稳定版本号

次要版本编号指示此版本是稳定(偶数)还是开发(奇数),并且上面示例中的版本编号稳定。

稳定版本可用于企业级环境。

修订版编号的升级包括错误修复,新驱动程序和新功能。

稳定版本号主要是对某些关键错误的修改。

2。深刻了解Linux内核

Linux和一些商业Unix之间的区别

1。Linux主要由与IEEE POSIX标准兼容的UNIX内核和GNU参考程序组成

2.Linux是一种传统的整体结构,其逻辑上不同。

3. Linux使用模块方法(动态汇编方法)加载程序块。

4。Linux内核支持对称的多处理器

5。Linux支持面向对象的虚拟文件系统和日志收集系统

优点:

1。免费

2。完全自定义Linux系统以随时随地修改Linux代码

3。您可以充分利用硬件平台,并且对硬件性能没有很高的要求。

4。Linux系统的代码有效,没有商业限制。

5。内核简化

6。Linux系统的良好兼容性

7个后端支持广泛

系统调用是从用户状态到内核状态的过程。特权模式从用户状态变为内核状态,以节省断点,最后,硬件实现了系统调用以返回流程断点。

linux的内核版本号_linux内核版本号历史_linux内核版本发布历史

3。“ Linux内核完整注释”

1。选择“ Linux内核完整注释”的原因

从现在开始,我计划学习Linux内核,并进行基本的理解和介绍。我还在网上在国内外阅读了许多经典书籍。最后,我选择阅读《 Linux内核的完整注释》一书。作为基本介绍,本书在线的评论也可以。

本书中解释的Linux内核版本是Linux 0.11。尽管内核版本非常低,但仍有可能进行学习。内核可以正常运行并运行,其中包括Linux工作原理的本质。由于Linux 0.11内核不超过20,000行代码,因此您可以通过一本书充分理解和学习。正是因为Linux 0.11内核代码很小,本书对Linux 0.11内核的所有代码进行了评论,以促进读者学习和理解。

为了使读者能够对他们正在研究的系统有敏感的理解,并通过实验加深了对原始的理解,作者还特别重建了基于此内核的可运行的Linux 0.11系统。由于它包含GNU GCC汇编环境,因此可以使用此系统完成一些简单的开发工作。

当然,使用早期内核作为学习对象也有缺点。选定的Linux 0.11内核不包括对虚拟文件系统VF或网络系统支持的支持。它仅支持其他现有内核中复杂子系统的执行文件和指令。

2。数据门户

以下是书中提供的一些信息链接,这将促进您将来的搜索:

:此目录包含内核图像文件和根文件系统图像文件。

:该目录包含已设置的Linux系统,该系统已在计算机模拟系统Bochs下运行。

:该目录包含其他一些工具程序,这些程序可以在Linux 0.11系统中使用,以及一些最初发布的安装说明。

:您可以下载本书中说明的Linux 0.11内核源代码,文件名:linux-0.11.tar.gz。

3。内核源代码目录结构

整个Linux 0.11内核源代码的目录结构如下图所示:

四个。 Linux内核源代码方案分析

1个准备知识

1。内核介绍

Linux开发历史

Linux源代码组成

如何命名Linux内核版本和发行版

1.2地址方法

在早期,8086和8088处理器为16位,而寻址方法是真实的模式。后来,随着技术的发展,人们意识到了真实模式的缺点(将计算机完全暴露于用户的眼睑),从而创建了保护模式。这两个点之间的区别主要在于是否保护了对内存的访问,主要是越来越多。越来越多意味着无法访问用户无法访问的地址范围,并且用户没有权限的地址范围无法访问。因此,早期的计算机工人建立了细分内存管理,对内存地址进行了细分(例如,16个段,每个细分大小为64K,正好是1m),然后在CPU中设置了四个细分寄存器:CS,DS,SS,SS和ES,用于执行代码,数据,堆栈,堆栈等的指令。由于早期的英特尔记忆尺寸为1m,并且CPU确实是16位,如果没有一定的处理,则16位总线无法访问超过64K的范围,因此每个段寄存器的内容用作存储器地址的上部16位,并且与该段中的偏移地址添加为下部16(重叠12位的偏移地址),只有12位的位置,只有1个位置,该位置是一个20位,该位置为20位,该位置是20位,该位置是20位。

由于这种管理机制无法基于段记忆管理机制提供内存保护,因此386年后,人们采用了保护模式,数据总线为32位。人们在原始的四个细分寄存器上添加了两个细分寄存器FS和GS,以实现保护模式的作用。因此,数据总线的地址内容应具有以下设计思想

1确定应根据指令的性质使用哪个片段寄存器

2根据段寄存器的内容,找到相应的地址段描述结构。

3。描述地址段的结构以获得基础地址

4。将指令发出的地址作为位移,并将其与段描述结构中指定的段的长度与是否超出界限进行比较。

5根据地址段描述结构确定是否超出了访问权限

6将指令发出的地址添加为位移,并将其添加到基本地址以获取实际的物理地址。

以上是在受保护模式下段内存管理的设计思想,以下是实现过程。

1个片段寄存器。由于段地址描述结构堆叠8个字节,因此地址是8个整数倍数,因此可以将段寄存器的下部三个位用于其他功能。

2段地址描述结构(GDTR,LDTR)及其主要功能是描述基本地址,权限和范围。

linux的内核版本号_linux内核版本发布历史_linux内核版本号历史

上面的段寄存器映射到过渡段地址描述结构,最后由指令发出的地址和段地址描述结构所提供的基本地址映射到最后一个物理地址(前提

1.3 I386页面管理机制

由于细分管理机制是真实的,并且不是抽象的,并且对内存管理的不便,因此人们在细分管理的基础上增加了分页管理。因此,通过段管理映射通过虚拟地址获得的地址不再是物理地址。人们称线性地址。页面映射后获得的实际物理地址基于线性地址。

在分页机制中,线性地址的结构被人为地分为

整个页面映射过程是

这里解释了两点

1请记住,我在上一节中拥有的每个段的地址描述结构占据了8个字节,因此必须将地址与8个整数倍数进行比较。在这里,我们的页面大小是人为地分为4K,也就是说,它与4K进行了比较,因此我们的目录和页面表也可以将下12个端子取出较低的12位。至于如何实施,这是一个硬件问题。

2为什么要使用多级分页机制,而不是直接使用页面表和页面偏移地址进行分页来保存内存。至于如何节省,我不知道如何在一开始就参加操作系统课程,但是现在我理解了。因为操作系统将在创建过程时将过程控制块分配给该过程,而其中一些是虚拟内存管理的页面数据结构。如果未采用多级分页机制,则每个过程都会占用一个字节,即1M,这意味着该过程不需要页面表条目(因为默认用户的32位地址的虚拟内存空间为4G,但是很难想象一个过程,它将使用这些4G),但是它仍然会占据内存。但是,如果使用了多级分页,则不会分配不必要的页表条目,从而节省了内存。但是,相反,如果一个过程确实消耗了4G虚拟内存,则他们需要的目录项和页面表条目将占据更多内存。

1。C语言代码中的内核源代码

Linux内核的主体用GNU的C语言编写。 CNU为此目的提供了编译器GCC,而GCC从C ++语言中吸收常量。实际上,GNU的C和C ++已集成。 GCC既是C编译器又是C ++编译器。因此,Linux中的许多C语言代码自然具有C ++样式,因此需要一些C ++基础。但这不是问题的关键。关键是在Linux中学习C语言设计思想。

1个常见的宏观定义来实现简单功能

#(addr,nr)\ do {(bufp,addr,nr); bufp+= nr} while(0)

2用途结构封装多个队列

linux内核版本号历史_linux内核版本发布历史_linux的内核版本号

3。使用宏定义和功能来实现简单的初始化

linux的内核版本号_linux内核版本号历史_linux内核版本发布历史

1。内核源代码中的汇编语言代码

组装语言有两组格式。 DOS/字段中使用的汇编语言是英特尔定义的所有指令格式,这是我们教科书中的汇编语言格式。另一种是由UNIX字段中AT&T定义的格式,因此Linux内核中使用的组装格式为AT&T。尽管两个汇编语言指令不同,但说明的风格非常相似,因此它们提供了彼此学习的条件。此外,AT&T组装也适用于GCC编译器,因此可以将嵌入式组件语句嵌入C语言。因此,了解Linux内核代码需要AT&T组装基础知识和嵌入式组装基础知识。我不会在这里详细介绍它。在“过程开关”部分中,我将借助内核中使用的一个汇编代码来介绍嵌入的AT&T组件,以实现内存空间切换。

查看更多详细信息:如果您需要相关信息,则可以在后台发送私人消息。信息可以由MF收到。

二维码
扫一扫在手机端查看

本文链接:https://www.by928.com/8979.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线