当前位置: 首页 > news >正文

linux 架构详解

Linux 是一种开源的操作系统内核,最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核,用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。

整体架构

Linux系统通常被看作是一个层次化的结构,从上到下依次为用户空间、系统调用接口、内核空间。

  1. 用户空间:这是用户应用程序执行的地方。用户空间中的程序通过系统调用接口与内核进行交互。
  2. 系统调用接口:这是用户空间和内核空间之间的桥梁。用户程序通过系统调用接口请求内核提供的服务,如文件操作、进程管理等。
  3. 内核空间:内核空间是Linux内核的所在地,负责管理系统资源、提供基本功能,并与硬件进行交互。

内核架构

  • 核心功能:Linux 内核是操作系统的核心部分,负责管理硬件资源、提供硬件抽象层、调度进程以及处理系统调用。
  • 模块化设计:Linux 内核采用模块化设计,允许动态加载和卸载驱动程序和其他功能模块,提高了灵活性和性能。
  • 分层架构:内核分为多个层次,包括进程调度、内存管理、文件系统接口、网络堆栈等。
主要子系统
  1. 进程管理:内核负责进程的创建、调度和终止。它使用基于优先级的进程调度算法来选择下一个要运行的进程,并确保所有进程都能公平地访问CPU资源。此外,内核还提供了进程间通信机制,如信号、管道、共享内存等,来支持进程之间的数据交换和同步。

    • 进程调度器:负责在所有并发运行的进程之间公平分配处理时间。
    • 进程间通信(IPC):提供进程间的数据交换和同步机制。
  2. 内存管理:Linux内核通过虚拟内存技术来管理内存资源。它将物理内存划分为多个内存页,并使用内存管理算法来动态调整内存使用。此外,内核还提供了对内存页的抽象和跟踪,以及页面交换机制来支持多个用户同时使用内存。

    • 内存管理单元(MMU):负责内存地址的转换和内存保护。
    • 页面交换机制:将不常用的页面从内存中移出,并保存到磁盘上,以释放内存空间。
  3. 设备驱动程序:设备驱动程序是内核的一部分,负责与硬件设备进行通信。它们提供了一组操作系统可理解的抽象接口,使得操作系统能够与硬件设备进行交互。设备驱动程序通常与硬件设备的控制芯片相关。

  4. 文件系统:Linux内核支持多种文件系统类型,并通过虚拟文件系统(VFS)层提供了一个统一的接口来访问这些文件系统。VFS层隐藏了各种硬件的具体细节,并为上层应用提供了透明的文件系统操作。常见的文件系统类型包括Ext2、Ext4、Btrfs等。

    • 虚拟文件系统(VFS):提供统一的文件系统接口,支持多种文件系统类型。
    • 具体的文件系统实现:如Ext4、Btrfs等,负责具体的文件存储和管理。
  5. 网络接口:网络接口负责实现网络传输协议和与硬件设备的通信。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成,支持多种网络标准和硬件设备。

    • 网络协议层:实现各种网络传输协议,如TCP/IP协议。
    • 网络设备驱动程序:负责与硬件设备通信,实现数据的发送和接收。
  6. 安全机制:包括 SELinux 和 AppArmor 等安全框架。

用户空间架构

用户空间是用户应用程序执行的地方,包括各种应用程序、库文件和系统程序等。用户空间架构可以进一步细分为以下几个部分:

  1. Shell:命令行解释器,如 Bash、Zsh 等,用于执行命令和脚本。
  2. 应用程序:用户直接接触的部分,用于执行特定的任务或提供特定的功能。Linux系统上有大量的应用程序可供选择,包括文本编辑器、网络浏览器、媒体播放器等。
  3. 库文件:提供基本功能和数据结构的集合,可供应用程序使用。常见的库文件包括C标准库、数学库、SSH、HTTPD、CROND等。
  4. 系统程序:执行特定管理任务的实用程序,如文件和目录管理(cp、mv、rm等)、系统信息查看(ps、top等)、网络管理(ping、traceroute等)等。这些程序为用户提供了方便的工具来管理Linux系统。

引导过程

Linux 系统启动时经历了一系列步骤:

  1. BIOS/UEFI:初始化硬件,并选择启动设备。
  2. Boot Loader:如 GRUB 或 LILO,加载内核到内存中。
  3. Kernel Initialization:内核初始化硬件和设备驱动,挂载根文件系统。
  4. Init Process:第一个用户空间进程,通常是 systemd 或 sysvinit,负责启动其他服务和进程。

文件系统层次结构标准 (FHS)

Linux 文件系统遵循 FHS 标准,定义了文件和目录的标准布局:

  • /bin: 基本命令和工具。
  • /boot: 引导加载程序文件。
  • /dev: 设备文件。
  • /etc: 配置文件。
  • /home: 用户主目录。
  • /lib: 共享库。
  • /media: 可移动媒体挂载点。
  • /mnt: 临时挂载点。
  • /opt: 第三方软件包。
  • /proc: 虚拟文件系统,提供关于内核和进程的信息。
  • /root: root 用户的主目录。
  • /run: 运行时变量数据。
  • /sbin: 系统二进制文件。
  • /srv: 服务数据。
  • /sys: 设备和内核信息。
  • /tmp: 临时文件。
  • /usr: 用户程序和文件。
  • /var: 可变数据文件,如日志、缓存等。

权限模型

Linux 使用用户和组的概念来管理文件和目录的访问权限:

  • 所有者 (Owner): 文件或目录的所有者。
  • 组 (Group): 文件或目录所属的组。
  • 其他人 (Others): 既不是所有者也不是组成员的用户。

每个文件或目录都有读、写和执行权限,可以通过 chmodchown 命令进行设置。

进程管理

Linux 提供了强大的进程管理功能:

  • 进程调度:根据不同的调度策略分配 CPU 时间。
  • 进程间通信 (IPC):包括信号、管道、共享内存等机制。
  • 进程状态:如运行、睡眠、僵尸等状态。
  • 调试工具:如 ps, top, htop, strace 等。

网络

Linux 内置了丰富的网络功能:

  • 协议栈:支持 TCP/IP、UDP 等多种网络协议。
  • 网络接口:管理物理网卡、虚拟网络接口等。
  • 防火墙:如 iptables 和 nftables。
  • 路由:配置静态和动态路由。

安全性

Linux 提供了多层安全机制:

  • SELinux/AppArmor: 强制访问控制框架。
  • 加密文件系统: 如 eCryptfs 和 EncFS。
  • 审计: 如 auditd。
  • 容器技术: 如 Docker 和 LXC,提供了隔离环境。

其他组件

除了上述核心组件外,Linux系统还包括一些其他重要的组件:

  1. Shell:用户与Linux系统交互的命令行界面。用户可以通过Shell输入命令来运行程序、管理文件、查看系统状态等。常见的Shell类型包括Bourne Shell、Bash、Zsh等。Shell还提供了编程功能,允许用户编写Shell脚本来自动化任务。
  2. 桌面环境:为用户提供图形用户界面(GUI),使得用户可以通过图形界面来操作和管理系统。常见的桌面环境包括GNOME、KDE等。桌面环境提供了丰富的图形界面元素和工具,使用户能够更加方便地使用Linux系统。
  3. 发行版:Linux发行版是Linux内核和各种软件包、工具的集合,为用户提供了一个完整的操作系统环境。不同的发行版可能提供不同的界面、功能和软件包。常见的Linux发行版包括Ubuntu、Debian、Fedora等。

总结

综上所述,Linux系统的架构是一个层次化的结构,由用户空间、系统调用接口和内核空间组成。内核是Linux系统的核心,负责管理系统资源、提供基本功能,并与硬件进行交互。用户空间包括各种应用程序、库文件和系统程序等,为用户提供丰富的功能和体验。此外,Linux系统还包括Shell、桌面环境和发行版等其他重要组件。

http://www.lryc.cn/news/499621.html

相关文章:

  • Spring Data Elasticsearch
  • OpenGL编译用户着色器shader
  • 过期策略、内存淘汰机制
  • Scala的正则表达式
  • 关于睡懒觉
  • 【算法day10】栈与队列:拓展与应用
  • 爆肝Android JNI - 延展Android蓝牙JNI学习
  • 总篇:Python3+Request+Pytest+Allure+Jenkins接口自动化框架设计思路
  • Java的Map介绍以及常见方法和三种遍历方式
  • C/C++基础知识复习(39)
  • 自建服务器,数据安全有保障
  • CCF-GESP 编程能力认证 C++ 七级 2024年9月份判断题详细解析
  • 使用Vue3+Echarts实现加载中国地图,点击省份地图下钻(完整教程)
  • NUMA-非统一内存访问架构
  • 初识交换机和路由器
  • SQL面试题——滴滴SQL面试题 取出累计值与1000差值最小的记录
  • openEuler 22.03 使用cephadm安装部署ceph集群
  • C++哈希(一)
  • 阿拉丁论文助手:一键点亮学术之路
  • 视频码率到底是什么?详细说明
  • 嵌入式学习(17)-stm32F407串口使用注意事项
  • 汽车48V电气系统
  • 【人工智能基础05】决策树模型习题
  • rockit 学习、开发笔记(六)(VENC)
  • spring技术点
  • R语言使用“纽约市数据集中的优步皮卡”数据创建不同年度时间范围的可视化
  • 电阻计RM3544、RM3545的使用
  • Unity 策略游戏地图上的网格是如何实现的
  • 《鸟哥的Linux私房菜基础篇》---4 Linux档案的压缩与打包
  • Springboot 2.7+解决跨域问题,到底是在SpringBoot中添加拦截器还是修改Nginx配置