⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 call_memory.c

📁 虚地址空间基于文件OS内核源代码和文件
💻 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<m;i++)
				if((j=memory_get_accessed_block(n))>=0)
					break;
		}
		unlock_memory_body(memory_body->my_memory_body);
		return_value=0;
		break;
	}
	env->system_call=return_value;
	return return_value;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -