📄 prepare.c
字号:
#include "memory.h"
#define NO_FREE_MEMORY_BLOCK (-1)
int prepare_free_block(int memory_process_number,int sleep_semaphore)
{
int i,bn,return_value,max_number;
struct physical_block *b;
struct file_window *f;
struct memory_process *p;
p=(memory_body->memory_process+memory_process_number);
for(i=0,max_number=0;;i++){
if(max_number<p->max_block_number)
max_number=p->max_block_number;
if(i>=max_number)
return NO_FREE_MEMORY_BLOCK;
if(p->block_number<p->trigger_block_number)
return 0;
if(((*(memory_body->free_block_number))>2)
&&(p->block_number<p->max_block_number)
&&((bn=p->block_ring)>=0))
{
b=bn+memory_body->physical_block;
f=(memory_body->file_window)+(b->file_window);
if(!(f->file.swap_out_flag))
mark_accessed(bn);
else{
return_value=write_one_block(
bn,sleep_semaphore,FALSE);
if(return_value<0)
return return_value;
if(b->lock_number<=0)
if(b->state==NOT_MODIFIED_BLOCK){
i=0;
free_one_block(bn);
}else
mark_accessed(bn);
else
mark_accessed(bn);
}
}else{
if((bn=p->write_block_ring)<0)
bn=p->read_block_ring;
if(bn>=0)
wait_block(bn,sleep_semaphore);
else{
int next_processor,next_semaphore;
next_processor=memory_body
->wait_block->processor;
next_semaphore=memory_body
->wait_block->semaphore;
memory_body->wait_block->processor
=memory_body->my_processor;
memory_body->wait_block->semaphore
=sleep_semaphore;
memory_wait(sleep_semaphore,
next_processor,next_semaphore);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -