Linux调度-主调度器

本文探讨了Linux调度器的核心函数schedule,它负责进程在无任务时释放CPU,允许其他进程执行。调度的关键在于__schedule函数,该函数包含了平台相关的context_switch过程,包括switch_mm(更新全局页表寄存器)和switch_to(恢复进程寄存器上下文)。在x86和ARM架构中,这些实现细节在相应的头文件中定义。
摘要由CSDN通过智能技术生成

核心调度器,其实就是schedule这一个函数,当一个进程觉得自己无事可做了,可以调用该函数释放CPU,让其他进程占用CPU完成任务。粗略看下代码,做了一些注释。

asmlinkage __visible void __sched schedule(void)
{
	struct task_struct *tsk = current;

	sched_submit_work(tsk);
	do {
		preempt_disable();//禁止抢占
		__schedule(false);
		sched_preempt_enable_no_resched();//开抢占
	} while (need_resched());//如果当前进程需要被抢占,那就再执行一次
}
EXPORT_SYMBOL(schedule);

可以看到,schedule在做了一些准备之后就把任务交给了__schedule,调用它的地方有很多,是真正执行调度的地方:

static void __sched notrace __schedule(bool preempt)
{
	struct task_struct *prev, *next;
	unsigned long *switch_count;
	struct rq_flags rf;
	struct rq *rq;
	int cpu;
	u64 wallclock;
    
    //获取当前CPUID,per_cpu中的runqueues,列队中当前运行的进程
	cpu = smp_processor_id();
	rq = cpu_rq(cpu);
	prev = rq->curr;

	schedule_debug(prev);//一些调度前的debug feature,当前有栈越界检查&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值