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


 
#include"../include/os.h" 
 
int memory_call_process(struct thread_environment *env) 
{ 
	int return_value=-1; 
	union memory_call_parameter *par=get_memory_parameter(); 
 
	switch(env->system_call_arg1){	 
	default: 
		break; 
	case 0: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=open_file_window( 
			par->open_file_window.file_window_id, 
			&(par->open_file_window.file_window), 
			&(par->open_file_window.process_capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 1: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=close_file_window( 
			par->close_file_window.file_window_id, 
			par->close_file_window.give_up_flag, 
			par->close_file_window.wait_flag, 
			&(par->close_file_window.file_capability), 
			current.t->semaphore); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 2: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=memory_map_deal( 
			current.t->semaphore, 
			par->memory_map_deal.file_window_id, 
			par->memory_map_deal.begin_logic_address, 
			par->memory_map_deal.end_logic_address, 
			&(par->memory_map_deal.file_capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 3: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=flush_process_memory( 
			par->flush_process_memory.give_up_flag, 
			par->flush_process_memory.free_block_flag, 
			par->flush_process_memory.wait_flag, 
			par->flush_process_memory.process_number, 
			current.t->semaphore, 
			&(par->flush_process_memory.process_capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break;	 
	case 4: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=flush_file_window( 
			par->flush_file_window.give_up_flag, 
			par->flush_file_window.free_block_flag, 
			par->flush_file_window.wait_flag, 
			par->flush_file_window.file_window_id, 
			current.t->semaphore, 
			&(par->flush_file_window.file_capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 5: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=mark_modified( 
			par->mark_modifed.file_window_id, 
			par->mark_modifed.begin_logic_address, 
			par->mark_modifed.end_logic_address, 
			&(par->mark_modifed.file_capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 6: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=query_memory_resource( 
			&(par->memory_resource)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 7: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=allocate_memory_resource( 
			&(par->memory_resource)); 
		if(return_value>=0) 
			return_value=query_memory_resource( 
				&(par->memory_resource)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break;	 
	case 8: 
		return_value=get_memory_body_size( 
			&(par->setup.memory_body_parameter)); 
		break; 
	case 9: 
		if(KERNEL_COMPARE_CAPABILITY((os->system_capability), 
			(par->setup.capability))) 
		return_value=init_memory_body(memory_body, 
			&(par->setup.memory_body_parameter)); 
		break; 
	case 10: 
		if(KERNEL_COMPARE_CAPABILITY((os->system_capability), 
			(par->setup.capability))) 
		return_value=install_memory_body(memory_body, 
			&(par->setup.memory_body_parameter), 
			par->setup.set_stack_flag); 
		break; 
	case 11: 
		lock_memory_body(memory_body->my_memory_body); 
		return_value=control_file( 
			current.t->semaphore, 
			env->system_call_arg2, 
			env->system_call_arg3, 
			&(par->control_file_system.parameter), 
			&(par->control_file_system.capability)); 
		unlock_memory_body(memory_body->my_memory_body); 
		break; 
	case 12: 
		return_value=query_file_window_attribute(par); 
		break; 
	case 13: 
		return_value=set_file_window_attribute(par); 
		break; 
	case 14: 
		lock_memory_body(memory_body->my_memory_body); 
		{ 
			int i,j,m,n; 
			m=env->system_call_arg2; 
			n=env->system_call_arg3; 
			for(i=0;i=0) 
					break; 
		} 
		unlock_memory_body(memory_body->my_memory_body); 
		return_value=0; 
		break; 
	} 
	env->system_call=return_value; 
	return return_value; 
}