Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
SOS - Dynamic operating system for sensor networks Simon Han, Ram Kumar, Roy Shea, Eddie Kohler and Mani Srivastava http://nesl.ee.ucla.edu/projects/sos Modified for Yale EENG 460a Lecture 4 Andreas Savvides (09/08/05) Mobisys 2005 1 Minimal Program on an Embedded Processor int main(void) { Init_All(); for (;;) { IO_Scan(); IO_ProcessOutputs(); KBD_Scan(); PRN_Print(); LCD_Update(); RS232_Receive(); RS232_Send(); TIMER_Process(); } // should never ever get here } Mobisys 2005 // bar-code scanner // keyboard // printer // display // serial port // timer 2 Programming an embedded processor What are the problems with the previous code fragment? Some things about programming microcontrollers No memory management unit – be careful with memory usage/protection Need to worry about peripherals Need to decide where to locate code on the microcontroller memory Why does OS make a difference? Mobisys 2005 3 Some Background… TinyOS NesC Mobisys 2005 4 Re-programming Challenges Severe resource constraints on nodes 4 KB RAM, 128 KB FLASH, 2 AA batteries Avoiding crashes Unattended operation - Crashed node is useless No architecture support for protection e.g. MMU Balancing flexible and concise updates Update applications, services and drivers Energy efficient distribution and storage Why do you need reprogrammability? Mobisys 2005 5 Sensor Network OS State of the Art TinyOS - Application specific OS Application, OS and drivers are NesC components Select app components, statically analyze and optimize Extensive set of well-tuned components Supports full binary upgrades Maté - Application specific Virtual Machine Domain specific bytecode interpreter on TinyOS Programs are small scripts containing VM instructions Better suited for application specific tuning Interpreter updates require fallback to TinyOS Others: Mantis, VM* Mobisys 2005 6 Towards general purpose sensor OS TinyOS and Maté Application and OS are tightly linked Design Goal: An application independent sensor OS Independently written & deployed apps run on one network Towards traditional kernel space/user space programming model Re-programming via binary modules Risk: Lose safety provided by static analysis or dynamic interpreter Design Challenge Provide general purpose OS semantics on resource constrained embedded sensor nodes Mobisys 2005 7 SOS Operating System Dynamic operating system for sensor networks Kernel and dynamically-loadable modules Ported to Mica2, MicaZ, XYZ and Telos Convenient, yet compact, kernel interface Dynamic function links - 10 bytes overhead/function Safety features through run-time checks Type safe linkage, Memory overflow checks Performance No worse than TinyOS for real world applications Mobisys 2005 8 Contributions Framework for binary modular re-programming Dynamic linking Message Passing Dynamic Memory Inexpensive safety mechanisms for an embedded OS Type safe linking Monitored memory allocation Garbage collecting scheduler and error stub Watchdog mechanism General purpose OS semantics on sensor nodes Mobisys 2005 9 Architecture Overview Tree Routing Module Data Collector Application Photo-sensor Dynamically Module Loaded modules Static SOS Kernel Dynamic Memory Message Scheduler Dynamic Linker Kernel Components Sensor Manager Messaging I/O System Timer SOS Services Device Drivers * - Drivers adapted from TinyOS for Mica2 Radio* I2C Mobisys 2005 ADC* 10 SOS Overview Programmed entirely in C Co-operatively scheduled system Event-driven programming model System provides no memory protection Mobisys 2005 11 Designing Safety Features Dynamically evolving system Unspecified behavior resulting from transient states Goals Ensure system integrity Graceful recovery from failures Design Minimal set of run-time checks Designed for low resource utilization Does not cover all failure modes Mobisys 2005 12 Installing Dynamic Modules Modules implement specific function or task FLASH Layout Position independent binary Loader stores module at arbitrary program memory location Minimal state maintenance 8 bytes per module Stores module identity and version Mobisys 2005 SOS Kernel <Empty Space> Module 1 <Empty Space> Bootloader 13 Inter-module Communication Module A Dynamic Linking Module B Module Function Pointer Table Module A Message Passing Module B Message Buffer Dynamic Linking Synchronous communication Blocking function calls that return promptly Message Passing Asynchronous communication Long running operations Mobisys 2005 14 Dynamic Linking Overview Goals Low latency inter-module communication comparable to direct function calls Functional interface is convenient to program Challenges Safety features to address missing and updated modules Constraints Minimize RAM usage Mobisys 2005 15 Dynamic Linking Design Publish functions for the other parts of system to use Subscribe to functions supplied by other modules Indirection provides support for safety features Dynamic function call overhead 21 cycles compared to 4 cycles for direct function call Publish Subscribe Module B Module A <foo, B, FOO_ID, Type> Function Control Block Table (FCB) Mobisys 2005 16 Dynamic Linking Safety Features Module A Module B <foo, B, FOO_ID, Type> Function Control Block Table Error Stub Run-time Type Checking Module updates can introduce new function prototype Type mismatches are detected, error flag is raised Mobisys 2005 17 Message Passing System Data Collector Application Inter-module communication Kernel - module communication System Timer System Scheduler Tree Routing Module MESSAGE <Dest. Addr> <Dest. Mod. Id> <Message Type> <Payload> … Scheduler looks up handler of destination module Handler performs long operations on message payload Mobisys 2005 18 Messaging Safety Features High priority messaging Signal timing sensitive events (For e.g. hardware interrupts) Prevent interrupt chaining into the modules Concurrency management by kernel Eliminates race conditions in modules Watchdog support Co-operatively scheduled system Long running message handlers trigger watchdog reboot Kernel terminates execution of the buggy module Mobisys 2005 19 Module-Kernel Communication System Call System Jump table Data Collector Module SOS Kernel HW specific API System Messages Priority Scheduler Interrupt Service Hardware Kernel services available as system calls Jump table redirects system calls to handlers Update kernel independent of modules System Call Overhead - 12 clock cycles Mobisys 2005 20 Dynamic Memory Allocation Need to allocate module state at run-time Design Choice - Fixed-partition allocation Performance - Constant low allocation time (69 cycles) Resources - 1 byte overhead per block, 52 blocks SOS provides memory safety features Guard bytes detect memory overflow Ownership tagging to track buggy modules Guard Byte 16 byte blocks 32 byte blocks Mobisys 2005 128 byte blocks 21 Garbage Collection Memory leakage problem Garbage collection on failed message delivery Destination module needs to signal ownership Use the return code of the message handler SOS_OK - Kernel frees the dynamic memory SOS_TAKEN - Destination module owns memory Module A Message Passing Module B Message Payload Dynamic Memory Mobisys 2005 22 Surge: What does it do? Small application that organizes nodes in a spanning tree, rooted at the basestation Based on broadcast messages Each node maintains the ID of its parent and its depth in the tree Depth advertised with every message Nodes select their parents as the nodes with the least depth – and best signal Root initiates the creation of the spanning tree by periodically broadcasting messages Mobisys 2005 23 Evaluation Design Goal Provide general purpose OS semantics Low resource utilization Hypothesis Performance no worse TinyOS Update cost closer to Maté Experiment Setup Surge data collection and tree routing on 3 hop network Low duty cycle application Mica2 motes: AVR 8-bit microcontroller Mobisys 2005 24 Application Performance Comparison Application performance is nearly identical for TinyOS, SOS and Mate Packet Delivery Ratio Data Transfer Delay Mobisys 2005 25 Performance Overhead Active Time (%) TinyOS SOS Maté 4.58% 4.64% 5.13% 29.94 30.02 Average Power(mW) 29.92 CPU Active Time - Metric to measure OS overhead Measured by profiling Surge for 1 min. on real nodes Averaged over 20 experiments for each system SOS has 1% overhead relative to TinyOS Surge has minimal application level processing (“worst” case OS overhead) Insignificant variation of average power consumption Surge application has a very low CPU utilization System level energy: E(CPU) << E(Radio) Duty Cycling - Idle energy dominates over active energy Mobisys 2005 26 Update Costs Method Energy Entire binary upgrade (TinyOS) 784.14 mJ Cost High Modular binary upgrade (SOS) Virtual Machine scripts (Maté) Moderate Low 12.25 mJ 0.34 mJ Re-programming cost involves Communication Energy - Transfer the new code Storage Energy - Write the code to RAM/FLASH etc. Impact on system level energy Depends significantly upon frequency of updates Difference in update cost amortized over the interval between updates Idle energy in the interval between updates dominates Idle energy consumption does not depend on the OS Mobisys 2005 27 Lessons Learnt Focus on duty cycling all parts of the system Standardize the API for power management of peripherals Performance optimization of the CPU is secondary Account for update energy and frequency Choose an OS based on the features it provides SOS - Flexibility of general purpose OS semantics TinyOS - Full system static analysis Mate VM - Efficient scripting interface Mobisys 2005 28 Future Work New models for application development Independent re-usable loadable binary modules Hierarchy of re-configuration Maté VM ported to SOS - Extensible virtual machines Upgrade SOS kernel using TinyOS whole image technique Staged checkers Combination of static and run-time checks for code safety FLASH wear and tear management using SOS Mobisys 2005 29 Programming Programmed in C Function Registration char tmp_string = {'C', 'v', 'v', 0}; ker_register_fn(TREE_ROUTING_PID, MOD_GET_HDR_SIZE, tmp_string,(fn_ptr_t)tr_get_header_size); Mobisys 2005 30 Network Capable Messages typedef struct { sos_pid_t did; sos_pid_t sid; uint16_t daddr; uint16_t saddr; uint8_t type; uint8_t len; uint8_t *data; uint8_t flag; } Message; // // // // // // // // destination module ID source module ID destination node source node message type message length payload options Messages are best-effort by Messages are filtered when default. received. No senddone and Low priority Can be changed via flag in runtime Mobisys 2005 CRC Check and Non-promiscuous mode Can turn off filter in runtime 31 SOS Messaging API // send message over net int8_t post_net( sos_pid_t did, sos_pid_t sid, uint8_t type, uint8_t length, void *data, uint8_t flag, uint16_t daddr); // send long message int8_t post_long( sos_pid_t did, sos_pid_t sid, uint8_t type, uint8_t length, void *data, uint8_t flag); Mobisys 2005 // send message int8_t post(Message *msg); // short message struct typedef struct { uint8_t byte; uint16_t word; } MsgParam; // send short message int8_t post_short( sos_pid_t did, sos_pid_t sid, uint8_t type, uint8_t byte, uint16_t word, uint8_t flag); 32 Messaging Example: Ping_pong enum { MSG_LONG_BALL = MOD_MSG_START, MSG_SHORT_BALL = (MOD_MSG_START + 1), }; enum { PLAYER1_PID = DFLT_APP_ID0, PLAYER2_PID = DFLT_APP_ID1, }; typedef uint8_t ball_t; typedef struct { ball_t next_seq; } player_t; Mobisys 2005 33 Messaging Example: Ping_pong int8_t player(void *state, Message *msg){ player_t *s = (player_t*)state; switch (msg->type){ case MSG_INIT: { //! initialize the state s->next_seq = 0; //! start with short ball if(msg->did == PLAYER1_PID) { post_short(PLAYER2_PID, PLAYER1_PID, MSG_SHORT_BALL, s->next_seq, 0, 0); } return SOS_OK; } Mobisys 2005 34 Messaging Example: Ping_pong case MSG_SHORT_BALL: { MsgParam *p = (MsgParam*)(msg->data); s->next_seq = p->byte + 1; DEBUG("%d get short ball %d\n", msg->did, p>byte); if(p->byte % 2) { post_short(msg->sid, msg->did, MSG_SHORT_BALL, s->next_seq, 0, 0); } else { post_net(msg->sid, msg->did, MSG_LONG_BALL, sizeof(ball_t), &(s->next_seq), 0, ker_id()); } return SOS_OK; } Mobisys 2005 35 Messaging Example: Ping_pong case MSG_LONG_BALL: { ball_t *b = (ball_t*)(msg->data); s->next_seq = (*b) + 1; DEBUG("%d get long ball %d\n", msg->did, *b); if((*b) % 2) { post_long(msg->sid, msg->did, MSG_LONG_BALL, sizeof(ball_t), &(s->next_seq), 0); } else { Message m; m.did = msg->sid; m.sid = msg->did; m.daddr = ker_id(); m.saddr = ker_id(); m.type = MSG_SHORT_BALL;m.len = sizeof(ball_t); m.data = &(s->next_seq); m.flag = 0; post(&m); } return SOS_OK; Mobisys 2005 } 36 Messaging Example: Ping_pong default: return -EINVAL; } } void sos_start(void){ ker_register_task(DFLT_APP_ID0, sizeof(player_t), player); ker_register_task(DFLT_APP_ID1, sizeof(player_t), player); } Mobisys 2005 37 Synchronous Communication Module A Module B 3 2 1 Module Function Pointer Table Module can register function for low latency blocking call (1). Modules which need such function can subscribe it by getting function pointer pointer (i.e. **func) (2). When service is needed, module dereferences the function pointer pointer (3). Mobisys 2005 38 Synchronous Communcation API typedef int8_t (*fn_ptr_t)(void); // register function int8_t ker_register_fn( sos_pid_t pid, // function uint8_t fid, // function char *prototype, // function fn_ptr_t func); // function // subscribe function fn_ptr_t* ker_get_handle( sos_pid_t req_pid, // function uint8_t req_fid, // function char* prototype) // function Mobisys 2005 owner id prototype owner id prototype 39 Memory Management Modules need memory to store state information Problems with static memory allocation Worst case memory allocation – every variable is global Single packet in the radio stack – can lead to race conditions Problems with general purpose memory allocation Non-deterministic execution delay Suffers from external fragmentation Use fixed-partition dynamic memory allocation Memory allocated in blocks of fixed sizes Constant allocation time Low overhead Memory management features Guard bytes for run-time memory over-flow checks Semi-auto ownership tracking of memory blocks Automatic free-up upon completion of usage Mobisys 2005 40 SOS Memory API // allocate memory to id void *ker_malloc(uint16_t size, sos_pid_t id); // de-allocate memory void ker_free(void* ptr); Mobisys 2005 41 Messaging and Dynamic Memory Messaging is asynchronous operation. Attaching dynamic memory in post() results transfer of ownership. Bit Flag is used to tell SOS kernel the existence of dynamic memory. SOS_MSG_DYM_ALLOC -- data is dynamically allocated SOS_MSG_FREE_ON_FAIL -- free memory when post fail. SOS_DYM_MANAGED = SOS_MSG_DYM_ALLOC | SOS_MSG_FREE_ON_FAIL Dynamically allocated message payload will be automatically freed after module handling. This is the default. You can change it by return SOS_TAKEN instead of SOS_OK to take the memory. Mobisys 2005 42 Asynchronous Module Kernel Interaction System Call System Jump Table Module A SOS Kernel System Messages High Priority Message Buffer Interrupt HW Specific API Hardware Kernel provides system services and access to hardware Kernel jump table re-directs system calls from modules to kernel handlers Hardware interrupts and messages from the kernel to modules are dispatched through a high priority message buffer Low latency Concurrency safe operation Mobisys 2005 43 Schedule Message with Software Timer Timer syscall System Jump Table Module A Timer Messages SOS Kernel High Priority Message Buffer Interrupt Timer API Delta Timer Two priority: high and low. Normal timer has high priority while slow timer is not. Two types: periodic and one shot Mobisys 2005 44 SOS Timer API enum { TIMER_REPEAT TIMER_ONE_SHOT SLOW_TIMER_REPEAT SLOW_TIMER_ONE_SHOT }; = = = = int8_t ker_timer_start( sos_pid_t pid, uint8_t tid, uint8_t type, int32_t interval ); int8_t ker_timer_stop( sos_pid_t pid, uint8_t tid ); 0, 1, 2, 3, // // // // high priority, periodic high priority, one shot low priority, periodic low priority, one shot // // // // module id timer id timer type binary interval // module id // timer id Mobisys 2005 45 Timer Example: Blink #include <sos.h> #define MY_ID DFLT_APP_ID0 int8_t blink(void *state, Message *msg) { switch (msg->type) { case MSG_INIT: //!< initial message from SOS //! 256 ticks is 250 milliseconds ker_timer_start(MY_ID, 0, TIMER_REPEAT, 256); return SOS_OK; case MSG_TIMER_TIMEOUT: //!< timeout message arrived ker_led(LED_RED_TOGGLE); return SOS_OK; default: return -EINVAL; } } void sos_start() { ker_register(MY_ID, 0, blink); } Mobisys 2005 46 Sensor Manager Module A Periodic Access Module B Polled Access Data Sensor Manager Request Enables sharing of sensor data between multiple modules Presents a uniform data access API to many diverse sensors Underlying device specific drivers register with the sensor manager Data Device specific sensor drivers control Data Policy Calibration Data interpolation Sensor drivers are loadable Sensor 1 Sensor 2 Enables post-deployment configuration of sensors Enables hot-swapping of sensors on a Mobisys 2005 running node 47 Network Simulation Support Source code Level Network Simulation Pthread is used to simulate hardware. UDP is used to simulate communication with perfect radio channel. Support user defined topology and heterogeneous software configuration. Useful for verifying the correctness of the implementation of the application. Avrora: Instruction Level Simulation Instruction cycle accurate simulation. Simple perfect radio channel. Useful for verifying timing information. See http://compilers.cs.ucla.edu/avrora/ Mobisys 2005 48 Discussion For more information look at SOS Project Website SOS tutorial & Sample code XYZ Manual for details on using dynamic modules Mobisys 2005 49