虽然工作中一直在写用户层代码,但也凭兴趣看下kernel代码,提高自己,毕竟懂得越多,对工作和业务了解、架构设计就越有帮助,而且很多东西看到最后都是借助kernel实现,所以掌握kernel也是非常必要。从业以来也陆陆续续看过,解决一些疑问,但没有记录,也没想的特别明白,现在有时间认真思考下,本文相当于十万个为什么,记录我对linux内核和驱动的一些学习。
内核概述
linux内核分为进程管理系统 、 内存管理系统 、 i/o管理系统 和文件管理系统四个子系统。
linux内核主要由哪几个部分组成:
Linux内核的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,系统的初始化(引导)、系统调用
文件系统
一切皆文件是linux的高级抽象,Linux中“一切皆文件”是什么意思? - 知乎
之前面试的时候遇到过read的流程,当时自己的回答可能就是说系统调用陷入内核态啥的,没有描述更多的信息,那详细的读写流程是怎样的 从内核文件系统看文件读写过程 - 胡潇 - 博客园
工作中可能出现多个线程同时读写相同文件的问题,多个线程同时读没有问题,如果存在写,那就可能存在问题了。
系统调用
系统调用是通过软件中断的方式进入内核。Linux 系统调用和中断(查漏补缺版)_A.iguodala的博客-CSDN博客_linux 系统调用 软中断
虚拟文件系统
sysfs
/dev和/sys/dev
linux下/dev、/sys/devices 和 /sys/dev 之间区别 - 简书
/sys/class
属性文件,可读写,比如控制闪光灯亮度等