📄 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<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 + -