HaveFunWithEmbeddedSystem/Chapter8_SOC_与_Linux/8.1_Linux_系统架构.md

9.0 KiB
Raw Permalink Blame History

8.1 Linux 系统架构

一个完整的 Linux 系统一般有4个主要部分内核、Shell、文件系统和应用程序。内核、Shell 和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

Linux 系统构成

Linux 内核

建立操作系统的目的是实现系统安全,避免因应用程序导致系统漰溃的情况,减少应用程序开发压力,集中管理系统资源。为实现这一目的,操作系统划分为用户态和内核态。

内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图:

Linux 内核

系统调用接口

SCI 层提供了某些机制执行从用户空间到内核的安全函数调用。这个接口依赖于体系结构甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

应用程序调用系统接口后,从用户态陷入到内核态执行。

内存管理

对任何一台计算机而言其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

进程管理

进程实际是某特定应用程序的一个运行实体。在 Linux 系统中能够同时运行多个进程Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。

文件系统

和 UNIX 操作系统一样Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构并且由一个单独的实体代表这一文件系统。Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上从而让不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2、Ext3、Ext4它也是 Linux 土生土长的文件系统。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统。

虚拟文件系统VirtualFileSystemVFS隐藏了各种硬件的具体细节把文件系统操作和不同文件系统的具体实现细节分离了开来为所有的设备提供了统一的接口VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指 Linux 所支持的文件系统,如 Ext2FAT 等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

虚拟文件系统VFS是 Linux 内核中非常有用的一个方面因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS在用户和文件系统之间提供了一个交换层。

VFS 在用户和文件系统之间提供了一个交换层:

VFS

在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。

文件系统层之下是缓冲区,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用它们。

设备驱动程序

设备驱动程序是 Linux 内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。

设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,而不是 IDE 驱动程序。

网络接口

提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知TCP/IP 协议是 Internet 的标准协议,同时也是事实上的工业标准。

Linux 的网络实现支持 BSD 套接字支持全部的TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。网络设备驱动程序负责与硬件设备通讯每一种可能的硬件设备都有相应的设备驱动程序。

Linux Shell

Shell 是系统的用户界面提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行是一个命令解释器。另外Shell 编程语言具有普通编程语言的很多特点,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。

目前主要有下列版本的 Shell。

  1. Bourne Shell是贝尔实验室开发的。
  2. BASH是 GNU 的 Bourne Again Shell是 GNU 操作系统上默认的 Shell大部分 Linux 的发行套件使用的都是这种 Shell。
  3. Korn Shell是对 Bourne Shell 的发展,在大部分内容上与 Bourne Shell 兼容。
  4. C Shell是 SUN 公司 Shell 的 BSD 版本。

Linux 文件系统

文件系统是文件存放在磁盘等存储设备上的组织方法。Linux 系统能支持多种目前流行的文件系统EXT2、EXT3、FAT、FAT32、VFAT 和 ISO9660。

文件类型

Linux 下面的文件类型主要有:

  1. 普通文件C 语言元代码、Shell 脚本、二进制的可执行文件等。分为纯文本和二进制。
  2. 目录文件:目录,存储文件的唯一地方。
  3. 链接文件:指向同一个文件或目录的的文件。
  4. 设备文件:与系统外设相关的,通常在/dev下面。分为块设备和字符设备。
  5. 管道FIFO文件: 提供进程之间通信的一种方式
  6. 套接字socket 文件: 该文件类型与网络通信有关

Linux 文件系统主要目录

  • /bin二进制可执行命令
  • /dev设备特殊文件
  • /etc系统管理和配置文件
  • /home用户主目录的基点比如用户“user”的主目录就是“/home/user”可以用“~”表示
  • /lib标准程序设计库又叫动态链接共享库作用类似windows里的.dll文件
  • /sbin系统管理命令这里存放的是系统管理员使用的管理程序
  • /tmp公用的临时文件存储点
  • /root系统管理员的主目录呵呵特权阶级
  • /mnt系统提供这个目录是让用户临时挂载其他的文件系统。
  • /proc虚拟的目录是系统内存的映射。可直接访问这个目录来获取系统信息。
  • /var某些大文件的溢出区比方说各种服务的日志文件
  • /usr最庞大的目录要用到的应用程序和文件几乎都在这个目录。其中包含
  • /usr/bin众多的应用程序
  • /usr/sbin超级用户的一些管理程序
  • /usr/includeLinux 下开发和编译应用程序所需要的头文件
  • /usr/lib常用的动态链接库和软件包的配置文件
  • /usr/man帮助文档
  • /usr/src源代码Linux 内核的源代码就放在/usr/src/linux里
  • /usr/local/bin本地增加的命令
  • /usr/local/lib本地增加的库

Linux 应用

标准的 Linux 系统一般都有一套都有称为应用程序的程序集它包括文本编辑器、编程语言、X Window、办公套件、Internet 工具和数据库等。

本章主要讲解 Linux 的内核部分引导和启动、设备树、ACPI、驱动等