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 ;
}