论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
Linux---架构概览
Linux---架构概览
南飓风
论坛元老
|
2025-2-13 10:38:18
|
显示全部楼层
|
阅读模式
楼主
主题
1777
|
帖子
1777
|
积分
5331
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一、Linux 架构分层的深度解析
1. 用户空间(User Space)
用户空间是应用程序运行的环境,与内核空隔断离,确保体系稳固性。
应用程序层
:
用户程序
:如 edge、vim,通过调用标准库(如 glibc)间接使用体系调用。
动态链接
:程序依靠共享库(.so 文件),由动态链接器(ld-linux.so)加载。
实行权限
:通过 execve() 体系调用启动程序,联合文件权限(如 rwx)控制实行。
体系工具链
:
GNU Coreutils
:提供底子命令(ls、cp),通过 Shell 脚本组合实现复杂功能。
Shell 工作原理
:
解析命令为 argv 参数,调用 fork() 创建子进程,再通过 exec() 实行命令。
管道(|)通过匿名管道(pipe())实现进程间通信。
图形界面
:
X11/Wayland 协议负责窗口管理,GNOME/KDE 等桌面环境运行在显示服务器之上。
2. 内核空间(Kernel Space)
内核直接受理硬件,提供体系服务,代码运行在特权模式(Ring 0)。
体系调用接口(SCI)
:
体系调用表
:每个体系调用对应唯一编号(如 __NR_read),通过 syscall 指令触发软停止(如 int 0x80)。
参数通报
:通过寄存器(x86)或堆栈通报参数,返回值存入 eax 寄存器。
示例
:open("/file", O_RDWR) 触发 sys_open(),返回文件描述符(fd)。
内核子体系协作
:
进程调理
:当进程通过 sched_yield() 主动让出 CPU,或时间片耗尽时触发调理。
停止处理
:硬件停止(如键盘输入)触发停止服务程序(ISR),通过 irq_handler 处理。
二、核心子体系深度分析
1. 进程管理
进程与线程的实现
:
进程描述符(task_struct)
:内核用此布局体管理进程的全部信息(PID、内存映射、打开文件等)。
线程实现
:线程共享进程的地点空间,通过 clone() 体系调用创建,标记位指定共享资源(如 CLONE_VM 共享内存)。
轻量级进程(LWP)
:Linux 线程本质是 LWP,由内核调理,与 POSIX 线程库(pthread)共同使用。
调理器(CFS)
:
红黑树与 vruntime
:全部可运行进程按 vruntime(虚拟运行时间)排序,CFS 选择最小 vruntime 的进程实行。
时间片计算
:vruntime 增长速率与进程优先级成反比(高优先级进程 vruntime 增长更慢)。
实时调理类
:
SCHED_FIFO:进程不绝运行直到主动让出或更高优先级进程就绪。
SCHED_RR:雷同优先级进程按时间片轮转。
进程间通信(IPC)
:
共享内存
:通过 shmget() 创建共享内存段,shmat() 映射到进程地点空间。
信号量(Semaphore)
:控制对共享资源的访问,通过 semop() 实现 P/V 操作。
消息队列
:msgget() 创建队列,msgsnd() 和 msgrcv() 发送/接收消息。
2. 内存管理
虚拟内存机制
:
页表与多级分页
:x86_64 使用 4 级页表(PGD、PUD、PMD、PTE),MMU 将虚拟地点转换为物理地点。
缺页非常
:访问未映射的页时触发缺页停止,内核大概从磁盘加载数据(如互换区或文件映射)。
内存分配器
:
Buddy 算法
:
将物理内存分别为 2^n 巨细的块,分配时拆分,释放时合并相邻空闲块。
解决外部碎片标题,但大概产生内部碎片。
Slab 分配器
:
针对小对象(如 inode、task_struct),预分配内存池,淘汰内存分配开销。
每个 Slab 包罗多个对象,通过缓存(kmem_cache)管理。
Swap 管理
:
页面换出
:当物理内存不足时,kswapd 内核线程将不活泼页写入互换分区。
互换优先级
:通过页面标记(如 PG_active、PG_referenced)判断页面活泼度。
3. 文件体系
虚拟文件体系(VFS)
:
抽象接口
:
file_operations 布局体界说文件操作(如 read()、write())。
dentry 缓存目次项,加速路径查找。
挂载点
:通过 mount() 体系调用将文件体系挂载到目次树。
Ext4 文件体系
:
日记(Journal)
:
写操作先写入日记,再提交到磁盘,确保崩溃后可通过日记恢复同等性。
日记模式:journal(记录元数据和数据)、ordered(仅记录元数据,数据先写)。
延迟分配(Delayed Allocation)
:文件写入时先缓存数据,分配物理块推迟到革新时,淘汰碎片。
设备文件
:
字符设备
:如 /dev/tty,通过 read()/write() 逐字节访问。
块设备
:如 /dev/sda,数据以块为单元读写,由 I/O 调理器合并请求。
4. 网络子体系
TCP/IP 协议栈
:
数据包处理流程
:
链路层
:网卡驱动接收帧,解析 MAC 地点。
网络层
:IP 协议处理路由(通过路由表 fib_table),分片与重组。
传输层
:TCP 协议维护连接状态(struct sock),处理重传与拥塞控制(如 CUBIC 算法)。
套接字(Socket)
:
通过 socket() 创建,类型包括 SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)。
绑定端口后通过 listen() 等候连接,accept() 接受新连接。
Netfilter 框架
:
五个钩子点
:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_LOCAL_OUT、NF_IP_POST_ROUTING。
iptables 规则示例
:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH 连接
复制代码
5. 设备驱动
驱动模子
:
设备树(Device Tree)
:描述硬件资源配置(如 ARM 平台),替代传统的硬编码配置。
sysfs 文件体系
:通过 /sys 目次暴露设备信息(如 /sys/class/net/eth0)。
模块加载
:
编译与加载
:驱动代码编译为 .ko 文件,通过 insmod 加载,rmmod 卸载。
依靠管理
:modprobe 自动处理模块依靠关系。
三、Linux 启动流程的具体步调
BIOS/UEFI 阶段
:
硬件自检(POST)
:检测 CPU、内存、外设。
引导设备选择
:按 BIOS 设置顺序(如硬盘、USB)探求引导扇区。
Bootloader(GRUB)
:
引导菜单
:加载 grub.cfg,显示可启动内核列表。
加载内核
:读取 vmlinuz 和 initramfs 到内存,移交控制权。
内核初始化
:
解压与启动
:解压内核镜像,初始化核心子体系(内存管理、进程调理)。
挂载根文件体系
:initramfs 提供临时根文件体系,加载真实根文件体系驱动(如 Ext4)。
用户空间初始化
:
init 进程
:
Systemd:并行启动服务单元(.service 文件),管理依靠关系。
运行级别:systemctl isolate multi-user.target 切换运行模式。
四、Linux 设计哲学的实践体现
一切皆文件
:
/proc 文件体系
:通过 /proc/<pid>/status 查看进程状态,/proc/cpuinfo 获取 CPU 信息。
伪终端(PTY)
:通过 /dev/pts/0 实现终端会话,SSH 连接依靠此机制。
模块化设计
:
热插拔支持
:插入 USB 设备时,内核自动加载 usb-storage.ko 驱动。
自界说内核
:通过 make menuconfig 裁剪不必要的模块,编译专属内核。
KISS 原则的典型应用
:
文本处理流水线
:grep "error" log.txt | awk '{print $1}' | sort | uniq -c 组合多个工具完成任务。
五、安全机制的实现细节
Capabilities 机制
:
细分特权
:传统 root 权限被拆分为数十种能力(如 CAP_NET_BIND_SERVICE 答应绑定低端口)。
设置能力
:通过 setcap cap_net_bind_service=+ep /usr/bin/myapp 赋予程序特定权限。
LSM 框架
:
SELinux
:
强制访问控制(MAC),基于安全上下文(如 user_u:role_r:type_t)限制进程访问资源。
策略规则示例:allow httpd_t var_log_t:file { read write };。
定名空间(Namespaces)
:
PID 定名空间
:容器内进程 PID 从 1 开始,与宿主机隔离。
网络定名空间
:每个容器拥有独立网络栈,通过 veth pair 连接宿主机。
六、性能优化技能详解
I/O 调理器选择
:
Deadline 调理器
:为每个请求设置截止时间,防止饿死(适合数据库负载)。
Kyber
:针对 NVMe SSD 设计,基于队列深度动态调整。
内存优化
:
透明大页(THP)
:自动合并 2MB 大页,淘汰 TLB 未命中次数(需内核配置 CONFIG_TRANSPARENT_HUGEPAGE)。
内存压缩(zswap)
:将不活泼页压缩后存入内存,而非写入互换区。
eBPF 的高级应用
:
动态追踪
:通过 bpftrace 脚本监控内核函数调用。
网络加速
:XDP(eXpress Data Path)在网卡驱动层处理数据包,实现 DDoS 防护。
总结与学习建议
Linux 的复杂性源于其广泛的应用场景和高度优化的设计。要深入理解:
实践方法
:
使用 strace 跟踪体系调用:strace -f -o log.txt gcc hello.c。
通过 /proc 和 /sys 实时查看内核状态:cat /proc/meminfo。
源码学习
:
阅读内核源码(如进程调理代码在 kernel/sched/ 目次)。
使用 QEMU + GDB 调试内核启动流程。
性能分析工具
:
perf:分析 CPU 热点(perf record -g ./program)。
ftrace:跟踪内核函数调用链。
通过联合理论、代码和工具,可以逐步掌握 Linux 的核心机制,为体系级
开发
和
运维
打下坚固底子。
人的精神思想方面的优势越大,给无聊留下的空间就越小。 —叔本华
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
南飓风
论坛元老
这个人很懒什么都没写!
楼主热帖
零信任介绍
容斥原理
开源SPL助力JAVA处理公共数据文件(txt ...
使用 Helm 安装 MQTT 服务器-EMQX ...
数理逻辑第1-3章
Ubuntu如何安装Mysql+启用远程连接[完 ...
dotnet 修复在 Linux 上使用 SkiaSharp ...
DOS窗口命令和单表简单查询
Java笔记(13) 简单的Lambda表达式 ...
.gitignore文件配置以及gitee提交报Pus ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Mysql
鸿蒙
开源技术
DevOps与敏捷开发
快速回复
返回顶部
返回列表