Linux 内核原理摘录

news2024/10/7 10:22:05

在这里插入图片描述


文章目录

  • 一、Linux 内核设计与实现
    • 1、进程管理
    • (1)调度
    • 2、内核数据结构
      • (1)kfifo
    • 3、中断


一、Linux 内核设计与实现

    本章主要用来摘录《Linux 内核设计与实现》一书中学习知识点,其基于 Linux 2.6.34

1、进程管理

// include/linux/sched.h

struct task_struct {
	volatile long state;	/* -1 unrunnable, 0 runnable, >0 stopped */
	void *stack;
	atomic_t usage;
	unsigned int flags;	/* per process flags, defined below */
	unsigned int ptrace;

	int lock_depth;		/* BKL lock depth */
	
	// ...
}	

    进程描述符 task_struct 包含了一个具体进程的所有信息。其相对较大,在 32 位机器上,它大约有 1.7KB
在这里插入图片描述
    Linux 通过 slab 分配器分配 task_struct 结构。在 2.6 以前的内核中,各个进程的 task_struct 存放在它们内核栈的尾端。这样做是为了让那些像 x86 那样寄存器较少的硬件体系结构只要通过栈指针就能计算出它的位置,而避免使用额外的寄存器专门记录。由于现在用 slab 分配器动态生成 task_struct ,所以只需要在栈底创建一个新的结构 struct thread_info

// arch/x86/include/asm/thread_info.h

struct thread_info {
	struct task_struct	*task;		/* main task structure */
	struct exec_domain	*exec_domain;	/* execution domain */
	__u32			flags;		/* low level flags */
	__u32			status;		/* thread synchronous flags */
	__u32			cpu;		/* current CPU */
	int			preempt_count;	/* 0 => preemptable,
						   <0 => BUG */
	mm_segment_t		addr_limit;
	struct restart_block    restart_block;
	void __user		*sysenter_return;
#ifdef CONFIG_X86_32
	unsigned long           previous_esp;   /* ESP of the previous stack in
						   case of nested (IRQ) stacks
						*/
	__u8			supervisor_stack[0];
#endif
	int			uaccess_err;
};

在这里插入图片描述

(1)调度

CFS 调度
在这里插入图片描述

2、内核数据结构

(1)kfifo

// kernel/kfifo.c

/**
 * 使用 buffer 内存创建并初始化kfifo队列
 *
 * @param fifo kfifo队列
 * @param buffer 指向内存地址
 * @param size 内存大小,必须是 2 的幂
 */
void kfifo_init(struct kfifo *fifo, void *buffer, unsigned int size);

/**
 * 动态创建并初始化kfifo队列
 *
 * @param fifo kfifo队列
 * @param size 创建kfifo队列大小
 * @param gfp_mask 标识
 * @return
 */
int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask);

/**
 * 把数据推入到队列。该函数把 from 指针所指的 len 字节数据拷贝到 fifo 所指的队列中,如果成功,
 * 则返回推入数据的字节大小。如果队列中的空闲字节小于 len,则该函数值最多可拷贝队列可用空间那么多
 * 的数据,这样的话,返回值可能小于 len。
 */
unsigned int kfifo_in(struct kfifo *fifo, const void *from, unsigned int len);

/**
 * 该函数从 fifo 所指向的队列中拷贝出长度为 len 字节的数据到 to 所指的缓冲中。如果成功,
 * 该函数则返回拷贝的数据长度。如果队列中数据大小小于 len, 则该函数拷贝出的数据必然小于
 * 需要的数据大小
 */
unsigned int kfifo_out(struct kfifo *fifo, void *to, unsigned int len);

/**
 * 与 kfifo_out 类似,获取数据,但读后不删除数据。参数 offset 指向队列中的索引位置,如果
 * 该参数为 0,则读队列头,这时候和 kfifo_out 一样。
 */
unsigned int kfifo_out_peek(struct kfifo *fifo, void *to, unsigned int len, unsigned offset);

在这里插入图片描述
在这里插入图片描述

3、中断

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerShell install go+caddy+filebrowser+nssm 实现部署文件系统

filebrowser filebrowser 是一个使用go语言编写的软件&#xff0c;功能是可以通过浏览器对服务器上的文件进行管理。可以是修改文件&#xff0c;或者是添加删除文件&#xff0c;甚至可以分享文件&#xff0c;是一个很棒的文件管理器&#xff0c;你甚至可以当成一个网盘来使用。…

找高清视频素材,就上这6个网站。

推荐6个高清视频素材库&#xff0c;免费下载&#xff0c;建议收藏~ 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有上千个&#xff0c;全部都很高清&#xff0c;站内可以按标签分类查找…

某医院访问医保系统慢流量分析案例

背景 我们已将NetInside流量分析系统部署到某市人民医院的机房内&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对访问外网医保系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为&am…

【Linux】进程间通讯

前提知识 进程间具有独立性 &#xff0c;现在我们要打破独立性&#xff0c;去通讯&#xff0c;所以 通讯的成本一定很高。 又时候又需要多进程协同完成某种业务内容 &#xff0c;例如以前&#xff1a; cat file | grep “hello",这就是两个进程之间的通讯。 通讯的本质就是…

【一文学会MQTT协议和mosquitto】

一文学会MQTT协议和mosquitto 一.、MQTT的基本概念二、mosquittomosquitto基本概念常用API 三、MQTT测试EMQX 一.、MQTT的基本概念 MQTT是一种基于发布/订阅模式的协议&#xff0c;其中发布者发布消息&#xff0c;订阅者订阅感兴趣的主题&#xff08;topic&#xff09;&#x…

QGIS--开发OpenSCENARIO动态场景(二)--安装插件

1.下载并安装ad_map&#xff08;无需构建&#xff09;&#xff1a; 1&#xff09;ad_map插件&#xff1a; https://github.com/carla-simulator/map/releases 下载第一个&#xff1a;ad_map_access_qgis.zip 2&#xff09;导入插件&#xff1a; 从MenuBar的Plugins >…

YOLOv8 更换主干网络之 FasterNet

论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…

ThreadLocal InheritableThreadLocal TransmittableThreadLocal的使用以及原理

ThreadLocal 每个线程向ThreadLocal设置值&#xff0c;再取值&#xff0c;实现线程之间的隔离 public class ThreadLocalCase1 {private static ThreadLocal<Integer> threadLocal new ThreadLocal<>();public static void main(String[] args) {Random random …

Postman接口与压力测试实例

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 1、环境变量和全局变量设置 环境变量可以使用在以下地方&#xff1a; URLURL paramsHeader valuesform-data/url-encoded valuesRaw body contentHelper f…

MySQL学习笔记第一天

第02章 MySQL环境搭建 1.MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话框&#xff0c;可以在“服务”列表找到“MySQL8.0”的服务&#xff0c;如果现…

AIGC: Midjourney和Stable Diffusion在大厂中的应用

AIGC: Midjourney和Stable Diffusion在大厂中的应用和教程​http://www.webhub123.com/#/home/detail?projectHashid51631966&ownerUserid21336964 收录效果如下 登录后即可一键拥挤收藏以下所有文章网址到我的收藏夹&#xff0c;网站帮你简单高效地管理你的网络收藏&…

Memtiter-benchmark源码解析4memtier_benchmark.cpp源代码解读

run_benchmark 程序入口 First , create the cg_thread instances in the vector threads and then call each cg_thread’s prepare() function of them. Subsequently, launch each thread in the vector threads cg_thread m_base event_base_new() // line 528 一个cli…

移动端手机网页适配iPad与折叠屏设备

采用的网页适配方案&#xff1a;移动端页面px布局适配方案&#xff08;viewport&#xff09; 产生此问题的原因 由于手机与平板等设备宽高比差异导致页面展示不全或者功能按钮展示在视口之外点击不到。 简单来说就是我们的页面都是瘦长(即高大于宽)的&#xff0c;而折叠屏等设…

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…

@ComponentScan自动扫描组件并指定扫描规则

1.使用注解配置包扫描 1.1.创建相关类 分别创建BookDao、BookService、BookServiceImpl以及BookController这三个类&#xff0c;并在这三个类中分别添加Repository、Service、Controller注解 BookDaopackage com.tianxia.springannotation.dao;import org.springframework.s…

【社区图书馆】如何唤醒数学脑

如何唤醒数学脑 内容简介 每个人天生都有数学力&#xff0c;有着内建的“数学式思维模式”&#xff0c;若能有效发挥&#xff0c;就能在学校、职场、人际关系中表现出来&#xff0c;从容不迫地获得更好的效率及成就感。 但这种思维模式会受到周围情境、心理状态等因素的影响&…

思必驰闯关科创板:对标科大讯飞,发展阶段落后逾10年

4月17日&#xff0c;人机对话解决方案提供商——思必驰科技股份有限公司&#xff08;下称“思必驰”&#xff09;已更新提交相关财务资料&#xff0c;根据相关规定&#xff0c;上交所恢复了其发行上市审核。 2022年7月15日&#xff0c;思必驰向科创板递交IPO申请。今年3月底&am…

贵金属期货交易平台排行榜是真的还是假的?如何选择?

贵金属期货交易是一种非常常见的投资形式&#xff0c;其市场容量非常大&#xff0c;因此有各种各样的期货交易平台。这导致许多投资者不知道如何选择这些平台。对于投资者来说&#xff0c;只有选择一个高质量的期货交易平台&#xff0c;他们才能更好地进行后续的交易。如何选择…

BloomFilter在Drois中的应用

1.简介&#xff1a; BloomFilter是一种多哈希函数映射的快速查找算法&#xff0c;它实际上是由一个超长的二进制位数组和一系列的哈希函数组成的。初始时二进制位数组全部为0&#xff0c;当给定一个待查询的元素时&#xff0c;这个元素会被一系列哈希函数计算映射出一系列的值…

【redis】布隆过滤器BloomFitter

【redis】布隆过滤器BloomFitter 文章目录 【redis】布隆过滤器BloomFitter前言一、面试题二、是什么1、设计思想&#xff1a; 本质就是判断具体数据是否存在于一个大的集合当中 三、布隆过滤器特点1、重点 有&#xff0c;是可能有&#xff0c;无是一定无2、小总结 四、原理1、…