www.pudn.com > LFYOS.zip > resource.c


#include "kernel.h" 
 
#define WRONG_CAPABILITY 	-1 
#define WRONG_PROCESS_NUMBER 	-2 
#define WRONG_PROCESS_STATE 	-3 
#define EXIST_RUN_THREAD	-4 
#define EXIST_USED_SEMAPHORE	-5 
 
int query_resource(struct process *process,int process_id) 
{ 
	struct process *p; 
 
	if((process_id<=0)||(process_id>=PROCESS_NUMBER)) 
		return WRONG_PROCESS_NUMBER; 
	p=&(os->process[process_id]); 
 
	if(!KERNEL_COMPARE_CAPABILITY((p->capability),(process->capability))) 
		return WRONG_CAPABILITY; 
	COPY_PROCESS_ATTRIBUTE((*p),(*process)); 
	return 0; 
} 
 
int allocate_resource(struct process *process,int process_id, 
	struct capability *system_capability) 
{ 
	struct process *p; 
	if((process_id<=0)||(process_id>=PROCESS_NUMBER)) 
		return WRONG_PROCESS_NUMBER; 
	p=&(os->process[process_id]); 
	if(KERNEL_COMPARE_CAPABILITY((os->system_capability), 
		(*system_capability))) 
			p->driver=process->driver; 
	else{ 
		if(!KERNEL_COMPARE_CAPABILITY((p->capability), 
				(*system_capability))) 
			return WRONG_CAPABILITY; 
		if(process->prioritypriority) 
			process->priority=p->priority; 
		if(process->max_thread_number>p->max_thread_number) 
			process->max_thread_number=p->max_thread_number; 
		if(process->max_semaphore_number> 
				p->max_semaphore_number) 
			process->max_semaphore_number 
				=p->max_semaphore_number; 
	} 
 
	COPY_RUN_POINT((process->start_point),(p->start_point)); 
	p->priority=process->priority; 
	p->semaphore=process->semaphore; 
	p->id=process->id; 
	p->max_thread_number=process->max_thread_number; 
	p->max_semaphore_number=process->max_semaphore_number; 
	COPY_CAPABILITY((process->capability),(p->capability)); 
 
	return query_resource(process,process_id); 
 
}