📄 arch3.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 + -