📄 map_deal.c
字号:
#include"memory.h"
#define NOT_FIND_PHYSICAL_BLOCK -1
#define WRONG_MEMORY_BODY_ID -1
#define WRONG_FILE_NUMBER -2
#define WRONG_FILE_STATE -3
#define WRONG_CAPABILITY -4
#define WRONG_SEMAPHORE -5
int memory_map_deal(int sleep_semaphore,int file_window_number,
int begin_logic_address,int end_logic_address,
struct capability *file_capability)
{
int max_file_number,return_value;
int logic_address;
int logic_block_number,physical_block_number;
struct file_window *f;
if(sleep_semaphore<=0)
return WRONG_SEMAPHORE;
max_file_number=(*(memory_body->file_number));
if((file_window_number<0)
||(file_window_number>=max_file_number))
return WRONG_FILE_NUMBER;
f=memory_body->file_window+file_window_number;
if(f->state!=FILE_OPEN)
return WRONG_FILE_STATE;
if(!KERNEL_COMPARE_CAPABILITY(
(f->file.capability),(*file_capability)))
return WRONG_CAPABILITY;
f->lock_number++;
if(begin_logic_address>end_logic_address)
end_logic_address=begin_logic_address;
for(
return_value=0,
logic_address=begin_logic_address;
logic_address<=end_logic_address;
logic_address=logic_address+PAGE_SIZE)
{
if(logic_address>=f->file.window_length)
break;
if((return_value=prepare_free_block(
f->file.memory_process,sleep_semaphore))<0)
break;
physical_block_number=search_physical_block(
file_window_number,logic_address,
&logic_block_number);
if(physical_block_number<0){
if((physical_block_number=read_one_block(
file_window_number,logic_address,
sleep_semaphore))<0)
return physical_block_number;
}
return_value=touch_block(f->file.memory_process,
physical_block_number,sleep_semaphore);
if(return_value<0)
break;
}
f->lock_number--;
return return_value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -