把握linux内核设计思想
本专栏分析linux内核的设计实现,包括系统调用、中断、下半部机制、时间管理、内核同步、进程管理、内存管理等相关内容。
shallnet
一个没赶上脑残一代90后的80后程序猿!
展开
-
把握linux内核设计思想系列
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】把握linux内核设计思想(一):系统调用把握linux内核设计思想(二):硬中断及中断处理把握linux内核设计思想(三):下半部机制之软中断把握linux内核设计思想(四):下半部机制之tasklet把握linux内核设计思想(五):下半部机制之工作队列及几种机制的选择把握linux内核设计思想(六):内核时钟中断把握linux内核设计思想(七):内核定时器和定时执原创 2015-08-17 23:15:24 · 3072 阅读 · 1 评论 -
把握linux内核设计思想(十三):内存管理之进程地址空间
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 进程地址空间由进程可寻址的虚拟内存组成,Linux 的虚拟地址空间为0~4G字节(注:本节讲述均以32为为例)。Linux内核将这 4G 字节的空间分为两部分。将最高的 1G 字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“原创 2015-08-16 11:52:43 · 2703 阅读 · 1 评论 -
把握linux内核设计思想(十二):内存管理之slab分配器
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 上一节最后说到对于小内存区的请求,如果采用伙伴系统来进行分配,则会在页内产生很多空闲空间无法使用,因此产生slab分配器来处理对小内存区(几十或几百字节)的请求。Linux中引入Slab的主要目的是为了减少对伙伴算法的调用次数。 内原创 2015-08-15 16:09:54 · 3443 阅读 · 3 评论 -
把握linux内核设计思想(十一):内存管理之页的分配与回收
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 内存管理单元(MMU)负责将管理内存,在把虚拟地址转换为物理地址的硬件的时候是按页为单位进行处理,从虚拟内存的角度来看,页就是内存管理中的最小单位。页的大小与体系结构有关,在 x86 结构中一般是4KB(32位)或者8KB(64位)。通过 get原创 2015-08-15 15:51:58 · 3030 阅读 · 1 评论 -
把握linux内核设计思想(十):内核同步
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 如同linux应用一样,内核的共享资源也要防止并发,因为如果多个执行线程同时访问和操作数据有可能发生各个线程之间相互覆盖共享数据的情况。 在linux只是单一处理器的时候,只有在中断发生或内核请求重新调度执行另一个任务时,数据才可能会原创 2015-07-31 22:36:26 · 1788 阅读 · 1 评论 -
把握linux内核设计思想(九):进程调度
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 linux为多任务系统,正常情况下都存在成百上千个任务。由于linux提供抢占式的多任务模式,所以linux能同时并发地交互执行多个进程,而调度程序将决定哪一个进程投入运行、何时运行、以及运行多长时间。调度程序是像linux这样的多任务操作系统的基础,原创 2015-07-31 22:18:38 · 2382 阅读 · 2 评论 -
把握linux内核设计思想(八):进程管理分析
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 进程其实就是程序的执行时的实例,是处于执行期的程序。在linux内核中,进程列表被存放在一个双向循环链表中,链表中每一项都是类型为task_struct的结构,该结构称作进程描述符,进程描述符包含一个具体进程的所有信息,这个结构就是我们在操作系统中所说的PCB原创 2015-07-29 20:34:08 · 2113 阅读 · 1 评论 -
把握linux内核设计思想(七):内核定时器和定时执行
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 前面章节说到了把工作推后到除现在以外的时间执行的机制是下半部机制,但是当你需要将工作推后到某个确定的时间段之后执行,使用定时器是很好的选择。 上一节内核时间管理中讲到内核在始终中断发生执行定时器,定时器作为软中断在下半部上下文中执行。时钟中断原创 2015-07-29 20:18:01 · 4219 阅读 · 0 评论 -
把握linux内核设计思想(六):内核时钟中断
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 内核中很多函数是基于时间驱动的,其中有些函数需要周期或定期执行。比如有的每秒执行100次,有的在等待一个相对时间之后执行。除此之外,内核还必须管理系统运行的时间日期。 周期性产生的时间都是有系统定时器驱动的,系统定时器是一种可编程硬件芯原创 2015-07-29 20:03:40 · 7389 阅读 · 0 评论 -
把握linux内核设计思想(五):下半部机制之工作队列及几种机制的选择
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 工作队列是下半部的另外一种将工作推后执行形式。和软中断、tasklet不同,工作队列将工作推后交由一个内核线程去执行,并且该下半部总会在进程上下文中执行。这样,工作队列允许重新调度甚至是睡眠。 所以,如果推后执行的任务需要睡眠,就选择工作队列原创 2015-07-29 00:00:23 · 2548 阅读 · 2 评论 -
把握linux内核设计思想(四):下半部机制之tasklet
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 tasklet是利用软中断实现的一种下半部机制。tasklet相比于软中断,其接口更加简单方便,锁保护要求较低。tasklet由tasklet_struct结构体表示:struct tasklet_struct{ struct ta原创 2015-07-28 23:46:26 · 2809 阅读 · 0 评论 -
把握linux内核设计思想(三):下半部机制之软中断
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 中断处理程序以异步方式执行,其会打断其他重要代码,其运行时该中断同级的其他中断会被屏蔽,并且当前处理器上所有其他中断都有可能会被屏蔽掉,还有中断处理程序不能阻塞,所以中断处理需要尽快结束。由于中断处理程序的这些缺陷,导致了中断处理程序只是整个硬件中断处理流程的原创 2015-07-28 23:35:03 · 1962 阅读 · 0 评论 -
把握linux内核设计思想(二):硬中断及中断处理
操作系统负责管理硬件设备,为了使系统和硬件设备的协同工作不降低机器性能,系统和硬件的通信使用中断的机制,也就是让硬件在需要的时候向内核发出信号,这样使得内核不用去轮询设备而导致做很多无用功。 中断使得硬件可以发出通知给处理器,硬件设备生成中断的时候并不考虑与处理器的时钟同步,中断可以随时产生。也就是说,内核随时可能因为新到来的中断而被打断。当接收到一个中断后,中断控制器会给处理器原创 2015-07-28 23:25:15 · 3507 阅读 · 0 评论 -
把握linux内核设计思想(一):系统调用
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 一般情况下进程不能访问内核所占内存空间也不能调用内核函数。为了和用户空间上运行的进程进行交互,内核提供了一组接口。透过该接口,应用程序可以访问硬件设备和其他操作系统资源。这组接口在应用程序和内核之间扮演了使者的角色,应用程序发送各种请求,而内核负责满足这些请求原创 2015-07-28 23:07:54 · 4185 阅读 · 1 评论