0x00 前言 由于红黑树具有非常重要工程实践意义,很多基础工程中都包含有红黑树的实现。对比 paho.mqtt.c / nginx / libuv / linux 中红黑树的实现发现,Linux 内核中红黑树的实现部分最为经典,本文通过对 Linux 内核中红黑树的实现进行初步分析,并利用 Linux 内核中红黑树的接口,引用《算法导论》中数据结构扩展的一般方法,对红黑树扩展来实现顺序统计树。 0x01 Linux 内核中红黑树实现分析 ① 结构定义 Linux 内核的红黑树数...
有很多人经常会提问到,电脑有几种操作系统,电脑操作系统有很多种,较为常见的就是Windows、Linux、Unix、Mac OS X,那么这几个系统哪个更好用? Windows:使用人数最多的系统 优点:软件丰富、高易用性、只要简单学习就能流畅使用; 缺点:感染病毒的风险较大 Mac OS X:苹果的专用系统 优点:界面美观,操作简便,也不需要额外购买; 缺点:只可以运行于苹果电脑,因为苹果电脑高昂售价,MAC用户比较少。 Li...
有很多人经常会提问到,电脑有几种操作系统,电脑操作系统有很多种,较为常见的就是Windows、Linux、Unix、Mac OS X,那么这几个系统哪个更好用? Windows:使用人数最多的系统 优点:软件丰富、高易用性、只要简单学习就能流畅使用; 缺点:感染病毒的风险较大 Mac OS X:苹果的专用系统 优点:界面美观,操作简便,也不需要额外购买; 缺点:只可以运行于苹果电脑,因为苹果电脑高昂售价,MAC用户比较少。 Li...
前言 网购 https://m.fenfaw.cn/ Linux内核源码分析之setup_arch (三) 基本上把setup_arch主要的函数都分析了,由于距离上一篇时间比较久了,所以这里重新贴一下大致的流程图,本文主要分析的是bootmem_init函数。 代码分析 bootmem_init函数的结构如下: find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min、max_low、max_high中。 static void __init find_limits(unsigned long *min...
find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min、max_low、max_high中。 static void __init find_limits(unsigned long *min, unsigned long *max_low, unsigned long *max_high) { … *min = bank_pfn_start(&mi->bank[0]); for_each_bank (i, mi) if (mi->bank[i].highmem) break; *max_low = bank_pfn_end(&mi->bank[i - 1]); *max_high = bank_pfn_end(&mi->bank[mi->nr_banks ...
众所周知,云服务器的性能是我们挑选云主机的最重要的指标,今天给大家介绍的就是优 豆云主机,优 豆云是提供免 费虚拟主机免 费云服务器的,希望大家不要错过了。 这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数、指标的含义以及一些交互操作。free free 命令是监控linux 内存使用最常用的命令,参数[-m]表示以M 为单位查看内存使用情况(默认为kb)。 [root@localhost ~]# free -m total ...
Linux中断子系统分析之(1):整体框架 Linux中断子系统分析之(2):通用的中断处理 Linux中断子系统分析之(3):irq domain 中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理。 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就...
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这次,把signal.c的文件全都看一下,粗略泛读。后面应该也是这么个模式,不会像之前分的那么细了。 这一部分,其实之前是看过了的。 这部分,前面也看过了。主要是信号挂起的处理,我觉得技巧点应该是在于形参处理与寄存器操作的结合。 这两个函数,从命名看的话我们需要站在内核的角度来看。存储以及获取其实都是内核的动作。...
本文基于:linux-5.11 在基于arm64架构的linux内核中, 有两个 表示__pa(x)和__va(x)用于物理地址转换位虚拟地址 或者 虚拟地址转换为物理地址(实际上还有一个__pa_symbol(x))。 这两个表达式是如何进行虚/实地址转换的?这种转换关系是如何确立的?为什么这样转换? 本文就这些问题进行挖掘探究。 一、层层展开,还原__pa(x)全貌 表达式__pa(x)是一个宏,定义在arch/arm64/include/asm/memory.h文件中:#define __pa(x) __virt...
本文来自个人网站 https://htmonster.xyz/blog/post/linux-nei-he-task-struct-yuan-ma-fen-xi-yu-jie-xi/文章目录 进程状态0. 进程标志符1. 运行状态2. 进程标记 任务状态1. 任务终止2.ABI处理3.execve4.io等待 进程内核栈地址内核栈布局进程调度1.优先级2. 调度策略3. 进程调度调度器调度器策略实体调度器、策略、调度实体关系 4. 就绪队列5. 其它信息 进程地址空间进程描述符mm_struct核心分析(mm_struct图解进程亲属关系时间与...
一、iostat和iowait详细解说-查看磁盘瓶颈 一、iostat基础 %iowait并不能反应磁盘瓶颈1、安装iostat iostat的包名叫sysstat yum install sysstat -y2、iowait实际测量的是cpu时间:%iowait = (cpu idle time)/(all cpu time) 说明:高速cpu会造成很高的iowait值,但这并不代表磁盘是系统的瓶颈。唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms,就代表了不太正常的磁盘性能。为什么是20ms...
Linux 网络分析必备技能:tcpdump 实战详解 良许linux 昨天 以下文章来源于编程修养 ,作者程序员肖邦编程修养 作者从事 Linux 系统开发多年,公众号主要分享 Linux 系统、算法、网络、高质量编程等方面的文章,欢迎关注! 今天要分享的是 tcpdump,它是 Linux 系统中特别有用的网络工具,通常用于故障诊断、网络分析,功能非常的强大。 相对于其它 Linux 工具而言,tcpdump 是复杂的。当然我也不推荐你去学习它的全部,学以致用,...
浅析一下用来修改当前进程 cred 的函数 commit_creds 源码版本:Linux kernel 5.9.9 首先来看 cred 结构 /** The security context of a task** The parts of the context break down into two categories:** (1) The objective context of a task. These parts are used when some other* task is attempting to affect this one.** (2) The subjective context. These details are used when the task is acting* upon anoth...
内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等操作的话效率是非常高的。 以下是一个把普遍文件映射到用户空间的内存区域的示意图。基本函数 mmap函数是unix/linux下的系统调用,详细内容可参考《Unix Netword programming》卷二...
一、概述 Video4Linux2 是 Linux 内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。就像公司的老板一般都不会直接找底层的员工谈话,而是找部门经理了解情况,一个是因为底层屌丝人数多,意见各有不同,措辞也不准,部门经理会把情况汇总后再向上汇报;二是老板时间宝贵。 V4L2 支持三类设备:...