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

📄 file_system.c

📁 虚地址空间基于文件OS内核源代码和文件
💻 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 + -