当前位置: 首页 > news >正文

linux内核源码学习所需基础

1.面向对象的思想,尤其是oopc的实现方式。
2.设计模式。

这两点需要内核源码学习者不仅要会c和汇编,还要接触一门面向对象的语言,比如c++/java/python等等任意一门都行,起码要了解面向对象的思想。
另外linux内核是c实现的,那么还得接触oopc,看c语言实现面向对象的概念和实现套路。
还有设计模式,用来抵抗变化,简单来说就是随着变化不重构代码,而是扩展就够了。

如果没有这2点基础知识,那么面对linux内核某些模块源码时,你只用你c语言知识和面向过程的思想,你只会感到很困惑——你也只能看到,这是指针,这是函数指针,这是回调,这是计数——但是这些结构形式、这些组织形式,你会感到难以理解,“为啥会这样子结构?”“为啥会这样子组织?”“感觉怪怪的”“算了,先不管了”“它就是这样的”“可能比较特殊吧”,你想破脑袋也难以看清楚,只能看到一块块砖,但看不到由这些砖块堆砌出来房子或者大厦的模样
如果有上述2点基础,你就会看到新世界——“啊!这是继承”“啊!这是多态”“啊!这是接口类”“啊!这是抽象类”“啊!这是this指针”“啊!这是智能指针”“啊!这是设计模式”——也不在困惑代码数据结构等为何这么组织了——你的眼中不再是“指针,回调,计数”这种一块块砖头了,而是整个房子整个大厦!这样你就能和设计者所站的高度一样了,理解起来更加容易轻松。

设备驱动模型

面向对象思想只是个思想,不局限于任何语言,那些说c语言不能用的人,建议看看linux内核源码尤其是linux内核设备驱动模型。

调度器

比如调度器算法,就采用了策略模式的设计模式。

linux内核设计模式

比如有文章写:
linux内核所用设计模式
https://blog.csdn.net/weixin_39757802/article/details/135267875

linux设计模式

oopc

linux内核采用的c编写的,但是很多模块(不是全部,rtt是全部采用的oopc)采用了面向对象思想,面向对象在c中的实现就是oopc,它也是有固定实现套路的,不了解相关知识,你看内核源码也很吃力。

面向对象思想使用场景

对于管控大型软件,是不得不用面向对象思想+面向过程+其他思想等的混合体进行管控。

你看,面向对象的框架下,每个对象的方法内部实现是面向过程的,所以不要排斥面向过程,也不要排斥面向对象,它们都是管理开发软件代码的工具。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HarmonyOS ArkUi 官网踩坑:单独隐藏导航条无效
  • 【计算机体系结构】缓存的false sharing
  • 探索Vim的窗口艺术:窗口拆分功能全解析
  • Python面试题:如何在 Python 中读取和写入 JSON 文件?
  • 互联网盲盒小程序的市场发展前景如何?
  • 暑期备考2024年汉字小达人:吃透18道选择题真题(持续)
  • 什么是反射?
  • Python面试题:在 Python 中,如何实现上下文管理器(context manager)?
  • UE4_材质_材质节点_Fresnel
  • 【pyhton学习】深度理解类和对象
  • RedHat运维-LinuxSELinux基础5-排查SELinux问题
  • 从海上长城到数字防线:视频技术在海域边防现代化中的创新应用
  • Linux 查看磁盘是不是 ssd 的方法
  • Debezium报错处理系列之第110篇: ERROR Error during binlog processing.Access denied
  • Mac搭建anaconda环境并安装深度学习库
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【comparator, comparable】小总结
  • centos安装java运行环境jdk+tomcat
  • co.js - 让异步代码同步化
  • ES6 学习笔记(一)let,const和解构赋值
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Python连接Oracle
  • Spring Boot快速入门(一):Hello Spring Boot
  • swift基础之_对象 实例方法 对象方法。
  • Vue 2.3、2.4 知识点小结
  • 将回调地狱按在地上摩擦的Promise
  • 利用jquery编写加法运算验证码
  • 数据可视化之 Sankey 桑基图的实现
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 一天一个设计模式之JS实现——适配器模式
  • 字符串匹配基础上
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • MyCAT水平分库
  • 数据可视化之下发图实践
  • # centos7下FFmpeg环境部署记录
  • #、%和$符号在OGNL表达式中经常出现
  • #{}和${}的区别是什么 -- java面试
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (剑指Offer)面试题34:丑数
  • (区间dp) (经典例题) 石子合并
  • (十八)Flink CEP 详解
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)程序员技术练级攻略
  • .NET Core 中的路径问题
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net Signalr 使用笔记
  • .net 调用海康SDK以及常见的坑解释
  • .net 流——流的类型体系简单介绍
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法