一、linux内核结构框图
对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。
框图可以看出来,linux系统,包括五个系统
一、Linux内核结构介绍
Linux 内核是操作系统的核心部分,它负责管理系统的资源、进程调度、设备驱动程序等核心功能。以下是 Linux 内核的主要组成部分和结构:
进程管理:
调度器(Scheduler): 决定在多任务系统中哪个进程获得 CPU 时间。
进程控制块(Process Control Block,PCB): 存储有关进程的信息,如寄存器状态、进程状态等。
内存管理:
虚拟内存管理: 管理进程的虚拟地址空间,包括分页机制、页面置换等。
物理内存管理: 负责跟踪系统中的物理内存,包括内存分配、释放等。
文件系统:
虚拟文件系统(VFS): 提供文件系统的抽象接口,使得不同类型的文件系统可以共享相同的 API。
文件描述符表: 管理打开文件的信息,每个进程都有一个文件描述符表。
设备驱动程序:
字符设备和块设备驱动: 用于管理字符设备(如终端)和块设备(如硬盘)。
网络设备驱动: 处理网络设备和协议栈。
网络协议栈:
TCP/IP 协议栈: 包括网络层、传输层等,用于实现网络通信。
套接字层: 提供应用程序与网络协议栈之间的接口。
系统调用接口:
系统调用: 提供用户空间程序与内核之间的接口,允许用户程序请求内核执行特权操作。
中断和异常处理:
中断处理程序: 处理硬件中断,允许外部设备向 CPU 发送信号。
异常处理程序: 处理由于错误或异常情况而引发的事件。
定时器和时钟管理:
内核定时器: 用于实现计时和时间管理。
实时时钟(RTC): 处理硬件时钟。
同步和互斥机制:
信号量、自旋锁、互斥体等: 用于确保多个进程或线程之间的同步和互斥。
系统初始化和启动:
引导加载程序(Bootloader): 负责加载内核镜像到内存中。
启动过程: 初始化硬件、文件系统等,最终执行第一个用户空间进程。
这些组件一起构成了 Linux 内核的核心结构。内核的源代码是 modulized 的,允许添加或删除特定功能的模块,以适应不同的需求。整个内核的结构和实现细节非常庞大,具体的功能和特性取决于具体的内核版本和配置。
内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需要管寄存器,协议,总线…(单片机会去直接操作),这些全部由操作系统做好。动不动写个操作系统是不现实的。
三、驱动认知
驱动(Driver)是一种用于使操作系统与硬件或其他软件交互的程序或模块。驱动程序充当操作系统与硬件之间的桥梁,允许它们有效地通信和协作。以下是关于驱动的一些基本认知:
硬件与操作系统的交互: 操作系统本身并不了解所有硬件设备的细节。驱动程序提供了一个标准的接口,使得操作系统能够与硬件设备进行通信,而无需了解设备的底层细节。
功能和作用:
设备驱动: 控制和管理硬件设备,如打印机、图形卡、网络适配器等。
文件系统驱动: 提供对不同文件系统的支持,例如 FAT、NTFS、ext4 等。
虚拟设备驱动: 创建虚拟设备,如虚拟磁盘、虚拟网络设备等。
字符设备驱动和块设备驱动: 用于字符设备(如终端)和块设备(如硬盘)的控制。
网络设备驱动: 管理网络接口卡和网络协议栈的通信。