LINUX内核学习

本文详细探讨了Linux内核中的关键概念,包括系统调用的分类和实现、内核数据结构如链表和映射、中断处理的类型与机制,以及中断下半部的处理方式如软中断、TaskLet和工作队列。此外,还介绍了内核同步与互斥的机制以及定时器和时间管理。最后,概述了Linux进程的生命周期、调度算法和内存虚拟地址空间的划分与管理。对于深入学习Linux内核的读者,这篇文章提供了丰富的参考资料。
摘要由CSDN通过智能技术生成

1. 系统调用

1.1. 什么是系统调用

当你运行的程序调用了open, fork, read, write等等,你就做了系统调用 。
系统调用就是程序如何进入内核执行任务。程序使用系统调用执行一系列的操作诸如:创建进程,网络和文件IO等等。
你可以在man page for syscalls(2)里面看到系统调用的列表。 用户程序做系统调用有不同的方法,CPU架构不同做系统调用的底层指令也不同。

作为应用开发者,你不需要经常思考系统调用如何正确执行。你只需要把头文件引入,然后像普通功能一样调用。

img

1.2 传统系统调用

有两个需要预先准备的知识:

  1. 我们可以通过生成软中断触发内核调用。
  2. 我们可以用汇编指令int生成软中断。

结合这两个概念让我们看Linux传统系统调用接口。
用户空间程序可以取到Linux内核软中断号,这样就可以进入内核和执行系统调用。

img

1.3 系统调用大致可分为六大类

  1. 进程控制(process control)
  2. 文件管理(file manipulation)
  3. 设备管理(device manipulation):操作系统控制的各种资源可看作设备。
  4. 信息维护(information maintenance):操作系统维护所有进程的信息,这些可通过系统调用来访问。
  5. 通信(communication) :进程间通信的常用模型有两个:消息传递模型和共享内存模型。
  6. 保护(protection):保护提供控制访问计算机的系统资源的机制

1.4 参考文档

  1. Linux系统调用指南_zhangji-CSDN博客_linux系统调用

  2. linux内核剖析(六)Linux系统调用详解

  3. 系统调用的类型-六大类

2. 内核数据结构

2.1 传统的双向链表和内核中的双向链表的区别

  • 有个单独的头结点(head)
  • 每个节点(node)除了包含必要的数据之外,还有2个指针(pre,next)
  • pre指针指向前一个节点(node),next指针指向后一个节点(node)
  • 头结点(head)的pre指针指向链表的最后一个节点
  • 最后一个节点的next指针指向头结点(head)

img

传统的链表有个最大的缺点就是不好共通化,因为每个node中的data1,data2等等都是不确定的(无论是个数还是类型)。linux中的链表巧妙的解决了这个问题,linux的链表不是将用户数据保存在链表节点中,而是将链表节点保存在用户数据中.linux的链表节点只有2个指针(pre和next),这样的话,链表的节点将独立于用户数据之外,便于实现链表的共同操作。
img

2.2 队列

img

2.3 映射

映射是实现(key,value)绑定的一种数据结构。也称为关联数组。可以视为由唯一key组成的集合。每个key对应这一个value。

常规的映射实现有hash表和二叉树,以及二叉树的变种。

2.1 参考文档

  1. 《Linux内核设计与实现》读书笔记(六)- 内核数据结构 (链表、队列、映射、红黑树)
  2. Linux内核中的算法和数据结构 (链表、双向链表、无锁链表、B+树、优先排序列表、红黑树)
  3. Linux Kernel - 第六讲 内核数据结构-讲解版_x264_哔哩哔哩_bilibili (链表、队列、映射、二叉树)
  4. linux内核中的链表 - wangLinuxer - 博客园 (cnblogs.com) (内核中的链表)
  5. linux内核之Kfifo环形队列 - super_xueyi - 博客园 (cnblogs.com) (Kfifo)

3. 中断处理

3.1 中断

中断请求(IRQ)是由可编程的中断控制器(PIC)发起的,其目的是为了中断 CPU 和执行中断服务程序(ISR)

Linux内核使用中断的方式来管理硬件设备,中断本质上是一种电信号,设备通过和中断控制器引脚相连的总线发出电信号来发出中断。中断控制器是一种控制芯片,多个设备的中断请求线同时连接到中断控制器上,如果多个设备同时发出中断信号,中断控制器根据优先级选择其中一个发送给处理器处理器,处理器收到中断请求后,就中断当前正在执行的任务,进行中断处理。内核通过中断号(中断号是系统为每个中断请求线interrupt request line分

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值