\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}{}

<!ELEMENT core_units (core_unit)+>
<!ELEMENT core_unit (object_type | name 
  | scheduling | speed | l1_cache_system_name)*>
<!ATTLIST core_unit id ID #REQUIRED>

\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_unit id=" 67" >
	<object_type>CORE_OBJECT_TYPE</object_type>
	<name>core1</name>
	<scheduling>
		<scheduling_parameters>
			<scheduler_type>
              POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL
			</scheduler_type>
			<quantum>100</quantum>
			<preemptive_type>PREEMPTIVE
			</preemptive_type>
			<capacity>101</capacity>
			<period>102</period>
			<priority>103</priority>
			<start_time>0</start_time>
		</scheduling_parameters>
	</scheduling>
	<speed>1</speed>
</core_unit>
\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}
  <scheduling_parameters>
   <scheduler_type>RATE_MONOTONIC_PROTOCOL
      </scheduler_type>
   <quantum>0</quantum>
   <preemptive_type>PREEMPTIVE
      </preemptive_type>
   <capacity>0</capacity>
   <period>0</period>
   <priority>0</priority>
   <start_time>0</start_time>
   </scheduling_parameters>
\end{lstlisting}
\caption{An example of Scheduling parameters of a Core  Unit}
\label{Scheduling_Parameters}
\end{figure}



