有关Linux的一些内容。
用户态和内核态
系统调用
统调用组成了用户态跟内核态交互的基本接口。
为什么要区分用户态与内核态
- 在 CPU 的所有指令中,有一些指令是非常危险的,如果错用将导致整个系统崩溃。
- CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。
- Intel 的 CPU 将特权级别分为4个级别: RING0(特权级最高)、 RING1 、 RING2 、 RING3 。
处理器总处于以下状态中的一种
- 内核态,运行于进程上下文,内核代表进程运行于内核空间。
- 内核态,运行于中断上下文,内核代表硬件运行于内核空间。
- 用户态,运行于用户空间。
从用户态切换到内核态可以通过三种方式
- 系统调用
- 异常
- 外设中断
内存管理中的一些常见问题
- 未能释放已经不再使用的内存 - 内存泄漏
- 指向不可用的内存指针 - 野指针
- 指针所指向的对象已经被回收了,但是指向该对象的指针仍旧指向已经回收的内存地址 - 悬挂指针
- 分配或释放内存太快或者太慢
- 分配内存大小不合理,内存碎片问题