Changes between Version 55 and Version 56 of boot_procedure
- Timestamp:
- Mar 2, 2019, 3:49:27 PM (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
boot_procedure
v55 v56 35 35 36 36 The TSAR boot_loader allocates - in each cluster containing a physical memory bank - six fixed size memory zones, to store various 37 binary files or data structures. The two first zones are permanently allocated: The '''PRE_LOADER''' zone is only defined in cluster 0, and contains the pre-loader code. The '''KERNEL_CODE''' zone containing the ''kcode'' and ''kdata'' sgments is directly used by the kernel when the boot_loader transfers control - in each cluster - to the kernel_init procedure. The '''BOOT_CODE''', '''ARCH_INFO''', '''KERNEL_ELF''', and '''BOOT_STACK''' zones are temporary: they are only used - in each cluster - by the boot-loader code, and the corresponding physical memory can be freely used andre-allocated by the local kernel instance when it starts execution.37 binary files or data structures. The two first zones are permanently allocated: The '''PRE_LOADER''' zone is only defined in cluster 0, and contains the pre-loader code. The '''KERNEL_CODE''' zone containing the ''kcode'' and ''kdata'' sgments is directly used by the kernel when the boot_loader transfers control - in each cluster - to the kernel_init procedure. The '''BOOT_CODE''', '''ARCH_INFO''', '''KERNEL_ELF''', and '''BOOT_STACK''' zones are temporary: they are only used - in each cluster - by the boot-loader code, and the corresponding physical memory can be freely re-allocated by the local kernel instance when it starts execution. 38 38 39 39 || name || description || base address (physical) || size || … … 47 47 The values given in this array are indicative. The actual values are defined by configuration parameters in the ''boot_config.h'' file. 48 48 The two main constraint are the following: 49 * the ''kcode'' segment(in the KERNEL_CODE zone) must be entirely contained in one single big physical page (2 Mbytes), because it will be mapped as one single big page in all process virtual spaces.50 * the BOOT_CODE region(containing the boot loader instructions and data) must be entirely contained in the51 next big physical page, because it will be mapped in the boot-loader virtual space yo allow the cores to access locally the boot code as soon as it has been copied in the local cluster.49 * the ''kcode'' and ''kdata'' segments (in the KERNEL_CODE zone) must be entirely contained in one single big physical page (2 Mbytes), because it will be mapped as one single big page in all process virtual spaces. 50 * the BOOT_CODE zone (containing the boot loader instructions and data) must be entirely contained in the 51 next big physical page, because it will be mapped in the boot-loader page table to allow the cores to access locally the boot code as soon as it has been copied in the local cluster. 52 52 53 53 A core is identified by two indexes: '''cxy''' is the cluster identifier, an '''lid''' is the core local index in cluster. … … 55 55 56 56 All cores contribute to the boot procedure, but all cores are not simultaneously active: 57 * in a first phase,only core[0][0] is running (core 0 in cluster 0).58 * In a second phase, only core[cxy][0] are running (one core per cluster).59 * in last phase,all core[cxy][lid] are running.57 * in the first phase - fully sequencial - only core[0][0] is running (core 0 in cluster 0). 58 * In the second phase - partially parallel - only core[cxy][0] is running in each cluster. 59 * in the last phase - fully parallel - all core[cxy][lid] are running. 60 60 61 61 We describe below the four phases of the TSAR boot-loader: … … 63 63 === B1. Pre-loader phase === 64 64 65 * In the TSAR_LETI architecture, the pre loader is loaded in the first 16 kbytes of the physical address space in cluster 0.65 * In the TSAR_LETI architecture, the pre-loader code is stored in the first 16 kbytes of the physical address space in cluster 0. 66 66 * In the TSAR_IOB architecture, the preloader is stored in an external ROM, that is accessed throug the IO_bridge located in cluster 0. 67 67 … … 69 69 Therefore, all cores can only access the physical address space of cluster 0. 70 70 71 All cores execute the same pre loader code (stored in cluster 0, but the work done depends on the core identifier:71 All cores execute the same pre-loader code, but the work done depends on the core identifier: 72 72 * The core[0][0] load in the BOOT_CODE zone of cluster 0, the boot-loader code stored on disk. 73 73 * All other cores do only one task before going to sleep (i.e. low-power state): each core activates its private WTI channel in the local ICU (Interrupt Controller Unit) to be later activated by an IPI (Inter Processor Interrupt). … … 77 77 In this phase, only core [0][0] is running, while all other cores are blocked in the preloaded, waiting to be activated by an IPI. 78 78 79 The first instructions of the boot-loader are defined in the ''boot_entry.S'' file. This assembly code is executed by all cores entering the boot 79 The first instructions of the boot-loader are defined in the ''boot_entry.S'' file. This assembly code is executed by all cores entering the boot-loader, but not at the same time. 80 80 81 81 Each core running this code makes the 3 following actions: