Linux内核入门之内核基础知识介绍

Hello everybody out there using minix . I'm doing a (free) operation system (just a hobby,won't be big and professional like gnu) for 386(486) AT clones.————Linus Torvalds

为什么要学习Linux内核

  • 更深的入了解软件与硬件的操作
  • 嵌入式系统开发的进阶必备
  • 更深入的理解Linux系统的各个层面,对于Linux平台开发者有益
  • 由底层到上层应用全面的知识拓宽技术的纵向

首先要对Linux内核的基本构成有一个概要的了解。简单介绍内核的地位,内核子系统的关系,以及内核源代码目录的组成。

Linux内核与每天使用的Ubuntu、CentOS等等不同,Ubuntu是操作系统,Linux内核则是操作系统的核心。在核心之上会集成各种操作系统的核心组件如glibc、Gnome、shell等,此外还有各种系统自带的应用程序。应用程序直接或间接调用系统调用接口来获得内核提供的服务,系统调用接口通常被称为系统调用门,是系统由用户态进入内核态的一种途径。此外内核还提供中断门用于响应外设的任务处理请求,中断门是系统进入内核的另外一种途径。此外还有异常门。

Linux内核由进程调度、内存管理、文件系统、进程间通信和网络五个子系统组成。下边分别介绍各个子系统的作用。

进程调度:控制进程对CPU的访问,当需要选择下一个进程运行时,进程调度程序根据进程调度策略选在最值得实行的进程。可运行进程实际上是正在等待CPU资源的进程,如果某个资源在等待其他资源,是不会被调度的。 进程调度子系统是最核心的,其它子系统都依赖于进程调度子系统的进程调度。

内存管理:允许多个进程安全的共享主内存区域。Linux支持虚拟内存。硬件物管部分提供了进程的内存管理,硬件相关部分为内存管理硬件提供了虚拟接口。

文件系统:隐藏各种硬件的细节,为所有设备igong同意的接口,可分为逻辑文件系统和设备驱动程序。逻辑文件系统是linux支持的文件系统,如ext2,fat等。设备驱动程序是为每种硬件控制器编写的驱动程序模块。

网络子系统:提供各种网络标准的存取和各种网络硬件的支持。可分为网络协议和驱动程序


Linux内核源代码的构成从最初发展到现在有很大的变化,下图给出的是2.6.34的内核源代码树。进程间通信:
提供进程间通信的各种机制:共享内存、管道等

 

scripts目录

  • 该目录中不包含任何核心代码
  • 该目录存放用来配置内核的脚本和应用程序源码
  • 当输入make menuconfig或make xconfig等命令进行内核配置时,会读取当前体系结构的Kconfig进行配置,配置完成后会在内核根目录中生成.config文件

drivers目录

  • 目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于/drivers/sound;block 下为块设备驱动程序,比如ide(ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看/drivers/block/genhd.c中的device_setup()。它不仅初始化硬盘,也初始化,因为安装nfs文件系统的时候需要网络。其他: 如, Lib放置核心的库代码; Net,核心与网络相关的代码; Ipc,这个目录包含核心的进程间通讯的代码; Fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和ext2。

lib目录

  • gnuzip解压缩算法,用于在系统启动过程中将压缩的内核镜像解压缩
  • 实现一个C库的子集,主要包括字符串和内存操作灯相关函数

mm目录

  • 包含了体系结构不相关的内存管理代码

include目录

  • 包含了Linux源码目录树中绝大部分的头文件
  • 与平台无关的头文件在 include/linux 子目录下

init目录

  • 系统核心初始化的代码
  • 内核初始化入口函数start_kernel就在该目录的main.c文件中

kernel目录

  • Linux内核的最核心代码
  • 系统的核心模块:进程管理、进程调度、中断处理、系统时钟管理、同步机制等
  • 该目录代码实现了这些核心模块的主体框架,独立于具体的平台和体系结构

arch目录

  • 体系结构相关代码,向平台无关的模块提供功能接口
  • kernel子目录:体系结构相关信号量和对称多处理器
  • lib子目录:依赖于体系结构的辅助功能,如特定体系结构的strlen和memcpy函数,开销小、高效
  • mm子目录:体系结构特定的内存管理模块,包括内存初始化、页表管理等
  • boot子目录:包含当前体系结构上系统引导过程使用的部分或全部代码,完成向特定平台系统内存加载内核镜像的工作

你可能感兴趣的:(linux,kernel)