📄 read_block.c
字号:
#include"memory.h"
int read_one_block(int file_window_number,
int logic_address,int sleep_semaphore)
{
int i,bn,front,back,return_value;
int logic_block_number;
struct physical_block *b,*b_f,*b_b;
struct file_window *f;
struct memory_process *p;
struct memory_hash *h;
logic_block_number=(logic_address/PAGE_SIZE);
f=memory_body->file_window+file_window_number;
if((bn=get_free_block(f->file.memory_process))<0)
return bn;
b=memory_body->physical_block+bn;
b->state=READING_BLOCK;
b->lock_number=0;
b->file_window=file_window_number;
b->logic_block_number=logic_block_number;
if(f->block_ring<0)
{f->block_ring=bn;b->file_front=bn;b->file_back=bn;}
else{
front=f->block_ring;
b_f=front+memory_body->physical_block;
back=b_f->file_back;
b_b=back+memory_body->physical_block;
b->file_front=front;b->file_back=back;
b_f->file_back=bn;b_b->file_front=bn;
}
i=memory_body->hash_function
(file_window_number,logic_block_number);
i=(i%(*(memory_body->hash_number)));
h=&(memory_body->hash[i]);
if(h->hash_ring<0){
h->hash_ring=bn;
b->hash_front=bn;b->hash_back=bn;
}
else{
front=h->hash_ring;
b_f=front+memory_body->physical_block;
back=b_f->hash_back;
b_b=back+memory_body->physical_block;
b->hash_front=front;b->hash_back=back;
b_f->hash_back=bn;b_b->hash_front=bn;
}
p=memory_body->memory_process+f->file.memory_process;
if(p->read_block_ring<0){
p->read_block_ring=bn;
b->buf_front=bn;b->buf_back=bn;
}
else{
front=p->read_block_ring;
b_f=front+memory_body->physical_block;
back=b_f->buf_back;
b_b=back+memory_body->physical_block;
b->buf_front=front;b->buf_back=back;
b_f->buf_back=bn;b_b->buf_front=bn;
}
b->sleep_semaphore.processor=-1;
b->sleep_semaphore.semaphore=-1;
b->lock_number++;p->read_block_number++;
if(f->file.read_in_flag){
return_value=read_write_file_system(READ_FILE,bn,b,f,
(logic_address/PAGE_SIZE)*PAGE_SIZE,
sleep_semaphore);
wake_block(bn);
}else
return_value=0;
b->lock_number--;p->read_block_number--;
front=b->buf_front;back=b->buf_back;
if(front==bn)
p->read_block_ring=-1;
else{
if(p->read_block_ring==bn)
p->read_block_ring=front;
b_f=front+memory_body->physical_block;
b_b=back+memory_body->physical_block;
b_f->buf_back=back;
b_b->buf_front=front;
}
if(p->block_ring<0){
p->block_ring=bn;
b->buf_front=bn;b->buf_back=bn;
}
else{
front=p->block_ring;
b_f=front+memory_body->physical_block;
back=b_f->buf_back;
b_b=back+memory_body->physical_block;
b->buf_front=front;b->buf_back=back;
b_f->buf_back=bn;b_b->buf_front=bn;
}
b->state=NOT_MODIFIED_BLOCK;
if(return_value>=0)
return bn;
free_one_block(bn);
return return_value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -