resource.c

来自「虚拟地址空间基于文件的操作系统」· C语言 代码 · 共 58 行

C
58
字号
#include "kernel.h"

#define WRONG_CAPABILITY 	-1
#define WRONG_PROCESS_NUMBER 	-2
#define WRONG_PROCESS_STATE 	-3
#define EXIST_RUN_THREAD	-4
#define EXIST_USED_SEMAPHORE	-5

int query_resource(struct process *process,int process_id)
{
	struct process *p;

	if((process_id<=0)||(process_id>=PROCESS_NUMBER))
		return WRONG_PROCESS_NUMBER;
	p=&(os->process[process_id]);

	if(!KERNEL_COMPARE_CAPABILITY((p->capability),(process->capability)))
		return WRONG_CAPABILITY;
	COPY_PROCESS_ATTRIBUTE((*p),(*process));
	return 0;
}

int allocate_resource(struct process *process,int process_id,
	struct capability *system_capability)
{
	struct process *p;
	if((process_id<=0)||(process_id>=PROCESS_NUMBER))
		return WRONG_PROCESS_NUMBER;
	p=&(os->process[process_id]);
	if(KERNEL_COMPARE_CAPABILITY((os->system_capability),
		(*system_capability)))
			p->driver=process->driver;
	else{
		if(!KERNEL_COMPARE_CAPABILITY((p->capability),
				(*system_capability)))
			return WRONG_CAPABILITY;
		if(process->priority<p->priority)
			process->priority=p->priority;
		if(process->max_thread_number>p->max_thread_number)
			process->max_thread_number=p->max_thread_number;
		if(process->max_semaphore_number>
				p->max_semaphore_number)
			process->max_semaphore_number
				=p->max_semaphore_number;
	}

	COPY_RUN_POINT((process->start_point),(p->start_point));
	p->priority=process->priority;
	p->semaphore=process->semaphore;
	p->id=process->id;
	p->max_thread_number=process->max_thread_number;
	p->max_semaphore_number=process->max_semaphore_number;
	COPY_CAPABILITY((process->capability),(p->capability));

	return query_resource(process,process_id);

}

⌨️ 快捷键说明

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