📄 mark_modified.c
字号:
#include"memory.h"
#define WRONG_MEMORY_BODY -1
#define WRONG_BLOCK_NUMBER -2
#define WRONG_BLOCK_STATE -3
#define WRONG_CAPABILITY -4
#define NO_WRITE_RIGHT -5
#define WRONG_FILE_NUMBER -6
#define WRONG_FILE_STATE -7
int mark_modified(int file_window_number,
int begin_logic_address,int end_logic_address,
struct capability *file_capability)
{
int return_value,number;
int bn,logic_block_number,max_file_number,logic_address;
struct physical_block *b;
struct file_window *f;
struct memory_process *p;
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;
if(f->file.right!=READ_WRITE)
return NO_WRITE_RIGHT;
p=memory_body->memory_process+f->file.memory_process;
if(begin_logic_address>end_logic_address)
end_logic_address=begin_logic_address;
for( number=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((bn=search_physical_block(file_window_number,
logic_address,&logic_block_number))>=0)
{
b=memory_body->physical_block+bn;
switch(b->state){
case NOT_MODIFIED_BLOCK:
b->state=MODIFIED_BLOCK;
return_value=memory_set_tlb_item(
f->file.memory_process,
b->file_window,
b->logic_block_number,
b->physical_number,READ_WRITE);
if(return_value>=0)
b->lock_number++;
number++;
case MODIFIED_BLOCK:
mark_accessed(bn);
break;
case FREE_BLOCK:
case READING_BLOCK:
case WRITING_BLOCK:
default:
return WRONG_BLOCK_STATE;
}
}
}
return number;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -