\subsubsection{Core} \label{core} A \core is specified by the following definitions \cite{Kurma06}:\\ (1) It is a deployment unit for a software component.\\ (2) It is the unit that reads and executes program instructions.\\ \begin{center} Standard attributes \end{center} $Name$ : It is the unique name of \core.\\ $Speed$: It is an positive integer, which scales execution time of any task run by this \core.\\ $L1_{-}cache_{-}system_{-}name$: It is a string, which corresponds to the primary cache. It is faster, generally smaller, and located in core. The $L1_-cache_system$ is a list of $0$ or several \caches. \\Each \cache can be of $2$ types: \begin{itemize} \item $Unified$ : in this case, it corresponds to $Data_-Instruction_-Cache$. \item $Separated$ : in this case, it corresponds to $1$ $Data_-Cache$ and $1$ $Instruction_-Cache$.\\ \end{itemize} $Scheduling$: It defines all parameters of the mean tasks will be scheduling on the core. The type of this data is $Scheduling_{-}Parameters$ and it is defined the Annex of this section. \\ \begin{center} Legality rules \end{center} (L1) The \core name must not be empty.\\ (L2) The \core name must be valid identifier.\\ (L3) We must not have simultaneous ($A_{-}Scheduler = Pipeline_{-}User_{-}Defined_{-}Protocol$) and ($File_{-}Name$ $Empty$).\\ (L4) We must not have simultaneous ($File_{-}Name \ne Empty$) and ($A_{-}Scheduler \ne Pipeline_{-}User_{-}Defined_{-}Protocol$) and ($A_{-}Scheduler \ne Automata_{-}User_{-}Defined_{-}Protocol$).\\ (L5) The $Period$ must be greater than or equal to 0.\\ (L6) The $Capacity$ must be greater than or equal to 0.\\ (L7) We must not have ($Priority < Priority_{-}Range'First$) or ($Priority < Priority_{-}Range'Last$).\\ (L8) We must not have simultaneous ($Quantum \ne 0$) and ($A_{-}Scheduler \ne Posix_{-}1003_{-}Highest_{-}Priority_{-}First_{-}Protocol$) and ($A_{-}Scheduler \ne Round_{-}Robin_{-}Protocol$) and ($A_{-}Scheduler \ne Hierarchical_{-}Round_{-}Robin_{-}Protocol$) and ($A_{-}Scheduler \ne Hierarchical_{-}Cyclic_{-}Protocol$).\\ (L9) The $Quantum$ must be greater than or equal to 0.\\ (L10) The $Speed$ must be greater than or equal to 0.\\ (L11) $A_{-}Scheduler$ must be different of $No_{-}Scheduling_{-}Protocol$.\\ \begin{center} Annexes \end{center} (A1) See Annexes of $Dynamic_-Deployment$ for attributes of $Scheduling_{-}Parameters$.\\ \begin{center} Implementation \end{center} The figure \ref{dtd_core} gives the DTD of entity \core. \begin{figure}{} \begin{lstlisting}{} \end{lstlisting} \caption{The DTD of entity \core} \label{dtd_core} \end{figure} \begin{center} Example \end{center} The figure \ref{Core_example} gives an example of entity \core described using Cheddar ADL. In this case, the scheduler $POSIX_{-}1003_{-}HIGHEST_{-}PRIORITY_{-}FIRST_{-}PROTOCOL$ is fixed on the core named $core1$, and it is of $Preemptive$ Type. The $L1_{-}cache_{-}system_{-}name$ is not represented. \begin{figure}{} \begin{lstlisting}{} CORE_OBJECT_TYPE core1 POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL 100 PREEMPTIVE 101 102 103 0 1 \end{lstlisting} \caption{An example of \core description} \label{Core_example} \end{figure} \begin{center} Annexes \end{center} (A1) The $Scheduling_{-}Parameters$ attributes. \\ A scheduler is responsible for selecting the running task for each unit of time from among the set of ready tasks on a given core. A scheduler is defined by a policy and various parameters. The available policies are:\\ \indent \indent (A11) $Scheduler_{-}type$: Which defines the scheduling policy, and may be \cite{Mall06} \cite{Singhoff07} \cite{Buttazo03}, \cite{Zalewski95}:\\ \indent \indent \indent \indent (A111) $Compiled_{-}User_{-}Defined_{-}Protocol$: ...\\ \indent \indent \indent \indent (A112) $Automata_{-}User_{-}Defined_{-}Protocol$: ...\\ \indent \indent \indent \indent (A113) $Pipeline_{-}User_{-}Defined_{-}Protocol$: ...\\ \indent \indent \indent \indent (A114) $User_{-}Defined_{-}Protocol$: ...\\ \indent \indent \indent \indent (A115) $Earliest_{-}Deadline_{-}First_{-}Protocol$: Tasks can be periodic or not and are scheduled according to their $Deadline$.\\ \indent \indent \indent \indent (A116) $Least_{-}Laxity_{-}First_{-}Protocol$: Tasks can be periodic or not and are scheduled according to their laxity.\\ \indent \indent \indent \indent (A117) $Rate_{-}Monotonic_{-}Protocol$: He attributes the higher priority to the task which has the smallest period.\\ \indent \indent \indent \indent (A118) $Deadline_{-}Monotonic_{-}Protocol$: At every scheduling point, the task having the shortest deadline is taken up for scheduling. Tasks have to be periodic and are scheduled according to their deadline. You have to be aware that the value of the priority field of the tasks is ignored here.\\ \indent \indent \indent \indent (A119) $Round_{-}Robin_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1110) $Time_{-}Sharing_{-}Based_{-}On_{-}Wait_{-}Time_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1111) $Posix_{-}1003_{-}Highest_{-}Priority_{-}First_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1112) $D_{-}Over_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1113) $Maximum_{-}Urgency_{-}First_{-}Based_{-}On_{-}Laxity_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1114) $Maximum_{-}Urgency_{-}First_{-}Based_{-}On_{-}Deadline_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1115) $Time_{-}Sharing_{-}Based_{-}On_{-}Cpu_{-}Usage_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1116) $No_{-}Scheduling_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1117) $Hierarchical_{-}Cyclic_{-}Protocol$: This policy runs cyclically the set of address spaces. The address space scheduling is computed with the order of the address space in the CheddarADL model. The cycle is always the same. Each time an address space is activated, it stays activated during its capacity. So each address space may be activated during a different amount of time. \\ \indent \indent \indent \indent (A1118) $Hierarchical_{-}Round_{-}Robin_{-}Protocol$: This policy runs cyclically the set of address spaces. The address space scheduling is computed with the order of the address space in the CheddarADL model. The cycle is always the same. Each time an address space is activated, it stays activated during the quantum value. So all address space are activated during the same amount of time. \\ \indent \indent \indent \indent (A1119) $Hierarchical_{-}Fixed_{-}Priority_{-}Protocol$: The address space scheduling is computed with the fixed priority of the address space in the CheddarADL model. The scheduling policy use the period and start time attributes to compute the address space scheduling. The core quantum is not used with this scheduling policy. \\ \indent \indent \indent \indent (A1120) $Hierarchical_{-}Polling_{-}Aperiodic_{-}Server_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1121) $Hierarchical_{-}Priority_{-}Exchange_{-}Aperiodic_{-}Server_{-}Protocol$:...\\ \indent \indent \indent \indent (A1122) $Hierarchical_{-}Sporadic_{-}Aperiodic_{-}Server_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1123) $Hierarchical_{-}Deferrable_{-}Aperiodic_{-}Server_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1124) $Proportionate_{-}Fair_{-}PF_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1125) $Proportionate_{-}Fair_{-}PD_{-}Protocol$: ...\\ \indent \indent \indent \indent (A1126) $Proportionate_{-}Fair_{-}PD2_{-}Protocol$: ...\\ \indent \indent (A12) $Quantum$: It is the quantum value associated with the $Scheduler$. It is a natural, which defines the smallest unit of execution time of a task. A time quantum is a maximum duration that a task can run on the \processor or \core before being pre-empted by another task of the same queue. This information is useful if a scheduler has to manage several tasks with the same dynamic or static priority : in this case, the simulator has to choose how to share the processor between these tasks. The quantum is a bound on the delay a task can hold the processor (if the quantum is equal to zero, there is no bound on the processor holding time). \\ \indent \indent (A13) $Preemptive_{-}type$: It characterizes the scheduler type. We have two types:\\ \indent \indent \indent \indent (A131) $Preemptive$: When the running task is interrupted for some time and resumed later when the priority task has finished its execution.\\ \indent \indent \indent \indent (A132) $Not_{-}preemptive$: In this case, a running task is executed till completion. It cannot be interrupted. \\ \indent \indent (A14) $Automaton_{-}name$: ...\\ \indent \indent (A15) $Capacity$: It is the worst case execution time of a $Task$.\\ \indent \indent (A16) $Period$: It is duration between two periodic release times.\\ \\In this case, a task starts a job at each release time.\\ \indent \indent (A17) $Priority$: It is a priority range. It is an integer, which allows the scheduler to choose the task to run.\\ \indent \indent (A18) $User_{-}Defined_{-}Scheduler_{-}Source$: ...\\ \indent \indent (A19) $User_{-}Defined_{-}Scheduler_{-}Source_{-}File_{-}Name$: the file name of a file which contains the source code of a $User_-Defined_-Scheduler$.\\ \indent \indent (A110) $Start_{-}Time$: It is the first release time of a $Task$.\\ \begin{figure} \begin{lstlisting} RATE_MONOTONIC_PROTOCOL 0 PREEMPTIVE 0 0 0 0 \end{lstlisting} \caption{An example of Scheduling parameters of a Core Unit} \label{Scheduling_Parameters} \end{figure}