www.pudn.com > LFYOS.zip > kernel_struct.h


#ifndef OS_KERNEL_STRUCT 
#define OS_KERNEL_STRUCT 
 
struct semaphore{ 
	int value; 
	int process; 
	int thread_id,thread_ring; 
	int front,back; 
	struct capability capability; 
 
	int heap,v_value; 
	struct kernel_time first,step; 
}; 
 
struct thread ; 
struct return_stack ; 
 
struct thread_environment{ 
	int system_call,system_call_arg1;	/*ax,bx*/ 
	int system_call_arg2,system_call_arg3;	/*cx,dx*/ 
	int system_call_arg4,system_call_arg5;	/*si,di*/ 
	int system_call_arg6,system_call_arg7;	/*bp,r7*/	 
	run_point point;			/*ip,cs,flag,sp,ss */ 
}; 
 
#define COPY_THREAD_ENVIRONMENT(s,d)			\ 
{							\ 
	(d).system_call=(s).system_call;		\ 
	(d).system_call_arg1=(s).system_call_arg1;	\ 
	(d).system_call_arg2=(s).system_call_arg2;	\ 
	(d).system_call_arg3=(s).system_call_arg3;	\ 
	(d).system_call_arg4=(s).system_call_arg4;	\ 
	(d).system_call_arg5=(s).system_call_arg5;	\ 
	(d).system_call_arg6=(s).system_call_arg6;	\ 
	(d).system_call_arg7=(s).system_call_arg7;	\ 
} 
 
#define RESET_THREAD_PARAMETER(env)			\ 
{							\ 
	(env).point.function=(int (*)(void))0;		\ 
} 
 
#define RESET_THREAD_ENVIRONMENT(env)			\ 
{							\ 
	RESET_RUN_POINT((env).point);			\ 
	RESET_THREAD_PARAMETER(env);			\ 
} 
 
struct exception_item{ 
	int flag; 
}; 
 
#define COPY_EXCEPTION_ITEM(s,d)	{(d).flag=(s).flag;} 
#define RESET_EXCEPTION_ITEM(x)		{(x).flag=FALSE;} 
 
struct return_stack{ 
	struct thread_environment environment; 
	int current_process,process_id,process_p_flag; 
	struct exception_item exception; 
	struct thread_physical_block physical_block; 
}; 
 
struct thread{ 
	enum {SLEEP,RUN,READY} state; 
	int priority; 
	int set_v_operation_result_flag; 
	int heap,process,pro_front,pro_back; 
	int semaphore,sleep_semaphore,sem_front,sem_back; 
	int cpu_id; 
	struct return_stack return_stack[RETURN_BLOCK_NUMBER]; 
	int return_stack_top; 
	struct user_file_information file[USER_FILE_NUMBER]; 
}; 
 
struct thread_heap{ 
	int thread; 
}; 
 
#endif