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


#include"../include/os.h" 
 
#define MAX_PAGE_SIZE  (61*PAGE_SIZE) 
 
void delay(int sem_id) 
{ 
	union system_call_parameter *par=get_kernel_parameter(); 
	struct thread_environment r; 
	r.system_call=5; 
	r.system_call_arg1=((sem_id<0)?sem_id:(0-sem_id)); 
	r.system_call_arg2=TRUE; 
	r.system_call_arg3=TRUE; 
	r.system_call_arg4=(-1); 
	get_current_time(&(par->set_semaphore_time.first_time)); 
	TIME_INC(1,(par->set_semaphore_time.first_time)); 
	SET_MINIMAL_STEP(par->set_semaphore_time.step_time); 
	RESET_CAPABILITY(par->set_semaphore_time.semaphore_capability); 
/* 
	call_kernel(&r); 
*/ 
	return; 
} 
 
void file_system_call_deal(struct thread_environment *env) 
{ 
	extern void test(void ),copy_os_data(int *); 
 
	struct file_system_call_parameter *par; 
	int sem_id=env->system_call_arg1; 
 
	par=get_file_system_parameter(); 
 
	switch(par->command){ 
	case READ_FILE: 
		if(par->parameter.read_write.begin_rw==0) 
			copy_os_data((int *)test); 
		else if(par->parameter.read_write. 
			begin_rw<=MAX_PAGE_SIZE) 
			copy_os_data((int *)(par->parameter. 
				read_write.begin_rw-PAGE_SIZE)); 
		else 
			copy_os_data((int *)MAX_PAGE_SIZE); 
		break; 
	default: 
		break; 
	} 
 
	delay(sem_id); 
 
	env->system_call_arg1=TRUE; 
	env->system_call_arg2=1; 
 
	return ; 
 
}