【Linux驱动开发 ---- 2.1_深入理解 Linux 内核架构】

Linux驱动开发 ---- 2.1_深入理解 Linux 内核架构

目录

目标:掌握 Linux 内核的基本组成,理解内核的工作原理和结构。

重点

  • 进程调度和内存管理。
  • 文件系统的基本原理。
  • 设备管理。
  • 内核模块与驱动程序的协作。

1. Linux 内核架构概述

Linux 内核架构主要包括以下几个核心部分:

  1. 进程管理:内核负责进程的创建、调度、终止等工作。
  2. 内存管理:内核负责物理内存和虚拟内存的管理。
  3. 文件系统:负责文件的读写和管理,内核提供了对磁盘的操作接口。
  4. 网络管理:管理网络接口,处理网络数据。
  5. 设备管理:控制硬件设备,驱动程序与硬件设备交互。

(1)进程管理

进程管理是内核的一个重要组成部分,它确保操作系统能够有效地分配 CPU 时间来运行各个进程。

  • 进程调度

    • Linux 使用 时间片轮转算法,每个进程按顺序分配一定时间来运行。
    • 进程调度类 :在 Linux 内核中,进程调度的核心是调度类(如 CFSRT)。
  • 内核调度的常用函数

    • schedule():调度器的核心函数,选择一个进程运行。
    • fork():创建新进程。
    • exec():执行新程序。

实践任务

sh 复制代码
ps aux  # 查看所有进程
top     # 实时查看进程状态


(2)内存管理

Linux 内核负责管理系统的内存资源,包括 虚拟内存物理内存

  • 虚拟内存:通过分页技术,虚拟内存使得每个进程看起来有一个独立的内存空间。
  • 物理内存:实际的 RAM 被分配给进程。
  • 内存分配器
    • kmalloc():内核分配内存。
    • free():释放内存。
    • mmap():映射文件或设备到内存空间。

案例 :使用 free 命令查看系统内存使用情况:

sh 复制代码
free -h    # 查看内存使用情况(单位:GB、MB)
cat /proc/meminfo  # 查看内存详细信息


(3)文件系统

文件系统是内核中的一个重要组件,负责管理存储设备上的文件和目录。

  • 超级块(Superblock):包含文件系统的元数据。
  • 文件描述符:内核使用文件描述符来标识和管理文件。
  • 常见文件系统:ext4、Btrfs、F2FS 等。

实践任务

  • 查看文件系统的详细信息:
sh 复制代码
df -T   # 查看挂载文件系统的类型
复制代码
mount   # 查看挂载的文件系统

2. Linux 内核中的设备管理

设备管理是内核的一个核心功能,Linux 内核通过设备驱动来控制硬件设备。

(1)设备分类

  • 字符设备:像键盘、鼠标、串口等设备,数据按字符流方式读写。
  • 块设备:硬盘、SSD、U 盘等设备,数据按块读写。
  • 网络设备:网络接口卡(NIC)等设备,负责数据包的收发。

(2)设备文件

设备文件位于 /dev 目录下,它们是用户空间与内核之间的桥梁,用户通过设备文件与硬件设备交互。

案例

sh 复制代码
ls /dev  # 查看设备文件

(3)驱动模型与内核模块

Linux 使用 设备驱动模型 来与硬件设备进行交互,常见的有:

  • 平台设备:没有总线的设备,如 GPIO、I2C。
  • PCI 设备:基于 PCI 总线的设备,如显卡、网卡。

实践任务

sh 复制代码
lsmod  # 查看已加载的内核模块
insmod my_driver.ko  # 加载自定义驱动模块
rmmod my_driver      # 卸载驱动模块

3. procfssysfs 深入分析

(1)/proc 文件系统

  • /proc 是一个虚拟文件系统,包含了内核和进程的动态信息。
    • /proc/cpuinfo:查看 CPU 信息。
    • /proc/interrupts:查看硬件中断信息。
    • /proc/meminfo:查看内存使用信息。

案例 :通过 /proc 获取系统信息:

sh 复制代码
cat /proc/cpuinfo
cat /proc/interrupts

(2)/sys 文件系统

  • /sys 是另一个虚拟文件系统,主要用于访问设备信息和控制设备的行为。
    • /sys/class/:显示设备分类信息。
    • /sys/devices/:显示设备的物理层次信息。

实践任务

sh 复制代码
ls /sys/class
cat /sys/class/net/eth0/address  # 查看网络接口的 MAC 地址

4. 总结与作业

今日学习回顾

  • 深入了解了 Linux 内核架构,包括进程管理、内存管理、文件系统和设备管理。
  • 通过 procfssysfs 获取系统硬件和内核状态。
  • 学习了内核中设备文件的概念和如何使用模块与设备交互。

📌 作业

  1. ps aux 查看当前系统的进程,分析系统中占用 CPU 和内存最多的进程。
  2. top 命令,记录下 CPU 使用率变化,并分析系统负载。
  3. 创建一个小脚本,定时显示 /proc/cpuinfo/proc/meminfo 的内容,并记录到日志文件中。

学习内容,包括了内核架构、进程管理、内存管理、文件系统、设备管理等内容。

相关推荐
liliangcsdn31 分钟前
金融领域LLM开源测试集
人工智能·金融
卓豪终端管理38 分钟前
如何实现补丁管理自动化?
运维·人工智能·安全·网络安全·自动化·补丁管理·补丁自动化
llwszx2 小时前
Spring Boot 整合 Spring AI 与 MCP 开发智能体工具指南
人工智能·spring boot·spring·智能体·spring ai·mcp
xyzso1z2 小时前
飞书 MCP:AI 编码工具与飞书文档的桥梁
人工智能·飞书·mcp
Honeysea_702 小时前
目标检测相关【清晰易懂】
人工智能·计算机视觉·目标跟踪
虾球xz3 小时前
CppCon 2016 学习:GAME ENGINE USING C++11
大数据·开发语言·c++·学习
虾球xz3 小时前
CppCon 2016 学习:fixed_point Library
开发语言·c++·学习
宿辞1923 小时前
LINUX中MYSQL的使用
android·linux·mysql
HaiQinyanAN3 小时前
【学习笔记】nlohmannjson&&cjson
c++·笔记·学习·json
Eric.Lee20213 小时前
数据集-目标检测系列- 杯子 数据集 bottle >> DataBall
人工智能·目标检测·计算机视觉·杯子检测·bottle detect