内核分类
内核在整个Linux系统的重要性不言而喻。
|----------------------|
| USER Applications |
| O/S Services |
| Linux Kernel |
| Hardware Controllers |
系统属于软件的范畴,负责管理系统硬件资源,同时为应用程序开发和执行提供配套环境。那么OS必须具备:
- 为应用程序提供执行环境;
- 为多用户和应用程序管理计算机上的硬件资源;
- 虚拟性
- 并发性
内核分为宏内核和微内核,其中
1、宏内核:所有的内核代码都编译成一个二进制,所有的内核代码都运行在一个大内核地址空间里,内核代码可以直接访问和调用,效率高并且性能好。具体框架是:
2、微内核:把操作系统分成多个独立的功能模块,每个功能模块之间的访问都需要通过消息来完成,因此效率没有那么高。具体架构如下:
宏内核结构设计简洁性能较好,而微内核架构稳定性和实时性更好。
Linux内核体系架构如下:
Linux内核
1、Linux内核特性
- Linux内核的组织形式为整体式结构;
- Linux内核调度方式简单而高效;
- Linux支持内核线程(守护进程);
- Linux支持多种平台的虚拟内存管理;
- Linux内核支持虚拟文件系统(VFS,Virtual File System);
- Linux的模块机制使得内核保持独立而又非常容易扩充;
- 增加系统调用主要是满足特殊需求;
- Linux内核网络模块面向对象的设计思想架构(支持多种协议、多种网卡驱动程序等);
2、系统调用本身也是由若干指令构成的过程,实现一些特定的服务,但与一般过程不同区别在于:系统调用是运行内核态(系统态),而一般过程运行在用户态。内核实际是抽象的资源操作到具体硬件操作细节之间的接口。
3、Linux内核子系统之间的关系
进程调度 控制着进程对CPU的访问操作。
内存管理(MM):允许多个进程安全地共享主存空间。
虚拟文件系统(VFS):分为设备驱动程序和逻辑文件系统。
网络管理:提供对各种网络标准协议的存取和网络硬件的支持。
进程间通信:支持进程间各种通信机制。
Linux内核代码目录
arch:不同平台体系结构的相关代码;
block:设备驱动;
certs:与认证和签名相关代码;
cryto:内核常用压缩算法,常用加密算法等等源代码;
documentation:描述模块功能和协议规范代码;
drivers:驱动程序(USB总线,PCI总线,显示,网卡等);
fs:虚拟文件系统VFS代码;
include:内核源码依赖的绝大部分头文件;
init:内核初始化代码,直接关联到内存各个组件入口;
ipc:进程间通信实现,比如信号量,共享内存等;
kernel:内核核心代码,包括进程管理、IRQ等;
lib:c标准库的子集;
licenses:Linux内核根据Licenses/preferred/GPL-2.0中提供GNU通用公共许可证版本2等;
mm:内存管理实现;
net:网络协议代码,TCO,wifi,ipv6等等;
samples:内核实例代码;
scripts:编译和配置内核所需脚本;
security:内核安全模型相关代码;
sound:声卡驱动源码;
tools:与内核交互
usr:用户打包和压缩内核的实现的源码;
virt::kvm虚拟化目录相关;
Linux内核目录文件如下:
readme:编译内核信息;
.clang-format:平时开发团队进程合作的时候要注意代码格式化;
COPYING:许可和授权信息;
CREDITS:贡献者列表;
Kbuild:内核设定脚本;
Kconfig:开发人员配置内核的时候所用到参数等;
MAINTAINERS:目前维护开发人员列表;
Makefile:编译内核主要文件;
README:编译内核信息;
内核代码主要以.c和.h为扩展名的文件;
进程原理及系统调用
1、进程有两种特殊的形式:没有用户虚拟地址空间的进程叫内核线程,共享用户虚拟地址空间的进程叫用户线程。共享同一个用户虚拟地址空间的所有用户线程叫线程组。
c语言标准库进程 Linux内核进程
包括多个线程的进程 线程组
只有一个线程的进程 任务或进程
线程 共享用户虚拟地址空间的进程
2、Linux内核提供API函数来设置进程的状态:
TASK_RUNNING(可运行状态或者可就绪状态);
TASK_INTERRUPTIBLE(可中断睡眠状态,又叫浅睡眠状态);
TASK_UNINTERRUPTIBLE(不可中断状态),深度睡眠状态;我们可以通过ps命令查看被标记为D状态的进程;
__TASK_STOPPED(终止状态);
EXIT_ZOMBIE(僵尸状态);