Linux内核

内核分类

内核在整个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(僵尸状态);

调度器及CFS调度器

实时调度类及SMP和NUMA

进程优先级与调度策略

RCU机制及内存优化屏障

内核内存布局和堆管理

多核调度分析

相关推荐
开开心心就好3 分钟前
高效报价软件,简化商铺定价流程
服务器·数据库·安全·面试·职场和发展·电脑·symfony
sanggou3 小时前
Linux批量执行工具脚本使用指南:一键运行多个release-dev.sh脚本
linux·bash
段帅龙呀6 小时前
Redis构建缓存服务器
服务器·redis·缓存
乌鸦不像写字台6 小时前
【docker部署】在服务器上使用docker
服务器·docker·容器
牧以南歌〆7 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
Antonio9158 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
夜月yeyue9 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza9 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无妄-20249 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
R.X. NLOS9 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code