Linux 网络协议栈之内核锁(一)—— 进程调度

本文介绍了Linux内核中的进程调度,包括主动式和被动式的调度方式,以及内核抢占的概念。在主动式调度中,进程因等待资源而睡眠,通过schedule()函数让出CPU。被动式抢占则发生在特定的用户和内核返回场景。内核抢占允许高优先级进程抢占低优先级进程,但存在不可抢占的情况,如中断处理和持有特定锁时。preempt_count变量用于管理内核抢占状态,确保系统稳定运行。
摘要由CSDN通过智能技术生成

      学习内核锁之前,我们先了解一下关于内核的基础知识,以便更好的学习内核锁的使用!

      下面我们先学习一下进程调度:

一、进程调度

调度什么时候发生?即:schedule()函数什么时候被调用?
调度的发生有两种方式:
1、主动式
在内核中直接调用schedule()。当进程需要等待资源等而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出CPU。
主动放弃cpu例: 
1. current->state = TASK_INTERRUPTIBLE; 
2. schedule();

2、被动式(抢占)
用户抢占(Linux2.4、Linux2.6)
内核抢占(Linux2.6)
用户抢占发生在:
* 从系统调用返回用户空间
* 从中断处理程序返回用户空间

内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占.

复制代码
* ENTRY(ret_from_exception) //异常返回
get_thread_info tsk
mov why, #0
b ret_to_user
* __irq_usr: //在用户态收到中断
usr_entry
kuser_cmpxchg_check
…… …… ……
b ret_to_user

ENTRY(ret_to_user)
ret_slow_syscall:
disable_irq @ disab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值