Linux内核
文章平均质量分 60
tenacity-go
一个正在探索属于自己的道路的程序员
展开
-
Linux系统内存管理之伙伴系统分析
1.伙伴系统概念 伙伴系统是一种经典的内存管理方法。Linux伙伴系统的引入为内核提供了一种用于分配一组连续的页而建立的一种高效的分配策略,并有效的解决了外碎片问题。 2.伙伴系统的组织结构 Linux中的内存管理的“页”大小为4KB。把所有的空闲页分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页块。最转载 2017-04-03 18:07:02 · 2840 阅读 · 0 评论 -
Linux内核之page cache和buffer cache
page cache也被称为页高速缓存,在VFS文件系统中,每个文件都会有一棵radix树管理文件的缓存页,这些被管理的缓存页被称之为page cache。所以,page cache是针对文件系统而言的。page cache是对文件数据的缓存buffer cache也被称为缓冲区高速缓存,是针对设备的,每个设备都会有一棵radix树管理数据缓存块,这些缓存块被称之为buffer cache。如原创 2017-04-03 18:01:11 · 2167 阅读 · 0 评论 -
Linux内核之自旋锁和信号量
Linux内核实现了多种同步方法,指令级支持的原子操作、自旋锁、信号量、互斥锁、完成量、大内核锁等等,我就挑比较有代表性的两个锁——自旋锁和信号量来分析。自旋锁Linux内核中最常用的锁就是自旋锁(spin lock),自旋锁最多只能被一个执行线程持有。如果一个执行线程试图获得一个被已经持有(即所谓争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用。在任意时间,自旋锁都可以原创 2017-04-03 17:29:44 · 1096 阅读 · 0 评论 -
Linux内核之进程上下文和中断上下文
进程在执行的过程中始终会处于用户态和内核态中的一种,而内核态又分为运行于进程上下文(内核代表进程运行于内核空间)和中断上下文(内核代表硬件运行于内核空间)。进程上下文所谓的进程上下文就是进程在执行的时候拥有的寄存器值、打开的文件、堆栈、内存信息等内容,其中也包括用户空间的进程通过系统调用传递给内核的参数还有保存的寄存器值和变量,参数。执行系统调用或者运行内核线程时内核处于进程上下文,此时内原创 2017-04-03 15:23:16 · 1615 阅读 · 0 评论 -
Linux内核之核心调度器
在Linux中内核提供了两个调度器主调度器,周期性调度器主调度器是直接的, 比如进程打算睡眠或出于其他原因放弃CPU,schedule函数周期性调度器是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要,scheduler_tick查看当前进程是否运行太长时间,如果是,将进程的TIF_NEED_RESCHED置位,然后再中断返回时,调用schedule,进行进程切换操作两个调原创 2017-04-03 13:56:18 · 1754 阅读 · 0 评论 -
Linux内核之禁止中断和禁止内核抢占
禁止中断指的是Linux内核停工了一组接口用于操作机器上的中断状态。这些接口为我们提供了能够禁止当前处理器的中断系统,或者屏蔽掉整个机器的一条中断线的能力。通过禁止中断,可以确保某个中断处理程序不会抢占当前的代码。控制中断系统在Linux的实现有很多,以local_irq_disable()和 local_irq_enable()函数//我看不懂,反正就是依赖于体系结构,通过汇编调用实现st原创 2017-04-02 22:57:42 · 15011 阅读 · 2 评论 -
Linux内核之抢占
在Linux中抢占分为用户抢占和内核抢占1.need_reschedneed_resched标志在Linux内核中用来表明是否需要重新调度,每个进程都包含一个need_resched标志,为什么不维护一个全局的need_resched变量呢?这是因为访问进程描述符内的数值要比访问一个全局变量快(current宏速度很快并且描述符通常都在高速缓存中),need_resched标志在threa原创 2017-04-01 21:24:03 · 769 阅读 · 0 评论 -
Linux context_switch函数实现分析
转载至:http://blog.csdn.net/gatieme/article/details/51872659?locationNum=5,原文写的太乱了,但是写得很好,我重新组织了格式,删了一些话,加了一些自己的理解1.上下文切换的概念进程被抢占CPU时候, 操作系统保存其上下文信息, 同时将新的活动进程的上下文信息加载进来, 这个过程其实就是上下文切换, 而当一个被抢占的进原创 2017-04-01 19:23:54 · 2064 阅读 · 0 评论 -
深入探究fork函数写时拷贝技术的实现
这几天在看《Linux内核设计与实现》,看到fork函数写时拷贝(copy on write)那一节,突然发现以前学习写时拷贝技术的时候只是大概理解了它的原理,并没有深入理解,本来想在网上找找有没有分析写时拷贝技术实现原理的博客,找了半天发现全是些介绍理论的,balabala一大堆,于是决定自己去看Linux的源码。我用的Linux内核源码是2.6.26版本。要学习copy on write,原创 2017-03-25 21:03:04 · 2868 阅读 · 0 评论 -
通用块层IO调度算法之deadline算法
在讲通用块层IO调度算法之前,我们先来回顾一下page是如何进入通用块层的,在文件系统中的writeback机制中,回写线程先将page变成buffer head,然后submit_bh函数又将buffer head变成了bio,最后调用submit_bio函数进入通用块层,在submit_bio函数中会调用一个通用的函数make_request_fn将bio提交,在块设备层中make_reque原创 2016-12-10 11:08:46 · 4425 阅读 · 0 评论 -
linux进程,普通线程,内核线程
在Linux中,进程和线程的区别并不大,进程的创建主要依赖于fork函数(还有vfork函数),普通线程的创建则依赖于clone函数,内核线程比较特殊,后面再讲在Linux 2.6.32版本的内核中,三个函数的实现如下(体系结构为x86):asmlinkage int sys_fork(struct pt_regs regs){ return do_fork(SIGCHLD, regs原创 2017-04-01 10:47:09 · 645 阅读 · 0 评论 -
Linux用户空间与内核空间(理解高端内存)
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。转载 2017-04-03 18:13:46 · 3840 阅读 · 1 评论