1.Linux 内核核心作用Linux 内核是操作系统的核心底层程序介于硬件和应用程序之间是整个系统的「大管家」核心作用分 7 大类1. 进程管理任务调度1.负责创建、销毁、暂停、恢复进程/线程2.时间片轮转调度让CPU同时跑多个程序3.进程优先级、抢占式调度、进程间通信IPC2. 内存管理1.管理整机物理内存、虚拟内存2.实现分页、分段、内存交换Swap3.给每个进程分配独立虚拟地址空间隔离互不干扰4.内存回收、缓存/缓冲区管理3. 设备驱动管理1.对接硬件硬盘、网卡、显卡、USB、外设等2.提供统一驱动框架屏蔽硬件差异3.向上给应用提供标准接口向下控制硬件寄存器4. 文件系统管理1.支持多种文件系统Ext4、XFS、NTFS、FAT32等2.统一虚拟文件系统VFS抽象层3.管理文件读写、权限、目录、挂载、磁盘配额5. 网络协议栈1.内置完整TCP/IP协议栈2.处理网卡收发包、路由、端口、套接字Socket3.支持网桥、虚拟网卡、VPN、防火墙Netfilter/iptables6. 系统调用接口1.给上层应用提供系统调用open/read/write/fork 等2.应用不能直接操作硬件必须通过内核系统调用陷入内核态执行7. 权限与安全、资源隔离1.用户/权限管理、UID/GID、文件权限2.支持Namespace、Cgroup容器隔离Docker底层依赖3.系统资源限制CPU、内存、IO配额4.内核安全机制、地址空间随机化、权限管控2.文件系统2.1 什么是文件系统操作系统中负责管理和存储文件信息的软件机构称为文件管理系统简称文件系统。 通常文件系统是用于存储和组织文件的一种机制便于对文件进行方便的查找与访问。 文件系统是对文件存储设备的空间进行组织和分配负责文件存储并对存入的文件进行保护和检索的系统。 它负责为用户建立文件存入、读出、修改、转储文件控制文件的存取当用户不再使用时撤销文件等。 随着文件种类的增多扩增了更多的文件系统为了对各种文件系统进行统一的管理与组织。2.2 Linux文件系统Linux将文件系统分为了两层VFS虚拟文件系统、具体文件系统如下图所示VFSVirtual Filesystem Switch称为虚拟文件系统或虚拟文件系统转换是一个内核软件层在具体的文件系统之上抽象的一层用来处理与Posix文件系统相关的所有调用表现为能够给各种文件系统提供一个通用的接口使上层的应用程序能够使用通用的接口访问不同文件系统同时也为不同文件系统的通信提供了媒介。VFS并不是一种实际的文件系统它只存在于内存中不存在任何外存空间VFS在系统启动时建立在系统关闭时消亡。VFS由超级块、inode、dentry、vfsmount等结构来组成。Linux系统中存在很多的文件系统例如常见的ext2,ext3,ext4,sysfs,rootfs,proc…等等。2.3 VFSVFS在linux架构中的位置从用户的使用角度Linux下的文件系统中宏观上主要分为三层1.上层的文件系统的系统调用System-call 2.虚拟文件系统VFS(Virtual File System)层 3.挂载到VFS中的各种实际文件系统。VFS在整个Linux系统中的架构视图如下Linux系统的User使用GLIBCPOSIX标准、GUN C运行时库作为应用程序的运行时库然后通过操作系统将其转换为系统调用SCIsystem-call interfaceSCI是操作系统内核定义的系统调用接口这层抽象允许用户程序的I/O操作转换为内核的接口调用。2.3.1 用户如何透明的去处理文件我们知道每个文件系统是独立的有自己的组织方法操作方法。那么对于用户来说不可能所有的文件系统都了解那么怎么做到让用户透明的去处理文件呢例如我想写文件那就直接read就OK不管你是什么文件系统具体怎么去读这里就需要引入虚拟文件系统。所以虚拟文件系统就是对于一个system可以存在多个“实际的文件系统”例如ext2ext3fat32ntfs…例如我现在有多个分区对于每一个分区我们知道可以是不同的“实际文件系统”。例如现在三个磁盘分区分别是ext2ext3fat32那么每个“实际的文件系统”的操作和数据结构肯定不一样那么用户怎么能透明使用它们呢这个时候就需要VFS作为中间一层用户直接和VFS打交道。VFS是一种软件机制只存在于内存中每次系统初始化期间Linux都会先在内存中构造一棵VFS的目录树也就是源码中的namespace。VFS主要的作用是对上层应用屏蔽底层不同的调用方法提供一套统一的调用接口二是便于对不同的文件系统进行组织管理。VFS提供了一个抽象层将POSIX API接口与不同存储设备的具体接口实现进行了分离使得底层的文件系统类型、设备类型对上层应用程序透明。例如readwrite那么映射到VFS中就是sys_readsys_write那么VFS可以根据你操作的是哪个“实际文件系统”(哪个分区)来进行不同的实际的操作这个技术也是很熟悉的“钩子结构”技术来处理的。其实就是VFS中提供一个抽象的struct结构体然后对于每一个具体的文件系统要把自己的字段和函数填充进去这样就解决了异构问题内核很多子系统都大量使用了这种机制。2.4 Linux虚拟文件系统四大对象为了对文件系统进行统一的管理与组织Linux创建了一个公共根目录和全局文件系统树。要访问一个文件系统中的文件必须先将这个文件系统挂载在全局文件系统树的某个根目录下这一挂载过程被称作文件系统的挂载所挂载的目录称为挂载点。传统的文件系统在磁盘上的布局如下