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


#include"memory.h" 
#include"../include/os.h" 
#define FILE_SYSTEM_ERROR	(-1) 
 
void mount_page_table(int file_id,int map_length) 
{ 
	int i,block_number; 
	block_number=(map_length+PAGE_SIZE)/(PAGE_SIZE*1024); 
	for(i=0;i=0) 
			free_free_block(memory_process_id,j); 
		file_page_table[file_id].page_table_block[i]=(-1); 
		file_page_table[file_id].item_number[i]=0; 
		file_page_table[file_id].reference_number[i]=0; 
	} 
	file_page_table[file_id].number=0; 
	return;	 
} 
 
int memory_set_file_capability(int file_window,int right, 
	struct capability *file_capability) 
{ 
	int return_value,eflag; 
	eflag=disable_interruption(); 
	return_value=set_system_file_capability( 
		memory_body->my_memory_body, 
		file_window,right,file_capability); 
	restore_interruption(eflag); 
	return return_value; 
} 
 
int migrate_to_file_system(int processor_process, 
	struct thread_physical_block *pb) 
{ 
	struct thread_environment r; 
	union system_call_parameter *par; 
	struct capability c; 
 
	par=get_kernel_parameter(); 
 
	COPY_CAPABILITY((par->capability.capability_1),c); 
	COPY_CAPABILITY((os->system_capability), 
		(par->capability.capability_1)); 
 
	r.system_call=2; 
	r.system_call_arg1=processor_process; 
	r.system_call_arg2=pb->stack_memory_id; 
	r.system_call_arg3=pb->stack_block_id; 
	r.system_call_arg4=pb->memory_id; 
	r.system_call_arg5=pb->block_id; 
	call_kernel(&r); 
 
	COPY_CAPABILITY(c,(par->capability.capability_1)); 
 
	if((r.system_call!=0)||(!r.system_call_arg1)) 
		return	FILE_SYSTEM_ERROR;  
	else 
		return	r.system_call_arg2; 
}