• 第3章(1) Linux内核相关概念


    Linux内核的组成

    1. Linux内核源代码的目录结构

    • arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如 i386、arm、
      arm64、powerpc、mips 等。Linux 内核目前已经支持30 种左右的体系结构。在arch
      目录下,存放的是各个平台以及各个平台的芯片对Linux 内核进程调度、内存管理、
      中断等的支持,以及每个具体的SoC 和电路板的板级支持代码。
    • block:块设备驱动程序 I/O 调度。
    • crypto:常用加密和散列算法(如 AES、SHA 等),还有一些压缩和 CRC 校验算法。
    • documentation:内核各部分的通用解释和注释。
    • drivers :设备驱动程序,每个不同的驱动占用一个子目录,如 char、block、net、
      mtd、i2c 等。
    • fs:所支持的各种文件系统,如 EXT、FAT、NTFS、JFFS2 等。
    • include:头文件,与系统相关的头文件放置在 include/linux 子目录下。
    • init:内核初始化代码。著名的 start_kernel() 就位于 init/main.c 文件中。
    • ipc:进程间通信的代码。
    • kernel :内核最核心的部分,包括进程调度、定时器等,而和平台相关的一部分代码
      放在arch/*/kernel 目录下。
    • lib:库文件代码。
    • mm:内存管理代码,和平台相关的一部分代码放在 arch/*/mm 目录下。
    • net:网络相关代码,实现各种常见的网络协议。
    • scripts:用于配置内核的脚本文件。
    • security:主要是一个 SELinux 的模块。
    • sound:ALSA、OSS 音频设备的驱动核心代码和常用设备驱动。
    • usr:实现用于打包和压缩的 cpio 等。
    • include:内核 API 级别头文件。

    2. Linux内核的组成部分
    Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)、和进程间通信(IPC) 五个子系统组成。Linux内核的组成部分与关系图如下:

    • 进程调度和内存管理:这两个子系统相互依赖,因为程序运行必须创建进程,而创建进程的第一步就是将程序和数据装入内存。
    • 进程间通信和内存管理:进程间通信依赖内存管理提供共享内存通信机制。
    • 虚拟文件系统和网络接口:虚拟文件系统依赖网络接口支持网络文件系统(NFS)。
    • 虚拟文件系统和内存管理:虚拟文件系统利用内存管理支持RAMDISk设备;内存管理利用虚拟文件系统支持交换。

    2.1 进程调度
    用于控制系统中多个进程对CPU的访问。内核中其他子系统都依赖于系统调度来实现挂起或恢复进程。进程状态转换图如下:

    • R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态)
    • S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal
    • D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟
    • T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根本没有时间片运行代码
    • Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。不可被kill, 即不响应任务信号, 无法用SIGKILL杀死
    • X (TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁

    2.2 内存管理
    主要作用是控制多个进程安全地共享主内存区域。当CPU提供内存管理单元(MMU)时,Linux内存管理对于每个进程完成从虚拟内存到物理内存的转换。

    2.3 虚拟文件系统
    Linux虚拟文件系统隐藏了各种硬件的具体细节,并未所有设备提供了统一的接口。并且,虚拟文件系统独立于具体的文件系统,是对各种文件系统的一个抽象。

    2.4 网络接口
    网络接口提供对网络标准的存取和网络硬件的支持。
    Linux中网络接口可分为:

    • 网络协议:负责实现网络传输协议
    • 网络驱动程序:负责与硬件设备通信

    2.5 进程间通信
    Linux支持的进程间通信机制有:信号量、共享内存、消息队列、管道、UNIX域套接字等,这些机制协助多进程、多自资源的互斥访问、进程间的同步和消息传递。

    3. Linux内核空间与用户空间
    Linux只能通过系统调用硬件中断完成从用户空间到内核空间的控制转移。

  • 相关阅读:
    Maven安装以及Idea安装
    EasyUi和jQuery模拟后台管理页面
    EasyUI初级入门2
    EasyUI初级入门
    JS高级
    好用的表单验证工具 vuelidate
    为页面/接口添加加载进度条
    Nuxt.js(二、解决首屏速度与SEO)
    Nuxt 的介绍与安装
    Axios及其async await封装
  • 原文地址:https://www.cnblogs.com/raina/p/11114105.html
Copyright © 2020-2023  润新知