linux 内核从1991年至2018年已经有27年的历史了,从原来不到1万行代码到现在已经超过2000万行代码了。我其实也挺佩服人类的大脑,可惜这佩服也是大脑想到的,细思极恐!
以下就是Linux内核的大概的总体样子!!
我大致总结一下,我打个不恰当比方,软件是上层建筑,就是你住的地方,地基面就是系统调用层,上层建筑只要根据地基面来规划就好了,不用管地基里面是什么样子。
一个Linux的内核总体能分三部分:
内核空间:包括Linux内核的核心部件,比如arch抽象层、设备管理抽象层、内存管理、进程管理、总线管理、字符设备以及应用程序交互系统调用层
用户空间:这里包括C语言库、应用程序和虚拟机等。
那我们先关注一些主要的部件。
(1) system calls(系统调用层)这个我在上篇文章中说了。
linux内核把系统分成两个空间,用户空间和内核空间。
系统调用层
把系统想成一个大楼,调用层是地基平面,用户层就建立在上面,用户是不关心地基里面怎么运行的。比如编写用户进程的程序员不需要知道这个文件具体存放在磁盘哪个扇区里,只需要调用open()、read()、mmap()等函数就可以。
(2) 进程管理
进程是现在操作系统中非常重要的概念,包括上下文切换以及进程调度。每个进程运行时都感觉完全占有了全部的硬件资源。但是进程不会长时间占有硬件资源。操作系统利用进程调度器让多个进程并发执行。
进程管理还包括进程的创建和销毁、线程组管理、内核线程管理、队列等内容。
问个问题,一个进程和线程是啥区别呢?
(3) 内存管理
内存管理是Linux内核中最复杂的模块,它涉及了虚拟内存和物理内存的管理。作为Linux系统,Linux内核的虚拟内存管理非常重要。虚拟内存有很多优点,比如多个进程可以并发执行、进程请求的内存可以比物理内存大、多个进程可以共享函数库等,因此虚拟内存越来越复杂了。
物理内存的管理也比较复杂。页面分配器是核心部件,它需要考虑系统内存紧张时候,如何回收页面和继续分配物理内存。
(4) 文件系统
为多种文件系统提供统一的操作接口,当然有各种各样的文件系统,比如ext4和XFS等。为了支持各种各样的文件系统,Linux虚拟机出一个称为虚拟文件系统(VFS),这样linux内核就可以很方便的集成多种文件系统。
再墨迹一下,如何学习Linux的内核呢?
学习linux内核应该要对c语言有所了解,毕竟Linux内核是c语言写的,可以买一些书来看,或者关注我们的平台,我们是一个强大的团队,有老师可以问问他们问题,一起交流。
还有你还要了解Linux系统,熟悉vim和git等工具。
再Linux上做一些编程和调试的练习,如使用QEMU+GDB+Eclipse来调试内核,熟悉GDB等。
最后喜欢我文章的朋友请加圈子关注我们,私信关键词:加群。
就会自动分享给你群号。欢迎大家加入我们的安全大家庭。提高大家的安全意识,提升大家的网络安全技能一直是我们的初衷和愿景,让我们共同成为守护信息世界的“SaFeMAN”。
还有可以关注我们微信公众号,在公众号上输入安界网,就可以关注到我们。