
Linux内核
crazy_koala
这个作者很懒,什么都没留下…
展开
-
高通看门狗驱动-MSM Watchdog
源码中的文档:不论是软狗还是硬狗,大体思路都差不多:准备一个定时器,定时10s,超时之后启动地球毁灭程序~~~。为了防止地球毁灭,需要时不时的将计时器的计数值清零,称为喂狗。一般看门狗定时器是无论系统跑飞还是卡死都能正常运行的,一般超时后直接拉CPU的reset引脚,让系统复位。先看probe函数:static int msm_watchdog_probe(struct p...原创 2020-04-19 15:44:49 · 3053 阅读 · 0 评论 -
CFS-完全公平调度器
CFS实现的公平的基本原理是这样的:指定一个周期,根据进程的数量,大家”平分“这个调度周期内的CPU使用权,调度器保证在一个周期内所有进程都能被执行到。CFS和之前O(n)调度器不同,优先级高的进程能获得更多运行时间,但不代表优先级高的进程一定就先运行:调度器使用vruntime来统计进程运行的累计时间,理想状态下,所有进程的vruntime是相等时代表当前CPU的时间分配是完全公平的。但事实...原创 2020-02-06 15:09:36 · 891 阅读 · 0 评论 -
恶霸调度器-实时调度器
1.内核如何组织调度实体:struct task_struct { ... struct sched_rt_entity rt; ...}struct sched_rt_entity { struct list_head run_list; unsigned long timeout; unsigned long watchdog_stam...原创 2020-01-03 22:13:14 · 311 阅读 · 0 评论 -
Linux调度-调度时机和调度条件
struct thread_info { unsigned long flags; /* low level flags */ int preempt_count; /* 0 => preemptable, <0 => bug */ };作为一个正经的程序,它不可能从一开始运行就需要一直占用CPU直到地球毁灭,可能某些时候需要等待一些资源无...原创 2020-01-03 22:01:30 · 609 阅读 · 0 评论 -
Linux调度-关于抢占的几个配置
config PREEMPT_NONE bool "No Forced Preemption (Server)" help This is the traditional Linux preemption model, geared towards throughput. It will still provide good latencies most of the ...原创 2020-01-03 21:35:53 · 907 阅读 · 0 评论 -
Linux调度-主调度器
核心调度器,其实就是schedule这一个函数,当一个进程觉得自己无事可做了,可以调用该函数释放CPU,让其他进程占用CPU完成任务。粗略看下代码,做了一些注释。asmlinkage __visible void __sched schedule(void){ struct task_struct *tsk = current; sched_submit_work(tsk); do...原创 2019-10-11 19:47:09 · 457 阅读 · 0 评论 -
Linux调度-周期性调度器
很早以前有一个问题:搞单片机的时候,在不做响应任何中断的前提下,任何一个模块代码跑一个死循环,机器一定会卡死。但是到了接触linux之后,发现不论是在内核中还是用户层代码中,while(1)把机器搞死机这样的操作完全失效了,这是为什么?原来,这是周期性调度器的功劳,前提内核是抢占式内核在系统时钟中断来之后,在中断处理函数中会通过tick_periodic最终调到scheduler_tick,...原创 2019-09-29 10:51:37 · 604 阅读 · 0 评论 -
Linux调度-概览
1.调度什么?直接把task_struct直接串起来一个个调度?还是专门设计一个结构来做用于调度的实体2.什么时候调度?也就是何时该去发动调度器去切换下一个任务?3.怎么调度?策略是什么?当要切换下一个任务时选择的原则是什么?调度什么?直接把task_struct直接串起来一个个调度?还是专门设计一个结构来做用于调度的实体?内核中有一个结构叫运行列队(runqueue),根据实时和完...原创 2019-09-27 14:22:33 · 259 阅读 · 0 评论 -
Linux的优先级
linux的优先级表示很叫人头大,所有就总结了一张图:再看看代码,文件prio.h的一些宏:#define MAX_NICE 19#define MIN_NICE -20#define NICE_WIDTH (MAX_NICE - MIN_NICE + 1) //nice优先级max和min的跨度是40#define MAX_USER_RT_PRIO 100#define ...原创 2019-09-10 15:13:43 · 2361 阅读 · 1 评论 -
Linux如何处理信号
从Crtl+C开始:之前一直有一个问题:在shell下运行一个程序,每次想中途停止这个程序时,下意识的就会按下Ctrl+C就可以终止当前阻塞在终端的进程,Ctrl+C这个组合键按下到底都发生了什么?其实这个操作就是向前台进程发送SIGINT信号。以下是linux支持的信号列表:使用kill -n pid或在代码中使用int kill(pid_t pid, int sig);可以向一...原创 2019-09-09 17:15:00 · 221 阅读 · 0 评论 -
Linux的内核的信号量
信号量结构很简单,各个成员的作用通过名字基本就知道干啥用的:struct semaphore { raw_spinlock_t lock;//保证信号量原则操作的锁 unsigned int count;//“量”,如果为1一般叫互斥量,>1叫做计数信号量 struct list_head wait_list;//当信号量无法获取时,进程可以在这排队等着};结合信号量的...原创 2019-09-09 16:55:24 · 230 阅读 · 0 评论 -
Linux的链表
什么是链表?链表可以想象成就是一条锁链,每一个环上面都可以刻些信息在上面,有新的信息要记录就拿出新的一环把信息刻上去然后打开锁链一头加上去,要使用上面的某一环取下来即可。把这些信息串起来方便管理(排序、增减、查找)该怎么实现链表?比如说把一个班的学生用链表的形式连接起来,可以是这样:但是以上的将next指向下一个节点(直接指向下一个student)的设计方法用起来没什么毛病,但...原创 2019-09-04 22:39:39 · 272 阅读 · 0 评论