📄 file_system.c
字号:
#include"../include/os.h"
#define NO_FREE_BLOCK (-1)
#define WRONG_FILE_PROXY (-2)
int operate_file_system(int command,int sleep_semaphore,
struct file_window *file,
union file_system_operation_parameter *operation_parameter,
int memory_id,int physical_number)
{
int return_value,fs_stack_block;
struct physical_block *bs;
struct file_system_call_parameter *par;
if((fs_stack_block=get_free_block(file->file.memory_process))<0)
return NO_FREE_BLOCK;
file->lock_number++;
bs=memory_body->physical_block+fs_stack_block;
par=(struct file_system_call_parameter *)get_block_base(
memory_body->my_memory_body,bs->physical_number);
par->command=command;
par->sleep_semaphore=sleep_semaphore;
COPY_FILE(file->file,par->file);
par->block.stack_memory_id=memory_body->my_memory_body;
par->block.stack_block_id=bs->physical_number;
par->block.memory_id=memory_id;
par->block.block_id=physical_number;
COPY_OPERATION_PARAMETER(*operation_parameter,par->parameter);
if((file->file.proxy.processor)!=(memory_body->my_processor))
return_value=call_device_driver(
os->process[0].driver,par);
else if((file->file.proxy.process)>0){
unlock_memory_body(memory_body->my_memory_body);
return_value=migrate_to_file_system(
file->file.proxy.process,&(par->block));
lock_memory_body(memory_body->my_memory_body);
}else if((file->file.proxy.process)<=(0-PROCESS_NUMBER))
return_value=WRONG_FILE_PROXY;
else
return_value=call_device_driver(os->process[
(0-(file->file.proxy.process))].driver,par);
free_free_block(file->file.memory_process,fs_stack_block);
file->lock_number--;
return return_value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -