45 | | || mapping_cluster_t || a cluster || contains psegs, processors, peripherals and coprocessors || |
46 | | || mapping_pseg_t || a physical segment || defined by a name, a base address ans a size (bytes) || |
47 | | || mapping_vspace_t || a virtual space || contains several vsegs and several parallel tasks || |
48 | | || mapping_vseg_t || a virtual segment || contains one software object || |
49 | | || mapping_task_t || a task || must be statically associated to a processor || |
50 | | || mapping_proc_t || a processor || can contain IRQ inputs (for XCU or PIC peripherals) || |
51 | | || mapping_irq_t || a source interrupt || || |
52 | | || mapping_coproc_t || a coprocessor || contains several cp_ports || |
53 | | || mapping_cp_port_t || a coprocessor port || || |
| 45 | || mapping_cluster_t || a cluster || contains psegs, processors, peripherals and coprocessors || |
| 46 | || mapping_pseg_t || a physical segment || defined by a name, a base address ans a size (bytes) || |
| 47 | || mapping_vspace_t || a virtual space || contains several vsegs and several parallel tasks || |
| 48 | || mapping_vseg_t || a virtual segment || contains one software object || |
| 49 | || mapping_task_t || a task || must be statically associated to a processor || |
| 50 | || mapping_proc_t || a processor || can contain IRQ inputs (for XCU or PIC peripherals) || |
| 51 | || mapping_irq_t || a source interrupt || || |
| 52 | || mapping_coproc_t || a coprocessor || contains several cp_ports || |
| 53 | || mapping_cp_port_t || a coprocessor port || || |
60 | | * The '''arch.py''' file is attached to a given hardware architecture. It describes both the (possibly generic) hardware architectures, and the mapping of the kernel software objects on this hardware architecture. |
61 | | * The '''appli.py''' file is attached to a given user application. It describes both the application structure (tasks and communication channels), and the mapping of the application tasks and software objects on the architecture. |
| 60 | * The '''arch.py''' file is attached to a given hardware architecture. It describes both the (possibly generic) hardware architecture, and the mapping of the kernel software objects on this hardware architecture. |
| 61 | * The '''appli.py''' file is attached to a given user application. It describes the application structure (tasks and communication channels), and the mapping of the application tasks and software objects on the architecture. |
172 | | There is six types of global vsegs for the GIET_VM kernel, but some vsegs are replicated in all clusters, to improve locality and minimize contention, as explained below: |
173 | | * The '''seg_kernel_ptab_x_y''' vseg has type PTAB. It contains the page tables for all vspaces (one page table per vspace). There is one such vseg in each cluster (one set of page tables per cluster). Each PTAB vseg is mapped in one big physical page. |
174 | | * The '''seg_kernel_code''' & '''seg_kernel_init''' have type ELF. They contain the kernel code. These two vsegs must be mapped in one big physical page. They are replicated in each cluster. The ''local'' attribute must be set, because the same virtual address will be mapped on different physical address depending on the cluster. |
175 | | * The '''seg_kernel_data''' & '''seg_kernel_uncdata''' have type ELF. They contain the kernel global data (cacheable, or non cacheable). They are not replicated, and must be mapped in cluster[0][0]. |
176 | | * The '''seg_kernel_sched_x_y''' vseg has type SCHED. It contains the processor schedulers (one scheduler per processor). There is one such vseg in each cluster, and it must be mapped on small pages (two small pages per scheduler). |
| 172 | Most kernel vsegs are replicated or distributed in all clusters, to improve locality and minimize contention, as explained below: |
| 173 | * The '''seg_kernel_ptab_x_y''' vsegs have type PTAB. They contains the page tables for all vspaces (one page table per vspace). There is one such vseg in each cluster (one set of page tables per cluster). Each PTAB vseg is mapped in one big physical page. |
| 174 | * The '''seg_kernel_code''' & '''seg_kernel_init''' have type ELF. They contain the kernel code. These two vsegs are mapped in one big physical page. They are replicated in each cluster. The ''local'' attribute must be set, because the same virtual address will be mapped on different physical address depending on the cluster. |
| 175 | * The '''seg_kernel_data''' has type ELF, and contains the kernel global data. They are not replicated, and is mapped in cluster[0][0]. |
| 176 | * The '''seg_kernel_sched_x_y''' vseg have type SCHED. It contains the processor schedulers (one scheduler per processor). There is one such vseg in each cluster, and it must be mapped on small pages (two small pages per scheduler). |
| 177 | * The '''seg_kernel_heap_x_y''' vseg have type HEAP, and contain the distributed kernel heap. There is one HEAP vseg per cluster, and is mapped in at least one big page. |
190 | | * The '''code''' vseg can be (optionally) replicated in all clusters. |
191 | | * The '''data''' vseg is not replicated. It must contain the ''start_vector'' defining the entry points of the application tasks. |
192 | | * It must exist as many '''stack'''' vseg as the number of tasks. |
193 | | * One or several '''heap''' vseg(s), can be used by the ''malloc'' user library. |
194 | | * One or several '''mwmr''' vseg(s) can be used by the ''mwmr'' user library. |
| 191 | * The '''code''' vsegs must have type ELF. They can be (optionally) replicated in all clusters. |
| 192 | * The '''data''' vseg must have type ELF. It is not replicated. It must contain the ''start_vector'' defining the entry points of the application tasks. |
| 193 | * It must exist as many '''stack'''' vseg as the number of tasks. They have type BUFFER, and should be placed in the cluster containing the processor running the task. |
| 194 | * Zero, one or several '''heap''' vseg(s), can be used by the ''malloc'' user library. They must have type HEAP. |
| 195 | * One or several '''mwmr''' vseg(s) can be used by the ''mwmr'' user library. They must have the BUFFER type. |