当前位置: 首页 > news >正文

天津 企业网站建设自适应网站建设案例

天津 企业网站建设,自适应网站建设案例,wordpress 迁移 ip,保定网站推广哪家好代码分析根据3.10版本通过对前面的学习我们知道Linux的调度分为两种周期调度 完成周期性算法参数的更新和系统其它实际的检查主调的 真正的调度过程我们现在来看下主调的的代码框架。入口根《调度发生的情况》的学习#xff0c;我们知道所有的调度最后都会到 schedule 函数中。…代码分析根据3.10版本通过对前面的学习我们知道Linux的调度分为两种周期调度 完成周期性算法参数的更新和系统其它实际的检查主调的 真正的调度过程我们现在来看下主调的的代码框架。入口根《调度发生的情况》的学习我们知道所有的调度最后都会到 schedule 函数中。因此我们就先从schedule函数入手。asmlinkage void __sched schedule(void){struct task_struct *tsk current;sched_submit_work(tsk);//获取当前current 并且加锁。__schedule();}schedule 函数并没有太多的操作只是获取当前task然后加锁最后都交给了**__schedule()**函数。主要框架主要函数__schedule分析static void __sched __schedule(void){struct task_struct *prev, *next;unsigned long *switch_count;struct rq *rq;int cpu;need_resched:preempt_disable();cpu smp_processor_id();rq cpu_rq(cpu);//找到当前cpu拿取队列prev rq-curr;//保持此时此刻的任务.....pre_schedule(rq, prev);//做一些预处理....put_prev_task(rq, prev);next pick_next_task(rq);//选取下一个进程clear_tsk_need_resched(prev);rq-skip_clock_update 0;if (likely(prev ! next)) {//选好了rq-nr_switches;rq-curr next;*switch_count;//计数加一...context_switch(rq, prev, next); /* unlocks the rq */真正的切换堆栈帧...cpu smp_processor_id();rq cpu_rq(cpu);} elseraw_spin_unlock_irq(rq-lock);....if (need_resched())//是否需要重新调度goto need_resched;}其实**__schedule**还是比较长的但是我们这里选择了一些主要的流程分析流程如下1、拿到当前cpu的队列rq2、进行一些与操作处理3、选取下一个进程4、堆栈帧context_switch 切换5、是否需要重新调度关于重新调度设计到一些内核抢占的知识我们暂时不分析。而context_switch是硬件堆栈的切换我们后文会认真分析这个函数在这个过程中我们主要关注如何选取下一个进程。如何选取下一个任务 pick_next_task 函数分析static inline struct task_struct * pick_next_task(struct rq *rq){const struct sched_class *class;struct task_struct *p;/** Optimization: we know that if all tasks are in* the fair class we can call that function directly:*/if (likely(rq-nr_running rq-cfs.h_nr_running)) {检查当前cpu队列中是否所有的都是cfs如果是就直接掉用cfs的调度类p fair_sched_class.pick_next_task(rq);if (likely(p))return p;}for_each_class(class) {循环遍历每一个调度类p class-pick_next_task(rq);if (p)return p;}}pick_next_task 还是比较简单的只是有两部 1、查看当前cpu队列是否所有的都是cfs 2、遍历所有调度类。 对于是不是全部cfs的检查是有必要的会减少开销。我们再来看下遍历#define sched_class_highest (stop_sched_class)#define for_each_class(class) \for (class sched_class_highest; class; class class-next)extern const struct sched_class stop_sched_class;extern const struct sched_class rt_sched_class;extern const struct sched_class fair_sched_class;extern const struct sched_class idle_sched_class;我们看到是从stop_sched_class开始const struct sched_class stop_sched_class {.next rt_sched_class,....}const struct sched_class rt_sched_class {.next fair_sched_class,....}const struct sched_class fair_sched_class {.next idle_sched_class,....}const struct sched_class idle_sched_class {/* .next is NULL */....}可以看到是这么个列表。stop_sched_class --》rt_sched_class--》fair_sched_class--》idle_sched_class--》NULL以cfs为例看看如何选取taskstatic struct task_struct *pick_next_task_fair(struct rq *rq){struct task_struct *p;struct cfs_rq *cfs_rq rq-cfs;struct sched_entity *se;if (!cfs_rq-nr_running)return NULL;do {se pick_next_entity(cfs_rq);set_next_entity(cfs_rq, se);cfs_rq group_cfs_rq(se);} while (cfs_rq);p task_of(se);if (hrtick_enabled(rq))hrtick_start_fair(rq, p);return p;}这部分代码也是组调度流程的基础现在看起来是比较简单的但是接下来分析组调度的时候就会详细的展开分析。 我们看这个简单的过程全局的rq 拿到cfs_rqcfs_rq 通过pick_next_entity 拿到算法算好的调度类entity----se。进行组调度----目前先忽略将se 转换成task 这样就结束了主调的的所有过程。
http://www.huolong8.cn/news/102410/

相关文章:

  • 腾讯云快速建站做试卷的网站
  • 哪些网站适合推广陕西住房与建设厅网站
  • 网站建设前端需要看什么书微网站免费制作
  • 外贸网站设计注意事项网站用表格做的吗
  • 什么网站是免费的用华为云建立Wordpress网站
  • 企业网站开发模板下载动态发布网站和静态发布网站
  • 佛山网站建设推广订做手机主题 wordpress
  • flash网站模版网站开发工程师好不好
  • 建设一个网站app需要多少钱廊坊seo排名公司
  • 网站建设情况 报告梅州建站多少钱
  • 郑州网站制作十年乐云seo呼市网站设计
  • 新建网站百度搜不到wordpress 405
  • 传奇手游开服网站响应式网站的组成
  • 网站设置文件夹权限机械网站建设方案
  • 网站制做网页突然无法访问
  • 创建网站平台要多少钱滨江网站建设公司
  • 网站建设系企业网站推广效果指标分析
  • 免费模板下载网站推荐国外黄冈网站推广软件有哪些
  • 网站内链怎么删除上海做网站 公司 哪家好
  • 南宁世尊商贸网站建设二级建造师报考条件2021考试时间
  • 可信网站身份验证哈尔滨门户网站制作哪家好
  • 服装公司网站网页设计平台开发多少钱
  • 电子商务推广网站铜陵公司做网站
  • 培训网站完整页面宝安高端网站建设公司
  • 网站系统解决方案经典 wordpress主题下载
  • 经营网站备案信息做网站公司销售开场白
  • app如何推广以及推广渠道天津seo结算
  • 免费域名模板建站关于建设门户网站的请示
  • 有没有不花钱建设网站的方法wordpress更改ip地址
  • 甘肃省城乡与建设厅网站首页wordpress空间清理