随笔分类 - linux_kernel
摘要:1.内核中的链表 linux内核链表与众不同,他不是把将数据结构塞入链表,而是将链表节点塞入数据,在2.1内核中引入了官方链表,从此内核中所有的链表使用都采用此链表,千万不要在重复造车轮子了!链表实现定义在,使用内核链表时,包含此文件。 1.1.传统的双向链表和内核中的双向链表的区别 有个单独的头结
阅读全文
摘要:本文从read函数入手,主要讲述从页缓冲,一直到具体的块请求被提交给块设备驱动程序的过程,以下是本文讲述的一张概图,也是对本文的一个概括,可以结合本图,首先由一个从全局上有个清楚的认识,然后再去查看具体的代码,当然本文只是从大体流程上对页缓冲的处理流程进行分析,还有很多小的细节没有搞清楚,后面还需要
阅读全文
摘要:1.Linux 文件系统组成结构 linux文件系统有两个重要的特点:一个是文件系统抽象出了一个通用文件表示层——虚拟文件系统或称做VFS。另外一个重要特点就是它的文件系统支持动态安装(或说挂载等),大多数文件系统都可以作为根文件系统的叶子节点被挂在到根文件目录树下的子目录上。 1.1.虚拟文件系统
阅读全文
摘要:1.工作队列
工作队列是另外一种将工作推后执行的形式,它和前面的软中断以及tasklet都不相同,工作队列可以把工作推后,交由一个内核线程去执行这个下半部,但是由于是内核线程,其不能访问用户空间,最重要特点是工作队列允许重新调度甚至是睡眠。
通常,在工作队列,软中断,tasklet中做出选择非常容...
阅读全文
摘要:1.tasklet概述下半部和退后执行的工作,软中断的使用只在那些执行频率很高和连续性要求很高的情况下才需要。在大多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选择。其实tasklet是利用软中断实现的一种下半部机制。tasklet和软中断在本质上很相似,行为表...
阅读全文
摘要:1.内核为什么要把中断分为上半部和下半部在Linux内核中,为了在中断执行时间尽可能短和中断处理需要完成大量工作之间找到一个平衡点,Linux将中断处理程序分为两个部分:上半部和下半部。中断处理程序的上半部接受到一个中断时就立即执行,但是只做比较紧急的工作,这些工作都是在所有中断被禁止的情况下完成...
阅读全文
摘要:1.理解中断
中断,从字面意思理解,就是一个正在执行的东西被中断掉了。那么,其实在计算机中中断是一个复杂的处理过程。例如,当你敲击键盘的时候,键盘控制器(控制键盘的设备)会发送一个中断,通知操作系统有键被按下了。中断本质上是一种电信号,由硬件设备发向处理器,处理器接受到中断后,会马上向操作系统反映...
阅读全文
摘要:前言 系统调用的基本原理系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态。在内核中通过软中断0X80,系统会跳转到一个预设好的内核空间地址,它指向了系统调用处理程序( 不要和系统调用服务例程混淆 ),这...
阅读全文
摘要:1.内部碎片和外部碎片 外部碎片 什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久之就形成了页框的浪...
阅读全文
摘要:Linux采用了通用的四级分页机制,所谓通用就是指Linux使用这种分页机制管理所有架构的分页模型,即便某些架构并不支持四级分页。对于常见的x86架构,如果系统是32位,二级分页模型就可满足系统需求;如果32位系统采用PAE(物理地址扩展)模式,Linux使用三级分页模型;如果是64位系统,Linu...
阅读全文
摘要:1.伙伴算法的引入内核在频繁的请求和释放不同大小的一组连续页框,必然会导致在已经分配的块内分散了许多小块的空闲页框。由此带来的问题是,及时有足够的空闲页框可以满足请求,但是要分配一个大块的连续页框就无法满足。所以,内核应该为分配一组连续的页框而建立一种健壮,高校的分配策略。这样,内核就引入了伙伴算...
阅读全文
摘要:1.调度器的概述
多任务操作系统分为非抢占式多任务和抢占式多任务。与大多数现代操作系统一样,Linux采用的是抢占式多任务模式。这表示对CPU的占用时间由操作系统决定的,具体为操作系统中的调度器。调度器决定了什么时候停止一个进程以便让其他进程有机会运行,同时挑选出一个其他的进程开始运行。 2.调...
阅读全文
摘要:1.进程的创建进程的创建是一个非常复杂的过程,这里以用户空间的fork为出手点,去探究进程在在内核中的创建流程。 1.1.进程的命名空间我们知道每个进程都有自己唯一的一个pid,在内核中都有自己唯一的一个task_struct,那么内核中是如何为一个进程分配一个唯一的pid的呢?我们来看一下内核中...
阅读全文
摘要:1.对内核中do_execve()函数的理解Linux提供了execle,execlp, execv, execvp和execve等六个用以执行一个可执行文件的函数(其之间的差异在于对命令行参数和环境变量的传递方式不同)。第一个参数是要被执行的程序的路径,第二个参数则向程序传递了命令行参数,第三个...
阅读全文

浙公网安备 33010602011771号