Linux | 用户态与内核态详解

本文详细介绍了Linux系统中的用户态和内核态,包括它们的区别、为何进行状态划分以及如何在两者间切换。用户态是应用程序运行的空间,而内核态则负责管理硬件资源和系统稳定性。系统调用是用户态进入内核态的主要途径,通过中断或SYSENTER指令实现。glibc库和syscall函数是用户空间调用系统调用的常见方式。此外,文章还简单提及了中断处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别

用户态:供应用程序运行的空间,只能受限制地访问内存

内核态:控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境


为什么要划分

1. 安全性
给不同的操作给与不同的“权限”。有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。

2. 稳定性
隔离了操作系统代码与应用程序代码。即便是单个应用程序出现错误也不会影响到操作系统的稳定性,其它的程序还可以正常的运行。


如何从用户态进入内核态

1. 系统调用

系统调用的实现(2种)
1) 中断方式

在 Linux 的实现中,所有的系统调用共用 128 号中断,对应中断处理程序是 system_call。system_call 会根据 EAX (某个寄存器) 传入的系统调用标号跳转并执行相应的系统调用程序。函数执行完成之后,会把结果放到 EAX 中返回给应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值