深入剖析:Linux 内核探究 (linux内核 _)

Linux操作系统被广泛应用于服务器、嵌入式设备、移动设备等领域。其优秀的稳定性、高扩展性、开放性以及免费的特性受到越来越多的用户的青睐。作为Linux的核心组成部分,Linux内核的探究显得尤为重要。本文将深入探讨Linux内核的有关知识。

一. Linux内核的基础组成

Linux内核是由SoC、板级支持、系统调用、协议栈、文件系统、虚拟文件系统、内存管理、进程调度、驱动程序、安全模块、网络命名空间、容器、实时性等部分组成,其整体架构如图所示:

图1 Linux内核组成结构

1. SoC

SoC是System-on-Chip的缩写,指的是集成了处理器、内存控制器、I/O处理器、网络处理器、电源管理等基本模块的芯片。SoC是大多数现代嵌入式设备的核心,也是很多服务器的主要芯片。Linux内核必须支持多种SoC,才能在这些设备上运行。

2. 板级支持

板级支持指的是针对不同的硬件平台编写的驱动程序。由于不同的硬件配置和不同的SoC芯片,Linux内核需要有相应的驱动程序,才能与硬件交互。

3. 系统调用

系统调用是Linux内核提供给用户程序使用的接口,如open、close、write、read等,它们负责实现Linux内核所提供的各种功能。

4. 协议栈

协议栈是Linux内核用来管理网络连接,处理TCP/IP协议的模块。Linux内核实现了包括IP、TCP、UDP、ARP、ICMP等协议,它们负责确保网络数据的传输、数据流的控制等任务。

5. 文件系统

文件系统负责管理Linux内核中的文件和目录,在标准的Linux内核中支持的文件系统包括EXT2、EXT3、EXT4、NTFS、FAT、F2FS等。

6. 虚拟文件系统

虚拟文件系统是Linux内核的一个特有的概念,它将各种不同类型的资源都以类似文件的形式进行管理。用户使用文件操作函数来读写本地文件,而Linux内核使用虚拟文件系统管理所有资源。

7. 内存管理

内存管理是Linux内核中最重要的任务之一,它负责管理计算机中的各种内存。在Linux内核中,内存管理包括内存页面的管理、页面的映射、内核堆的动态分配等。

8. 进程调度

进程调度是Linux内核用来管理运行在计算机中的各个进程的调度机制,内核提供了多种类型的调度器,以实现不同的调度策略。

9. 驱动程序

驱动程序是Linux内核中与硬件交互的实现方式之一,Linux内核中的驱动程序需要与硬件设备沟通,以便向其他内核模块提供硬件支持。

10.安全模块

Linux内核的安全模块用于确保Linux内核中的安全性。安全模块负责管理Linux内核的安全模式,并提供各种类型的安全策略。

11. 网络命名空间

网络命名空间是Linux内核中的一种机制,能够将网络互相隔离。它可以让不同的网络应用程序在不同的命名空间中运行,达到保护网络安全和优化网络性能的目的。

12. 容器

容器是Linux内核一种非常受欢迎的特性,它能够隔离各个进程和文件系统,以方便分发和部署应用程序。容器通过虚拟化的机制,实现隔离和资源限制。

13. 实时性

Linux内核提供了一些特殊的机制,来确保实时性。这些机制包括提供实时调度器、尽可能快速的中断响应时间、减少延迟等。

二. Linux内核的开发

Linux内核的开发主要是由全球各地的数千名志愿者组成的Linux内核开发者社区进行开发。由于Linux操作系统的开放性,任何人都可以加入到Linux内核开发者社区中,参与Linux内核的开发。

1. Linux内核的发展历程

Linux内核的发展历程可以追溯到1991年,当时,芬兰的一名学生Linus Torvalds在他的个人电脑上编写了Linux内核的之一个版本。在Linux的早期开发阶段,Linux内核的开发者主要是一些个人和小团队,他们通过各种方式向社区做出了贡献。到1993年,由于Linux的可移植性、稳定性和吸引力逐渐提高,Linux逐渐成为了一个庞大的代码库,吸引了众多的开发者参与其中。

2. Linux内核的开发流程

如今的Linux内核开发流程是由Linux内核开发者社区维护的,其中包括:主开发者Linus Torvalds、Linux稳定的维护者、内核架构维护者、主要子系统的负责人以及各种社区成员。

Linux内核开发的流程如下:

– 开发者对代码进行修改

– 发布补丁、驱动或其他的内核代码

– 维护者对新的代码进行审核,做出决策

– 维护者将新代码与内核整合,生成新的内核版本

– 内核版本发布,并作为默认内核供使用

在Linux内核开发的过程中,由于参与人员多且杂,为了方便管理和快速反应,Linux内核开发者社区采用分层管理和邮件列表等工具进行管理。

三. Linux内核的编译和安装

编译Linux内核需要Linux系统环境、编译工具及相关的开发包,步骤如下:

1.下载Linux内核

从Linux内核官网下载最新内核代码(https://www.kernel.org/)。

2. 解压内核文件

解压下载的内核文件。

3. 内核配置

进入内核目录,运行”make menuconfig”,根据需要对内核进行配置。配置完成后保存。

4. 构建内核

运行”make”命令,在代码库的根目录下运行”make”命令,或者在内核源代码根目录下运行下面的命令:

make bzImage

5. 安装内核

内核构建完成后,在/usr/src/linux目录下可以找到bzImage文件和modules文件夹。将内核文件拷贝到/boot目录下,并更新系统启动镜像。

6. 配置/proc文件系统

运行”mount -t proc proc /proc”,将/proc目录挂载到内存中。

7. 配置root文件系统

使用initrd或initramfs配置root文件系统。initrd或initramfs是一个小型文件系统,可以用来引导内核,以启动正常的root文件系统。

四.

Linux内核作为Linux操作系统的核心组成部分,包含各种功能模块,其开放性、稳定性及高度的扩展性都是Linux操作系统得以广泛应用的重要因素。对于开发人员来说,深入掌握Linux内核的知识非常重要。本文详细介绍了Linux内核的结构、开发历程、编译和安装等方面,希望能够对读者有所帮助。

相关问题拓展阅读:

升级Linux操作系统内核奋斗记

升级linux内核奋斗记

我的piii dell机运行着内核2.4.的redhat,自从linux内核2.6发布以来一直想把该系统升级到内核2.6。经过一番艰辛万苦,终于成功了。为了体验一下在linux下编写多线程程序的步骤,又更新gcc和c语言库。在此愿和各位朋友共享这段经历,共享这段成果。(可能有记录错误,仅供参考)。

具体步骤包括以下内容:

1,升级内核的具体步骤

2,更新gcc

3,使用glibc2.3.5

4,使用nptl线程进行编程

在此之前,先简要地介绍一下linux内核2.6所做的改进及新增功能。linux2.6主要在以下的10个方面作了很大的改进,简单概括如下,有关详细情况,请参阅相关资料。

1)通过改善并行处理能力和采用posix线程等,提高了系统的处理能罩亏信力,从而linux真正具备大型信息系统所要求性能。

2)通过改善文件系统的输出/输入能力和提高对大容量内存的利用效率,使得linux能够更胜任大型信息系统中的数据处理。

3)加强了对数物轮据库应用程序的支持。

4)提高了抗系统高负荷时能力。

5)提高了系统的可用性,包括对不停机空此时备份和不停机时更换硬件功能的支持。

6)强化了对网络的支持,增加了对ipv6, sctp, ipsec,等的支持。

7)通过增加访问控制和内核暗号化技术,提高了系统的安全性。

8)强化了对电源的管理。

9)强化了对嵌入式cpu和系统的支持。

10)添加了更多的硬件驱动程序。

一.升级内核

1, 下载linux-2.6.3.tar.bz2(可以是更新的版本)到/usr/src

bzcat linux-2.6.3.tar.bz2 | tar xvf – cd linux-2.6.阅读readme及changes 文件,确认必须的工具软件。因为不是笔记本电脑和笔记本电脑有关的软件可以忽略。发现module-init-tools需要更新。

2,下载module-init-tools-0.9.13.tar.bz2

bzcat module-init-tools-0.9.13.tar.bz2 | tar xvf – cd module-init-tools-0.9.13 ./configure –prefix=/usr/local/module-init make make moveold make install /usr/local/module-init/in/generate-modpobe.conf > /etc/modprobe.conf成功。

3, 编译linux内核

cd /usr/src/linux-2.6.3 make menuconfig一看太麻烦了,而且许多选项不知所云。退出该程序。 执行make oldconfig,对kernel2.6新增的不熟悉的选项作不选或为缺省。

make bzimage make modules modules_install pwd /usr/src/linux-2.6.3 mv arch/i386/boot/bzimage /boot/bzimage2.6.3 mv system.map /boot/system.map-2.6.3 cd /boot mv system.map oldsystem.map ln –s system.map-2.6.3 system.map,建立sys目录

mkdir /sys

5, 修改相关文件,增加对sys的支持

在/etc/rc.d/rc.sysinit文件增加对sys的支持。

1) 找到mount –f /proc的行,在其下面,增加 mount –f /sys

2) 找到 action $ “mounting proc filesystem:” mount –n –t proc /proc /proc 在其下面,增加action $ “mounting sysfs filesystem:” mount –n –t sysfs /sys /sys.

3) 把文件中的 ksyms 改成 kallsyms

在/etc/fstab文件中,增加一行:

none /sys sysfs defaults 0 0

在/etc/rc.d/init.d/halt中,增加对sys的支持,把 awk ‘$2 ~/^/$ | ^/proc | ^/dev / {next} 变为:

awk ‘$2 ~/^/$ | ^/proc | ^/sys | ^/dev / {next}

6,启动

修改/etc/lilo.conf, 增加下面的设置

… image=/boot/bzimange2.6.3 label=linux2.6.3 read-only root=/dev/hda3(由自己的pc设置决定)成功。

二,更新gcc (因为gcc2.95.3无法编译glibc-2.3.5)

下载gcc-3.4.4.tar.bz2

bzcat gcc-3.4.4.tar.bz2 | tar xvf – cd gcc-3.4.4 ./configure –prefix=/usr/local/gcc344 –enable-shared –enable-threads –enable-threads=posix –enable-languages=c,c++,f77 make bootstrap (因为使用cflags选项时,出错了,所以省略) make install ln –s /usr/local/gcc344/bin/gcc /usr/bin/gcc

三,使用glibc-2.3.5

1)、通过调查发现要编译glibc-2.3.5,要求binutils在2.13以上。所以必须安inutils-2.14

下载binutils-2.14.tar.gz

tar zxpvf binutils-2.14.tar.gz mkdir binutils-build cd binutils-build ../binutils-2.14/configure –prefix=/usr –enable-shared make tooldir=/usr make check make tooldir=/usr install cp ../binutils-2.14/include/libiberty.h /usr/include) 安装glibc-2.3.5

下载 glibc-2.3.5.tar.gz 和 glibc-2.3.5-fix_test-1.patch

tar zxpvf glibc-2.3.5.tar.gz patch –np1 –i ../glibc-2.3.5-fix_test-1.path mkdir glibc-build cd glibc-build ../glibc-2.3.5/configure –prefix=/usr/local/glibc235 –enable-add-ons=linuxthreads –enable-kernel=2.6.0 (若安装在/usr目录下,很危险,可能会损坏你的系统) make make check (必须执行的一步) make localedata /install-locales (对应各国文字) mkdir /usr/man/man3(man的安装路径) make –c ../glibc-2.3.5/linuxthreads/man install上面的安装完成以后,更好把/usr/local/glibc235/lib和/usr/local/glibc235/include加入到系统的路径中,这样在编译程序时,就不必指定库和header文件的路径了。

四、使用nptl进行线程编程

#include #include #include #include void thread_fun(void * arg); char message = “i am created thread”; int main() { int rnt; pthread_t new_thread; void *thread_result; rnt=pthread_create(&new_thread,null, thread_fun, (void*) message); if (rnt != 0) { perrer (“thread creation failed”); exit(exit_failure); } printf(“waiting for other thread to finish…”); rnt = pthread_join(new_thread, &thread_result); if (rnt != 0) { perrer (“thread join failed”); exit(exit_failure); } printf(“thread join, it returned %s ”, (char*) thread_result); printf(“message now %s”, message); exit(exit_success); } void *thread_fun (void * arg) { printf(“the new thread is running. argument was %s”,(char*)arg); sleep(3); strcpy(message, “bye”); pthread_exit(“thank you for the test”); }编译

gcc -d_reentrant test_thread.c -o test_thread -lpthread ./test_thread成功了。

linux内核一般有3个主要部分是什么?

进程调度器:这个内核子系统负责在系统上同时运行的所有进程之间公平地分配岁物CPU时间。

内物嫌存管理单元:这个内核子单元负责在系统上运行的各种进程之间合理分配内存资源。MMU不仅仅为每个进程提供单独的虚拟地址空间。

虚拟乎蚂液文件系统:这个子系统负责提供一个统一的接口来跨不同的文件系统和物理存储介质访问存储的数据。

linux内核 _的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux内核 _,深入剖析:Linux 内核探究,升级Linux操作系统内核奋斗记,linux内核一般有3个主要部分是什么?的信息别忘了在本站进行查找喔。


数据运维技术 » 深入剖析:Linux 内核探究 (linux内核 _)