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

📄 prepare.c

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