Changes between Version 86 and Version 87 of Developer/SMP


Ignore:
Timestamp:
Nov 23, 2014, 4:55:50 AM (5 years ago)
Author:
Chris Johns
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Developer/SMP

    v86 v87  
    1010The [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] support for RTEMS is a work in progress.  Basic support is available for ARM, PowerPC, SPARC and Intel x86.
    1111
    12 {| border="1" style="margin: 1em auto 1em auto;text-align: center;"
    13 |+
    14 |-
    15 |'''Design Issues''' || '''Summary''' || '''Notes'''
    16 |-
    17 | [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Start Low Level Start] || TBD ||
    18 |-
    19 | [http://www.rtems.org/wiki/index.php/SMP#Processor_Affinity Processor Affinity] || Ongoing ||
    20 |-
    21 | [http://www.rtems.org/wiki/index.php/SMP#Atomic_Operations Atomic Operations] || TBD ||
    22 |-
    23 | [http://www.rtems.org/wiki/index.php/SMP#SMP_Locks SMP Locks] || TBD ||
    24 |-
    25 | [http://www.rtems.org/wiki/index.php/SMP#ISR_Locks ISR Locks] || TBD ||
    26 |-
    27 | [http://www.rtems.org/wiki/index.php/SMP#Giant_Lock_vs._Fine_Grained_Locking Giant Lock vs Fine Grained Locking] || TBD ||
    28 |-
    29 | [http://www.rtems.org/wiki/index.php/SMP#Watchdog_Handler Watchdog Handler] || TBD ||
    30 |-
    31 | [http://www.rtems.org/wiki/index.php/SMP#Per-CPU_Control Per-CPU Control] || TBD ||
    32 |-
    33 | [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support Interrupt Support] || TBD ||
    34 |-
    35 | [http://www.rtems.org/wiki/index.php/SMP#Global_Scheduler Global Scheduler] || TBD ||
    36 |-
    37 | [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling Clustered Scheduling] || TBD ||
    38 |-
    39 | [http://www.rtems.org/wiki/index.php/SMP#Task_Variables Task Variables] || TBD ||
    40 |-
    41 | [http://www.rtems.org/wiki/index.php/SMP#Non-Preempt_Mode_for_Mutual_Exclusion Non-Preempt Mode for Mutual Exclusion] || TBD ||
    42 |-
    43 | [http://www.rtems.org/wiki/index.php/SMP#Thread_Restart Thread Restart] || TBD ||
    44 |-
    45 | [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete Thread Delete] || TBD ||
    46 |-
    47 | [http://www.rtems.org/wiki/index.php/SMP#Semaphores_and_Mutexes Semaphores and Mutexes] || TBD ||
    48 |-
    49 |}
    50 
    51 
    52 {| border="1" style="margin: 1em auto 1em auto;text-align: center;"
    53 |+
    54 |-
    55 |'''Implementation Status''' || '''Summary''' || '''Notes'''
    56 |-
    57 | [http://www.rtems.org/wiki/index.php/SMP#Tool_Chain Tool Chain] || TBD ||
    58 |-
    59 | [http://www.rtems.org/wiki/index.php/SMP#Profiling Profiling] || Complete || CPU counter support is complete.  The profiling support is complete.
    60 |-
    61 | [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support_2 Interrupt Support] || TBD ||
    62 |-
    63 | [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling_2 Clustered Scheduling] || Complete ||
    64 |-
    65 | [http://www.rtems.org/wiki/index.php/SMP#Multiprocessor_Resource_Sharing_Protocol_-_MrsP  Multiprocessor Resource Sharing Protocol - MrsP] || Complete ||
    66 |-
    67 | [http://www.rtems.org/wiki/index.php/SMP#Fine_Grained_Locking Fine Grained Locking] || TBD ||
    68 |-
    69 | [http://www.rtems.org/wiki/index.php/SMP#Post-Switch_Actions Post-Switch Actions] || Complete || Implemented as post-switch thread-actions
    70 |-
    71 | [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete.2FRestart Thread Delete/Restart] || Complete ||
    72 |-
    73 | [http://www.rtems.org/wiki/index.php/SMP#Barrier_Synchronization Barrier Synchronization] || Complete ||
    74 |-
    75 | [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Broadcasts Low-Level Broadcasts] || TBD ||
    76 |-
    77 | [http://www.rtems.org/wiki/index.php/SMP#Termios_Framework Termios Framework] || Complete ||
    78 |-
    79 |}
     12
     13
     14|| '''Design Issues''' || '''Summary''' || '''Notes''' ||
     15|| [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Start Low Level Start] || TBD || ||
     16|| [http://www.rtems.org/wiki/index.php/SMP#Processor_Affinity Processor Affinity] || Ongoing || ||
     17|| [http://www.rtems.org/wiki/index.php/SMP#Atomic_Operations Atomic Operations] || TBD || ||
     18|| [http://www.rtems.org/wiki/index.php/SMP#SMP_Locks SMP Locks] || TBD || ||
     19|| [http://www.rtems.org/wiki/index.php/SMP#ISR_Locks ISR Locks] || TBD || ||
     20|| [http://www.rtems.org/wiki/index.php/SMP#Giant_Lock_vs._Fine_Grained_Locking Giant Lock vs Fine Grained Locking] || TBD || ||
     21|| [http://www.rtems.org/wiki/index.php/SMP#Watchdog_Handler Watchdog Handler] || TBD || ||
     22|| [http://www.rtems.org/wiki/index.php/SMP#Per-CPU_Control Per-CPU Control] || TBD || ||
     23|| [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support Interrupt Support] || TBD || ||
     24|| [http://www.rtems.org/wiki/index.php/SMP#Global_Scheduler Global Scheduler] || TBD || ||
     25|| [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling Clustered Scheduling] || TBD || ||
     26|| [http://www.rtems.org/wiki/index.php/SMP#Task_Variables Task Variables] || TBD || ||
     27|| [http://www.rtems.org/wiki/index.php/SMP#Non-Preempt_Mode_for_Mutual_Exclusion Non-Preempt Mode for Mutual Exclusion] || TBD || ||
     28|| [http://www.rtems.org/wiki/index.php/SMP#Thread_Restart Thread Restart] || TBD || ||
     29|| [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete Thread Delete] || TBD || ||
     30|| [http://www.rtems.org/wiki/index.php/SMP#Semaphores_and_Mutexes Semaphores and Mutexes] || TBD || ||
     31||
     32
     33
     34
     35|| '''Implementation Status''' || '''Summary''' || '''Notes''' ||
     36|| [http://www.rtems.org/wiki/index.php/SMP#Tool_Chain Tool Chain] || TBD || ||
     37|| [http://www.rtems.org/wiki/index.php/SMP#Profiling Profiling] || Complete || CPU counter support is complete.  The profiling support is complete.
     38|| [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support_2 Interrupt Support] || TBD || ||
     39|| [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling_2 Clustered Scheduling] || Complete || ||
     40|| [http://www.rtems.org/wiki/index.php/SMP#Multiprocessor_Resource_Sharing_Protocol_-_MrsP  Multiprocessor Resource Sharing Protocol - MrsP] || Complete || ||
     41|| [http://www.rtems.org/wiki/index.php/SMP#Fine_Grained_Locking Fine Grained Locking] || TBD || ||
     42|| [http://www.rtems.org/wiki/index.php/SMP#Post-Switch_Actions Post-Switch Actions] || Complete || Implemented as post-switch thread-actions
     43|| [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete.2FRestart Thread Delete/Restart] || Complete || ||
     44|| [http://www.rtems.org/wiki/index.php/SMP#Barrier_Synchronization Barrier Synchronization] || Complete || ||
     45|| [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Broadcasts Low-Level Broadcasts] || TBD || ||
     46|| [http://www.rtems.org/wiki/index.php/SMP#Termios_Framework Termios Framework] || Complete || ||
    8047=  Requirements  =
    8148
     
    14901457                else:
    14911458                        <span style="color:red">ISR_enable(level)</span>
    1492                         <span style="color:lime">level = ISR_disable()</span>
    1493                         wait_queue = thread.get_wait_queue()
    1494                         if wait_queue != NULL:
    1495                                 wait_queue.extract(executing)
    1496                                 if thread.is_timer_active():
    1497                                         thread.deactivate_timer()
    1498                                         <span style="color:lime">ISR_enable(level)</span>
    1499                                         thread.remove_timer()
    1500                                 else:
    1501                                         <span style="color:lime">ISR_enable(level)</span>
    1502                                 <span style="color:fuchsia">level = ISR_disable()</span>
    1503                                 if thread.is_state_set(MUTEX_BLOCKING_STATE):
    1504                                         thread.clear_state(MUTEX_BLOCKING_STATE)
    1505                                         if thread.is_ready():
    1506                                                 scheduler_unblock(thread)
    1507                                 <span style="color:fuchsia">ISR_enable(level)</span>
    1508                         else:
    1509                                 <span style="color:lime">ISR_enable(level)</span>
    1510         else:
    1511                 <span style="color:red">ISR_enable(level)</span>
    1512 
    1513 The thread.remove_timer() operation is quite complex and a problem area of its
    1514 own.  See discussion about the [wiki:Watchdog_Handler Watchdog Handler].
    1515 
    1516 The scheduler operation points are in a good shape.  Here we can easily use one
    1517 SMP lock for the thread state and one SMP lock for the scheduler state.
    1518 
    1519 The big problem is that the mutex object state changes and the thread enqueue
    1520 operation are split up into several parts.  This was done to ensure a next to
    1521 optimal interrupt latency with only constant-time sections of disabled
    1522 interrupts.  The trade-
     1459                        <span style