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

📄 protect.h

📁 一个简单的操作系统minix的核心代码
💻 H
字号:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				src/kernel/protect.h	 	 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

05200	/* Constants for protected mode. */
05201	
05202	/* Table sizes. */
05203	#define GDT_SIZE (FIRST_LDT_INDEX + NR_TASKS + NR_PROCS) /* spec. and LDT's */
05204	#define IDT_SIZE (IRQ8_VECTOR + 8)      /* only up to the highest vector */
05205	#define LDT_SIZE         2      /* contains CS and DS only */
05206	
05207	/* Fixed global descriptors.  1 to 7 are prescribed by the BIOS. */
05208	#define GDT_INDEX        1      /* GDT descriptor */
05209	#define IDT_INDEX        2      /* IDT descriptor */
05210	#define DS_INDEX         3      /* kernel DS */
05211	#define ES_INDEX         4      /* kernel ES (386: flag 4 Gb at startup) */
05212	#define SS_INDEX         5      /* kernel SS (386: monitor SS at startup) */
05213	#define CS_INDEX         6      /* kernel CS */
05214	#define MON_CS_INDEX     7      /* temp for BIOS (386: monitor CS at startup) */
05215	#define TSS_INDEX        8      /* kernel TSS */
05216	#define DS_286_INDEX     9      /* scratch 16-bit source segment */
05217	#define ES_286_INDEX    10      /* scratch 16-bit destination segment */
05218	#define VIDEO_INDEX     11      /* video memory segment */
05219	#define DP_ETH0_INDEX   12      /* Western Digital Etherplus buffer */
05220	#define DP_ETH1_INDEX   13      /* Western Digital Etherplus buffer */
05221	#define FIRST_LDT_INDEX 14      /* rest of descriptors are LDT's */
05222	
05223	#define GDT_SELECTOR      0x08  /* (GDT_INDEX * DESC_SIZE) bad for asld */
05224	#define IDT_SELECTOR      0x10  /* (IDT_INDEX * DESC_SIZE) */
05225	#define DS_SELECTOR       0x18  /* (DS_INDEX * DESC_SIZE) */
05226	#define ES_SELECTOR       0x20  /* (ES_INDEX * DESC_SIZE) */
05227	#define FLAT_DS_SELECTOR  0x21  /* less privileged ES */
05228	#define SS_SELECTOR       0x28  /* (SS_INDEX * DESC_SIZE) */
05229	#define CS_SELECTOR       0x30  /* (CS_INDEX * DESC_SIZE) */
05230	#define MON_CS_SELECTOR   0x38  /* (MON_CS_INDEX * DESC_SIZE) */
05231	#define TSS_SELECTOR      0x40  /* (TSS_INDEX * DESC_SIZE) */
05232	#define DS_286_SELECTOR   0x49  /* (DS_286_INDEX * DESC_SIZE + 1) */
05233	#define ES_286_SELECTOR   0x51  /* (ES_286_INDEX * DESC_SIZE + 1) */
05234	#define VIDEO_SELECTOR    0x59  /* (VIDEO_INDEX * DESC_SIZE + 1) */
05235	#define DP_ETH0_SELECTOR  0x61  /* (DP_ETH0_INDEX * DESC_SIZE) */
05236	#define DP_ETH1_SELECTOR  0x69  /* (DP_ETH1_INDEX * DESC_SIZE) */
05237	
05238	/* Fixed local descriptors. */
05239	#define CS_LDT_INDEX     0      /* process CS */
05240	#define DS_LDT_INDEX     1      /* process DS=ES=FS=GS=SS */
05241	
05242	/* Privileges. */
05243	#define INTR_PRIVILEGE   0      /* kernel and interrupt handlers */
05244	#define TASK_PRIVILEGE   1
05245	#define USER_PRIVILEGE   3
05246	
05247	/* 286 hardware constants. */
05248	
05249	/* Exception vector numbers. */
05250	#define BOUNDS_VECTOR       5   /* bounds check failed */
05251	#define INVAL_OP_VECTOR     6   /* invalid opcode */
05252	#define COPROC_NOT_VECTOR   7   /* coprocessor not available */
05253	#define DOUBLE_FAULT_VECTOR 8
05254	#define COPROC_SEG_VECTOR   9   /* coprocessor segment overrun */
05255	#define INVAL_TSS_VECTOR   10   /* invalid TSS */
05256	#define SEG_NOT_VECTOR     11   /* segment not present */
05257	#define STACK_FAULT_VECTOR 12   /* stack exception */
05258	#define PROTECTION_VECTOR  13   /* general protection */
05259	
05260	/* Selector bits. */
05261	#define TI            0x04      /* table indicator */
05262	#define RPL           0x03      /* requester privilege level */
05263	
05264	/* Descriptor structure offsets. */
05265	#define DESC_BASE        2      /* to base_low */
05266	#define DESC_BASE_MIDDLE 4      /* to base_middle */
05267	#define DESC_ACCESS      5      /* to access byte */
05268	#define DESC_SIZE        8      /* sizeof (struct segdesc_s) */
05269	
05270	/* Segment sizes. */
05271	#define MAX_286_SEG_SIZE 0x10000L
05272	
05273	/* Base and limit sizes and shifts. */
05274	#define BASE_MIDDLE_SHIFT   16  /* shift for base --> base_middle */
05275	
05276	/* Access-byte and type-byte bits. */
05277	#define PRESENT       0x80      /* set for descriptor present */
05278	#define DPL           0x60      /* descriptor privilege level mask */
05279	#define DPL_SHIFT        5
05280	#define SEGMENT       0x10      /* set for segment-type descriptors */
05281	
05282	/* Access-byte bits. */
05283	#define EXECUTABLE    0x08      /* set for executable segment */
05284	#define CONFORMING    0x04      /* set for conforming segment if executable */
05285	#define EXPAND_DOWN   0x04      /* set for expand-down segment if !executable*/
05286	#define READABLE      0x02      /* set for readable segment if executable */
05287	#define WRITEABLE     0x02      /* set for writeable segment if !executable */
05288	#define TSS_BUSY      0x02      /* set if TSS descriptor is busy */
05289	#define ACCESSED      0x01      /* set if segment accessed */
05290	
05291	/* Special descriptor types. */
05292	#define AVL_286_TSS      1      /* available 286 TSS */
05293	#define LDT              2      /* local descriptor table */
05294	#define BUSY_286_TSS     3      /* set transparently to the software */
05295	#define CALL_286_GATE    4      /* not used */
05296	#define TASK_GATE        5      /* only used by debugger */
05297	#define INT_286_GATE     6      /* interrupt gate, used for all vectors */
05298	#define TRAP_286_GATE    7      /* not used */
05299	
05300	/* Extra 386 hardware constants. */
05301	
05302	/* Exception vector numbers. */
05303	#define PAGE_FAULT_VECTOR   14
05304	#define COPROC_ERR_VECTOR   16  /* coprocessor error */
05305	
05306	/* Descriptor structure offsets. */
05307	#define DESC_GRANULARITY     6  /* to granularity byte */
05308	#define DESC_BASE_HIGH       7  /* to base_high */
05309	
05310	/* Base and limit sizes and shifts. */
05311	#define BASE_HIGH_SHIFT     24  /* shift for base --> base_high */
05312	#define BYTE_GRAN_MAX   0xFFFFFL   /* maximum size for byte granular segment */
05313	#define GRANULARITY_SHIFT   16  /* shift for limit --> granularity */
05314	#define OFFSET_HIGH_SHIFT   16  /* shift for (gate) offset --> offset_high */
05315	#define PAGE_GRAN_SHIFT     12  /* extra shift for page granular limits */
05316	
05317	/* Type-byte bits. */
05318	#define DESC_386_BIT      0x08  /* 386 types are obtained by ORing with this */
05319	                                /* LDT's and TASK_GATE's don't need it */
05320	
05321	/* Granularity byte. */
05322	#define GRANULAR          0x80  /* set for 4K granularilty */
05323	#define DEFAULT           0x40  /* set for 32-bit defaults (executable seg) */
05324	#define BIG               0x40  /* set for "BIG" (expand-down seg) */
05325	#define AVL               0x10  /* 0 for available */
05326	#define LIMIT_HIGH        0x0F  /* mask for high bits of limit */

⌨️ 快捷键说明

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