Task Structuring [2a parte] Maurizio Mazza Corso di Ingegneria del Software II Sommario I/O task structuring criteria Internal task structuring criteria Task priority criteria Task clustering criteria Temporal clustering Sequential clustering Control clustering Mutually exclusive clustering Sommario Design Restructuring Sviluppo dell’architettura dei task Sincronizzazione e comunicazione tra task Task Behavior Specification (TBS) Introduzione Task Structuring: strutturazione di un (sotto)sistema in task concorrenti. Creazione di una task architecture Determinazione dei task concorrenti Definizione delle interfacce di comunicazione Introduzione 2 Fasi: Criteri di I/O structuring, internal task structuring e task priority (gia visti…) Il risultato è un mapping uno a uno da oggetti dell’analysis modeling a task concorrenti. Criteri di task clustering e task inversion Usati per ridurre il numero di task fisici del sistema. Task Clustering Criteria: Control Clustering Un control object viene mappato in un task separato (control task). In certi casi un control task può essere combinato con altri oggetti. Azioni avviate dal control object a causa di una transizione di stato che iniziano e completano l’esecuzione durante la transizione. Task Clustering Criteria: Control Clustering - Esempio 5: Print Receipt 1: Withdrawal OK «state dependent control» : ATMControl «input device interface» : Receipit PrintInterface 6:Printer Output 7: Receipt Printed 8: Eject 4: Cash Dispensed 2: Dispense Cash «input device interface» : CashDispenser Interface Collaboration diagram iniziale (analysis model) 3: Dispenser Output Task Clustering Criteria: Control Clustering - Esempio 7: Receipt Printed / 8: Eject Ejecting Printing 4: Cash Dispensed / 5: Print Receipt Processing Withdrawal Dispensing 1: Withdrawal OK / 2: Dispense Cash Satechart associato all’oggetto state-dependent ATM Control Task Clustering Criteria: Control Clustering - Esempio 1: ATMControl Request 6: printerOutput «control clustering» : ATM Controller 3: dispenserOutput 8: eject Collaboration diagram finale (design model): i tre oggetti precedenti sono stati raggruppati in un unico task con stereotopo «control clustering» Task Clustering Criteria: Mutually Exclusive Clustering Si usa se esiste un gruppo di task in cui, per i constraint imposti dall’applicazione, uno solo di loro è in esecuzione in ogni momento. Questi task possono essere raggruppati dentro ad un unico task. Enable Increase Speed Disable Increase Speed «state dependent contol» : CruiseControl Enable Resume Cruising Disable Resume Cruising Enable Maintain Speed Disable Maintain Speed «algorithm» : Acceleration «algorithm» : Cruiser Read Throttle Value Desired Speed value Throttle Value «output device interface» : ThrottleInterface Current Speed Value Read Reached Cruising Current Speed Value «algorithm» : Resumption Desired Speed value Read «entity» : DesiredSpeed Throttle Value Read «entity» : CurrentSpeed Current Speed value «control» : CruiseControl cruiseControl Command reached Cruising «mutually exclusive clustering» : SpeedAdjustment throttle Value «periodic output device interface» : ThrottleInterface select() clear() «entity» : DesiredSpeed read(out currentSpeed Value) read(out currentSpeed Value) «entity» : CurrentSpeed Collaboration diagram finale (design model): i tre oggetti precedenti con con stereotopo «algorithm» sono stati rggruppati in un unico task. Design Restructuring Scopo: ridurre in modo sistematico il numero di task che costituiscono un sistema. Utilizzo dei criteri di task inversion per raggruppare insieme diversi task e diminuire l’overhead dovuto alla comunicazione. Multiple instance task inversion Sequential task inversion Temporal task inversion Design Restructuring: Multiple Instance Task Inversion Sostituzione di tutti i task dello stesso tipo con un solo task che svolge lo stesso servizio. Caso tipico: sistema con tante istanze di control object dello stesso tipo. Design Restructuring: Multiple Instance Task Inversion «multiple instance inversion» : Elevator Controller «control» : Elevator Control «entity» : Elevator StateInformation Invece di avere tante istanze di oggetti attivi (come a sinistra) si tiene un unico oggetto attivo a cui si associano tante istanze di oggetti passivi per mantenere le informazioni relative allo stato (figura a destra) Design Restructuring: Sequential Task Inversion Si usa quando vi è una comunicazione tightly coupled (sincrona) tra due o più task. Il task che genera il messaggio (produttore) viene combinato in un unico task con il destinatario (consumatore). Invece di mandare un messaggio, il produttore chiama un’operazione fornita dal consumatore. cruiseControl Request «control» : CruiseControl cruiseControl Command reached Cruising select() clear() «mutually exclusive clustering» : SpeedAdjustment throttle Value «periodic output device interface» : ThrottleInterface throttlePosition «external output device» : Thtottle read(out currentSpeed Value) «entity» : DesiredSpeed read(out currentSpeed Value) «entity» : CurrentSpeed Design Restructuring: Sequential Task Inversion cruiseControl Request «sequential inversion» : InvertedCruise Control throttlePosition «external output device» : Thtottle read(out currentSpeed Value) «entity» : CurrentSpeed Collaboration diagram ristrutturato: i tre oggetti precedenti sono stati raggruppati in un unico task con stereotopo «sequential inversion» Design Restructuring: Temporal Task Inversion Con questa tecnica, due o più periodic task (periodic internal, periodic I/O, temporally clustered) vengono combinati in un solo task. Il task globale ha una procedura di schedulazione che determina quando è il momento giusto di eseguire una particolare operazione. Design Restructuring: Temporal Task Inversion timer Event «temporal clustering» : AutoSensor cruiseControl Request «control» : CruiseControl timer Event «temporal clustering» : Calibration start(), stop() «entity» : CalibrationConstant Collaboration diagram iniziale (analysis model): i due oggetti «temporal clustering» possono essere raggruppati Design Restructuring: Temporal Task Inversion «external timer» : DigitalClock timer Event «temporal inversion» : Periodic cruiseControl Request «control» : CruiseControl start(), stop() «entity» : CalibrationConstant Collaboration diagram finale (design model): i due oggetti precedenti sono stati raggruppati in un unico task con stereotopo «temporal inversion» Sviluppo dell’architettura dei task I criteri di task structuring si applicano ìn questo ordine: 1. Device interface task: si inizia con i device interface object che interagiscono con il mondo esterno. 2. Control task: analizzare tutti gli statedependent control object e strutturarli come dei control task. Sviluppo dell’architettura dei task (continua) 3. Periodic task: analizzare tutte le attività interne periodiche, che vanno strutturate come periodic task. 4. Altri task interni. Il risultato di questa fase è un collaboration diagram concorrente che mostra tutti i task del sistema. Quello che manca è stabilire il tipo di comunicazione tra i vari task. Collaboration diagram iniziale (design model):le interfacce non sono specificate «subsystem» : BankServer ATM Transaction Card Reader Input «asynchronous I/O device» : CardReader Card Reader Output Dispenser Output «client subsystem» :ATMClient «asynchronous I/O device interface» : CardReader Interface Card Inserted, Card Ejected, Card Confiscated Card Input Data Card Data Card Request «user interface» : CustomerInterface : ATM Customer Display Information Cash Withdrawal Amount Cash Response Eject, Confiscate «data abstraction» : ATMCard Customer Input Bank Responses «data abstraction» : ATMCash «passive output device» : Cash Dispenser Cash Added «control clustering» : ATMControl Transaction Data Update Transaction Status(Cash Details), Update PIN Status, Transaction Request Customer Info Transaction Details Start Up, Closedown «user interface» : Operator Interface «data abstraction» : ATM Transaction Operator Input Operator Info : Operator Sincronizzazione e Comunicazione tra task Definizione delle interfacce di comunicazione dei task. Fino ad ora le interfacce tra i task sono semplici messaggi, come descritto nell’analysis model. Necessità di mappare queste interfacce nella forma di messaggi più specifici. Loosely Coupled (Asynchronous) Message Communication Il task sorgente manda un messaggio al destinatario e continua la sua esecuzione senza aspettare una risposta. Visto che i due task possono evolvere a velocità diverse, è consigliabile l’introduzione di una coda di messaggi tra i due. Se non ci sono messaggi disponibili quando il destinatario ne richede uno, la sua esecuzione viene sospesa. Loosely Coupled (Asynchronous) Message Communication «asynchronous input device interface» : CruiseControl LeverInterface «asynchronous input device interface» : CruiseControl LeverInterface Cruise Control Request «control» : CruiseControl Cruise Control Request «control» : CruiseControl Tightly Coupled (Synchronous) Message Comm. con risposta Il task sorgente, dopo aver mandato il messaggio al destinatario, viene sospeso in attesa di una risposta. Quando il destinatario riceve il messaggio, lo processa, genera una risposta e la manda al task sorgete. In questo modo entrambi possono continuare. Se non ci sono messaggi, il destinatario del messaggio viene sospeso. Tightly Coupled (Synchronous) Message Comm. con risposta ATM Transaction «client subsystem» : ATMClient «server subsystem» : BankServer Bank Response ATM Transaction «client subsystem» : ATMClient «server subsystem» : BankServer Bank Response Tightly Coupled (Synchronous) Message Comm. senza risposta Dopo aver mandato il messaggio al task destinatario, il task sorgente si blocca in attesa che questi lo riceva. Quando il messaggio arriva, il destinatario lo accetta, sbloccando così il sorgrnte. A questo punto entrambi posssono continare. Anche in questo caso il destinatario viene sospeso se non ci sono messaggi. Tightly Coupled (Synchronous) Message Comm. senza risposta «non-time-crirical» : SensorStatistics Algorithm «non-time-crirical» : SensorStatistics Algorithm Temperature and Pressure Statistics Temperature and Pressure Statistics «passive output device interface» : SensorStatistics DisplayInterface «passive output device interface» : SensorStatistics DisplayInterface Event Synchronization Esistono tre tipi diversi di eventi per la sincronizzazione: Eventi esterni Tipicamente un interrupt da un dispositivo di I/O Eventi timer Rappresentano l’attivazione periodica di un task Eventi interni Rappresentano la sincronizzazione tra un task sorgente ed uno destinazione Event Synchronization: Eventi Esterni «asynchronous input device» : CruiseControlLever «asynchronous input device» : CruiseControlLever Cruise Control Input cruiseControlInterrupt (cruiseControlInput) «asynchronous input device interface» : CruiseControl LeverInterface «asynchronous input device interface» : CruiseControl LeverInterface Event Synchronization: Eventi Timer Distance Timer Event «external timer» : DigitalClock distance TimerEvent «external timer» : DigitalClock «periodic» : Distance Timer «periodic» : Distance Timer Event Synchronization: Eventi Interni Si usa quando due task devono sincronizzare le loro operazioni senza bisogno di scambiarsi dei dati. Il task sorgente segnala l’evento. Il task di destinazione che aspetta l’evento viene sospeso finchè l’evento non viene segnalato. Se l’evento era già stato segnalato, il destinatario non viene sospeso. Event Synchronization: Eventi Interni Part Ready «control» : pick&PlaceRobot «control» : drillingRobot Part Completed Part Ready «control» : pick&PlaceRobot «control» : drillingRobot Part Completed Collaboration diagram finale (design model):tutte le interfacce sono specificate «subsystem» : BankServer ATM Transaction Card Reader Input «asynchronous I/O device» : CardReader Card Reader Output Dispenser Output «client subsystem» : ATMClient «asynchronous I/O device interface» : CardReader Interface Card Inserted, Card Ejected, Card Confiscated Eject, Confiscate write (card Data) «data abstraction» : ATMCard Read( Out card Data) Customer Input : ATM Display Customer Information Bank Responses «user interface» : CustomerInterface withdrawCash «data abstraction» : ATMCash «passive output device» : Cash Dispenser addCash «control clustering» : ATMControl Update Transaction Status(Cash Details), Update PIN Status( Status), read(out Transaction Data) updateCustomer Info (cardData,PIN), updateCustomerSelect (in slection out details) Start Up, Closedown «user interface» : Operator Interface «data abstraction» : ATM Transaction Operator Input Operator Info : Operator Task Behavior Specification Descrive il comportamento di un task concorrente. In particolare: Interfaccia Struttura Caratteristiche temporali Priorità Errori