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