调度子系统1_调度子系统初始化

unsigned int sysctl_sched_rt_period = 1000000;
int sysctl_sched_rt_runtime = 950000;

//	参考:
//		SMP负载均衡
//		http://soft.chinabyte.com/os/22/12359522.shtml
//		linux组调度浅析
//		http://hi.baidu.com/_kouu/item/0fe32610e493314be75e06d1
//		进程调度和组调度 
//		http://blog.chinaunix.net/uid-27052262-id-3239263.html
//		CF调度器
//		http://blog.csdn.net/wudongxu/article/details/8574749
//		FIFO调度器
//		http://lwn.net/Articles/296419/

//	调度初始化
//	函数任务:
//		1.初始化rootdomain
//			rootdomain指示rq可运行的cpu集合
//		2.初始化real-time task对cpu的占有率
//			sysctl_sched_rt_period代表rt进程的调度周期
//			sysctl_sched_rt_runtime代表rt进程在调度周期中可运行的时间
//		3.初始化per-cpu rq
//			3.1 初始化公平调度队列,实时调度队列
//			3.2 初始化cpu负载记录数组
//			3.3 初始化cpu使用的tick hrtimer
//		4.初始化current(init_task)为idle task
//			4.1 设置current由公平调度管理
1.1 void __init sched_init(void)
{
	int i, j;

#ifdef CONFIG_SMP
	//初始化默认的调度域
	init_defrootdomain();
#endif

	//rt_bandwidth表示实时进程对cpu的占有率
	init_rt_bandwidth(&def_rt_bandwidth,
			global_rt_period(), global_rt_runtime());

	//初始化per-cpu rq
	for_each_possible_cpu(i) {
		struct rq *rq;
		//per-cpu 运行队列
		rq = cpu_rq(i);
		raw_spin_lock_init(&rq->lock);
		rq->nr_running = 0;
		rq->calc_load_active = 0;
		rq->calc_load_update = jiffies + LOAD_FREQ;
		//初始化公平调度策略、实时调度策略队列
		init_cfs_rq(&rq->cfs, rq);
		init_rt_rq(&rq->rt, rq);
		//调度队列中,实时进程对cpu的占有率
		rq->rt.rt_runtime = def_rt_bandwidth.rt_runtime;
		//分5个等级记录cpu的负载情况
		for (j = 0; j < CPU_LOAD_IDX_MAX; j++)
			rq->cpu_load[j] = 0;
#ifdef CONFIG_SMP
		rq->sd = NULL;
		rq->rd = NULL;
		rq->post_schedule = 0;
		rq->active_balance = 0;
		rq->nex
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值