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

📄 arch.h

📁 国内一位牛人自己开发的操作系统
💻 H
字号:

#ifndef OS_KERNEL_ARCH
#define OS_KERNEL_ARCH

#define READ_ONLY		(0x05)
#define READ_WRITE		(0x07)
#define NO_ACCESS_RIGHT		(0x00)

extern int page_dir[1024],page_0[1024];
extern int reload_cr3_flag;
extern int page_dir[1024];

struct system_page_table {
	int add[1024];
};
extern struct system_page_table system_page_table[256];

struct file_page_table{
	int number;
	int page_table_block[128];
	int item_number[128];
	int reference_number[128];
};

extern struct file_page_table file_page_table[FILE_NUMBER];

#define DEFAULT_CS		(0x23)
#define DEFAULT_DS		(0x2b)
#define DEFAULT_ES		DEFAULT_DS
#define DEFAULT_FS		DEFAULT_DS
#define DEFAULT_GS		DEFAULT_DS
#define DEFAULT_SS		DEFAULT_DS
#define DEFAULT_SP		(0xc0000ffc)
#define DEFAULT_SP_0		(0xc0000800)

#define CR2_BUF_NUMBER	6

typedef struct{
	void (*ip)(void );
	int cs;
	int flag;
	char *sp;
	int ss;
	int ds,es,fs,gs;
	char *sp_0;
	int (*function)(void );
	int cr2[CR2_BUF_NUMBER];
}run_point;

#define RESET_RUN_POINT(r_p)			\
{						\
	extern void start_os(void );		\
	int cr2_i;				\
	(r_p).cs=DEFAULT_CS;			\
	(r_p).ip=start_os;			\
	(r_p).flag=0x200;			\
	(r_p).ss=DEFAULT_SS;			\
	(r_p).sp=(char *)(DEFAULT_SP);		\
	(r_p).ds=(DEFAULT_DS);			\
	(r_p).es=(DEFAULT_ES);			\
	(r_p).fs=(DEFAULT_FS);			\
	(r_p).gs=(DEFAULT_GS);			\
	(r_p).sp_0=(char *)(DEFAULT_SP_0);	\
	for(cr2_i=0;cr2_i<CR2_BUF_NUMBER;cr2_i++)\
		(r_p).cr2[cr2_i]=(-1);		\
}

#define COPY_RUN_POINT(s,d)			\
{	int cr2_i;				\
	(d).cs=(s).cs;(d).ip=(s).ip;		\
	(d).ss=(s).ss;(d).sp=(s).sp;		\
	(d).flag=(s).flag;			\
						\
	(d).ds=(s).ds;				\
	(d).es=(s).es;				\
	(d).fs=(s).fs;				\
	(d).gs=(s).gs;				\
						\
	(d).sp_0=(s).sp_0;			\
						\
	for(cr2_i=0;cr2_i<CR2_BUF_NUMBER;cr2_i++)\
		(d).cr2[cr2_i]=(s).cr2[cr2_i];	\
}

extern char *kernel_get_thread_parameter(int thread_id);

extern int *add_tlb_buf(int dir,int system_file,int file_dir,int right);

extern void init_tlb(void );

extern char *get_block_base(int memory_body_id,int block_id);

extern int get_memory_amount(int memory_body_id);
#define PAGE_SIZE	(0x1000)

struct thread_physical_block ;
extern void notify_physical_block_switch(int thread_id,
	struct thread_physical_block *pb);
extern void notify_switch(int thread_id);

extern void do_idle(void );
extern int lock_os_kernel(void );
extern void unlock_os_kernel(void );
extern int get_virtual_cpu(void );
extern int switch_virtual_cpu(void );

extern int disable_interruption();
extern void restore_interruption(int eflag);

#endif 


⌨️ 快捷键说明

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