2-Linux内核区
本文大概介绍了Linux内核区的组成(上层系统调用接口,中层各种管理系统,下层各种驱动程序)。
内核区的组成
如上图,Linux系统内核区可以分为三个部分。
下层—驱动程序
Linux内核区下层主要由 各种硬件的驱动程序 构成,它们直接对接硬件,将硬件抽象为一个个文件,让上层可以通过操作文件来操作硬件。
中层—各种管理系统
Linux内核区中层由各种 管理系统 构成,这些是操作系统真正的核心,因为几乎任何程序都在频繁地使用它们:
- 文件系统:打开文件、关闭文件等基本操作;实际上向屏幕输出也是在对文件进行操作,因为显示器在驱动程序那儿已经被抽象成文件了。
- 内存管理:例如经常对堆内存进行申请/释放操作,这就离不开内存管理系统。
- 进程管理:Linux系统以进程为最小执行单元,而进程是需要资源的,因此进程管理也很重要。
- 网络服务:现代程序几乎都离不开网络,网络操作也是Linux系统编程的重中之重。
上层—系统调用接口
Linux内核区上层由 系统调用接口 组成,由于用户区和内核区分离,用户区不能直接操作内核区,但用户区又必须使用内核区的某些功能。
于是操作系统提供了系统调用接口,用户区可以通过调用系统调用接口来间接操作内核区。这样用户区既能使用内核区,也能保护内核区不被滥用。
DLC:为什么要手动释放内核区对象
一个对象可能存放的地方有三个:
- 栈区:内存回收完全不需要自己考虑,函数执行完毕时栈内存会自动释放。
- 堆区:动态申请的内存不会自动释放,由于栈区是堆区寻址的唯一方式(栈区存储指向堆区某内存的指针),可以给堆内存添加一个引用计数,当引用计数为0时释放堆内存。这也是智能指针的工作原理。
- 内核区:内核区的对象无法自行判断释放时机,只能自己手动释放。
参考资料
- Linux系统编程 - 飘零的落花
- Linux基础课 - Acwing