进程的等待结构:
kwlst_t 结构用于挂载等待的进程;经常被包含在信号量等结构,是用于保护访问受限的贡献资源;
进程等待:
krlsched_wait 函数:获取当前正在运行的进程,设置进程状态为等待状态,执行脱链操作,并将进程加入等待结构;
进程唤醒:
krlsched_up 函数:从等待数据结构中获取进程,然后设置进程的状态为运行状态,最后将这个进程加入到进程优先级链表中;
空转进程:
空转进程是进程调度器的最后选择;每个CPU一个空转进程;
建立空转进程:
cosmos的空转进程是内核进程,不加入调度系统,而是一个专用的指针指向它;
new_cpuidle 接口函数,调用new_cpuidle_thread 函数,建立空转进程;借用之前的建立进程的操作,最后设置调度系统结构的空转进程和当前进程 指针 ,指向这个空转进程;
其中,将 krlcpuidke_main 空转进程的主函数 传进初始化内核栈函数;主函数就是一个死循环;
空转进程运行:
作为第一进程,手动启动,没法调度;krlcpuidle_start 函数:取出空转进程,设置一下机器上下文结构和运行状态,接着调用retnfrom_first_sched 函数,恢复进程内核栈中的内容,启动运行;
将建立空转进程和启动空转封装为初始化空转进程函数,最后 初始化进程调度器和初始化空转进程 由init_krl函数最后调用;
实验部分(后续更新):
多进程运行:
现在的状态:空转进程调用了 进程调度器, 而进程调度器选择了空转进程, 一个闭环;
实验部分:
建立两个内核进程,运行两个函数,都调用 krlschedul 函数, 交替运行;
标签:空转,14,等待,调度,进程,唤醒,运行,函数 From: https://www.cnblogs.com/xuan01/p/17363963.html