⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread_heap.c

📁 国内一位牛人自己开发的操作系统
💻 C
字号:
#include"kernel.h"

void remove_from_heap(int thread_id)
{
	int s,t_run,h_run,t_ready,h_ready;

	if((s=os->thread[thread_id].state)==READY){
		remove_from_ready_heap(thread_id);
		os->thread[thread_id].state=SLEEP;
		return;
	}

	if(s!=RUN)
		return;

	if(os->thread_heap.ready_thread_number<=0){
		remove_from_run_heap(thread_id);
		os->thread[thread_id].state=SLEEP;
		left_run_state(thread_id);
		return;
	}

	t_run=thread_id;
	h_run=os->thread[t_run].heap;

	t_ready=os->thread_heap.ready_heap[0].thread;
	h_ready=0;
	
	os->thread_heap.run_heap[h_run].thread=t_ready;
	os->thread_heap.ready_heap[h_ready].thread=t_run;
	
	os->thread[t_run].heap=h_ready;
	os->thread[t_run].state=READY;
	
	os->thread[t_ready].heap=h_run;
	os->thread[t_ready].state=RUN;
	
	run_heap_up_deal(t_ready);
	remove_from_ready_heap(t_run);

	os->thread[thread_id].state=SLEEP;

	left_run_state(t_run);

	enter_run_state(t_ready);
	
	return;
}
		
void insert_into_heap(int thread_id)
{
	int t,t_run,p,p_run;
	
	t=thread_id;
	if(os->thread[t].state!=SLEEP)
		return;	
	if(os->thread_heap.run_thread_number<VIRTUAL_CPU_NUMBER){
		os->thread[t].state=RUN;
		insert_into_run_heap(t);
		enter_run_state(t);
		return;
	}
	
	p=os->thread[t].priority;
	t_run=os->thread_heap.run_heap[0].thread;
	p_run=os->thread[t_run].priority;

	if(p>=p_run){
		os->thread[thread_id].state=READY; 
		insert_into_ready_heap(t);
		return;
	}
		
	os->thread[t].state=RUN;
	os->thread[t].heap=0;
	os->thread_heap.run_heap[0].thread=t;
	run_heap_down_deal(t);

	os->thread[t_run].state=READY; 
	insert_into_ready_heap(t_run);

	left_run_state(t_run);
	enter_run_state(t);

	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -