⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mark_modified.c

📁 虚地址空间基于文件OS内核源代码和文件
💻 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 + -