最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

速读:14 进程的等待与唤醒机制

来源:博客园

进程的等待结构:


【资料图】

kwlst_t 结构用于挂载等待的进程;经常被包含在信号量等结构,是用于保护访问受限的贡献资源;

进程等待:

krlsched_wait 函数:获取当前正在运行的进程,设置进程状态为等待状态,执行脱链操作,并将进程加入等待结构;

进程唤醒:

krlsched_up 函数:从等待数据结构中获取进程,然后设置进程的状态为运行状态,最后将这个进程加入到进程优先级链表中;

空转进程:

空转进程是进程调度器的最后选择;每个CPU一个空转进程;

建立空转进程:

cosmos的空转进程是内核进程,不加入调度系统,而是一个专用的指针指向它;

new_cpuidle 接口函数,调用new_cpuidle_thread 函数,建立空转进程;借用之前的建立进程的操作,最后设置调度系统结构的空转进程和当前进程 指针 ,指向这个空转进程;

其中,将 krlcpuidke_main 空转进程的主函数 传进初始化内核栈函数;主函数就是一个死循环;

空转进程运行:

作为第一进程,手动启动,没法调度;krlcpuidle_start 函数:取出空转进程,设置一下机器上下文结构和运行状态,接着调用retnfrom_first_sched 函数,恢复进程内核栈中的内容,启动运行;

将建立空转进程和启动空转封装为初始化空转进程函数,最后 初始化进程调度器和初始化空转进程 由init_krl函数最后调用;

实验部分(后续更新):

多进程运行:

现在的状态:空转进程调用了 进程调度器, 而进程调度器选择了空转进程, 一个闭环;

实验部分:

建立两个内核进程,运行两个函数,都调用 krlschedul 函数, 交替运行;

关键词: