resource.c

来自「国内一位牛人自己开发的操作系统」· C语言 代码 · 共 70 行

C
70
字号
#include"memory.h"

#define WRONG_MEMORY_BODY		-1
#define WRONG_PROCESS_NUMBER		-2
#define MEMORY_PROCESS_NOT_CREATED	-3
#define WRONG_CAPABILITY		-4


int query_memory_resource(struct memory_resource *r)
{
	int x;
	struct memory_process *p;
	if((r->process_number<0)
		||(r->process_number>=(*(memory_body->process_number))))
			return WRONG_PROCESS_NUMBER;
	p=memory_body->memory_process+r->process_number;
	x=KERNEL_COMPARE_CAPABILITY((os->system_capability),(r->capability));
	x=x||(KERNEL_COMPARE_CAPABILITY(
		(p->capability),(r->capability)));
	if(x){
		r->file_number=p->file_number;
		r->max_file_number=p->max_file_number;
		r->max_block_number=p->max_block_number;
		r->trigger_block_number=p->trigger_block_number;
		r->block_number=p->block_number;
		r->read_block_number=p->read_block_number;
		r->write_block_number=p->write_block_number;	
		return 0;
	}
	return WRONG_CAPABILITY;
}

int allocate_memory_resource(struct memory_resource *r)
{
	struct memory_process *p;
	if(r->process_number<0)
		return WRONG_PROCESS_NUMBER;
	if(r->process_number>=(*(memory_body->process_number)))
		return WRONG_PROCESS_NUMBER;
	p=memory_body->memory_process+r->process_number;
	
	if(r->max_file_number<1)
		r->max_file_number=1;
	if(r->max_block_number<1)
		r->max_block_number=1;
	if(r->trigger_block_number>=r->max_block_number)
		r->trigger_block_number=r->max_block_number-1;
	if(r->trigger_block_number<0)
		r->trigger_block_number=0;

	if(KERNEL_COMPARE_CAPABILITY(
			(os->system_capability),(r->capability)))
	{
		p->max_file_number=r->max_file_number;
		p->max_block_number=r->max_block_number;
		p->trigger_block_number=r->trigger_block_number;
		return 0;
	}
	if(KERNEL_COMPARE_CAPABILITY((p->capability),(r->capability))){
		if(p->max_file_number>=r->max_file_number)
			p->max_file_number=r->max_file_number;
		if(p->max_block_number>=r->max_block_number)
			p->max_block_number=r->max_block_number;
		if(p->trigger_block_number>=r->trigger_block_number)
			p->trigger_block_number=r->trigger_block_number;
		return 0;
	}
	return WRONG_CAPABILITY;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?