Mon 14 Oct 23:06:38 CEST 2024
This commit is contained in:
		
							parent
							
								
									37615a46d7
								
							
						
					
					
						commit
						0af8964008
					
				
							
								
								
									
										80
									
								
								kernel/memorylayout.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								kernel/memorylayout.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,80 @@ | ||||||
|  | /*
 | ||||||
|  | Copyright (C) 2015-2019 The University of Notre Dame | ||||||
|  | This software is distributed under the GNU General Public License. | ||||||
|  | See the file LICENSE for details. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | This file describes the basic memory layout of the machine, | ||||||
|  | and is included by both C and assembly code, so it can only | ||||||
|  | contain #defines. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | Note that addresses in 16-bit mode are described as segment+offset, | ||||||
|  | where the segment must be aligned on a 16-byte boundary. | ||||||
|  | So, BOOTBLOCK_START = BOOTBLOCK_SEGMENT<<4 + BOOTBLOCK_OFFSET | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | The bootblock is loaded at the fixed address of 0x7c00, | ||||||
|  | which is a constant defined by the PC hardware. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define BOOTBLOCK_START   0x7c00 | ||||||
|  | #define BOOTBLOCK_SEGMENT 0x07c0 | ||||||
|  | #define BOOTBLOCK_OFFSET  0x0000 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | We choose the initial stack to start at 0xfff0 and grow | ||||||
|  | downward.  This stack location is used in the startup code, | ||||||
|  | and by the kernel when no process is active. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define INTERRUPT_STACK_TOP     0xfff0 | ||||||
|  | #define INTERRUPT_STACK_SEGMENT 0x0000 | ||||||
|  | #define INTERRUPT_STACK_OFFSET  0xfff0 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | We choose the kernel code to start at 0x10000 (64KB). | ||||||
|  | Code is loaded into this location by the bootblock. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define KERNEL_START   0x10000 | ||||||
|  | #define KERNEL_SEGMENT 0x1000 | ||||||
|  | #define KERNEL_OFFSET  0x0000 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | The total size of the kernel (in bytes) is stored at this | ||||||
|  | offset, relative to the start of the kernel code. | ||||||
|  | The bootblock uses this to decide how much to load from disk. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define KERNEL_SIZE_OFFSET 20 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | Following the kernel code is a direct mapper memory area | ||||||
|  | set aside for kmalloc() which implements a list of small | ||||||
|  | memory allocations for internal kernel purposes. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define KMALLOC_START  0x100000 | ||||||
|  | #define KMALLOC_LENGTH 0x100000 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | Main memory starts at the 2MB boundary following the kmalloc area. | ||||||
|  | This area is tracked by memory.c and used for allocatable pages, which can | ||||||
|  | be consumed by either the kernel or user processes.  The end of | ||||||
|  | main memory is determined dynamically at bootup time. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define MAIN_MEMORY_START  0x200000 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | We choose the user-mode address space to begin at 0x80000000, | ||||||
|  | and the user-mode stack to start at the top of memory and | ||||||
|  | grow down.  Addresses below 0x80000000 are all supervisor mode. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #define PROCESS_ENTRY_POINT 0x80000000 | ||||||
|  | #define PROCESS_STACK_INIT  0xfffffff0 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user