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

📄 arch3.c

📁 国内一位牛人自己开发的操作系统
💻 C
字号:
#include"kernel.h"
#include"../memory/memory.h"
#define  WRONG_MEMORY_BODY	(-1)

char *kernel_get_thread_parameter(int thread_id)
{
	extern char _end;
	unsigned int x;
	x=(int)(&_end);
	x=x+PAGE_SIZE;
	x=x&(0xfffff000);
	x=x|(0xc0000000);
	thread_id=2*thread_id;
	return (char *)(x+thread_id*PAGE_SIZE);
}

extern int page_dir[],page_0[];

void notify_physical_block_switch(int thread_id,
	struct thread_physical_block *pb)
{
	int p;

	if((pb->stack_memory_id<0)||(pb->stack_block_id<0))
		p=(int)kernel_get_thread_parameter(thread_id);
	else
		p=(int)get_block_base(pb->stack_memory_id,
			pb->stack_block_id);
	p=(p&(0x3ffff000))|(0x07);page_0[0]=p;

	if((pb->memory_id<0)||(pb->block_id<0))
		p=(int)kernel_get_thread_parameter(thread_id)+PAGE_SIZE;
	else 
		p=(int)get_block_base(pb->memory_id,pb->block_id);
	p=(p&(0x3ffff000))|(0x07);page_0[1]=p;

	reload_cr3_flag++;
	return;
}


char *get_block_base(int memory_base_id,int block_id)
{
	return	kernel_get_thread_parameter(THREAD_NUMBER+1)
		+PAGE_SIZE*block_id;
}

#define STEP	64
int get_memory_amount(int memory_body_id)
{
	int i,j,*p;
	
	if(memory_body_id!=0)
		return WRONG_MEMORY_BODY;
	for(i=0;;i++){
		p=(int *)get_block_base(memory_body_id,i);
		for(j=0;j<1024;j=j+(STEP%1024),p=p+(STEP%1024)){
			*p=0x5a5a5a5a;
			if((*p)!=0x5a5a5a5a)
				return i;
			*p=0xa5a5a5a5;
			if((*p)!=0xa5a5a5a5)
				return i;
		}
	}
}

⌨️ 快捷键说明

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