📄 arch4.c
字号:
#include "memory.h"
extern void reload_cr3();
int memory_get_accessed_block(int check_access_number)
{
static int file_number=0,dir_number=0,page_number=0;
int i,j,k,l,*p,eflag;
int memory_body_id;
struct file_window *f;
memory_body_id=memory_body->my_memory_body;
for(i=0;i<check_access_number;i++){
f=memory_body->file_window+file_number;
if(f->state!=FILE_OPEN){
file_number=(1+file_number)%FILE_NUMBER;
dir_number=0;
page_number=0;
continue;
}
if(dir_number>(file_page_table[file_number].number)){
file_number=(1+file_number)%FILE_NUMBER;
dir_number=0;
page_number=0;
continue;
}
if((j=file_page_table[file_number].
page_table_block[dir_number])<0)
{
page_number=0;
dir_number++;
j=(file_page_table[file_number].number);
if(dir_number>j){
dir_number=0;
file_number=(1+file_number)%FILE_NUMBER;
}
continue;
}
eflag=disable_interruption();
k=file_page_table[file_number].item_number[dir_number];
l=file_page_table[file_number].
reference_number[dir_number];
if((k<=0)&&(l<=0)){
free_free_block(f->file.memory_process,
file_page_table[file_number].
page_table_block[dir_number]);
file_page_table[file_number].
page_table_block[dir_number]=(-1);
file_page_table[file_number].
item_number[dir_number]=0;
file_page_table[file_number].
reference_number[dir_number]=0;
notify_switch(current.thread_id);
page_number=0;
dir_number++;
}else{
j=(memory_body->physical_block+j)
->physical_number;
p=(int *)get_block_base(memory_body_id,j);
p=p+page_number;
j=(*p);
if(((j&(0xff8))!=0)&&((j&(0x01))!=0)){
*p=(j&(0xfffff007));
j=PAGE_SIZE*(page_number
+1024*dir_number);
restore_interruption(eflag);
touch_file_access(file_number,j);
return 0;
}
page_number++;
if(page_number>=1024){
page_number=0;
dir_number++;
}
}
if(dir_number>(file_page_table[file_number].number)){
file_number=(1+file_number)%FILE_NUMBER;
dir_number=0;
page_number=0;
}
reload_cr3_flag=0;
reload_cr3();
restore_interruption(eflag);
}
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -