Index: /soft/giet_vm/giet_kernel/kernel_init.c
===================================================================
--- /soft/giet_vm/giet_kernel/kernel_init.c	(revision 687)
+++ /soft/giet_vm/giet_kernel/kernel_init.c	(revision 688)
@@ -1,3 +1,3 @@
-///////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
 // File     : kernel_init.c
 // Date     : 26/05/2012
Index: /soft/giet_vm/giet_kernel/sys_handler.c
===================================================================
--- /soft/giet_vm/giet_kernel/sys_handler.c	(revision 687)
+++ /soft/giet_vm/giet_kernel/sys_handler.c	(revision 688)
@@ -142,5 +142,5 @@
     &_sys_tty_read,                  /* 0x03 */
     &_sys_tty_alloc,                 /* 0x04 */
-    &_sys_ukn,                       /* 0x05 */
+    &_sys_tasks_status,              /* 0x05 */
     &_sys_ukn,                       /* 0x06 */
     &_sys_heap_info,                 /* 0x07 */
@@ -2237,4 +2237,47 @@
 
 
+///////////////////////
+int _sys_tasks_status()
+{
+    mapping_header_t *  header  = (mapping_header_t *)SEG_BOOT_MAPPING_BASE;
+    mapping_task_t *    task    = _get_task_base(header);
+    mapping_vspace_t *  vspace  = _get_vspace_base(header);
+    mapping_cluster_t * cluster = _get_cluster_base(header);
+
+    unsigned int task_id;
+    unsigned int vspace_id;
+
+    // scan all vspaces
+    for( vspace_id = 0 ; vspace_id < header->vspaces ; vspace_id++ )
+    {
+        _printf("\n*** vspace %s\n", vspace[vspace_id].name );
+
+        // scan all tasks in vspace
+        unsigned int min = vspace[vspace_id].task_offset ;
+        unsigned int max = min + vspace[vspace_id].tasks ;
+        for ( task_id = min ; task_id < max ; task_id++ )
+        {
+            unsigned int         clusterid = task[task_id].clusterid;
+            unsigned int         p         = task[task_id].proclocid;
+            unsigned int         x         = cluster[clusterid].x;
+            unsigned int         y         = cluster[clusterid].y;
+            unsigned int         ltid      = task[task_id].ltid;
+            static_scheduler_t*  psched    = (static_scheduler_t*)_schedulers[x][y][p];
+            unsigned int         norun     = psched->context[ltid][CTX_NORUN_ID];
+            unsigned int         current   = psched->current;
+
+            if ( current == ltid )
+            _printf(" - task %s on P[%d,%d,%d] : running\n", task[task_id].name, x, y, p );
+            else if ( norun == 0 )
+            _printf(" - task %s on P[%d,%d,%d] : waiting\n", task[task_id].name, x, y, p );
+            else
+            _printf(" - task %s on P[%d,%d,%d] : blocked\n", task[task_id].name, x, y, p );
+        }
+    }
+    return 0;
+}  // end _sys_tasks_status()
+
+
+
 // Local Variables:
 // tab-width: 4
Index: /soft/giet_vm/giet_kernel/sys_handler.h
===================================================================
--- /soft/giet_vm/giet_kernel/sys_handler.h	(revision 687)
+++ /soft/giet_vm/giet_kernel/sys_handler.h	(revision 688)
@@ -231,4 +231,6 @@
                     unsigned int  y ); 
 
+int _sys_tasks_status();
+
 #endif
 
