linux内核
文章平均质量分 64
Geek_Simon
simon的极客之路
展开
-
每日阅读7之linux内核设计与实现——实时调度与调度系统调用
linux普通的进程调度策略是SCHED_NORMAL,实现在CFS调度器类中linux 提供二种实时调度策略SCHED_RR,SCHED_FIFO,实现在linux实时调度器中,实现在kernel/sched_rt.c中。。SCHED_FIFI为优先级抢占的实时调度策略,一旦较高优先级的进程获得资源,便会一直占用,值得阻塞或自己显示的放弃处理器资源。SCHED_RR为待时间片的SCH原创 2013-03-28 13:45:45 · 606 阅读 · 0 评论 -
每日月的8之linux内核设计与实现——中断与中断处理
计算机中CPU需要与外围设备硬件进行通信,而二者之间的速度差距使得让CPU等待外围设备处理完成这绝不是个好办法。。所以,在外围设备处理数据期间,CPU去执行其他任务。。但是,当外围设备处理完数据后,CPU怎么知道呢?一种办法是CPU周期性的轮询,这太浪费CPU时间。。所以,引入了中断机制,硬件在需要的时候想内核(确定是内核,不是CPU,这种机制应该是软件层面的。。。,错了,其实还是CP原创 2013-03-28 14:18:57 · 643 阅读 · 0 评论 -
每日阅读11之内核设计与实现——注册中断处理程序
好久没有写博客了,已经有点迷失自我,忘了自己最重要的事情,罪过罪过。。。中断处理程序是管理硬件的驱动程序的组成部分。每一设备都有相关的驱动程序,如果设备使用中断的方式与CPU通信,那么驱动程序就会注册一个中断处理程序.(1个?)驱动程序通过函数request_irq()注册一个中断处理程序,并激活相应的中断线(?什么东东,从下文看来像是多个中断处理程序共用的一个中断号)。。。定原创 2013-04-10 20:10:59 · 611 阅读 · 0 评论 -
每日阅读6之linux内核设计与实现——抢占与上下文切换
上下文切换,即由一个可执行进程切换到另一个可执行线程。由kernel/sched.c中的context_switch()函数完成,当一个进程准备投入运行时,schedule()调用该函数实现进程切换。该函数完成二项基本工作(1)调用中定义的switch_mm(),负责将虚拟内存从上一个进程映射切换到新进程中去。(2)调用声明在中的switch_to(),负责将上一个进程的处理器状态原创 2013-03-25 20:46:21 · 489 阅读 · 0 评论 -
每日阅读4之linux内核设计与实现——linux调度实现之调度器入口
linux调度的入口函数时schedule(),定义在文件kernel/sched.c是内核其它部分用于调用进程调度器的入口:选择哪个进程可以运行,何时将其投入运行通常需要和一个具体的调度类相关联,一般是优先级最高的,每个调度类都有一个自己的可运行队列这个函数唯一的作用就是调用pick_next_task,依次检查每个调度器类,并且从最高优先级的调度器类中选择最高优先级的进程运行。。原创 2013-03-23 16:52:56 · 557 阅读 · 0 评论 -
每日阅读5之linux内核设计与实现——linux内核调度之睡眠与唤醒
进程休眠(被阻塞)的原因有很多种,但都是在等待某一种事件(1)文件I/O磁盘读取,键盘输入等硬件事件(2)获取一个已经被占用的内核信号量等。。。操作休眠:进程把自己标记成休眠状态,从可运行红黑树中移出,加入等待队列,调用schedule()选择和执行一个其他进程唤醒:进程被设为可执行状态,从等待队列中移到可执行红黑树休眠的进程可能出于二种状态,但位于同一等待原创 2013-03-24 16:29:19 · 486 阅读 · 0 评论 -
每日阅读3之内核设计与实现(第三版)4.5——linux调度实现之进程选择
在引入CFS调度思想的同时,我们希望能实现完美多任务处理器,以保证每个进程有相同的虚拟运行时间。但现实中并不存在这样的多任务处理器,CFS使用一个很简单的规则来均衡所有进程的虚拟运行时间,即每次选择当前vruntime值最小的进程去执行。。为实现这一点,CFS使用红黑树rbtree来组织可运行进程队列,所以实际上对于可运行进程调度的相关操作,实际上就是红黑树数据结构的一些基本操作的变形。。原创 2013-03-19 09:38:04 · 550 阅读 · 0 评论 -
每日阅读2之linux内核设计与实现11.7.1定时器的使用
定时器(动态定时器,内核定时器)是管理内核时间流逝的基础。内核经常需要推后执行某些代码(所谓的下半部机制),因此需要一种机制,使工作在指定的时间点完成,这就是内核定时器的作用与目标。。、使用原理: 初始化一个定时器,设置超时时间,指定超时发生后的处理函数,激活定时器。。定时器并不周期性运行,超时后自动撤销(动态)。。。定时器在内核中应用非常普遍。。定时器结构timer_list,定义在原创 2013-03-19 09:36:08 · 671 阅读 · 0 评论 -
每日阅读1之内核设计与实现(第三版)4.5——linux调度实现之时间记账
前面讨论CFS调度算法的动机和内在逻辑,下面开始探索CFS是如何实现的。相关代码位于kernel/sched_fair.c文件中。主要包含四个组成部分:(1)时间记账(2)进程选择(3)调度器入口(4)睡眠与唤醒今天,主要关注时间记账这个部分。。。所有的调度器都必须对进程的运行时间进行记账,大多数unix系统采用为进程分配一个时间片,每当系统时钟节拍发生时,时间片减原创 2013-03-18 11:20:07 · 926 阅读 · 0 评论 -
每日阅读9之linux内核设计与实现——中断上半部与下半部
中断处理(1)要求速度快(2)完成的工作量多这是不可能的,因此引入中断处理上下半部的概念。。接受到一个中断,立即开始处理有严格时限的操作(如从硬件接受数据并存储,答复硬件),另外一些工作被允许稍后执行,在合适的时机开始中断下半部的处理。。linux提供了实现下半部的各种机制。。以网卡中断为例,当网卡接收到数据包后,产生中断,内核开始从网卡缓冲区中原创 2013-03-29 19:35:44 · 409 阅读 · 0 评论 -
每日阅读12内核设计与实现——中断处理程序与中断上下文
中断处理程序是不会重入的,当中断发生时,所有处理器上同一中断线上的其它中断被禁止,绝不会出现同一中断线的嵌套中断。。。而其它中断线则是打开的,能被处理的。。这些准则,极大的简化了中断处理程序的编写。。当内核接受到一个中断后,将依次调用在该中断线上注册的每一个处理程序(从这一点看,一个中断可能会有很多中断处理程序要执行。。)每一个处理程序必须知道它是否与这一中断相关,因此它要原创 2013-04-11 20:10:56 · 573 阅读 · 0 评论