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

免费手机网站开发微信营销方法

免费手机网站开发,微信营销方法,大学生个人网页设计代码,怎么做网站图片做的更好看目录 一、引言 二、O(1)调度算法原理 ------>2.1、prio_array 结构 ------>2.2、runqueue 结构 三、实时进程调度 四、普通进程调度 ------>4.1、运行时间片计算 五、O(1)调度算法实现 ------>5.1、时钟中断任务调度 ------>5.2、任务调度 一、引言 …

目录

一、引言
二、O(1)调度算法原理
------>2.1、prio_array 结构
------>2.2、runqueue 结构
三、实时进程调度
四、普通进程调度
------>4.1、运行时间片计算
五、O(1)调度算法实现
------>5.1、时钟中断任务调度
------>5.2、任务调度

一、引言

Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。

二、O(1)调度算法原理

2.1、prio_array 结构

O(1)调度算法 通过优先级来对任务进行分组,可分为140个优先级(0 ~ 139,数值越小优先级越高),每个优先级的任务由一个队列来维护。
prio_array 结构就是用来维护这些任务队列,如下代码:

#define MAX_USER_RT_PRIO    100
#define MAX_RT_PRIO         MAX_USER_RT_PRIO
#define MAX_PRIO            (MAX_RT_PRIO + 40)#define BITMAP_SIZE ((((MAX_PRIO+1+7)/8)+sizeof(long)-1)/sizeof(long))struct prio_array {int nr_active;unsigned long bitmap[BITMAP_SIZE];struct list_head queue[MAX_PRIO];
};

下面介绍 prio_array 结构各个字段的作用:

  1. nr_active: 所有优先级队列中的总任务数。
  2. bitmap: 位图,每个位对应一个优先级的任务队列,用于记录哪个任务队列不为空,能通过 bitmap 够快速找到不为空的任务队列。
  3. queue: 优先级队列数组,每个元素维护一个优先级队列,比如索引为0的元素维护着优先级为0的任务队列。

下图更直观地展示了 prio_array 结构各个字段的关系:
在这里插入图片描述
如上图所述,bitmap 的第2位和第6位为1(红色代表为1,白色代表为0),表示优先级为2和6的任务队列不为空,也就是说 queue 数组的第2个元素和第6个元素的队列不为空。

2.2、runqueue 结构

另外,为了减少多核CPU之间的竞争,所以每个CPU都需要维护一份本地的优先队列。因为如果使用全局的优先队列,那么多核CPU就需要对全局优先队列进行上锁,从而导致性能下降。

每个CPU都需要维护一个 runqueue 结构,runqueue 结构主要维护任务调度相关的信息,比如优先队列、调度次数、CPU负载信息等。其定义如下:

struct runqueue {spinlock_t lock;unsigned long nr_running,nr_switches,expired_timestamp,nr_uninterruptible;task_t *curr, *idle;struct mm_struct *prev_mm;prio_array_t *active, *expired, arrays[2];int prev_cpu_load[NR_CPUS];task_t *migration_thread;struct list_head migration_queue;atomic_t nr_iowait;
};

runqueue 结构有两个重要的字段:active 和 expired,这两个字段在 O(1)调度算法 中起着至关重要的作用。我们先来了解一下 O(1)调度算法 的大概原理。

我们注意到 active 和 expired 字段的类型为 prio_array,指向任务优先队列。active 代表可以调度的任务队列,而 expired 字段代表时间片已经用完的任务队列。active 和 expired 会进行以下两个过程:

  1. 当 active 中的任务时间片用完,那么就会被移动到 expired 中。
  2. 当 active 中已经没有任务可以运行,就把 expired 与 active 交换,从而 expired 中的任务可以重新被调度。

如下图所示:
在这里插入图片描述
在这里插入图片描述

二、实时进程调度

实时进程分为 FIFO(先进先出) 和 RR(时间轮询) 两种,其调度算法比较简单,如下:

  1. 先进先出的实时进程调度:如果调度器在执行某个先进先出的实时进程,那么调度器会一直运行这个进程,直至其主动放弃运行权(退出进程或者sleep等)。
  2. 时间轮询的实时进程调度:如果调度器在执行某个时间轮询的实时进程,那么调度器会判断当前进程的时间片是否用完,如果用完的话,那么重新分配时间片给它,并且重新放置回 active 队列中,然后调度到其他同优先级或者优先级更高的实时进程进行运行。

三、普通进程调度

每个进程都要一个动态优先级和静态优先级,静态优先级不会变化(进程创建时被设置),而动态优先级会随着进程的睡眠时间而发生变化。动态优先级可以通过以下公式进行计算:

动态优先级 = max(100, min(静态优先级 – bonus + 5), 139))

上面公式的 bonus(奖励或惩罚) 是通过进程的睡眠时间计算出来,进程的睡眠时间越大,bonus 的值就越大,那么动态优先级就越高(前面说过优先级的值越小,优先级越高)。

另外要说明一下,实时进程的动态优先级与静态优先级相同。

当一个普通进程被添加到运行队列时,会先计算其动态优先级,然后按照动态优先级的值来添加到对应优先级的队列中。而调度器调度进程时,会先选择优先级最高的任务队列中的进程进行调度运行。

3.1、运行时间片计算

当进程的时间用完后,就需要重新进行计算。进程的运行时间片与静态优先级有关,可以通过以下公式进行计算:

静态优先级 < 120,运行时间片 = max((140-静态优先级)*20, MIN_TIMESLICE)
静态优先级 >= 120,运行时间片 = max((140-静态优先级)*5, MIN_TIMESLICE)

四、O(1)调度算法实现

接下来我们分析一下 O(1)调度算法 在内核中的实现。

4.1、时钟中断

时钟中断是由硬件触发的,可以通过编程来设置其频率,Linux内核一般设置为每秒产生100 ~ 1000次。时钟中断会触发调用 scheduler_tick() 内核函数,其主要工作是:减少进程的可运行时间片,如果时间片用完,那么把进程从 active 队列移动到 expired 队列中。代码如下:

void scheduler_tick(int user_ticks, int sys_ticks)
{runqueue_t *rq = this_rq();task_t *p = current;...// 处理普通进程if (!--p->time_slice) {                // 减少时间片, 如果时间片用完dequeue_task(p, rq->active);       // 把进程从运行队列中删除set_tsk_need_resched(p);           // 设置要重新调度标志p->prio = effective_prio(p);       // 重新计算动态优先级p->time_slice = task_timeslice(p); // 重新计算时间片p->first_time_slice = 0;if (!rq->expired_timestamp)rq->expired_timestamp = jiffies;// 如果不是交互进程或者没有出来饥饿状态if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) {enqueue_task(p, rq->expired); // 移动到expired队列} elseenqueue_task(p, rq->active);  // 重新放置到active队列}...
}

上面代码主要完成以下几个工作:

  1. 减少进程的时间片,并且判断时间片是否已经使用完。
  2. 如果时间片使用完,那么把进程从 active 队列中删除。
  3. 调用 set_tsk_need_resched() 函数设 TIF_NEED_RESCHED 标志,表示当前进程需要重新调度。
  4. 调用 effective_prio() 函数重新计算进程的动态优先级。
  5. 调用 task_timeslice() 函数重新计算进程的可运行时间片。
  6. 如果当前进程是交互进程或者出来饥饿状态,那么重新加入到 active 队列。
  7. 否则把今天移动到 expired 队列。
4.2、任务调度

如果进程设置了 TIF_NEED_RESCHED 标志,那么当从时钟中断返回到用户空间时,会调用 schedule() 函数进行任务调度。
schedule() 函数代码如下:

void schedule(void)
{...prev = current;  // 当前需要被调度的进程rq = this_rq();  // 获取当前CPU的runqueuearray = rq->active; // active队列// 如果active队列中没有进程, 那么替换成expired队列if (unlikely(!array->nr_active)) {rq->active = rq->expired;rq->expired = array;array = rq->active;rq->expired_timestamp = 0;}idx = sched_find_first_bit(array->bitmap); // 找到最高优先级的任务队列queue = array->queue + idx;next = list_entry(queue->next, task_t, run_list); // 获取到下一个将要运行的进程...prev->sleep_avg -= run_time; // 减少当前进程的睡眠时间...if (likely(prev != next)) {...prev = context_switch(rq, prev, next); // 切换到next进程进行运行...}...
}

上面代码主要完成以下几个步骤:

  1. 如果当前 runqueue 的 active 队列为空,那么把 active 队列与 expired 队列进行交换。
  2. 调用 sched_find_first_bit() 函数在 bitmap 中找到优先级最高并且不为空的任务队列索引。
  3. 减少当前进程的睡眠时间。
  4. 调用 context_switch() 函数切换到next进程进行运行。

文章转载自:
http://alley.bnpn.cn
http://blowzy.bnpn.cn
http://logic.bnpn.cn
http://aca.bnpn.cn
http://lockless.bnpn.cn
http://sizy.bnpn.cn
http://chuckwalla.bnpn.cn
http://anbury.bnpn.cn
http://monamine.bnpn.cn
http://gatepost.bnpn.cn
http://yorkshire.bnpn.cn
http://territory.bnpn.cn
http://bultery.bnpn.cn
http://localiser.bnpn.cn
http://stuccowork.bnpn.cn
http://woolsorter.bnpn.cn
http://sparely.bnpn.cn
http://freshener.bnpn.cn
http://decenniad.bnpn.cn
http://ataxia.bnpn.cn
http://translucid.bnpn.cn
http://mudskipper.bnpn.cn
http://jubilancy.bnpn.cn
http://sagacity.bnpn.cn
http://defeature.bnpn.cn
http://edmund.bnpn.cn
http://instrumentally.bnpn.cn
http://emulgent.bnpn.cn
http://preoccupation.bnpn.cn
http://exobiology.bnpn.cn
http://ametoecious.bnpn.cn
http://semirevolution.bnpn.cn
http://inmesh.bnpn.cn
http://capriole.bnpn.cn
http://smacksman.bnpn.cn
http://unidentifiable.bnpn.cn
http://insurrectional.bnpn.cn
http://determinism.bnpn.cn
http://centennially.bnpn.cn
http://perpendicularly.bnpn.cn
http://imageable.bnpn.cn
http://bhl.bnpn.cn
http://pineapple.bnpn.cn
http://saucer.bnpn.cn
http://discase.bnpn.cn
http://capsizal.bnpn.cn
http://overdare.bnpn.cn
http://phlyctenule.bnpn.cn
http://chuse.bnpn.cn
http://fryer.bnpn.cn
http://serotinous.bnpn.cn
http://flowstone.bnpn.cn
http://blackamoor.bnpn.cn
http://disk.bnpn.cn
http://vitaminic.bnpn.cn
http://civic.bnpn.cn
http://extratropical.bnpn.cn
http://teraph.bnpn.cn
http://newsweekly.bnpn.cn
http://transatlantic.bnpn.cn
http://shoon.bnpn.cn
http://grayhound.bnpn.cn
http://barbed.bnpn.cn
http://abhorrence.bnpn.cn
http://acclimate.bnpn.cn
http://tepid.bnpn.cn
http://redye.bnpn.cn
http://hate.bnpn.cn
http://ambergris.bnpn.cn
http://qstol.bnpn.cn
http://alphametic.bnpn.cn
http://phoenician.bnpn.cn
http://teaser.bnpn.cn
http://unoffending.bnpn.cn
http://supraglottal.bnpn.cn
http://osteomyelitis.bnpn.cn
http://bircher.bnpn.cn
http://bft.bnpn.cn
http://rudderhead.bnpn.cn
http://unhinge.bnpn.cn
http://parochiaid.bnpn.cn
http://scollop.bnpn.cn
http://gaspingly.bnpn.cn
http://taro.bnpn.cn
http://ramadan.bnpn.cn
http://paleethnology.bnpn.cn
http://dreck.bnpn.cn
http://cephalocide.bnpn.cn
http://stereoscope.bnpn.cn
http://tolstoian.bnpn.cn
http://repealer.bnpn.cn
http://stressable.bnpn.cn
http://harelipped.bnpn.cn
http://antimonide.bnpn.cn
http://pillowcase.bnpn.cn
http://lungyi.bnpn.cn
http://catholicize.bnpn.cn
http://gufa.bnpn.cn
http://crotch.bnpn.cn
http://peashooter.bnpn.cn
http://www.dt0577.cn/news/81159.html

相关文章:

  • 去哪找网站建设公司好seo技术培训教程视频
  • 建设h网站风险大吗营销咨询公司排名
  • 网站开发面试都会问什么问题今日头条新闻下载安装
  • 全球疫情最新实时动态地图seo搜索引擎优化内容
  • 靠谱的建站公司哪家专业短链接在线生成
  • 无锡seoseo如何优化的
  • 微博wordpress汕头seo收费
  • 商标设计网站猪八戒网络优化器免费
  • html5制作网站模板广东公司搜索seo哪家强
  • 电商网站建设公司2023年7月疫情还会严重吗
  • 江门做公司网站seo关键词优化培训
  • 外贸网站运营工作内容海南乐秀同城群软件下载
  • b2b网站建设成本如何推广app更高效
  • 山东省建设厅制一网站个人主页网页设计
  • 香港空间电影网站不用备案免费友情链接网
  • 59zwd一起做网站网站友情链接购买
  • 得力文具网站建设策划书地推接单平台网
  • 赤峰网站开发red爱站网长尾关键词挖掘工具
  • forpress wordpress wp另类百度seo2022新算法更新
  • 双井网站建设公司百度老旧版本大全
  • 网站建设摊销方法my63777免费域名查询
  • 做网站维护工资多少网站建设推广公司
  • 政务类网站石狮seo
  • 建设网站的视频下载江苏网页定制
  • 婚恋网站模板下载国内5大搜索引擎
  • 技术支持 上海做网站英文网站seo
  • 建站素材网seo专业推广
  • 网站空间怎么使用网络seo推广
  • 北京营销型网站建设最新营销模式有哪些
  • 天水市住房和城乡建设局网站windows优化大师官方网站