Linux内核完全解读
本专栏主要记录了自己学习Linux内核2.6.24的历程和心得
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
这个作者很懒,什么都没留下…
展开
-
Linux内核全景图
转载 2024-07-15 14:12:58 · 43 阅读 · 0 评论 -
协议栈之packet_type
进入函数netif_receive_skb()后,skb正式开始协议栈之旅。先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层。比如,arp头和ip头都是紧跟在以太网头后面的,所以在linux协议栈中arp和ip地位相同(如上图)但是在OSI七层模型中,arp属于链路层,ip属于网络层…这里就不死抠概念,我们就说arp,ip都属于第二层。下面是网络第二层的处理流程一、相关数据结构内核处理网络第二层,有下面2个重要list_head变量 (文件linux_转载 2020-05-26 02:31:18 · 2017 阅读 · 0 评论 -
内核源码阅读(九)进程优先级处理
1.进程优先级内核表示 进程的优先级的nice值在-20~+19之间。0~139表示内部优先级,0~99的范围专供实时进程使用。nice值在[-20,+19]映射到100~139之间。如下图所示。 进程优先级宏在不同形式间转换:/* 从用户优先级的nice值和静态优先级的转换 */#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20原创 2017-08-20 14:14:10 · 1186 阅读 · 0 评论 -
内核源码阅读(八)进程调度器的实现
调度器的任务就是使程序之间共享CPU时间,创造并行执行的假象。其可分为两个方面:一是调度策略;二是上下文切换。 1.总览一般原理:按所能分配的计算能力,向系统中每个进程提供最大的公正性。 调度器对于进程等待时间的记录如下图所示。所有的可运行程序都按时间在红黑树中排序。就绪队列装备了虚拟时钟,其精确速度依赖于当前等待调度器挑选的进程的数目,约为实时时钟速度的1/4。 2.数据原创 2017-08-20 12:26:10 · 931 阅读 · 0 评论 -
内核源码阅读(七)新程序的启动与进程的退出
通过用新代码替换现存程序,即可启动新程序。在Linux下这是通过execve系统调用实现的。 该系统调用的入口点是sys_execve函数,然后委托给do_execve函数。其原型如下:kernel/exec.cint do_execve(char * filename,char user * user *argv, char user * user *envp, struct pt_regs原创 2017-08-18 00:48:08 · 826 阅读 · 0 评论 -
内核源码阅读(六)内核线程
内核线程 内核线程是直接由内核本身启动的进程,也经常称之为守护进程。主要用于执行下列任务:周期性地将修改的内存页与页来源块设备同步;如果内存页很少使用,则写入交换区;管理延时操作;实现文件系统的事物日志。有两种类型的内核线程: 类型1:线程启动后一直等待,直至内核请求线程执行某一特定操作。 类型2:线程启动后按周期性间隔运行,检测特定资源的使用,在用量超出或低于预置的限制 值时采取原创 2017-08-18 00:19:34 · 620 阅读 · 0 评论 -
内核源码阅读(五)进程ID
接着上一节我们继续学习进程ID。 在上一节中我们提到了node是一个散列表元素,对于这个散列表并未做过多解释,在这里我们给出更加详细的描述。这个散列表是为了在给定的命名空间中查找对应与指定PID数值的pid数组的pid结构实例。 static struct hlist_head *pid_hash; 上面的hlist_head是一个内核的标准数据结构,用于建立双向散列表。 pid_hash是原创 2017-08-17 00:45:37 · 884 阅读 · 0 评论 -
内核源码阅读(四)进程ID
1)进程ID 进程ID,简称PID,是进程在命名空间的唯一表示。 线程组ID:每个进程除了PID这个特征值外,还有线程组ID(TGID),若没有使用线程,则PID和TGID相同。 会话ID(SID):几个进程可合并成一个会话,会话中所有进程都有同样的SID保存于task_struct的session成员中,可使用setsid系统调用设置。原创 2017-08-16 00:49:28 · 778 阅读 · 0 评论 -
内核源码阅读(三)进程命名空间和用户命名的实现
(1)进程的命名空间1.基本概念 传统上Linux及其衍生版的UNIX变体中,许多资源都是全局管理的。例如进程PID和用户的UID等全局ID。为了节约成本并且能够保证用户之间的权限不受影响,命名空间提供了一种与KVMhe VMare不同的解决方案。内核通过命名空间将全局资源进行抽象,使得各个进程组分别放到不同的容器,彼此隔离,但是可以允许提供一些接口使得其可以相互通信来降低容器间的原创 2017-08-15 00:06:37 · 1457 阅读 · 0 评论 -
内核源码阅读(二)进程复制
进程复制1.三种常见进程复制API:1)fork()是一个重量级调用,因为它建立了一个父进程的完整副本,然后作为子进程执行。Linux后来采用了写时复制技术对其进行了优化。2)vfork()类似于fork(),但是其父子进程共享数据。vfork()设计用于子进程形成后立即执行execve()加载新程序的情况。子进程退出或开始新程序之前,内核保证父进程处于阻塞状态。原创 2017-08-11 00:08:15 · 884 阅读 · 0 评论 -
内核源码阅读(一)进程
1.进程分为实时进程和非实时进程。 硬实时进程有严格的时间限制,某些任务必须在指定的时限内完成。软实时进程是硬实时进程的一种弱化形式。大多数进程没有特定时间约束的普通进程。CPU时间分配简图如2.1所示。图2.1 时间片分配CPU时间抢占式多任务处理:各个进程都分配到一定时间段可以移植,当时间到期后,内核会从进程强制手机控制权,被抢占进程的运行时环境都会被保存起来原创 2017-08-09 20:51:52 · 766 阅读 · 0 评论