打工人,打工魂,打工的都是人上人
Linux系统由4个部分组成:shell、kernel、filesystem、user application。其中shell、kernel、filesystem组成了操作系统结构,他们使user可以运行程序、管理文件及使用系统。四者的关系如下图所示。
Linux Kernel
Kernel是User Application和Computer Source交流的中介,其组成结构如下图。在Linux系统中,用户无法直接访问Kernel,需要通过System API才能实现对Kernel的访问。
Linux把除了他本身(Linux操作系统内核)之外的东西都看作是虚拟文件系统的文件,无论是硬件、软件、还是内存中的东西,都可以在VFS中相应的子目录进行操作。
启动Linux系统时,首先电脑把Linux内核加载到内存中,内核提供了各种管理功能。内核启动后,在内存中建立VFS,然后内核利用他的各种管理功能,以文件的形式管理计算机的软硬件
内存管理
Linux采用“虚拟内存”管理方式,让有限的物理内存满足Application对物理内存的大量需求。Linux将内存划分为内存页。对于大部分体系结构,内存页的大小为4KB。
进程管理
Linux多任务的本质是并发。通过进程调度实现对时间片的管理。进程调度通过进程优先级控制进程对CPU的访问。通过“多任务”机制,每个进程有独立的进程空间,在运行时可以认为是进程独占计算机,防止某个进程崩溃影响其他进程。
进程间可以通过信号、管道、共享内存、信号量和套接字等实现通信。
文件系统
Linux将独立的文件系统组合成一个有层次的树状结构。
虚拟文件系统VFS是在用户和文件系统中间的一个抽象层,提供了用户操作不同文件系统的通用接口。VFS使用户不需要知道文件所在文件系统类型而可以直接操作。
VFS之上是诸如open()、read()的函数的抽象API,VFS下是各个文件系统的实现。
文件系统下是缓冲区缓存Buffer Cache,BufferCache通过保存将数据保留一段时间优化对物理设备访问。
设备驱动程序
设备驱动程序是Kernel中的重要组成部分,它运行在高特权级处理器环境。
所有对Hardware Device的调用都需要有驱动程序。
网络接口(net)
包含网络协议和网络驱动程序两部分。
网络协议部分实现每一种可能的网络协议。
网络驱动程序负责网络设备的调用。
Linux Shell
Shell提供了用户与内核的交互界面,常用调用shell的方法有两种:命令行直接输入和shell脚本。
文件系统
Linux文件系统是文件在磁盘等存储设备上的组织方法。Linux中,无论操作系统管理几个磁盘分区,只会有一个目录树结构。完整的目录书结构类似下图。
Linux磁盘分区
硬盘分区主要有三种,分别是主分区、扩展分区、逻辑分区。任何一个分区都要挂载到目录上。
主分区马上可以被使用,无法再进行分区。
扩展分区需要被再次分区才能使用。
逻辑分区是由扩展分区建立起来的分区。
硬盘分区的标识一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X来标识,其中[a-z]代表硬盘号,X代表硬盘内的分区号。X为1-4是主分区(包含扩展分区),从5开始是逻辑分区。
Linux文件系统
Linux中,每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些文件系统总成一个总的目录结构层次。
传统的磁盘与文件系统中,一个分区只能被格式化为一个文件系统。但在新技术中,比如LVM、软件磁盘阵列技术,可以将一个分区格式化为多个文件系统(LVM)也可将多个分区合成一个文件系统(LVM、软件磁盘阵列)。
Linux文件系统特性
文件系统会把文件的一些属性,比如说权限,拥有者/组等信息放在inode中,而文件的实际数据放在data block中。另外还会有一个超级块(super block)记录整个文件系统的整体信息,比如inode和data block的使用情况。
磁盘分区被指定文件系统后,就会分为一个个大小1024、2048、4096Byte大小的块。第一块是super block,其中包含整个文件系统的整体信息,inode/block使用情况,指向空间inode和数据块的指针等信息。inode块是文件系统的索引,记录文件的属性和存放数据的位置信息。data block存放数据,如果数据过大,则会占用多个data block。
就像一本书有封面、目录和正文。文件系统中的super block就是书的封面,inode就是书的目录,data block就是书的正文。
文件系统分区时,会设置超级块、inode table和数据区域。查看一个文件时,inode table会调出文件的属性,并从数据区域调出文件内容。
下图展示了索引式文件系统,inode 4中会存储文件属性以及数据区域2、7、13、15,读取文件内容时,操作系统可以按照inode 4的指引将这四个block中数据读取出来。
下图展示了闪存的文件系统。闪存一般使用FAT文件系统,没有inode,每个block的号码记录在前一个block中。如果block太过分散,磁盘读取头无法一圈就读取所有block,就会多读几圈。如果blcok太过分散,就需要进行“碎片整理”,将分散的block整理在一起,便于读取。Ext2文件系统时索引时文件系统,基本不需要“碎片整理”
Linux Kernel Map: http://www.makelinux.net/kernel_map/
该地址中是Linux Kernel Map,可以直接查看每一个模块