UNIVERSITA POLITECNICA DELLE MARCHE. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Informatica e dell Automazione.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "UNIVERSITA POLITECNICA DELLE MARCHE. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Informatica e dell Automazione."

Transcript

1 UNIVERSITA POLITECNICA DELLE MARCHE Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e dell Automazione Tesi di Laurea Progettazione e sviluppo di un modulo per il task-scheduling per il CMS Drupal 6. Relatore: Prof. Aldo Franco Dragoni Laureando: Danilo del Conte ANNO ACCADEMICO

2 Indice Introduzione 3 CMS 4 Formato RSS e Feed Web.10 Drupal 12 Algoritmo..16 Processo.18 Scheduler...23 Scheduling della CPU 24 Sistema operativo Real-Time 27 Specifiche progetto 32 Realizzazione progetto..35 Drupal operazioni iniziali..36 Organizzazione del lavoro.53 Implementazione algoritmi nel linguaggio C 54 Creazione della directory del modulo algoritmi 69 Creazione del file algoritmi.info...70 Creazione del file algoritmi.module..75 Creazione del file crea_gantt.php 100 Installazione e funzionamento del modulo algoritmi..115 Conclusioni..121 Bibliografia

3 INTRODUZIONE 3

4 CMS Content Management System, in acronimo CMS, letteralmente sta per sistema di gestione dei contenuti. È uno strumento software installato su un web server studiato per facilitare la gestione (creazione, modifica, rimozione, ecc.) dei contenuti di un sito web (portale informativo) attraverso un interfaccia semplice ed intuitiva, che svincola l'amministratore del sito da conoscenze tecniche di programmazione web e gli permette di ottenere il controllo sulla creazione e sulla distribuzione delle informazioni contenute in esso. In poche parole, garantisce all amministratore la totale autonomia nella gestione dei contenuti del sito senza la necessità che esso conosca i linguaggi di programmazione web (HTML, PHP, JavaScript, ecc.) e senza il bisogno di rivolgersi ad un web master (colui che ha creato il sito o semplicemente chi conosce i linguaggi di programmazione web). Il reale valore aggiunto di un sito internet, rispetto al cartaceo, dovrebbe essere il costante aggiornamento dei contenuti e la visibilità di questi a livello mondiale. Solo un sito costantemente aggiornato può essere seguito dalle altre persone con interesse. Ogni sito web, ai suoi albori, presenta poco contenuto. Con lo scorrere del tempo, l organizzazione responsabile del sito sente il bisogno di pubblicare nuove informazioni sul web, ed il sito deve essere aggiornato. Probabilmente il sito è content-driven, cioè fortemente basato sul contenuto; magari sul portale vengono pubblicati articoli e news con una frequenza molto alta, per cui occorre prestare molta attenzione a come possa essere aggiornato e modificato il sito stesso. Con il CMS si vuole creare il sito in modo da poter essere facilmente modificato da persone non esperte di programmazione o web development (sviluppatori di siti internet), permettendo la gestione efficace di una gran mole di informazioni di diverse tipologie. Per far fronte a queste esigenze è indispensabile appoggiare la nostra base di informazioni su un CMS, una piattaforma per la pubblicazione delle informazioni e la gestione dei contenuti di un portale. Grazie al CMS la fase di realizzazione dell'architettura del sito e della information architecture è distinta dalla fase di inserimento dei dati veri e propri. Mentre la prima fase richiede il lavoro di un esperto informatico, nella seconda fase i contenuti effettivi del portale possono essere gestiti da personale interno all'organizzazione, precedentemente istruito per l'operazione, attraverso pochi semplici passi. Facciamo qualche esempio L'attività commerciale che decide di proporre un' offerta promozionale ha la necessità di pubblicizzare l'evento sul proprio sito, quindi ha bisogno di tempestivi aggiornamenti. Oppure, l associazione X vuole aggiornare l'elenco degli iscritti o inserire delle news nel proprio sito. O ancora, un agenzia di viaggi vuole pubblicizzare le offerte last minute. Normalmente, per queste operazioni, come per ogni seppur minimo aggiornamento, si segue la stessa noiosa procedura. L'interessato (autore del sito, o amministratore) fornisce i contenuti da pubblicare a chi ha realizzato le pagine (web master) e dopo aver spiegato nel migliore dei modi quello che gli serve, aspetta diligentemente il suo turno. Ovviamente non sarà il solo utente che ha la necessità di aggiornare il proprio sito (perché anche altre persone potrebbero rivolgersi allo stesso webmaster), quindi l'operazione sarà lenta (il web master deve soddisfare le richieste di più 4

5 persone), dispendiosa (gli aggiornamenti si pagano) e soprattutto genera un rapporto di dipendenza nei confronti del web master o della web agency che ha realizzato il sito. Come altro ulteriore esempio descriviamo uno scenario molto comune tra le piccole aziende: viene commissionato il sito ad una Web Agency o ad un professionista del settore, il sito viene realizzato in HTML e CSS, e l azienda è molto contenta del risultato. Dopo alcuni mesi la ditta sente la necessità di dover aggiornare delle informazioni, ma nessuno all interno della ditta conosce HTML. Il contenuto del sito deve essere modificato da una persona esterna, che funge da responsabile del sito. Ora tutto il contenuto che deve essere pubblicato sul sito passa per le sue mani. Potrebbe accadere che questa persona si renda irreperibile per qualsiasi motivo ed ogni aggiornamento sarebbe impossibilitato. Oppure viene affidata la gestione del sito ad un dipendente interno all azienda, con poche conoscenze informatiche, dopo un breve corso di HTML. Questa persona si occupa dell inserimento dei dati, ed il procedimento funziona, ma dopo qualche tempo ci si accorge che il sito ha bisogno di un serio restyling, dato che le informazioni venivano aggiunte ogni volta in modo approssimativo, senza un vero metodo, una organizzazione dei dati. In ambedue i casi, in presenza di frequenti aggiunte di contenuto al sito, potrebbe accadere che la persona incaricata di aggiornare il sito si trovi in una situazione nota come bottleneck (collo di bottiglia) per il flusso delle informazioni dall azienda al suo pubblico, con dei conseguenti ritardi negli aggiornamenti dei siti (deve soddisfare le richieste di più aziende). In sintesi: effettuare la manutenzione e l'aggiornamento di un sito può rivelarsi un operazione molto complessa ed onerosa, ma è impossibile pensare di non farlo. Il CMS è un ottima soluzione perché è economicamente competitivo e consente di essere autonomi e tempestivi negli aggiornamenti di un sito. Estendere la Gestione del Contenuto Il tempo in cui un azienda creava un sito web solo per avere una presenza su Internet è finito; oggigiorno un sito Internet serve ad informare i clienti, risolvere i loro problemi e cercare di attirare nuove opportunità. La gestione del contenuto del sito deve essere resa disponibile anche a delle persone che non hanno un background tecnico, non sanno né come è composta una pagina HTML né come è strutturato un sito Internet. E non vogliono saperlo. Vogliono solo aggiungere contenuto al sito Web. Bisogna ricorrere ad un software che possa creare un framework (struttura di supporto su cui un software può essere organizzato e progettato) intorno al sito, in modo che, definita una struttura portante ed un design attraente, le informazioni inserite nel sito vengano strutturate in modo automatico, coerente ed intuitivo, senza che la crescita della mole di informazioni porti il sito fuori controllo. Questo software è appunto il CMS. Caratteristiche comuni di ogni CMS Un CMS: Permette di aggiornare il sito senza essere degli esperti di html, php, ecc. Permette di realizzare in modo facilitato l architettura dei dati progettata, attraverso la definizione di diverse sezioni e categorie in cui classificare gli articoli. Permette di separare nettamente i dati dalla loro presentazione. Permette di gestire in modo semplice la pubblicazione delle informazioni e decidere quando esse devono essere tolte dal sito. 5

6 Permette la gestione di siti e portali informativi di ogni dimensione. Integrazione con contenuti provenienti da diverse fonti come database o RSS. Gestione degli utenti, con mailing list e messaggistica. Funzionalità di ricerca dei contenuti che vanno oltre la disposizione in categorie. Tecnicamente un CMS è un applicazione lato server che, appoggiandosi su un database preesistente per lo stoccaggio (sistemazione e conservazione) dei contenuti, permette una generazione dinamica di questi, prelevandoli proprio dal database. L'applicazione è composta da una serie di script che permettono a chiunque, anche digiuno di linguaggi di programmazione, di aggiornare il sito retto dal CMS, inserendo i contenuti direttamente online, fondamentalmente tramite una serie di form (più o meno "avanzate"). Gli script, lavorando sul server, memorizzano le informazioni immesse dall'utente (amministratore o redattore) traducendole in dati digeribili dal server (record del database, altri script) e le restituiscono all'utente finale in modo completamente trasparente (all'utente finale arriva comunque una pagina HTML standard, come avrebbe potuto scriverla in codice il web master). Proprio per questo, in un CMS si distingue di solito la parte front-end (che viene presentata ai navigatori) da quella back-end, che contiene la parte gestionale (amministrazione, opzioni, editing): la sezione applicativa (front end), che l'utente web usa per beneficiare dei contenuti e delle applicazioni del sito; la sezione di amministrazione (back end), che serve all amministratore del sito per organizzare e supervisionare la produzione dei contenuti. La parte back-end: non richiede (almeno per tutte le operazioni quotidiane più comuni) conoscenze maggiori di quelle necessarie a navigare su internet e di saper scrivere con un word-processor; non richiede software proprietari, reti private virtuali, plugins esotici, ma un semplice Browser Internet. In pratica l'amministratore del CMS effettua tutte le operazioni di gestione connettendosi al sito dal proprio terminale, immettendo username e password (per ricevere gli eventuali permessi di gestione) e sfogliando delle pagine composte da form (spuntando, scrivendo, scegliendo opzioni da menù a discesa), che sarebbero i pannelli di interfaccia grafica che permettono il controllo e la gestione del sito (inserire, modificare, eliminare i vari contenuti). I CMS possono essere realizzati tramite programmazione in vari linguaggi web tra cui più comunemente in ASP, PHP,.NET; il tipo di linguaggio adoperato è indifferente a livello di funzionalità. Alcuni linguaggi rendono il CMS multipiattaforma, mentre altri lo rendono utilizzabile solo su piattaforme proprietarie. Tipi di CMS Esistono CMS specializzati, cioè appositamente progettati per un tipo preciso di contenuti (un'enciclopedia on-line, un blog, un forum, una rivista ecc.) e CMS generici, che tendono a essere più flessibili per consentire la pubblicazione di diversi tipi di contenuti. Anche se la tendenza attuale è quella della convergenza (i CMS specializzati fanno sempre più cose e quelli generalisti implementano sempre più servizi specializzati), è possibile ancora fare qualche distinzione. Senza voler fare una tassonomia esaustiva, fra i sistemi specializzati vi sono: LMS (Learning Management Systems): sistemi per la formazione online, orientati alla diffusione di materiale didattico e alla sua erogazione; hanno classi, corsi, calendari, test di apprendimento, fino a esami online. 6

7 piattaforme per i Blog: sistemi dedicati alla creazione di blog e forum; permettono la pubblicazione di un "diario online", con coordinate ormai consolidate: commenti dei lettori, pubblicazione di un flusso "puro" xml (feed) per l'utilizzo degli articoli fuori dal contesto del sito, anche con strumenti diversi dai browser internet, strumenti per la creazione di una rete esterna al blog. sistemi di e-commerce: sistemi dedicati al commercio online di beni e servizi; includono il carrello, l'interfaccia con i più diffusi sistemi di pagamento online, la gestione di articoli, categorie, fornitori, diversi strumenti di marketing, calcolo dei costi. piattaforme per i WIKI: i wiki sono siti la cui peculiarità è la contribuzione (più o meno) orizzontale di tutti gli utenti alla creazione e modifica dei contenuti. L'esempio più conosciuto è senz'altro wikipedia. I web content management system (WCMS) Nonostante i CMS non siano stati concepiti per il Web, oggi il loro utilizzo più diffuso è rivolto alla gestione di siti web, soprattutto se sono di grandi dimensioni e richiedono un frequente aggiornamento. I CMS utilizzati per il Web sono chiamati con l acronimo di WCMS. Una delle applicazioni più utili dei sistemi di WCMS, infatti, è nella gestione dei portali (intranet, extranet, community, siti di e-commerce...), dove vengono impiegati come strumento di pubblicazione, flessibile e multiutente. Ad esempio, gestione di contenuti testuali (notizie, articoli ecc.), link, immagini, liste di discussione, blog, forum, materiale scaricabile. Può essere modificata anche la struttura stessa delle pagine in numero ed organizzazione. I WCMS consentono di definire utenti, gruppi e diritti in modo da poter permettere una distribuzione del lavoro tra più persone e da poter assegnare ad un preciso tipo di utente, identificato da username e password, determinati privilegi. Per esempio, è possibile definire una classe di utenti abilitati esclusivamente all'inserimento delle notizie, mentre si può riservare la scrittura di articoli ad un altro gruppo, e limitare tutti gli altri alla sola consultazione; tutto questo grazie ad un log in tramite username e password che identifica la classe di appartenenza dell utente e in base a quest ultima ne conferisce i vari permessi. La scelta di un software di WCMS è strategica per le aziende che generano la maggior parte di volume d'affari su Internet, ma (in proporzione diversa) è molto importante anche per il libero professionista che vuole utilizzare il medium Internet per farsi conoscere. Vantaggi dei CMS Un CMS permette di costruire e aggiornare un sito dinamico, anche molto grande, senza necessità di scrivere una riga di HTML e senza conoscere linguaggi di programmazione lato server (es. PHP) o progettare un apposito database. L'aspetto esteriore delle pagine può essere personalizzato scegliendo un foglio di stile CSS (il CSS si occupa della presentazione grafica del sito: colori, caratteri, posizione testo e immagini, ecc.) appositamente progettato per un determinato CMS. 7

8 Limiti dei CMS Un CMS è tanto più efficiente quanto più è specializzato. Molti piccoli portali fanno ricorso a CMS (scritti da altri e messi a disposizione gratuitamente o a pagamento) di tipo generico; per quanto un CMS possa essere flessibile, un sito basato su questa struttura in genere presenta un aspetto poco personalizzato se non è possibile intervenire direttamente sul codice sorgente del prodotto per modificarlo. Analogamente i contenuti saranno sempre ancorati a quanto previsto da chi ha progettato il CMS e non alle esigenze di chi pubblica il sito. Quindi i CMS generici hanno sì come vantaggio il fatto di essere molto flessibili e possono essere utilizzati per gestire diversi tipi di contenuti, ma hanno come limite una modesta efficienza, nel senso che non sono improntati su nessun tipo di contenuto specifico, cioè offrono una gestione generica e non specifica a qualsiasi tipo di contenuto (tutti i contenuti vengono gestiti allo stesso modo, non c è distinzione ad esempio tra contenuti testuali e contenuti immagini). Problemi di gestione: derivano dal fatto che chi pubblica o gestisce il sito può usare il CMS per intervenire sui contenuti e sull'aspetto, ma generalmente (caso di chi acquista il software) non è in grado di intervenire direttamente (o far intervenire) sulla struttura del CMS stesso; questo è un limite strettamente connesso al vantaggio primario dei CMS: pubblicare un portale senza doverne progettare la struttura o senza possedere le conoscenze tecniche (o le risorse finanziarie) per uno sviluppo personalizzato. Questi problemi sono risolvibili utilizzando software open source: la possibilità di accedere al codice sorgente del prodotto permette di personalizzare il software sulla base delle proprie esigenze a patto di non avere necessità di apportare modifiche al prodotto adottato. Anche in questo caso, vanno messi in conto i costi per lo sviluppo di moduli personalizzati o funzioni particolari a meno di non possedere in proprio o nella propria struttura aziendale le conoscenze tecniche per intervenire nel codice sorgente (essere un webmaster o avere un webmaster in azienda). I portali di una certa importanza generalmente non fanno mai ricorso a CMS distribuiti, bensì usano programmi e database progettati su misura; ovvero "CMS personalizzati" e dunque necessariamente specializzati. In questo modo la struttura e la presentazione vengono realizzate tenendo presente i contenuti che il sito dovrà ospitare e potranno essere modificati in seguito a nuove esigenze. Non mancano però i casi in cui grandi aziende o società si siano affidate a CMS open source liberi. Perché usare un CMS Con un CMS l'editore del sito (colui che lo amministra e ne gestisce i contenuti) è potenzialmente in grado di affrancarsi, dopo il primo setup, da agenzie e programmatori. Ne guadagna l'editore e ne guadagnano i navigatori: al posto del vecchio sito-depliant, fatto e lasciato lì a ingiallire, i visitatori possono avere notizie fresche, modi di interazione (più o meno spinti) con l'editore o altri utenti, servizi utili come la ricerca o l'e-commerce; insomma quello che, oggi, il navigatore medio si aspetta da qualsiasi sito. 8

9 Funzioni standard di un CMS È molto difficile trovare un sottoinsieme comune (fermo restando che qui si parla dei CMS generalisti), ma si evidenziano di seguito le funzioni standard principali che accomunano i vari CMS: gestione dei contenuti: creazione di sezioni, sottosezioni e pagine; editing della maggior parte dei contenuti con tools WYSIWYG (scrittura trasparente di testo formattato -html- con immagini, link, ecc.); tools: news, faq, calendario; motore di ricerca interno; gestione degli utenti: possibilità di autoiscrizione, permessi su pagine/contenuti, gestione di gruppi; gestione del flusso di pubblicazione: gerarchia di permessi per scrittura, approvazione e messa online agli utenti finali; community: forum, sondaggi, possibilità per gli utenti di gestire i propri dati (sino a pubblicare, su CMS particolarmente orientati al Web 2.0, contenuti propri orizzontalmente rispetto all'editore); sistemi di pubblicazione alternativa: feed RSS, versioni accessibili, eventualmente invio per agli utenti registrati (in realtà queste caratteristiche sono implicite nella struttura fondamentale di ogni CMS, che separa la nuda interfaccia, detta template, dai contenuti veri e propri). Inoltre quasi tutti i CMS, in ogni caso, hanno dei sistemi di plugin (moduli nel caso di Drupal) con cui è possibile estendere le funzionalità base in ogni direzione. Ovviamente, quanto più un CMS è diffuso (o quanto è più ampia la comunità di sviluppatori interessati) tanto è più facile trovare senza fatica la pappa pronta di un plug-in che fa al caso nostro. A titolo di esempio verrà mostrato di seguito un backend di una piattaforma CMS: 9

10 Formato RSS e feed web RSS (acronimo della sua ultima versione 2.0 Really Simple Syndication) è uno dei più popolari formati per la distribuzione di contenuti Web; è basato su linguaggio XML, da cui ha ereditato la semplicità, l'estensibilità e la flessibilità. L'applicazione principale per cui è noto sono i feed RSS. RSS definisce una struttura adatta a contenere un insieme di notizie, ciascuna delle quali sarà composta da vari campi (nome autore, titolo, testo, riassunto,...). Quando si pubblicano delle notizie in formato RSS, la struttura viene aggiornata con i nuovi dati; visto che il formato è predefinito, un qualunque lettore RSS potrà presentare in una maniera omogenea notizie provenienti dalle fonti più diverse. Il feed web è un unità di informazioni formattata secondo specifiche (di genesi XML) stabilite precedentemente. Ciò per rendere interoperabile ed interscambiabile il contenuto fra le diverse applicazioni o piattaforme. Un feed è usato per fornire agli utilizzatori una serie di contenuti aggiornati di frequente. I distributori del contenuto rendono disponibile il feed e consentono agli utenti di iscriversi. L aggregazione consiste in un insieme di feeds accessibili simultaneamente, ed è eseguita da un aggregatore Internet. L uso principale dei feed RSS (detti anche flussi RSS) attualmente è legato alla possibilità di creare informazioni di qualunque tipo che un utente potrà vedere molto comodamente, con l'aiuto di un lettore apposito, nella stessa pagina, nella stessa finestra, senza dover andare ogni volta nel sito principale. Quindi permettono agli utenti di essere aggiornati su nuovi articoli o commenti pubblicati nei siti di interesse senza doverli visitare manualmente uno a uno. Questo è dovuto al fatto che il formato XML è un formato dinamico. Il web feed presenta alcuni vantaggi, se paragonato al ricevere contenuti postati frequentemente tramite Nell'iscrizione ad un feed, gli utenti non rivelano il loro indirizzo di posta elettronica; in questo modo non si espongono alle minacce tipiche dell' lo spam, i virus, il phishing, ed il furto di identità. Se gli utenti vogliono interrompere la ricezione di notizie, non devono inviare richieste del tipo "annulla la sottoscrizione"; basta che rimuovano il feed dal loro aggregatore. Gli RSS sono particolari formati dei dati che permettono di pubblicare in modo standard risorse che sono (o possono essere) aggiornate in modo frequente, quali notizie, blog, audio e video. Un documento RSS (chiamato in gergo feed ) consiste di un elenco delle risorse cui il documento si riferisce, insieme ad un loro sommario e ad altri dati importanti quali la loro data di pubblicazione, quella di eventuale scadenza, l autore ecc. Un feed, dunque, raccoglie documenti simili e li rende disponibili in modo sintetico, automatico e in formato standard. Questo formato può essere letto da molti software diversi (chiamati "lettori RSS", "feed reader" o anche "aggregatori"). Le modalità di utilizzo di un documento RSS più diffuse sono due: - come applicazione a se stante: attraverso appositi software che interpretano un feed (detto anche flusso RSS) permettendo agli utenti di visualizzarne i contenuti; - attraverso un altra applicazione per l accesso a Internet (come un browser, eventualmente mediante un plug-in, o come un applicazione per l accesso e la riproduzione di media digitali, quale ad esempio Apple itunes): integrando i contenuti del feed all'interno di un sito Web. 10

11 Per utilizzare i contenuti in formato RSS è necessario utilizzare un programma ad hoc, chiamato aggregatore RSS.. Copiando con il tasto destro del mouse il collegamento (il link, l'indirizzo URL) della pagina RSS in questione e quindi incollandolo nel programma aggregatore si riesce finalmente a vederne i contenuti in modo chiaro e coerente: una lista di notizie. Cliccando su ciascuna notizia si ha generalmente la possibilità di averne un breve riassunto e un link alla pagina web che la contiene per intero. Dunque il feed RSS offre la possibilità di avere una specie di indice aggiornato dei contenuti, delle novità di un sito. Piuttosto che andare ogni volta su quel sito per vedere se ci sono novità, basterà aprire l'aggregatore RSS e sarà lui stesso a collegarsi al sito ed eventualmente mettere in evidenza che c'è un articolo, una notizia, in generale un contenuto nuovo su quel sito che si può andare a consultare. In pratica l utente può avere sul proprio aggregatore notifica delle novità e degli aggiornamenti avvenuti sui vari siti di suo interesse (attraverso i loro rispettivi feed RSS) e andare effettivamente sul sito solo se la novità è di suo interesse e visionarla per intero. Abituandosi all'uso dei feed RSS, si potrebbe anche non aprire mai il browser web o farlo solo su particolari e selezionate novità. I feed RSS sono facilmente riconoscibili in un sito da icone quali: e. Quando si vuole essere sempre aggiornati dei contenuti di un sito, basta cliccare con il tasto destro del mouse su tali icone (se il sito le offre), copiare il relativo collegamento (si dovrebbe ottenere l'url di un pagina che finisce con.xml) e infine incollarlo nell aggregatore preferito. Alcuni dei principali aggregatori RSS gratuiti sono: Feedreader e Sharpreader (Windows), Sage plug-in (FireFox/ThunderBird), Urss plug-in (Mozilla), Straw Linux (Gnome), Netnewswire Lite (Mac OS X). Un esempio di feed RSS è stato preso della home page del sottostante sito: 11

12 Drupal Drupal è uno strumento software che permette di realizzare una grande varietà di siti WEB. Il nome è lo spelling inglese per la parola tedesca druppel che significa goccia. Più precisamente è una piattaforma di CMS (Content Management System) scritto in PHP che poggia su un database per memorizzare i contenuti; necessita dunque di un software DBMS (Data Base Menagement System) ed il più utilizzato è MySQL. Questo consente all'amministratore del sito ed eventualmente ad altri utenti di inserire ed aggiornare i contenuti senza dover conoscere particolari linguaggi di programmazione (come HTML, PHP, ecc) o far uso di programmi come Dreamweaver, Frontpage, Nvu. Drupal è multipiattaforma, cioè funziona su diversi sistemi operativi, tra cui Windows, Mac OS X, Linux e qualsiasi piattaforma che supporti i web server Apache o IIS. Drupal, come molti CMS contemporanei, offre un'interfaccia di amministrazione con cui l'amministratore può gestire ogni aspetto del sito web, senza il bisogno di possedere conoscenze tecniche particolari di programmazione Web. È possibile cambiare la grafica del sito semplicemente scegliendo un tema grafico tra quelli disponibili o personalizzando il foglio di stile CSS associato. Drupal è un framework con sviluppo modulare,, che consente di partire dal sito base e aggiungere solo le funzionalità necessarie al progetto sistema modulare; cioè è espandibile, scalabile, sicuro, robusto, flessibile e permette anche la possibilità di manutenzione. Le varie caratteristiche e funzionalità del sito possono essere estese installando gli opportuni moduli (nome dato ai plugin di Drupal) aggiuntivi realizzati e distribuiti dalle comunity (drupal.org, druplaitalia.org, drupal.it) o da utenti generici. Risulta così semplice e realizzare un sito multilingue con gallerie fotografiche, calendario degli eventi, forum, blog, e-commerce e molto altro. È possibile anche creare personalmente dei propri moduli; consente quindi di aggiungere numerose funzionalità al sistema base. Drupal è un software open source con licenza GPL (licenza di software libero, essa concede ai licenziatari il permesso di modificare il programma, di copiarlo e di ridistribuirlo con o senza modifiche, gratuitamente o a pagamento), gestito e sviluppato da una comunità molto vasta. Esso quindi può essere scaricato, installato e rilasciato liberamente e gratuitamente, utilizzato sia a scopo personale che commerciale e modificato sulla base delle diverse esigenze. Il sito ufficiale è mentre i riferimenti italiani sono e Piattaforma dinamica per la realizzazione di siti web, Drupal consente a un individuo o a una comunità di utenti di pubblicare, gestire e organizzare una varietà di contenuti, integrando in un unico pacchetto pronto all'uso molte apprezzate funzionalità di gestione contenuti, weblog, 12

13 strumenti di collaborazione e software per comunità di discussione. Consente quindi la realizzazione di siti Web basati sulla logica contenuti/commenti. Attivando e configurando i singoli moduli, un amministratore può disegnare un sito unico, che può essere utilizzato per una combinazione di gestione della conoscenza, per funzioni di pubblicazione sul web e interazione di una community. Le principali funzionalità di Drupal, organizzate per caratteristiche comuni alle piattaforme web, sono: Gestione dei Contenuti: attraverso un'interfaccia semplice e utilizzabile via browser, i membri possono pubblicare contenuti nei diversi moduli disponibili: storie, blog, sondaggi, immagini, forum, scaricamenti, ecc. Gli amministratori possono scegliere tra diversi template di temi (modelli di temi già preesistenti e contenuti nel database) o crearne uno essi stessi per dare al sito un look e uno stile unico. Il sistema di classificazione flessibile consente una classificazione gerarchica, indici incrociati di messaggi e diversi insiemi di categorie per la maggior parte dei tipi di contenuti. L'accesso al contenuto da parte dei vari utenti è controllato attraverso ruoli e rispettivi permessi per ciascun utente definiti dall'amministratore. Le pagine del sito possono mostrare messaggi per tipo di modulo o per categorizzazione del contenuto, con fonti RSS separate, disponibili per ogni tipo pubblicato. Gli utenti possono anche cercare per parola chiave all'interno dell'intero sito. Weblog: una singola installazione può essere configurata come sito weblog personale individuale o per diversi individui. Drupal supporta le API Blogger, fornisce fonti RSS per ogni blog individuale e può essere impostato per lanciare un ping (programma che misura il tempo, impiegato da uno o più pacchetti ICMP a raggiungere un altro computer o server in rete ed a ritornare indietro all origine; è utilizzato soprattutto a verificare la presenza e la raggiungibilità di un altro computer connesso in rete e per misurare le latenze -intervallo di tempo che intercorre tra uno stimolo e la reazione da esso provocata- di trasmissione di rete) alle directory di weblog come blo.gs e weblog.com quando un nuovo contenuto è inserito nella home page. Comunità basate sulla discussione: un sito Drupal può comportarsi come un sito di notizie e/o fare uso di un forum di discussione tradizionale. Degli spazi per i commenti, collegati alla maggior parte dei tipi di contenuto, rendono semplice per i membri discutere nuovi messaggi. Gli amministratori possono determinare se il contenuto e i commenti possono essere inseriti senza approvazione, con l'approvazione di un amministratore o per moderazione della comunità. Grazie all'aggregatore di notizie interno, le comunità possono registrarsi su altri siti e discutere contenuti provenienti da essi. Collaborazione: utilizzato per gestire la realizzazione di Drupal, il modulo progetto si presta per supportare altri progetti di software open source. Il modulo tipo wiki (libro in collaborazione) include il controllo di versione, rendendo semplice per un gruppo creare, revisionare e aggiornare documentazione o altri tipi di testo. Drupal, opera dello sviluppatore Dries Buytaert, è stato concepito con l'intenzione di mettere a disposizione degli utilizzatori un potente e flessibile CMS con cui gestire e catalogare svariate tipologie di contenuti: testi, immagini, documenti, archivi e molto altro. I contenuti potranno essere inseriti e manipolati da più utenti dotati di diversi privilegi, questo CMS integra infatti un avanzato sistema di iscrizione e di autenticazione che permette ad un 13

14 amministratore, vero e proprio "utente di root" della piattaforma, di concedere ai diversi utilizzatori differenti permessi che vanno dalla semplice lettura alla possibilità di editare i contenuti. Quindi Drupal consente agli utenti di registrarsi e autenticarsi e permette agli amministratori di creare livelli d accesso differenziati secondo i ruoli (utente non iscritto, utente iscritto, amministratore del sito, amministratore root, ecc). Drupal è anche uno strumento per la condivisione di contenuti e l'interazione tra autori e utenti e tra utenti fra loro; l'amministratore ha infatti la possibilità di concedere permessi di moderazione/amministrazione a singoli utenti o gruppi di utenti, abilitare moduli ed installare estensioni grazie a cui sarà possibile postare commenti, partecipare alle discussioni di un forum, mettere a disposizione e condividere materiali in formato digitale, ecc. I contenuti possono essere organizzati in base alla tipologia (Story, Page, Image ): questo consente di dividere i contenuti in modo flessibile, rendendone semplice l inserimento e la visualizzazione, e consentendo di realizzare uno schema di navigazione del sito estremamente funzionale. Drupal è un'applicazione completamente Web based, potrà quindi essere utilizzata attraverso un semplice browser. Drupal, come detto precedentemente, è un CMS realizzato in PHP e, pertanto, per funzionare necessita unicamente di: un'interprete per PHP; un Web server (è raccomandato l'utilizzo di Apache ma il CMS funziona egregiamente anche con IIS di Microsoft, Drupal potrà quindi essere installato sia in ambiente Linux che Windows); un DBMS (Database Manager System) MySQL, per la memorizzazione dei dati (è possibile utilizzare anche PostgreSQL mentre MSSQL e Oracle per il momento non sono supportati). Con Drupal possono essere realizzati siti Web pubblici, locali, dinamici e statici. Alcuni esempi di siti realizzabili con Drupal sono blog, forum, gallerie d immagini, e-commerce, multisiti e multilingua. La struttura di Drupal Drupal ha ricevuto elogi da web master, progettisti e programmatori, in parte grazie al suo design modulare che permette al suo livello base, o «core» di fornire solo le funzioni essenziali nella sua configurazione predefinita. Funzioni e capacità di visualizzazione aggiuntive possono estendere il «core» tramite l'installazione di moduli e temi. Moduli Il «core» di Drupal contiene i propri moduli, cioè le funzionalità base del sito. I moduli sviluppati dalla comunità possono comunque essere scaricati e installati in un'area dell'installazione di Drupal non destinata al «core». Il «core» di Drupal è stato progettato con un sistema di «hook» (ganci) o callback (chiamata ad una funzione), che permettono ai moduli sviluppati dalla comunità o da un utente di inserire funzioni nel processo di esecuzione di Drupal. I moduli inclusi nel «core» forniscono le seguenti funzionalità: Inserire, modificare e catalogare i contenuti Eseguire ricerche 14

15 Inserire commenti Partecipare a forum Rispondere a sondaggi Lavorare a progetti di scrittura collaborativa Inserire e visualizzare i profili degli utenti Comunicare tra gli utenti e con gli amministratori del sito Modificare l'aspetto del sito utilizzando temi grafici già sviluppati e pronti all'uso Creare menu su più livelli della struttura di navigazione Localizzare l'interfaccia in diverse lingue, permettendo all'utente di scegliere Fornire feed RSS Aggregare e presentare i contenuti RSS di altri siti Registrare nuovi utenti e gestirne gli account Gestire in modo granulare permessi e ruoli per i singoli utenti o per interi gruppi Usare regole per impedire l'accesso al sito a determinati utenti in base a nome, indirizzo , indirizzo IP Collezionare e presentare statistiche dettagliate del sito Gestire il caching (Il Web caching è la caching di documenti web (pagine HTML, immagini, ecc.) che permette di ridurre l'uso della banda e il tempo di accesso ad un Sito web. Una web cache memorizza copie di documenti richiesti dagli utenti, successive richieste possono essere soddisfatte dalla cache se si presentano certe condizioni) delle pagine ed il throttling (funzionalità che permette di disabilitare alcuni moduli/blocchi in caso di alto traffico del sito) Creare e specificare vari filtri sull'input degli utenti e diversi modelli di contenuto Generare indirizzi semplici da ricordare, permettendo una migliore catalogazione ai motori di ricerca. Inoltre, il sito di Drupal contiene centinaia di moduli gratuiti sviluppati dalla comunità. Alcune delle funzionalità fornite o migliorate dai moduli sviluppati dagli utenti: Sistemi e-commerce Flusso di lavoro redazionale Gallerie fotografiche Gruppi autogestiti Sitemap di Google Gestione di mailing list (liste di posta) Integrazione con CVS (Concurrent Versions System, implementa un sistema di controllo versione: mantiene al corrente di tutto il lavoro e di tutti i cambiamenti in un insieme di file, tipicamente è l'implementazione di un software in via di sviluppo, in progetto, e permette a molti sviluppatori -potenzialmente distanti- di collaborare) Gestire immagini e video Gestire servizi di terze parti Critiche L'installazione di Drupal (e dei suoi moduli) richiede l'accesso a un database ed alcuni permessi avanzati, ad esempio la possibilità di usare comandi SQL (come select, insert, update, delete, create, drop, index, alter e lock tables). Alcuni fornitori di hosting web non offrono queste funzioni. Chi voglia usare Drupal deve accertarsi che il suo server offra queste funzioni prima di installare. 15

16 Come per altri sistemi di gestione dei contenuti, è possibile configurare il database di partenza da riga di comando oppure con phpmyadmin. A partire dalla versione 5.0, è possibile installare Drupal e configurare il database quasi interamente tramite un'interfaccia web. Alcuni considerano più difficile imparare a usare Drupal e installarlo, rispetto ad altri CMS o a semplici piattaforme per blog come WordPress. Drupal 6.0, pubblicato il 13 febbraio 2008 ha una metodologia d installazione più semplice rispetto alle versioni precedenti. Alcuni programmatori criticano Drupal perché non lo considerano sviluppato con la Programmazione Orientata agli Oggetti (Object Oriented Programming), ma programmare Drupal da una prospettiva orientata agli oggetti spiega come i principi della OOP e della programmazione orientata agli aspetti (AOP) siano applicati anche a Drupal. Algoritmo Intuitivamente, un algoritmo si può definire come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine, un insieme di passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito. Quindi con il termine algoritmo si intende, in genere, un metodo per ottenere un certo risultato (risolvere un certo tipo di problema) attraverso un numero finito di passi. Nel senso più ampio della parola, "algoritmo" è anche una ricetta di cucina, o la sezione del libretto delle istruzioni di una lavatrice che spiega come programmare un lavaggio. Di norma, comunque, la parola viene usata in contesti matematici (fin dalle origini) e soprattutto informatici (più recentemente). Un esempio più appropriato di algoritmo potrebbe essere, quindi, il procedimento per il calcolo del massimo comune divisore o del minimo comune multiplo. Da questa definizione si evincono le quattro proprietà fondamentali dell'algoritmo: o la sequenza di istruzioni deve essere finita (finitezza); o la sequenza di istruzioni deve portare ad un risultato (effettività); o le istruzioni devono essere eseguibili materialmente (realizzabilità); o le istruzioni devono essere espresse in modo non ambiguo (non ambiguità). Affermando che i passi costituenti di un algoritmo debbano essere "semplici", si intende soprattutto che essi siano specificati in modo non ambiguo, ovvero immediatamente evidenti a chi sarà chiamato ad applicare l'algoritmo, cioè il suo esecutore. Il concetto di algoritmo Il calcolatore elettronico per risolvere un problema utilizza un algoritmo, cioè un insieme di azioni (o istruzioni) che, eseguite secondo un ordine prestabilito, permettono di trovare il risultato cercato sulla base dei dati in ingresso. Un computer è un rapidissimo esecutore di sequenze di istruzioni (gli algoritmi). Algoritmo: procedura di trasformazione di un insieme di dati iniziali in un insieme di risultati finali mediante una sequenza di istruzioni. Linguaggio di programmazione: linguaggio (insieme di simboli e regole) per rappresentare le istruzioni di un algoritmo e la loro concatenazione. 16

17 Programma: algoritmo scritto in un linguaggio di programmazione al fine di comunicare al calcolatore elettronico le azioni da eseguire, cioè esso è memorizzato su disco e attende di essere caricato in RAM per poi essere eseguito (entità passiva, statica). Processo: programma in esecuzione sul computer, cioè è caricato in RAM e la CPU esegue una ad una l insieme di istruzioni del programma (entità attiva, dinamica). In informatica, con il termine algoritmo si intende un metodo per la soluzione di un problema adatto a essere implementato sotto forma di programma. In fase di progettazione di un software l algoritmo consiste nella soluzione di un problema, che si è analizzato, seguendo una serie di operazioni sequenziali rappresentate sotto forma di diagramma a blocchi o di pseudocodifica. Esistono cinque tipi di blocchi elementari: La combinazione di questi blocchi elementari serve per rappresentare graficamente un algoritmo, e questo può essere fatto solo se: - viene usato un numero finito di blocchi; - lo schema inizia con un blocco iniziale e termina con un blocco finale; - ogni blocco soddisfa delle condizioni di validità. Tale sequenza di operazioni deve essere applicabile ad ogni linguaggio di programmazione. Un programma può essere visto come un insieme di algoritmi diversi che interagiscono per risolvere problemi complessi. 17

18 Processo Concetti generali di un processo Ecco alcuni concetti e definizioni di base che caratterizzano lo studio della teoria e degli algoritmi della schedulazione real-time. Processo: Per processo o task si intende una sequenza di istruzioni che, in assenza di altre attività, viene eseguita dal processore in modo continuativo fino al suo completamento. La situazione di riferimento per un ambiente real-time è quella in cui sono presenti numerosi processi, ciascuno con particolari esigenze di schedulazione. In questo caso è necessario individuare una strategia di assegnazione della CPU che sequenzializzi l uso della risorsa fisica secondo un criterio stabilito a priori. Un processo da quando viene caricato in RAM e durante tutto il tempo dell esecuzione può trovarsi in uno dei 5 stati seguenti: 1) new (nuovo o inizio): il processo è stato appena creato, più precisamente è stato creato sulla RAM il suo descrittore di processo (struttura dati contenente le informazioni sul processo); 2) ready (pronto): il processo è pronto per essere eseguito dalla CPU, cioè tutte le sue istruzioni sono state caricate in RAM ed ha tutto ciò che gli serve per l esecuzione tranne la disponibilità della CPU; 3) running (in esecuzione): il processo è sulla CPU, ovvero la CPU sta eseguendo le istruzioni di quel processo; 4) waiting (bloccato o in attesa): il processo è in attesa di un evento, cioè non può essere pronto perché sta aspettando che si verifichi una certa condizione (di solito legata ai dispositivi I/O, ma può dipendere anche da altri motivi); 5) terminated (in terminazione): il processo sta per terminare, cioè il processo rimane in questo stato da quando viene dato il comando di terminazione fino a quando il processo non scompare dalla memoria del Sistema Operativo. La seguente illustrazione mostra il ciclo di vita di un processo: 18

19 Definiamo attivo un processo potenzialmente in grado di eseguire su un processore (CPU). Un processo attivo in attesa di un processore (occupato nell esecuzione di un altro processo) viene definito pronto e accodato in una coda di attesa detta ready queue (coda pronti). Un processo che correntemente utilizza il processore viene indicato come processo in esecuzione. L insieme delle regole che determinano l esecuzione di un processo pronto presente nella ready queue costituisce l algoritmo di schedulazione. Solitamente le regole di schedulazione sono applicate all ingresso della coda di attesa in modo da ottenere una ready queue già ordinata secondo la precedenza di esecuzione, in altre parole, l ordinamento della coda viene realizzato in modo che il processo da eseguire sia nella prima posizione di uscita. In alcuni sistemi è prevista la possibilità di interrompere in qualsiasi istante il processo in esecuzione per riportarlo nella coda pronti, e dare la possibilità ad un processo a priorità superiore di disporre del processore. L operazione di sospensione dell esecuzione e reinserimento nella ready queue di un processo è nota con il termine preemption (prelazione o revoca della CPU ). Si osservi che l assegnazione effettiva del processore al processo pronto che viene schedulato è indicata con il termine dispatching, e viene effettuata dal sistema operativo alla terminazione di un task o dopo un operazione di preemption. Quindi in definitiva possiamo dire che il cambio di processo, che utilizza la CPU, avviene quando: o il processo corrente viene prelazionato da un altro di maggiore priorità, ritornando nella ready queue, passa cioè dallo stato running a quello ready; o il processo corrente si blocca su qualche condizione, passa dallo stato running allo stato waiting (deve verificarsi prima una certa condizione affinché il processo ritorni allo stato ready); o il processo corrente termina il suo round, cioè termina il tempo di utilizzo (continuo) della CPU che gli è stato riservato, passa dallo stato running allo stato ready; o il processo corrente termina tutte le istruzioni di cui è composto, cioè passa dallo stato running allo stato terminated. La figura seguente illustra sinteticamente l architettura di uno schedulatore: Schedulazione fattibile: Una schedulazione è detta fattibile se esiste un assegnazione di task al processore tale che tutti i task siano completati rispettando un insieme di vincoli prefissati. Insieme di task schedulabile: Un insieme di task (task-set) è detto schedulabile se per esso esiste una schedulazione fattibile. 19

20 Vincoli sui processi La definizione di schedulazione fattibile richiede che l esecuzione dei task avvenga rispettando i vincoli a cui questi sono sottoposti. In generale esistono tre categorie di vincoli sui processi: vincoli temporali, vincoli di precedenza, e vincoli su risorse condivise. 1) Vincoli temporali Nei sistemi real time i task sono soggetti a vincoli temporali che devono essere rispettati perché l elaborazione sia valida. Un tipico esempio di vincolo temporale è la deadline di un processo, che rappresenta l istante temporale entro cui il processo deve terminare la propria esecuzione e produrre un risultato. Il concetto di deadline è centrale nella teoria dello scheduling real time, tanto da determinare una classificazione di base dei processi real time relativamente alle conseguenze di una mancata deadline. In generale, i task di un sistema real-time possono essere di 2 tipi: - Processo hard real time: Un processo real-time è di tipo hard se il mancato rispetto della propria deadline (cioè il task non finisce di computare totalmente entro la sua deadline) comporta un danno irreparabile sul sistema, impedendone il corretto funzionamento. - Processo soft real time: Un processo real-time è di tipo soft se il mancato rispetto della propria deadline comporta un danno non irreparabile al sistema, quindi non compromette il corretto funzionamento del sistema. Il superamento della deadline produce un degrado delle prestazioni proporzionale al tempo di superamento della deadline. Si osservi che un processo soft real-time non è vincolato da una deadline rigida e può essere completato anche oltre il termine da questa indicato. Sostanzialmente questa distinzione si traduce nella diversa quantificazione dei costi di una possibile inesattezza temporale del sistema. Un esempio di task soft real-time può essere un riproduttore DVD, in cui il mancato rispetto dei vincoli si traduce in un degrado della qualità del filmato, ma non pregiudica il proseguimento della riproduzione; mentre un task hard real-time può essere il controllore della temperatura del nocciolo di una centrale nucleare, dove il mancato rispetto dei vincoli temporali può provocare un evidente disastro. I parametri principali che caratterizzano il comportamento temporale di un processo sono i seguenti: tempo di arrivo (a): istante di tempo in cui il task arriva nella ready queue e quindi diventa pronto per l esecuzione; tempo di computazione (C): tempo necessario al processore per eseguire completamente un task senza interruzioni, oppure tempo che il task deve usufruire della CPU affinché esso termini tutte le sue istruzioni; deadline (d): istante di tempo entro cui il task deve essere completato; istante di inizio (s): istante di tempo in cui il task va in esecuzione per la prima volta; istante di fine (f): istante di tempo in cui il task termina la sua esecuzione; latenza (L): rappresenta il ritardo di completamento del task rispetto alla deadline ed è così definita: L = f d (si osservi che un task che completa la propria esecuzione prima della deadline è caratterizzato da latenza negativa). Il significato e le relazioni tra i parametri sopra definiti sono chiariti nella seguente figura, la quale illustra i parametri temporali caratteristici di un processo: 20

21 Un altra possibile caratterizzazione temporale dei processi è quella che riguarda la regolarità delle attivazioni dei processi stessi. Da questo punto di vista si può fare la distinzione fra processi periodici e processi aperiodici. Processo periodico: Un processo è detto periodico se è caratterizzato da una sequenza infinita di attività identiche, dette istanze, che si presentano con cadenza regolare. Il parametro T rappresenta il periodo del processo (cioè il lasso di tempo che intercorre tra due esecuzioni di un task periodico), ma un processo periodico è caratterizzato anche da un tempo di computazione C e da una deadline D (relativa al periodo); si suppone che i parametri T, C, e D siano costanti per ogni istanza. Quindi un task periodico si ripresenta nella ready queue ad intervalli di tempo regolari e presenta sempre lo stesso tempo di computazione, la stessa deadline e lo stesso periodo. La seguente figura mostra un esempio di processo periodico: Processo aperiodico: Un processo è detto aperiodico se è costituito da una sequenza di attività identiche, ciascuna delle quali caratterizzata da un tempo di arrivo, un tempo di calcolo, e una deadline ma che si presentano ad intervalli irregolari, quindi non prevedibili a priori. Nei sistemi operativi nei quali non esiste un meccanismo di gestione esplicita dei vincoli temporali è possibile comunque gestire tali vincoli trasformandoli in priorità. Intuitivamente, un task con caratteristiche temporali molto stringenti si vedrà assegnata una priorità maggiore di quella assegnata a un task con vincoli temporali meno critici. Con questo approccio è possibile utilizzare uno schedulatore su base prioritaria per gestire i vincoli temporali dei processi. La seguente illustrazione mostra uno schema concettuale di uno scheduler che gestisce vincoli temporali: 21

22 2) Vincoli di precedenza Esistono applicazioni nelle quali i processi non possono essere eseguiti in ordine arbitrario. In questi casi i processi presenti nel sistema sono legati tra loro da relazioni di precedenza che sono rappresentabili attraverso un grafo orientato e aciclico, detto grafo di precedenza. - Si dice che il task J1 precede il task J2 (J1<J2) se esiste un cammino sul grafo di precedenza che parte dal nodo J1 e arriva al nodo J2. - Si dice che J1 è immediato predecessore di J2 (J1 J2) se esiste nel grafo di precedenza un arco diretto uscente dal nodo J1 ed entrante nel nodo J2. Nella Figura è illustrato un grafo di precedenza. Si osservi che J1 è l unico processo che può essere eseguito immediatamente e i processi J2, J3 e J4 sono vincolati ad essere eseguiti solo dopo la sua terminazione; J5 può essere eseguito solo dopo il completamento dei task J2 e J3. Di seguito viene mostrato un esempio di grafo di precedenza tra processi: 22

23 3) Vincoli su risorse Per risorsa intendiamo una qualunque entità software che può essere utilizzata da uno o più processi durante l esecuzione. Tipicamente una risorsa può essere una struttura dati, una zona di memoria, o una porzione di codice. Una risorsa che può essere utilizzata da più processi è detta condivisa (es. RAM, periferiche di I/O), mentre se essa è riservata solo ad un particolare processo viene detta dedicata. Le risorse condivise che non ammettono accessi contemporanei da parte di più di un processo, allo scopo ad esempio di mantenere la coerenza delle strutture dati interne, sono dette risorse mutuamente esclusive (es. CPU); gli accessi a queste risorse devono essere serializzati per garantire il corretto funzionamento del sistema (gestiscono un solo processo alla volta). Per garantire un accesso mutuamente esclusivo alle risorse, il sistema operativo necessita di un meccanismo di sincronizzazione degli accessi. Quando si parla di vincoli su risorse, si intende riferirsi a vincoli di mutua esclusione su risorse condivise. Il rispetto di un vincolo su risorsa è ottenuto sincronizzando i processi che utilizzano tale risorsa facendo in modo che l accesso ad essa sia mutuamente esclusivo. I vincoli su risorse hanno importanti conseguenze sulla schedulazione dei processi perché la CPU, essendo una risorsa mutuamente esclusiva, può gestire un solo task alla volta e quindi se la CPU è già occupata da un task gli altri task, eventualmente presenti nella ready queue, per essere eseguiti devono aspettare che la CPU si liberi (a meno di eventuali priorità se l algoritmo di scheduling è con prelazione). Processo bloccato: Un processo è detto bloccato (waiting) se è in attesa di una risorsa condivisa occupata da un altro processo. I processi bloccati sono accodati in una coda associata al meccanismo di protezione della risorsa condivisa. Il sistema operativo prevede uno stato apposito per la sospensione dei processi bloccati su risorse. Un processo in esecuzione entra nello stato waiting se prova ad accedere ad una risorsa occupata, e resta in questo stato fino a quando la risorsa non viene liberata dal processo che la stava utilizzando precedentemente. Un processo bloccato esce dallo stato waiting quando la risorsa occupata viene liberata e quindi può e va ad utilizzarla esso stesso. Scheduler Lo scheduler (da to schedule letteralmente "mettere in lista", ovvero "pianificare") è un componente fondamentale dei sistemi operativi multitasking (più processi in RAM contemporanemente) in grado di far eseguire, al processore di un computer, attraverso l'omonima operazione di scheduling, più processi (task) concorrentemente attraverso varie politiche di scheduling. Esso rappresenta dunque il gestore del multitasking attraverso criteri di assegnazione delle risorse di elaborazione ai vari processi e implementati attraverso vari tipi di algoritmi di scheduling. Generalmente, infatti, computer con un processore sono in grado di eseguire un processo per volta; quindi per poter far convivere più task è necessario usare uno scheduler. Nel dettaglio lo scheduler si occupa di fare avanzare un processo interrompendone temporaneamente un altro, realizzando così quello che è chiamato cambio di contesto (context switch) all'interno del ciclo del 23

24 processore. Quindi lo scheduler decide i tempi e i modi con cui i processi possono usare la CPU in base a vari algoritmi di scheduling che permettono di scegliere nella maniera più efficiente possibile a quale task assegnare la CPU. Scheduling della CPU Lo scheduling è un'operazione molto importante per il corretto ed efficiente funzionamento del calcolatore. Infatti, non solo consente di eseguire più processi contemporaneamente, ma consente anche di migliorare l'utilizzo del processore. Ad esempio, quando è necessario eseguire un'operazione di I/O, il processore non può proseguire l'elaborazione del processo attualmente in esecuzione fino al completamento della stessa. Dato che le operazioni di I/O sono molto più lente del processore sarebbe un inutile spreco di risorse se il processore rimanesse bloccato fino al completamento delle stesse. Per evitare questo, le operazioni di I/O vengono gestite unicamente dal Sistema Operativo che, nel frattempo, assegna l'uso del processore ad un altro processo. In questo modo si massimizza l'uso delle risorse del sistema. È importante la distinzione tra scheduling con diritto di prelazione (scheduling preemptive) e scheduling senza diritto di prelazione (scheduling non-preemptive o scheduling cooperative). Nel primo caso lo scheduler può sottrarre il possesso del processore al processo anche quando questo potrebbe proseguire nella propria esecuzione. Nel secondo caso, invece, lo scheduler deve attendere che il processo termini o che cambi il suo stato da quello di esecuzione a quello di attesa o di pronto, a seguito, ad esempio, di una richiesta di I/O oppure a causa di un segnale di interruzione (interrupt). Esistono vari algoritmi di scheduling che tengono conto di varie esigenze e che possono essere più indicati in alcuni contesti piuttosto che in altri. La scelta dell'algoritmo da usare dipende da cinque principali criteri: Utilizzo del processore: percentuale di tempo in cui la CPU esegue le istruzioni dei processi rispetto al tempo in cui essa svolge le operazioni del sistema operativo o rimane inutilizzata; la CPU deve essere attiva il più possibile, ovvero devono essere ridotti al minimo i possibili tempi morti, quindi questo parametro è da massimizzare; Produttività: il numero di processi completati in una determinata quantità di tempo, quindi questo parametro è da massimizzare; Tempo di completamento: il tempo che intercorre da quando il processo viene creato (new) a quando viene completata la sua esecuzione (terminated), quindi è da minimizzare; Tempo d'attesa: il tempo in cui un processo pronto per l'esecuzione (ready) rimane in attesa, nella ready queue, della CPU, quindi è da minimizzare; Tempo di risposta: il tempo che trascorre tra la sottomissione del processo e l'ottenimento della prima risposta, quindi è da minimizzare. Gli algoritmi di scheduling incidono fortemente sul tempo di attesa e solo parzialmente sugli altri parametri. Quindi essi vengono valutati in base al tempo medio di attesa. 24

25 Obiettivi dello scheduling Un algoritmo di scheduling si pone i seguenti obiettivi: Equità: processi dello stesso tipo devono avere trattamenti simili; Bilanciamento: tutte le parti del sistema devono essere sfruttate. Inoltre bisogna effettuare un distinguo tra i sistemi batch e i sistemi interattivi. Nei primi la produttività, ossia la massimizzazione del numero di job completati deve essere massimizzata e il tempo di completamento deve essere minimizzato. Nei secondi il tempo di risposta deve essere il minimo possibile per dare l'idea di continuità all'utente e la proporzionalità deve essere rispettata, ossia il tempo di risposta deve essere proporzionale alla complessità dell'azione. Problema generale dello scheduling Dato un task-set, ovvero un insieme di n task J = {J1, J2,, Jn}, di cui siano noti i vincoli temporali, il grafo dei vincoli di precedenza e le modalità di utilizzo delle risorse condivise, il problema generale dello scheduling consiste nella determinazione di una schedulazione fattibile dell insieme J. In altre parole, la risoluzione del problema generale dello scheduling deve individuare una sequenza di assegnazione dei task al processore tale che: o tutti i task terminino la propria elaborazione entro la deadline; o i vincoli di precedenza espressi dal grafo di precedenza siano rispettati; o l accesso alle risorse mutuamente esclusive sia correttamente sequenzializzato. Il problema dello scheduling nella sua forma più generale sopra enunciata è computazionalmente intrattabile in tempo polinomiale rispetto al numero di processi; cioè non esiste alcun algoritmo con complessità polinomiale di grado n capace di individuare una schedulazione fattibile. Al fine di individuare algoritmi con complessità polinomiale si introducono delle ipotesi semplificative rispetto al problema generale dello scheduling. Se si considerano, ad esempio, casi nei quali i vincoli di precedenza sono assenti, oppure è ammissibile avere una preemptive, oppure non sono presenti vincoli sulle risorse, il problema della schedulazione viene notevolmente semplificato e può essere risolto con algoritmi noti. Classificazione degli algoritmi di scheduling Di seguito viene riportata una sintetica classificazione dei possibili algoritmi di scheduling. Si noti che le tipologie di algoritmi considerate sono tra loro ortogonali. Uniprocessore: se il calcolatore presenta un unica CPU; Multiprocessore: se il calcolatore presenta due o più CPU; Preemptive: lo scheduler ha la possibilità di sospendere l esecuzione di un task che utilizza la CPU e di assegnare quest ultima ad un altro task con priorità maggiore; Non preemptive: lo scheduler non può togliere la CPU ad un task per assegnarla ad un altro task (anche se quest ultimo ha priorità maggiore), la CPU può essere assegnata solo quando il task che la stava utilizzando ha terminato (o tutte le sue istruzioni o il round di tempo previsto). 25

26 Statici: le decisioni dello scheduler sono basate su parametri fissi assegnati ai task prima della loro attivazione; Dinamici: le decisioni dello scheduler sono basate su parametri assegnati ai task che possono variare durante l evoluzione del sistema; Off line: lo scheduling è effettuato prima dell attivazione dei task (all attivazione del taskset); On line: lo scheduling è effettuato ad ogni attivazione o termine di un task; Best effort: questi algoritmi massimizzano o minimizzano (a seconda dei casi) gli indici di prestazioni ma non garantiscono la fattibilità, usati per il soft real-time; Guaranteed: questi algoritmi garantiscono la fattibilità ponendosi nell ottica dello scenario worst case (caso peggiore, cioè tutti i task hanno come tempo di arrivo 0 -arrivano tutti contemporaneamente-) ma non si curano degli indici di prestazione, usati per l hard realtime; Clairvoyant: lo scheduling prevede l arrivo di un nuovo task; Optimal: lo scheduling minimizza una qualche funzione di costo; La prima classificazione riguarda semplicemente il tipo di sistema di elaborazione considerato e in particolare la presenza di uno o più processori. Gli algoritmi di schedulazione preemptive prevedono la possibilità di sospendere in qualsiasi istante l esecuzione di un processo a favore di un altro; nel caso in cui non è prevista la preemption ogni decisione riguardante la schedulazione viene presa a seguito della autosospensione di un task o del suo completamento. Gli algoritmi statici utilizzano una regola di decisione che si basa su parametri fissi, assegnati ai processi una volta per tutte prima della loro attivazione; nel caso dinamico al contrario, i parametri utilizzati dalla regola di decisione sono soggetti a variazioni durante la vita del processo. La classificazione off line/on line distingue tra algoritmi che realizzano la schedulazione prima dell attivazione dei processi, sulla base di informazioni note a priori (off line), e algoritmi che operano durante il run time ricalcolando l ordinamento dei task a ogni nuova attivazione. Infine per algoritmo best effort si intende un algoritmo che massimizza (o minimizza) un indice di prestazione definito globalmente sull insieme dei task. Adottando una strategia di questo tipo si privilegiano le prestazioni medie del sistema e sono possibili violazioni di vincoli temporali relativi a qualche task. Gli algoritmi guaranteed assicurano il rispetto dei vincoli temporali di ogni singolo task utilizzando un test di garanzia eseguito sull intero insieme dei task ogni volta che un nuovo processo entra nel sistema. 26

27 Sistema operativo real-time Un sistema operativo real-time o in tempo reale (abbreviato in RTOS) è un sistema operativo specializzato per il supporto di applicazioni software real-time. Questi sistemi vengono utilizzati tipicamente in ambito industriale (controllo di processo, pilotaggio di robot, trasferimento dati nelle telecomunicazioni) o comunque dove sia necessario ottenere una risposta dal sistema entro un tempo prefissato. Un sistema operativo real-time non deve essere necessariamente veloce: non è importante l'intervallo di tempo in cui il sistema operativo/applicativo deve reagire; l'importante è che risponda entro un tempo massimo pre-determinato. In altre parole il sistema deve essere prevedibile. In pratica un sistema real-time deve garantire che una elaborazione (o task) termini entro un dato vincolo temporale o scadenza (detta in gergo deadline). Per garantire questo è richiesto che la schedulazione delle operazioni sia fattibile. Il concetto di fattibilità di schedulazione è alla base della teoria dei sistemi real-time ed è quello che ci permette di dire se un insieme di task sia eseguibile o meno in funzione dei vincoli temporali dati (periodo del task -se il task è periodico-, deadline, tempo di computazione del task sulla CPU, tempo di arrivo del task nella ready queue). Sistemi Hard real-time e soft real-time I sistemi real-time si possono dividere quindi in due categorie: I sistemi "hard" sono quelli che possono garantire la fattibilità di schedulazione di un insieme di task hard e soft real-time. I sistemi "soft" sono quelli che possono garantire la fattibilità di schedulazione di un insieme di soli task soft real-time (meno rigidi dei sistemi hard real-time). Caratteristiche di un sistema real-time Un sistema real-time dovrebbe possedere le seguenti caratteristiche: Schedulazione ottima: tutti i task sono noti a priori così come i vincoli temporali; dovrebbe essere possibile, dunque, avere uno schedulatore che implementi una schedulazione che minimizzi al massimo il costo delle operazioni,cioè tutti i task, appartenenti al task-set, dovrebbero terminare regolarmente senza andare i overflow e il tempo di occupazione della CPU necessario affinché tutto il task-set termini dovrebbe essere il minore possibile. Condivisione delle risorse: i task sono entità separate ma che concorrono ad uno stesso scopo, pertanto non è necessario avere spazi di indirizzamento separati. Garanzia di esecuzione: tutti i task di tipo hard real-time devono terminare entro le proprie deadline quindi, nel caso in cui arrivi un nuovo task o un task non possa completare entro la deadline, una notifica anticipata del sistema può essere utilizzata per impedire l'esecuzione del nuovo task o di recuperare l'esecuzione del task che sta per sfondare. Prevedibilità delle chiamate di sistema: il sistema deve essere in grado di valutare i tempi di calcolo di ogni task per determinare la schedulazione fattibile; quindi ogni chiamata di sistema deve avere un tempo di esecuzione massimo ben definito in modo da non introdurre ritardi indefiniti. 27

28 I fattori che minano la prevedibilità I prodotti delle famiglie Windows e Unix non soddisfano le caratteristiche tipiche di un sistema real-time: ad esempio, pur gestendo l'esecuzione di più processi con pre-rilascio, non è possibile prevedere in alcun modo quale sarà il tempo di esecuzione di un singolo processo. Inoltre, l'utilizzo di hard disk per la conservazione dei dati, dispositivi USB o altri dispositivi che introducono forti latenze di esecuzione da parte della CPU, rende impossibile stabilire con certezza quanto tempo sarà necessario per reperire l'informazione utile alla corretta esecuzione del codice. Ci sono diversi fattori che causano la non prevedibilità nella risposta del sistema operativo. Tra di essi, i principali sono i seguenti: Il DMA: può rubare il bus (il bus è unico) alla CPU ritardando l'esecuzione di un task critico. In un sistema real-time si preferisce quindi disattivarlo o usarlo in modalità timeslice (fetta di tempo) dove si assegna in maniera costante e fissa il bus al DMA anche se non ci sono operazioni da fare (un intervallo di tempo il bus è utilizzabile dal DMA un altro intervallo no). DMA (Direct Memory Access, «accesso diretto alla memoria») è un meccanismo che permette ad alcuni sottosistemi hardware di un computer (periferiche) di accedere direttamente alla memoria di sistema per scambiarsi dati, oppure leggere o scrivere, senza chiamare in causa la CPU per ogni byte trasferito tramite il meccanismo usuale dell'interrupt (con l interrupt ogni operazione prima di essere eseguita deve essere comunicata alla CPU, la quale, interrompendo l operazione che già stava eseguendo, governa poi l esecuzione della nuova operazione se questa ha priorità maggiore di quella già in esecuzione) e la successiva richiesta di operazione desiderata, ma generando un singolo interrupt per blocco trasferito (la CPU viene interrotta solo a termine dell operazione eseguita direttamente dalla periferica senza l ausilio della CPU). Il DMA, tramite il rispettivo elemento hardware, ha quindi il compito di gestire i dati passanti nel bus permettendo a periferiche che lavorano a velocità diverse di comunicare senza assoggettare la CPU a un enorme carico di interrupt che ne interromperebbero continuamente il rispettivo ciclo di elaborazione. La cache: può causare non prevedibilità poiché esistono casi in cui essa fallisce e può causare ritardi nell accesso alla memoria da parte della CPU. Dovendo considerare quindi il caso peggiore si preferisce non usarla affatto. Meccanismi di gestione della memoria (tecniche di allocazione dei dati nella RAM): queste tecniche non devono introdurre ritardi non prevedibili durante l'esecuzione di task critici, ad esempio la paginazione può causare dei page fault (non viene trovata nella RAM la pagina di memoria contenente l istruzione da eseguire in quel preciso momento) intollerabili per un sistema hard real-time. Tipicamente si usa la segmentazione o la partizione statica della memoria. Le interruzioni: sono generate da dispositivi periferici quando hanno qualche informazione da scambiare con la CPU. Queste interruzioni durante l'esecuzione di un task critico generano ritardi non prevedibili e quindi si preferisce disattivarle. I sistemi di power management: sono meccanismi hardware che possono rallentare la CPU o far eseguire ad essa del codice utile a dissipare minor energia. È chiaro che in un sistema real-time è importante non sfondare una deadline piuttosto che consumare poca energia, quindi questi meccanismi vengono disattivati. 28

29 Scheduling Real-time dei task periodici I task periodici vengono indicati con il simbolo τ ed hanno i seguenti parametri: Tempo di computazione C: tempo necessario affinché il task termini tutte le sue istruzioni; Deadline relativa D: vincolo temporale entro il quale il task dovrebbe finire la computazione; questo è un valore fisso del task che si ripete sempre ad ogni periodo; Deadline assoluta d: tempo rimanente al task affinché esso finisca la sua computazione; questo è un valore che varia da periodo a periodo in base al passare del tempo (più passa il tempo, più mi avvicino alla deadline relativa D e più la deadline assoluta d diminuisce); Periodo T: tempo che intercorre tra due esecuzioni di un task periodico, una volta terminato un periodo il task si ripresenta con gli stessi valori dei parametri del periodo precedente. Tempo di arrivo a: istante di tempo in cui il task arriva nella ready queue e quindi diventa pronto per l esecuzione; Istante iniziale s: istante di tempo in cui il task va in esecuzione per la prima volta; Istante finale f: istante di tempo in cui il task termina la sua esecuzione; Latenza L: rappresenta il ritardo di completamento del task rispetto alla deadline ed è così definita: L = f d L immagine seguente mostra i parametri principali di un task periodico: 29

30 Tra i vari algoritmi di scheduling applicati ai task periodici τ vi sono: 1) EDF (Earliest Deadline First) Questo algoritmo ordina i task in base alla deadline d, nel senso che ad ogni istante la CPU è assegnata al task con la deadline assoluta d più vicina. In pratica, privilegia quei task aventi la deadline d più breve in quell istante di tempo. In sintesi la priorità è inversamente proporzionale alla deadline assoluta d. Attenzione: per deadline assoluta d non si intende il valore statico che ogni preciso task ha in ciascun periodo (cioè il valore proprio della deadline D di quel task che ha in ogni periodo T), ma il valore dinamico che assume la deadline d del task in quell istante di tempo (più aumenta il tempo più il valore della deadline d diminuisce, questo riferito ad un solo periodo T); cioè all inizio di un periodo T il task ha una precisa deadline D relativa (questo valore è fisso per il task i-esimo ed è uguale anche nei periodi successivi di questo) ma durante il periodo questa deadline d diminuisce al passare del tempo (all interno del periodo il valore della deadline d diminuisce). Dato quindi un task-set, il task a cui verrà assegnata per prima la CPU sarà quello avente la deadline assoluta d minore rispetto agli altri, e così via per i task successivi; in sintesi: il task con la deadline assoluta d minore ha maggiore priorità. Questo algoritmo è inoltre: Con prelazione: se so ha un task che in un preciso istante di tempo ha una deadline assoluta d minore rispetto al task che sta usando la CPU; a quest ultimo gli viene tolta la CPU per assegnarla al task con maggiore priorità. Dinamico: le decisioni dello scheduler sono basate sul valore dinamico che le varie deadline assumono in ogni istante di tempo, quindi la priorità di ogni task varia col variare del tempo (la deadline assoluta d non è un parametro fisso). 2)RM (Rate Monotonic) Questo algoritmo ordina i task in base al periodo, nel senso che ad ogni istante la CPU è assegnata al task con il periodo T più breve. Ad ogni task è associata una priorità fissa proporzionale alla sua frequenza (rate), ovvero più è elevata la frequenza del task e più esso avrà una priorità elevata. Siccome la frequenza è l inverso del periodo (f=t^-1) quanto detto si può riscrivere in un altro modo: più è piccolo il periodo del task è più esso avrà una priorità elevata. In pratica privilegia quei task aventi il periodo più breve in quel preciso istante di tempo. In sintesi la priorità è inversamente proporzionale al periodo T. Attenzione: per periodo T si intende il valore statico T di ogni preciso task (essendo il task periodico ha un preciso periodo T). Dato quindi un task-set, il task a cui verrà assegnata per prima la CPU sarà quello avente il periodo T minore rispetto agli altri, e così via per i task successivi; in sintesi: il task con il periodo T minore ha maggiore priorità. 30

31 Questo algoritmo è inoltre: Con prelazione: se si ha un task che in un preciso istante di tempo ha il periodo T minore rispetto al task che sta usando la CPU; a quest ultimo gli viene tolta la CPU per assegnarla al task con maggiore priorità. Statico: le decisioni dello scheduler sono basate sul valore fisso dei vari periodi T di ogni task che hanno in ogni istante di tempo, quindi la priorità di ogni task è definita a priori e non varia col variare del tempo per tutta la durata dell applicazione (il periodo T è un parametro fisso). 31

32 SPECIFICHE DI PROGETTO 32

33 Il mio progetto ha come obiettivo la creazione di un modulo per Drupal che, implementando degli algoritmi di scheduling real-time, mostri agli utenti della piattaforma, dopo che essi hanno inserito i vari parametri richiesti per i task, il risultato dell elaborazione di questi algoritmi sotto una forma grafica rappresentata dal diagramma di Gantt. Quindi il mio ruolo in questo progetto è quello del web master perché vado io stesso a creare un modulo utilizzando i linguaggi di programmazione e successivamente mettendo lo stesso modulo a disposizione degli utenti che accedono alla piattaforma. Il modulo che vado a creare può essere tranquillamente aggiunto come ogni altro modulo di Drupal e quindi ogni utente, una volta che lo ha scaricato ed installato correttamente, può farne uso. Inoltre, esso ha un interfaccia grafica semplice quindi è rivolto ad ogni tipologia di utenza. WERTHER è l'acronimo di WEb Real Time HElper Resolver, tradotto in italiano web realtime aiutante risolutore. Scopo del modulo è quello di fornire un supporto per la didattica degli algoritmi di scheduling in tempo reale. Tale supporto si manifesterà in modo chiaro ed evidente nella produzione a schermo di un diagramma di Gantt che illustri la schedulazione di un task-set definito in maniera interattiva dall'utente. L'interfaccia principale del modulo sarà costituita da una pagina dinamica. Inizialmente in tale pagina sarà visualizzata, in alto a sinistra, un riquadro con riferimento al primo task in cui sarà possibile inserire i parametri fondamentali dei task da schedulare. Tali parametri sono WCET o tempo di computazione (C), deadline relativa (D) e periodo (T). I parametri di ciascun task saranno inseriti dall utente in dei riquadri, con i nomi di essi riferiti al relativo task; ogni riquadro dovrà contenere i parametri relativi ad un solo task, quindi in pratica saranno visualizzati tanti riquadri quanti sono il numero dei task che l utente sceglierà di elaborare. Inizialmente, il form sarà costituito da un solo riquadro, riferito al primo task; l'utente potrà aumentare il numero di task da schedulare (e dunque i riquadri) cliccando su un apposito pulsante situato immediatamente a destra del riquadro. Si dovrà prevedere anche un pulsante per ridurre il numero di task da schedulare; ovvero i riquadri, da situare immediatamente a destra del pulsante precedente. Il form dovrà contenere da un minimo di uno ad un massimo di dieci riquadri. Per questi due pulsanti ho apportato delle modifiche grafiche, spostandoli in basso sotto tutti i riquadri dei task; in questo modo, ho dedicato tutto lo spazio superiore ai riquadri contenenti i task e i loro parametri, ottenendo quindi una migliore visualizzazione grafica di ciò che l utente inserisce. Inoltre, avendo stabilito a priori che il numero minimo di task da schedulare deve essere uno e il numero massimo di task deve essere dieci, ho fatto in modo che: se il form presenta un solo riquadro (quindi non si può eliminare) allora verrà visualizzato solo il pulsante che permette di aggiungere un altro riquadro, cioè un altro task; se il form presenta dieci riquadri (quindi non se ne possono aggiungere altri) allora verrà visualizzato solo il pulsante che permette di eliminare l ultimo riquadro, cioè l ultimo task. Per migliorare la visualizzazione del form all utente, ho fatto in modo che ogni riquadro, chiamato con il nome del relativo task, può essere ridotto al solo nome del task i-esimo semplicemente cliccando su di esso, e ri-cliccando su di esso il riquadro viene nuovamente esteso. In questo modo l utente può avere una visione parziale e specifica del form (ad esempio solo sul task i-esimo che deve inserire i parametri), senza che sia costretto a scorrere in giù la pagina per visualizzare tutti i riquadri. Quindi, viene data all utente anche la possibilità di mostrare e nascondere i contenuti dei riquadri semplicemente cliccando sul nome del riquadro. Nella sezione in alto a destra della pagina, saranno situati un menù di riepilogo a discesa che consentirà di scegliere l'algoritmo da applicare sul task-set, ed un pulsante che, cliccato, provocherà la visualizzazione del diagramma di Gantt nella parte bassa della pagina. Anche per questi due pulsanti ho apportato delle modifiche grafiche, cioè li ho spostati in 33

34 basso sotto tutti i riquadri dei task e sotto i tasti di aggiungi ed elimina task; in questo modo ho dedicato tutto lo spazio superiore ai riquadri contenenti i task e i loro parametri ottenendo quindi una migliore visualizzazione grafica di ciò che l utente inserisce. Tutti questi spostamenti, oltre che per una questione grafica, sono stati fatti per evidenziare all utente la sequenzializzazione ed i passi da compiere per utilizzare il modulo; cioè prima inserire i vari parametri dei task ed eventualmente scegliere il numero, successivamente selezionare l algoritmo di scheduling da applicare ed infine cliccare sul tasto Schedula che attiva la submit del modulo e procede con l elaborazione dei dati inseriti dall utente. Il flusso di lavoro dell'utente potrà essere così schematizzato: 1. L'utente accede al modulo cliccando su un link sul menù del portale. 2. L'utente inserisce i parametri del primo task; 3. Eventualmente clicca sul pulsante per aggiungere riquadri al form ed inserisce ulteriori parametri; 4. Oppure se ha inserito un task in più, clicca sul pulsante per eliminare riquadri al form; 5. L'utente sceglie l'algoritmo di scheduling da utilizzare tra quelli disponibili nella SELECT; 6. L'utente clicca sul bottone Schedula per far partire l elaborazione dei dati inseriti; 7. Il modulo visualizza il risultato a schermo tramite diagramma di Gantt. Inizialmente si prevede l'implementazione degli algoritmi di scheduling EDF e RM. Il modulo dovrà prevedere possibili estensioni ad altri algoritmi di scheduling sia altri per la gestione di task periodici sia algoritmi per la gestione di task aperiodici. Non si prevedono restrizioni di alcun tipo riguardo l'accesso alle funzionalità del modulo; cioè qualsiasi utente che ha scaricato il modulo e lo ha installato può usufruirne senza il bisogno di particolari permessi; oppure ogni utente che accede ad una piattaforma contenente questo modulo può utilizzarlo anche essendo un utente non registrato alla piattaforma. 34

35 REALIZZAZIONE PROGETTO 35

36 Drupal operazioni iniziali Dato che dovevo realizzare un modulo per Drupal, per prima cosa ho cercato di capire il modo di installazione di questo software, quindi l ho installato e successivamente sono andato a documentarmi sulle sue principali funzionalità. Siccome dovevo lavorare in locale mi serviva un programma che mi emulava un web server vero e proprio e, grazie alle conoscenze derivate dall esame di Linguaggi e programmazione web, ho deciso di utilizzare per questo XAMPP. XAMPP è un pacchetto software gratuito contenente Apache HTTP Server, il database MySQL e tutti gli strumenti necessari per utilizzare i linguaggi di programmazione PHP e Perl. Il programma è rilasciato sotto la GNU General Public License ed è un utile web server, gratuito e caratterizzato da un approccio user friendly. Mediante XAMPP è possibile avere un application server capace di interpretare pagine web dinamiche PHP. La versione XAMPP Lite contiene i seguenti componenti di base: Il Web server: Apache HTTP Server; Il database management system (o database server): MySQL e SQLite; Il server FTP: ProFTPD; Il Mail server: Mercury Mail Transport System (solo per Windows); I linguaggi di scripting: Perl, PHP e/o Python. Poi su indicazione del professore sono andato sul sito per trovare il setup di Drupal e tutta la documentazione ad esso inerente (guida sull installazione, sull utilizzo, sulle funzionalità, sui moduli, sui temi, ecc.). Installare Xampp e Drupal Di seguito andrò a descrivere passo passo il procedimento da utilizzare per installare e configurare Xampp e Drupal 6. Inizialmente bisogna scaricare il setup di Xampp Lite dal sito: 36

37 Installare XAMPP Lite nella directory C: e rispondere alle domande poste dal prompt dei comandi che appariranno successivamente in sequenza nel modo seguente: 1. y (per creare un icona sul desktop) 2. y (per creare i giusti percorsi) 3. n (per non rendere XAMPP Portable) 4. x (per uscire) Dopo aver installato Xampp sarà la volta di Drupal. Dal sito scaricare l ultima versione disponibile di Drupal 6. 37

38 Decomprimere il formato.rar scaricato (nel mio caso drupal-6.16.rar), ottenendo una cartella decompressa denominata drupal-6.16, al cui interno saranno contenuti i file di Drupal. Copiare l intera cartella drupal-6.16 nella directory C/xampplite/htdocs e rinominarla con il nome drupal Avremo quindi in C/xampplite/htdocs la cartella drupal con dentro i vari file di Drupal. Entrare in C/xampplite/htdocs/drupal/sites/default, copiare (non rinominare!) il file default.settings.php ed incollarlo nella stessa cartella (C/xampplite/htdocs/drupal/sites/default) Fatto questo apparirà nella cartella corrente un file chiamato Copia di default.settings.php, 38

39 rinominare quest ultimo con il nuovo nome settings.php. Avremo quindi in C/xampplite/htdocs/drupal/sites/default due file: default.settings.php e settings.php (settings.php serve per il corretto funzionamento del DB). Aprire XAMPP Control Panel. Mettere la spunta solo su "svc" di Apache (lasciare "svc" di MySql deselezionato) Cliccare su "Start" sia per Apache sia per MySql per avviare il server locale. Quando entrambi sono diventati running cliccare su "Admin" di MySql. Aprire con un browser il database, scrivendo nell URL e sulla colonna a sinistra di questa pagina cliccare sul tasto Home (icona a forma di casa) Nel campo di tipo textfield del form di nome "Crea un nuovo database" scrivere "drupal" e cliccare poi sul tasto "Crea". Così facendo abbiamo creato un database vuoto su cui poi far appoggiare Drupal. 39

40 Accedere a Drupal, scrivendo nell URL e, una volta entrati nella pagina, cliccare "Install Drupal in English" per installare Drupal. 40

41 Nel campo "Database name" scrivere: drupal (cioè il nome del database, creato in precedenza, su cui si appoggerà Drupal) Nel campo "Database username" scrivere: root Lasciare in bianco il campo "Database password" Infine cliccare su Save and continue per procedere con l installazione. 41

42 Apparirà una nuova schermata con altri campi dove inserire del testo, questi campi sono: "Site name": dove bisogna scrivere localhost "Username": dove bisogna scrivere admin "Password": dove bisogna scrivere admin Vi sono altri due campi dove si deve immettere un indirizzo per il sito (io ho scritto e per l'admin (io ho scritto 42

43 Infine spuntare il checkbox (quadratino selezionabile) chiamato Check for updates automatically e cliccare sul bottone Save and continue per terminare l installazione di Drupal. Non appena l installazione sarà terminata apparirà una pagina contenente un testo, il quale informa l utente che si è verificato un errore sull (perché si sono messe delle inesistenti), ma a noi non interessa, quindi possiamo tranquillamente ignorarlo. 43

44 Una volta ignorato quest errore verremo rediretti immediatamente nella pagina home di Drupal, alla quale possiamo accedere d ora in poi immettendo nel campo URL del browser Da questa pagina ora, dopo aver fatto ovviamente il log-in ed essere entrato come admin della piattaforma, possiamo andare a personalizzare la nostra piattaforma attraverso l aggiunta di nuovi moduli e temi, andare a creare dei blog, delle pagine, dei forum, ecc. Quindi gli URL principali per l utilizzo di Drupal sono: ---> consente l accesso a XAMPP Lite ---> consente l accesso al database MySQL ---> consente l accesso a Drupal 44

45 Operazioni da svolgere subito dopo aver installato Drupal Impostare cron. Controllare che l'opzione Clean URLs sia attivata (Administer >> Site configuration >> Clean urls). Installare e abilitare il modulo "Pathauto" (Richiede l'abilitazione del modulo "Path" e l'installazione ed abilitazione del modulo "Token"). Il modulo Pathauto permette di sostituire le path assegnate da Drupal con delle path alias più user-friendly. Operazione da fare prima di pubblicare il sito o appena pubblichiamo una nuova pagina, in modo che il motore di ricerca indicizzi le path alias e non quelle originali è la seguente: Administer >> Site building >> URL aliases ("Automated alias settings" tab); ciò permetterà la sostituzione delle path assegnate da Drupal con delle path alias amichevoli. Creare vocabolari e termini, abilitando il modulo Taxonomy. 45

46 Da ricordare Dopo aver abilitato un modulo: o abilitarne anche il relativo block; o dare agli utenti (ruoli) la possibilità di usarlo (permessi); o modificare le caratteristiche del content type. Dopo aver creato un nuovo content type (o aver installato un modulo che crea un suo content type) dobbiamo abilitare il relativo block e dare i permessi agli utenti. Dopo aver cambiato un tema riabilitare i vari blocks. Installare un modulo aggiuntivo Di seguito andrò ad elencare le operazioni da eseguire per installare su Drupal un modulo. 1. Il modulo da installare deve essere compatibile con la versione di Drupal installata 2. Scaricare il modulo (file.tar.gz) (ad esempio da 3. Decomprimerlo con WinRar 4. Mettere il modulo (cartella contenente vari files e cartelle riguardanti il modulo stesso) in C/xampplite/htdocs/drupal/sites/all/modules 46

47 Se è il primo modulo ad essere aggiunto dobbiamo creare una cartella modules in C/xampplite/htdocs/drupal/sites/all,, la quale andrà a contenere tutti i vari moduli eventualmente aggiunti dall utente Ad esempio se abbiamo scaricato ed estratto il file pathauto-6.x-1.5tar.gz (cartella pathauto contenente i vari file del modulo pathauto) metteremo la cartella "pathauto" in C/xampplite/htdocs/drupal/sites/all/modules Attenzione a non mettere i moduli aggiuntivi in C/xampplite/htdocs/drupal/modules (qui ci sono i moduli del core di Drupal) 5. Leggere il file INSTALL.txt o README.txt (contenuto nel modulo) per sapere se il modulo necessita di particolari procedure/files/altri moduli/... per funzionare correttamente 47

48 6. Andare su Drupal in Administer >> Site building >> Modules (indirizzo e mettere la spunta sul checkbox del modulo per abilitarlo 7. Infine cliccare sul bottone Save configuration per salvare la configurazione e abilitare definitivamente il modulo. 48

49 Note: Alcuni moduli, per funzionare, richiedono che vengano cambiati i permessi (Administer >> User management >> Permissions). Se il modulo ha delle impostazioni, possono essere raggiunte andando in Administer >> Site building o Administer >> Site configuration. Disinstallare un modulo aggiuntivo Per disinstallare un modulo procedere nel modo seguente. 1. Disabilitare il modulo (andando in Administer >> Site building >> Modules) 2. In Administer >> Site building >> Modules cliccare sul tab "Uninstall" e disinstallare il modulo scegliendolo fra quelli in lista 3. Se il modulo non è nella lista, dopo averlo disabilitato, cancellarlo manualmente (eliminare la cartella contenente i files del modulo da.../sites/all/modules) 4. Se si disinstalla manualmente il modulo eliminandone la cartella, eseguire il modulo aggiuntivo "System Table Cleaner" il quale eliminerà tutti i riferimenti che il modulo ha creato nel database (infatti cancellando la cartella del modulo tutti i riferimenti che il modulo aveva creato nel database non vengono rimossi) Aggiornare un modulo esistente Per aggiornare un modulo già esistente ed installato si va inizialmente a controllare se per il preciso modulo è presente un nuovo aggiornamento. Per far questo si va su: Administer >> Reports >> Available updates. Se è presente un nuovo aggiornamento lo si scarica in formato.rar e lo si decomprime. Successivamente bisogna disabilitare su Drupal il modulo vecchio da aggiornare e dopo eliminare la cartella contenente i file del modulo da.../sites/all/modules. Mettere in.../sites/all/modules la cartella contenente i file del modulo aggiornato, in modo tale che questo riappaia nell elenco di Drupal dei moduli da abilitare. Entrare in Drupal ed andare ad abilitare il nuovo modulo (contenente gli aggiornamenti). Eseguire lo script update.php per aggiornare il database (il nuovo modulo può infatti apportare modifiche al database): Andare all'indirizzo "http://www.example.com/update.php" (oppure "http://www.example.com/test_site/update.php") Se abbiamo installato Drupal seguendo questa guida l'indirizzo esatto è "http://localhost/drupal/update.php" Fare un backup del database Fare un backup del vecchio modulo (sorgente) Mettere il sito offline (Administer >> Site configuration >> Site maintenance) Seguire le istruzioni a schermo Rimettere il sito online Controllare in Administer >> Reports >> Available updates se il modulo è stato correttamente aggiornato 49

50 Installare un tema aggiuntivo Per installare un tema aggiuntivo su Drupal procedere in tal modo. 1. Il tema da installare deve essere compatibile con la versione di Drupal installata 2. Scaricare il tema (file.tar.gz) (ad esempio da 50

51 3. Decomprimerlo con WinRar 4. Mettere il tema (cartella contenente vari files e cartelle che compongono il tema) in C/xampplite/htdocs/drupal/sites/all/themes Se è il primo tema ad essere aggiunto dobbiamo creare una cartella themes in C/xampplite/htdocs/drupal/sites/all,, la quale andrà a contenere tutti i vari temi eventualmente aggiunti dall utente Ad esempio Marinelli se abbiamo scaricato ed estratto il file marinelli-6.x-2.96.tar.gz (cartella marinelli contenente i vari file del tema marinelli) metteremo la cartella "marinelli" in C/xampplite/htdocs/drupal/sites/all/themes Attenzione a non mettere i temi aggiuntivi in C/xampplite/htdocs/drupal/themes (qui ci sono i temi del core di Drupal) 5. Leggere il file INSTALL.txt o README.txt (contenuto nel tema) per sapere se il tema necessita di particolari procedure/files/... per funzionare correttamente 6. Andare in Administer > Site building > Themes e mettere la spunta sul tema per abilitarlo e sul radio button per impostarlo come tema di default e infine disabilitare il tema precedente 7. Infine cliccare sul bottone Save configuration per salvare la configurazione e abilitare definitivamente il tema. 51

52 Dopo aver abilitato un tema si può notare subito il cambiamento dello sfondo, del font, ecc. Ad esempio il tema Marinelli è il seguente: 52

53 Organizzazione del lavoro Dopo aver visto a grandi linee come funziona la piattaforma Drupal, non ho iniziato direttamente a sviluppare il progetto, cioè non ho implementato subito il modulo task-scheduling. Infatti per prima cosa mi sono fatto uno schema mentale su come organizzarmi il lavoro, una strategia di elaborazione dell informazione e delle conoscenze per poter realizzare il modulo software. Ho deciso che la strategia che più si addiceva alla realizzazione per questo tipo di progetto potesse essere un approccio bottom-up; cioè prima ho creato ed elaborato nel dettaglio ogni singola funzione che avrebbe composto il mio modulo, successivamente ho connesso le funzioni che si susseguivano logicamente (cioè quelle funzioni che messe insieme avevano uno scopo comune, ad esempio più funzioni assieme mi davano come risultato il form composto da tanti riquadri quant è il numero di task che compongono il task-set) al fine di formare dei componenti (insiemi di funzioni) più grandi; infine ho interconnesso tutte queste macro componenti per formare l intero programma. Ho optato per questa strategia di progettazione per le seguenti motivazioni: Siccome il progetto da realizzare era abbastanza lungo, non volevo verificare l esito del mio lavoro solo a modulo completo ma volevo controllarlo e testarlo in intervalli di tempo brevi; Componendo una funzione alla volta avevo anche la possibilità di correggere, ove presenti, gli errori passo per passo, infatti in questo modo essi erano riconoscibili più facilmente grazie al fatto che il codice di cui era formata ogni funzione non era per niente lungo rispetto al codice che è andato a formare l intero modulo; È stata la prima idea di strategia adottabile che mi è venuta in mente dopo aver letto le specifiche, perché sono subito riuscito a separare i vari concetti e quindi ad individuare subito i macro componenti che dovevano andare a formare il mio modulo. L utilizzo di questa strategia mi ha permesso di sviluppare il modulo pezzo per pezzo, senza essere per forza vincolato ad un ordine preciso da seguire nelle operazioni da svolgere e nello scrivere il codice delle funzioni, alla fine poi avrei messo insieme il tutto nell ordine corretto. Dopo aver scelto la strategia di progettazione, ho individuato precisamente quali dovevano essere i miei macro componenti e da quante e quali funzioni dovevano essere composti. Il modulo finale era il risultato dell interconnesione di queste tre macro componenti di funzioni: Form composto da riquadri che si mostrano e nascondono all utente quando esso clicca sull etichetta di ciascuno: insieme di funzioni che andavano a costituire la parte iniziale del modulo, cioè quella dove l utente andava ad inserire i dati; Algoritmi EDF e RM: insieme di funzioni che lavorano in background (operazioni non visibili all utente) ed elaborano i dati inseriti dall utente; Diagramma di Gantt: insieme di funzioni che visualizzano graficamente all utente il risultato dell elaborazione dei dati, da lui inseriti, tramite diagramma di Gantt. Di seguito andrò a descrivere i vari passi che ho eseguito per creare il modulo in ordine temporale di come li ho svolti. 53

54 Implementazione algoritmi nel linguaggio C Stimolato principalmente dalla curiosità, ho preso la decisione di dedicarmi inizialmente all implementazione dei due algoritmi di scheduling EDF e RM. Siccome volevo aver subito la conferma della funzionalità corretta degli algoritmi creati, grazie alla conoscenza del linguaggio C, derivata dall esame di Fondamenti di Informatica, e inoltre essendo il PHP un linguaggio avente le istruzioni e la struttura delle variabili molto simile al C, ho sviluppato gli algoritmi nel linguaggio C. Questo mi avrebbe dato modo di ottenere un feedback diretto e rapido di come lavorano gli algoritmi da me creati. Ora vado a descrivere in dettaglio i ragionamenti eseguiti e il codice scritto per implementare i due algoritmi. Algoritmo EDF Inizialmente ho incluso nel mio file C la libreria di input/output del C, grazie al comando #include, e ho definito due costanti N e M che contengono rispettivamente il numero massimo dei task e il numero massimo dei parametri di ogni task, grazie al comando #define. La costante N=10 perché dalle specifiche abbiamo detto che il numero massimo di task che l utente può inserire è 10; la costante M=5 perché i parametri che prendo in considerazione per ogni task sono il tempo di computazione C, la dealine relativa D, il periodo T, il numero di computazioni fatte dal task e un flag che verifica se il task è presente o no nella ready queue. main. Dopo questi passaggi necessari ho iniziato l algoritmo vero e proprio grazie all istruzione In tutti i programmi C prima di utilizzare una variabile bisogna definirla ed infatti è questa la prima cosa che sono andato a fare. Ho definito dieci variabili intere (int), numero minimo necessario per implementare l algoritmo; queste sono: num_task: contiene il numero dei task da elaborare, inserito dall utente; task[n][m]: è un array bidimensionale (detto anche matrice) dove in ogni riga verranno memorizzati i parametri di un task inseriti dall utente (riga i-esima contiene tutti e solo i paramentri del task i-esimo), una volta inseriti dall utente essi non variano più fino al termine dell algoritmo; ready_queue[n][m]: è un array bidimensionale dove in ogni riga si andranno a memorrizzare i parametri di un task durante l elaborazione dell algoritmo, essi variano ad ogni iterazione dell algoritmo; secondi: variabile contatore dei secondi che passano dall inizio dell algoritmo fino al termine di esso, ad ogni secondo ho un iterazione; i, j: contatori che utilizzo per passare da un task all altro e/o da un parametro all altro nei vari cicli for; min_task: conterrà il numero del task avente la deadline assoluta minore; 54

55 min_dead: conterrà il valore della deadline assoluta minore; overflow: la utilizzo in modalità booleana per decidere se fermare o no le iterazioni fatte secondo per secondo; invio: mi serve solo a bloccare la visualizzazione dei risultati prodotti fino a quando non premo un tasto, una volta premuto il tasto procede con l iterazione successiva. Prima di iniziare con l algoritmo vero e proprio devo richiedere all utente il valore del numero dei task e i valori dei parametri dei task grazie a due cicli for e al comando scanf; come detto prima il numero dei task verrà memorizzato nella variabile num_task, mentre l array task[i][j] memorizzerà il parametro j-esimo appartenente al task i-esimo, per j=0 il parametro è il tempo di computazione C, per j=1 il parametro è la deadline relativa D e per j=2 il parametro è il periodo T. Gli ultimi due parametri j=3 e j=4, rispettivamente il numero di computazioni di un task e un flag ready (può assumere valore 0 o 1) per vedere se un determinato task è presente nella ready queue, inizialmente sono fissati a priori ed hanno un valore ben preciso; il numero di computazioni è 0, dato che nessuno di loro ha mai computato inizialmente (ipotesi: nessuna computazione precedente da parte di un task), mentre il flag ready è invece 1, dato che con 0 vado ad indicare i task che non sono presenti nella ready queue ed invece con 1 i task che sono presenti (per ipotesi: inizialmente tutti i task sono presenti nella ready queue, caso critico). In questi passaggi vado a costruire l intero array task con i dati inseriti dall utente e i valori iniziali fissi dati dalle ipotesi fatte. Inizializzo i valori delle variabili secondi e overlflow uguali a 0, per la prima variabile perché l algoritmo parte dall istante 0 secondi, la seconda variabile invece è un flag (può assumere valore 0 o 1) e quando è uguale a 0 indica che nessun task è in overflow mentre quando è 1 indica che uno o più task sono in overflow. Questo codice visualizzerà ad esempio: 55

56 Siccome c è anche la possibilità che tutti i task inseriti dall utente finiscano le loro computazioni prima dell inizio del loro prossimo periodo, quindi la CPU resta inutilizzata per alcuni secondi; bisogna tenere conto anche di questo caso. Quindi nell array task inserisco anche un indice i-esimo aggiuntivo a quelle dei task che mi tiene conto dei tempi morti della CPU (è come un task invisibile); questo indice per non essere mai selezionato dall algoritmo deve avere un tempo di computazione, una deadline relativa e un periodo molto maggiore rispetto ai task e, inoltre, per ipotesi deve avere il numero di computazioni=0 ed essere sempre presente nella ready queue quindi flag ready=1. Siccome gli elementi di un array partono dall indice 0 (i=0 corrisponde al task1, i=1 al task2, ) l ultimo task inserito dall utente corrisponde all indice num_task-1, quindi l indice che avrà il task per i tempi morti sarà num_task. L ultima cosa di cui ho bisogno prima di partire con l elaborazione dell algoritmo è la creazione della ready queue. Questa viene fatta grazie all array ready_queue, il quale ha la stessa struttura dell array task. Inizialmente ha anche gli stessi valori dell array task, quindi attraverso due cicli for copio tutti i valori che contiene task in ready_queue. La differenza tra questi due array si vede durante l elaborazione dell algoritmo: task: i valori dei parametri inseriti dall utente non variano mai durante l elaborazione e restano sempre gli stessi fino alla fine, array statico; ready_queue: i valori dei parametri, inizialmente uguali a quelli di task, variano ad ogni iterazione, array dinamico. Per verificare lo stato iniziale della ready queue prima di iniziare l algoritmo stampo a schermo i parametri di ready_queue grazie a due cicli for e al comando printf, questo lo faccio per avere un riepilogo dei dati inseriti dall utente e per verificare che la procedura dell inserimento di tutti i dati si è svolta correttamente. 56

57 Questo codice visualizzerà ad esempio: Adesso posso iniziare a sviluppare l algoritmo. L algoritmo di scheduling ha come compito quello di selezionare il task con priorità maggiore ed assegnargli la CPU. Questo controllo ed assegnazione deve essere fatto per ogni secondo, quindi deve essere ripetuto (iterato) continuamente; esso termina solo quando uno o più task vanno in overflow. Quindi ho deciso di iniziare l algoritmo con un ciclo while, esso itera l algoritmo (tutte le istruzioni contenute dal ciclo while) secondo per secondo (secondi++) e termina quando il flag overflow è diverso da 0. Si vedrà dopo che questo flag viene messo a 1 quando uno o più task vanno in overflow. Sapendo che l algoritmo si ripete ciclicamente, la prima operazione che faccio è quella di resettare le variabili min_dead e min_task dai valori assunti dal ciclo precedente. Questo perché il controllo sulla deadline assoluta d viene fatto secondo per secondo e, se ad esempio, min_dead conteneva al secondo precedente un valore di deadline piccolo appartenente ad un task che ha finito di computare e non resetto questo valore, al prossimo controllo anche se il task non sarà più presente nella ready queue i valori di min_dead e min_task resteranno quelli del ciclo precedente (essendo appartenuti ad un task con priorità maggiore). Ho deciso di resettare queste due variabili inizializzandole in modo tale che assumano i valori della deadline e della posizione nell array ready_queue del task dei tempi morti, sia perché la sua deadline ha un valore elevato e quindi ai controlli qualsiasi task presente nella ready queue avrà una priorità maggiore di esso (ecco perché ho posto min_dead=ready_queue[num_task][1]) e sia perché se eventualmente non sono presenti task nella ready queue automaticamente il task selezionato dall algoritmo è il nostro task invisibile (ecco perché ho posto min_task=num_task). 57

58 Ora tocca alla parte di controllo, selezione e assegnazione del task avente priorità maggiore tra tutti i task presenti nella ready queue, cioè quella che riguarda direttamente lo scheduling di un task-set. Ricordiamo a questo punto che l algoritmo EDF dà priorità maggiore, cioè seleziona, il task avente deadline assoluta d minore (deadline dinamica, varia da secondo a secondo quindi ad ogni iterazione). Per selezione di un task intendo, nel mio algoritmo, la memorizzazione del valore della deadline assoluta minore nella variabile min_dead=ready_queue[i][1] e la memorizzazione della posizione occupata dal task, avente deadline minore, nella ready queue nella variabile min_task=i. La prima scansione mi seleziona il primo task presente nella ready queue avente un qualsiasi valore della deadline assoluta (mi interessa solo se è presente nella ready queue, ready_queue[i][4]==1), infatti appena ne trova uno il ciclo for termina grazie all istruzione break. La seconda scansione parte dal task selezionato in precedenza e continua a controllare tutti i task presenti nella ready queue fino alla fine. In questa scansione viene selezionato il task avente deadline assoluta minore rispetto a tutti gli altri task presenti nella ready queue. Grazie a delle printf stampo a schermo il risultato delle scansioni precedenti; esse visualizzano il secondo di tempo in cui ci troviamo, la posizione dell array in cui si trova il task selezionato e il valore della deadline assoluta di questo task. Questo codice visualizzerà ad esempio: Dopo aver scelto il task a cui deve essere assegnata la CPU devo passare alla fase di computazione, cioè, oltre a fare in modo che il task selezionato computi per quel secondo (il tempo di computazione diminuisce), devo aggiornare lo stato temporale di tutti i task presenti nella ready queue (la deadline assoluta diminuisce, il tempo per arrivare a fine periodo diminuisce). Quindi per ogni task diminuisco di 1 (perché itero secondo per secondo) il periodo assoluto e la deadline assoluta, mentre solo per il task selezionato diminuisco di 1 il tempo di computazione 58

59 assoluto. E infine aumento di 1 la variabile secondi (per indicare il passare del tempo ad ogni iterazione). Ora grazie ancora a delle printf e a due cicli for (ne servono due per scorrere un array bidimensionale) stampo a schermo la situazione di tutti i task (presenti e non nella ready queue) con i valori dinamici assunti dai parametri in quel preciso secondo. Ogni riga è attribuita ad un singolo task e i parametri sono, in ordine di visualizzazione: tempo di computazione assoluto, deadline assoluta, periodo assoluto, numero di computazioni, presenza o no nella ready queue. Questo codice visualizzerà ad esempio: L ultima cosa da fare prima di poter terminare l algoritmo e quindi chiudere il ciclo while è la gestione della ready queue. Infatti non dobbiamo solo aggiornare i parametri dei task secondo per secondo ma anche la situazione della ready queue e più precisamente col passare dei secondi possono verificarsi tre casi: la fine del tempo di computazione di un task: sta ad indicare che dobbiamo togliere il task dalla ready queue; l inizio di un nuovo periodo di un task: sta ad indicare che dobbiamo re-inserire il task nella ready queue; l andata in overflow di uno o più task: sta ad indicare che dobbiamo terminare l algoritmo. Con un controllo if verifico se il task che ha computato in questo secondo ha finito totalmente il suo tempo di computazione assoluto (cioè se è uguale a 0). Se si verifica questo fatto allora devo incrementare di 1 il parametro che conteggia il numero di computazioni di quel task e devo togliere il task dalla ready queue (ready_queue[min_task][4] da 1 a 0) a cui non serve più la CPU. Infine con una printf visualizzo il task che ha finito la computazione in quel secondo, ovviamente se in quell istante di tempo vi è un task che ha terminato. 59

60 Questo codice visualizzerà ad esempio: Con un ciclo for scansiono tutta la ready queue e mi concentro (grazie all istruzione if) sui task che hanno finito la computazione, che hanno terminato il loro periodo assoluto e che non sono presenti nella ready queue e sui task che non hanno finito la computazione e sono andati in overflow, cioè il loro periodo assoluto è scaduto senza che hanno finito di computare. Nel primo caso reinserisco il task i-esimo nella ready queue, cambiando il parametro ready_queue[i][4] da 0 ad 1 e, siccome tratto i task periodici, riprendendo i valori iniziali del tempo di computazione C, deadline relativa D e periodo T. Poi con una printf visualizzo il task che eventualmente rientra nella ready queue in quell istante di tempo. Questo codice visualizzerà ad esempio: Nel secondo caso devo bloccare le iterazioni, cioè devo terminare il ciclo while. Questo lo faccio semplicemente cambiando il flag overflow da 0 a 1, così che alla prossima iterazione la condizione del while non sarà vera e tutto il contenuto del ciclo si interrompe, fermando a sua volta l elaborazione dell algoritmo. Poi con una printf visualizzo il task che è andato in overflow. Questo codice visualizzerà ad esempio: A titolo di esempio, di seguito verrà mostrato l intero output prodotto dal file EDF.exe (eseguibile del file EDF.c) con un task-set scelto a caso. 60

61 61

62 62

63 Algoritmo RM Quasi tutti i ragionamenti fatti (e quindi il codice scritto) per l algoritmo EDF sono validi anche per l algoritmo RM, quindi non andrò a ripetere e spiegare tutto l algoritmo RM ma esporrò solo le parti ed i ragionamenti in cui questo si differenzia dal precedente riassumendo brevemente però i concetti generali di come funziona l algoritmo. Inizialmente vi sono le inclusioni delle librerie e le definizioni delle costanti. Successivamente, con l inizio del programma (main), vado a dichiarare tutte le variabili che utilizzo nel codice e a richiedere all utente l inserimento dei dati (numero dei task e parametri di essi). Qui l unica differenza dal precedente sta nella dichiarazione di una variabile: mentre prima avevo la variabile min_dead, che conteneva il valore della deadline assoluta minore, ora ho la variabile min_perio, che contiene il valore del periodo relativo minore. Una volta creato totalmente l array task vado a generare anche l array ready_queue tramite copia di tutti i parametri dell array task e infine stampo a schermo l array ready_queue con tutti i suoi parametri. 63

64 Questo codice visualizzerà ad esempio: Anche qui l algoritmo vero e proprio inizia con il ciclo while e il reset delle variabili min_task e min_perio inizializzandole ai valori del task dei tempi morti. Ora tocca alla parte di controllo, selezione e assegnazione del task avente priorità maggiore tra tutti i task presenti nella ready queue, cioè quella che riguarda direttamente lo scheduling di un task. Ed è qui che l algoritmo RM presenta le differenze maggiori rispetto all algoritmo EDF. Ricordiamo a questo punto che l algoritmo RM dà priorità maggiore, cioè seleziona, il task avente periodo relativo T minore (periodo statico, non varia da secondo a secondo quindi ad ogni 64

65 iterazione). Per selezione di un task intendo, nel mio algoritmo, la memorizzazione del valore del periodo relativo minore nella variabile min_perio=ready_queue[i][2] e la memorizzazione della posizione occupata dal task, avente periodo minore, nella ready queue nella variabile min_task=i. La prima scansione mi seleziona il primo task presente nella ready queue avente un qualsiasi valore del periodo relativo (mi interessa solo se è presente nella ready queue, ready_queue[i][4]==1), infatti appena ne trova uno il ciclo for termina grazie all istruzione break. La seconda scansione parte dal task selezionato in precedenza e continua a controllare tutti i task presenti nella ready queue fino alla fine. In questa scansione viene selezionato il task avente periodo relativo minore rispetto a tutti gli altri task presenti nella ready queue. Grazie a delle printf stampo a schermo il risultato delle scansioni precedenti; esse visualizzano il secondo di tempo in cui ci troviamo, la posizione dell array in cui si trova il task selezionato e il valore del periodo relativo di questo task. Questo codice visualizzerà ad esempio: La fase di computazione è identica all algoritmo precedente, cioè il task selezionato computa per quel secondo (il tempo di computazione diminuisce) e devo aggiornare lo stato temporale di tutti i task presenti nella ready queue (la deadline assoluta diminuisce, il tempo per arrivare a fine periodo diminuisce). Quindi per ogni task diminuisco di 1 (perché itero secondo per secondo) il periodo assoluto e la deadline assoluta, mentre solo per il task selezionato diminuisco di 1 il tempo di computazione assoluto. E infine aumento di 1 la variabile secondi (per indicare il passare del tempo ad ogni iterazione). 65

66 Ora con l uso dell istruzione printf e di due cicli for (ne servono due per scorrere un array bidimensionale) stampo a schermo la situazione di tutti i task (presenti e non nella ready queue) con i valori dinamici assunti dai parametri in quel preciso secondo. Ogni riga è attribuita ad un singolo task e i parametri sono, in ordine di visualizzazione: tempo di computazione assoluto, deadline assoluta, periodo assoluto, numero di computazioni, presenza o no nella ready queue. Questo visualizzerà ad esempio: L ultima cosa da fare prima di poter terminare l algoritmo e quindi chiudere il ciclo while è la gestione della ready queue. Infatti non dobbiamo solo aggiornare i parametri dei task secondo per secondo ma anche la situazione della ready queue e più precisamente col passare dei secondi possono verificarsi tre casi: la fine del tempo di computazione di un task: sta ad indicare che dobbiamo togliere il task dalla ready queue; l inizio di un nuovo periodo di un task: sta ad indicare che dobbiamo re-inserire il task nella ready queue; l andata in overflow di uno o più task: sta ad indicare che dobbiamo terminare l algoritmo. Questa procedura è identica a quella spiegata per l algoritmo EDF e quindi non descrivo per non essere ripetitivo. Anche qui l algoritmo termina (la condizione del while non è soddisfatta) non appena un task va in overflow. Alla fine comunque con l uso delle printf vado a visualizzare, se eventualmente presente: il task che in quel secondo ha finito di computare; il task che in quel secondo va in overflow. 66

67 Questo codice visualizzerà ad esempio: A titolo di esempio, di seguito verrà mostrato l intero output prodotto dal file RM.exe (eseguibile del file RM.c) con un task-set scelto a caso. 67

68 Testing degli algoritmi Una volta terminati gli algoritmi, sono andato a testare il loro funzionamento utilizzando il metodo seguente: mi sono inventato dei task-set: numero task di cui era composto ciascun task-set e valori dei parametri per ciascun task; ho schedulato a mano ciascun task-set in base al comportamento dei due algoritmi implementati; ho inserito i dati nei programmi C da me creati; ho confrontato i risultati per vedere se gli algoritmi codificati da me erano esatti. Di seguito vado a mostrare un esempio di un task-set schedulato a mano: 68

2010 Antonio Musarra s Blog. Sessione introduttiva sui CMS (versione 1.0 16/03/2010)

2010 Antonio Musarra s Blog. Sessione introduttiva sui CMS (versione 1.0 16/03/2010) 2010 Antonio Musarra s Blog 1 Sessione introduttiva sui CMS (versione 1.0 16/03/2010) CMS Content Management System 2 Un Content Management System, in acronimo CMS, letteralmente "sistema di gestione dei

Dettagli

Content Management Systems e

Content Management Systems e AA 2010/2011 Content Management Systems e Corso di Progetto di Sistemi Web Based Università degli Studi di Roma Tor Vergata Argomenti della lezione 1. Breve evoluzione storica dei siti internet cos è un

Dettagli

Servizio Feed RSS del sito CNIT

Servizio Feed RSS del sito CNIT Servizio Feed RSS del sito CNIT Informiamo tutti gli utenti CNIT che è possibile sincronizzare i propri Reader (RSS) per essere aggiornati in tempo reale sulle nuove pubblicazioni di articoli postati sul

Dettagli

Alcune semplici definizioni

Alcune semplici definizioni Alcune semplici definizioni Un CMS (Content management system), in italiano Sistema di gestione dei contenuti è uno strumento software che si installa generalmente su un server web, il cui compito è facilitare

Dettagli

Temi avanzati SEMINARIO

Temi avanzati SEMINARIO Temi avanzati SEMINARIO WEB 2.0: Tecnologie ed opportunità per business Prof. Folgieri, Università dell Insubria aa 2009/2010 WEB 2.0 Un esempio di applicazione: trasformazione di un portale da web 1.0

Dettagli

Wordpress corso base. Mario Marino Corso Base Wordpress

Wordpress corso base. Mario Marino Corso Base Wordpress Wordpress corso base Mario Marino Corso Base Wordpress introduzione Cosa sappiamo fare adesso e cosa vorremmo sapere fare alla fine del corso Parole chiave Sito / Blog Database CMS Client / Server Account

Dettagli

CMS (Content Management System) della categoria Open Source

CMS (Content Management System) della categoria Open Source Una panoramica sui CMS (Content Management System) CMS (Content Management System) della categoria Open Source Per la piattaforma PHP/MYSQL e considerata l esigenza sempre più ricorrente di realizzare

Dettagli

CONTENT MANAGMENT SYSTEMS

CONTENT MANAGMENT SYSTEMS CONTENT MANAGMENT SYSTEMS ESTRATTO DA: Ileana D'Incecco, Progettare la comunicazione web per organizzazioni non-profit con strumenti open source: ideazione e realizzazione del sito web della Casa delle

Dettagli

Content Management Systems

Content Management Systems Content Management Systems L o Guido Porruvecchio Tecnologia e Applicazioni della Rete Internet Definizione Un Content Management System (CMS) è letteralmente un sistema per la gestione dei contenuti Definisce

Dettagli

Su Internet, oggi, se il vostro sito Web non è dotato di funzionalità ricche o contenuti. I sistemi CMS e un introduzione a Joomla! In questo capitolo

Su Internet, oggi, se il vostro sito Web non è dotato di funzionalità ricche o contenuti. I sistemi CMS e un introduzione a Joomla! In questo capitolo 1 I sistemi CMS e un introduzione a Joomla! In questo capitolo Su Internet, oggi, se il vostro sito Web non è dotato di funzionalità ricche o contenuti aggiornati, è svantaggiato. L idea di potenziare

Dettagli

Corso di Web programming Modulo T3 A2 - Web server

Corso di Web programming Modulo T3 A2 - Web server Corso di Web programming Modulo T3 A2 - Web server 1 Prerequisiti Pagine statiche e dinamiche Pagine HTML Server e client Cenni ai database e all SQL 2 1 Introduzione In questa Unità si illustra il concetto

Dettagli

29 Novembre 2012 Open Source: un opportunità per far evolvere l ICT nelle imprese

29 Novembre 2012 Open Source: un opportunità per far evolvere l ICT nelle imprese DEFINIZIONE Joomla è un software di content management (CMS) sviluppato in php per la realizzazione di siti Internet dinamici, è gratuito e rilasciato sotto licenza GPL v.2, per il suo utilizzo non sono

Dettagli

Novell ZENworks Configuration Management in ambiente Microsoft * Windows *

Novell ZENworks Configuration Management in ambiente Microsoft * Windows * Guida GESTIONE SISTEMI www.novell.com Novell ZENworks Configuration Management in ambiente Microsoft * Windows * Novell ZENworks Configuration Management in ambiente Microsoft Windows Indice: 2..... Benvenuti

Dettagli

anthericacms Il sistema professionale per la gestione dei contenuti del tuo sito web Versione 2.0

anthericacms Il sistema professionale per la gestione dei contenuti del tuo sito web Versione 2.0 anthericacms Il sistema professionale per la gestione dei contenuti del tuo sito web Versione 2.0 Email: info@antherica.com Web: www.antherica.com Tel: +39 0522 436912 Fax: +39 0522 445638 Indice 1. Introduzione

Dettagli

Formazione sistema editoriale CMS

Formazione sistema editoriale CMS Ufficio Società dell'informazione Nome del Progetto Acronimo del Progetto Formazione sistema editoriale CMS Documento Data di stesura Maggio 2010 Versione 1.2 Sommario 1 Scopo... 3 2 Campo di applicazione...

Dettagli

PIER LUIGI MENCHETTI

PIER LUIGI MENCHETTI PIER LUIGI MENCHETTI IL PERCORSO STORICO DEI SITI IL SITO STATICO Nei primi anni del web i siti erano collezioni di pagine statiche tenute assieme dai link incrociati e realizzate da persone che conoscevano

Dettagli

Outline. Chi sono L.A.M.P. Hosting CMS e Blog Wordpress Il caso >> Informare Per Resistere. Sviluppi futuri. www.informarexresistere.

Outline. Chi sono L.A.M.P. Hosting CMS e Blog Wordpress Il caso >> Informare Per Resistere. Sviluppi futuri. www.informarexresistere. Outline Chi sono L.A.M.P. Hosting CMS e Blog Wordpress Il caso >> Informare Per Resistere www.informarexresistere.fr Sviluppi futuri Outline Chi sono L.A.M.P. Hosting CMS e Blog Wordpress Il caso >> Informare

Dettagli

système de publication pour l internet Sistema di pubblicazione per internet

système de publication pour l internet Sistema di pubblicazione per internet système de publication pour l internet Sistema di pubblicazione per internet Non solo un CMS (Content Management System) Gestire i contenuti è un compito che molti software svolgono egregiamente. Gestire

Dettagli

Le funzionalità principali della piattaforma

Le funzionalità principali della piattaforma Istituto di Scienza e Tecnologie dell'informazione A Faedo (ISTI) - Laboratorio di domotica Quimby: Le funzionalità principali della piattaforma Dario Russo (dario.russo@isti.cnr.it) Obiettivi del progetto

Dettagli

SISTEMA EDITORIALE WEBMAGAZINE V.2.2

SISTEMA EDITORIALE WEBMAGAZINE V.2.2 SISTEMA EDITORIALE WEBMAGAZINE V.2.2 1 - Il funzionamento di Web Magazine Web Magazine è un applicativo pensato appositamente per la pubblicazione online di un giornale, una rivista o un periodico. E'

Dettagli

Il sito della scuola con

Il sito della scuola con Incontro in aula virtuale del 24 gennaio 2013 Il sito della scuola con La sicurezza di un sito Joomla Il Pacchetto Joomla pasw quickstart versione 2.0. a cura di Gianluigi Pelizzari IIS Fantoni Clusone

Dettagli

MANUALE OPERATORE CMS ASMENET

MANUALE OPERATORE CMS ASMENET MANUALE OPERATORE CMS ASMENET 2.0 Pag. 1 di 46 INDICE Termini e definizioni... pag. 3 Introduzione... pag. 4 Descrizione generale e accesso al back office... pag. 5 1 Gestione della pagina... pag. 6 1.1

Dettagli

DRUPAL 7 DRUPAL 7 Drupal è un framework modulare che consente di realizzare una grande varietà di siti web basati sulla logica contenuto/nodo. Permette di: creare e organizzare i contenuti personalizzare

Dettagli

Introduzione a Wordpress. Corso completo alla conoscenza e all uso del CMS Open Source WP (incontro 1/6)

Introduzione a Wordpress. Corso completo alla conoscenza e all uso del CMS Open Source WP (incontro 1/6) Introduzione a Wordpress Corso completo alla conoscenza e all uso del CMS Open Source WP (incontro 1/6) Indice Rilevazione aspettative e competenze in ingresso Patto formativo Presentazione di WP Premesse

Dettagli

CMS (Content Management System) della categoria Open Source

CMS (Content Management System) della categoria Open Source Una panoramica sui CMS (Content Management System) CMS (Content Management System) della categoria Open Source Per la piattaforma PHP/MYSQL e considerata l esigenza sempre più ricorrente di realizzare

Dettagli

MediaWiki. Giuseppe Frisoni

MediaWiki. Giuseppe Frisoni MediaWiki Giuseppe Frisoni MediaWiki: costruire insieme 1/2 L'enorme successo di Wikipedia, la nota enciclopedia online, è sotto gli occhi di tutti; cosa meno nota, invece, è la piattaforma con cui è progettata.

Dettagli

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved WEB TECHNOLOGY Il web connette LE persone Indice «Il Web non si limita a collegare macchine, ma connette delle persone» Il Www, Client e Web Server pagina 3-4 - 5 CMS e template pagina 6-7-8 Tim Berners-Lee

Dettagli

A cura di.denis Celotti.. Installazione. Linguaggio specifico e primi passi con wordpress

A cura di.denis Celotti.. Installazione. Linguaggio specifico e primi passi con wordpress A cura di.denis Celotti.. 02/05/2012 Installazione Linguaggio specifico e primi passi con wordpress In breve Conoscere il significato di hosting, database, dominio e template Saper identificare e utilizzare

Dettagli

Corso Joomla per ATAB

Corso Joomla per ATAB Corso Joomla per ATAB Cos'è un Content Management System Joomla non è un prodotto ma è un progetto. Nato nel settembre 2005 CMS (Content management system) letteralmente significa "Sistema di gestione

Dettagli

Installazione e guida introduttiva. Per WebReporter 2012

Installazione e guida introduttiva. Per WebReporter 2012 Per WebReporter 2012 Ultimo aggiornamento: 13 settembre, 2012 Indice Installazione dei componenti essenziali... 1 Panoramica... 1 Passo 1 : Abilitare gli Internet Information Services... 1 Passo 2: Eseguire

Dettagli

Cos'è XTOTEM FREESTYLE. Cosa si può fare con XTOTEM. Perché usare XTOTEM

Cos'è XTOTEM FREESTYLE. Cosa si può fare con XTOTEM. Perché usare XTOTEM Pagina Cos'è XTOTEM FREESTYLE XTOTEM FREESTYLE è un sistema studiato per gestire Siti Internet e Pannelli Informativi. Con XTOTEM si possono disegnare e modificare siti anche molto complessi senza la necessità

Dettagli

Prodotti. Introduzione. CMS: Content Management System: che cos'è, a cosa serve?

Prodotti. Introduzione. CMS: Content Management System: che cos'è, a cosa serve? Introduzione CMS: Content Management System: che cos'è, a cosa serve? Per riassumerne in poche righe la funzione dei CMS è sufficiente rifarsi alla traduzione letterale della definizione inglese: gestione

Dettagli

Piattaforma FaD Formazione a distanza. Manuale di consultazione rapida per l utilizzo della piattaforma di. formazione a distanza di EFA srl

Piattaforma FaD Formazione a distanza. Manuale di consultazione rapida per l utilizzo della piattaforma di. formazione a distanza di EFA srl Piattaforma FaD Formazione a distanza Manuale di consultazione rapida per l utilizzo della piattaforma di formazione a distanza di EFA srl 1 Indice generale 1. Scopo del documento 2. Definizioni e abbreviazioni

Dettagli

Gestionale web. Completa autonomia del tuo sito. Un perfetto mix di tecnologia & creatività. Design la nostra passione

Gestionale web. Completa autonomia del tuo sito. Un perfetto mix di tecnologia & creatività. Design la nostra passione Agenzia creativa di design & comunicazione Gestionale web Completa autonomia del tuo sito Un perfetto mix di tecnologia & creatività Design la nostra passione Vivete l esperienza SITE con noi! A partire

Dettagli

ADA. E learning e open source

ADA. E learning e open source 1 ADA. E learning e open source ADA 1.7.1 Come cresce un Ambiente Digitale per l'apprendimento open source Maurizio Graffio Mazzoneschi 2 Cos'è il software libero Libertà 0, o libertà fondamentale: la

Dettagli

Il sito della scuola con Joomla

Il sito della scuola con Joomla sabato 26 ottobre 2013 LINUX DAY 2013 E OPEN SPACE SCUOLA Il sito della scuola con Joomla a cura di Gianluigi Pelizzari gianpelizzari@yahoo.it Il sito della scuola con Joomla Joomla è un progetto nato

Dettagli

Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in

Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in Informazioni sul copyright 2004 Copyright Hewlett-Packard Development Company, L.P. Sono vietati la riproduzione, l'adattamento e la

Dettagli

Piattaforma e-learning Moodle. Manuale ad uso dello studente. Vers. 1 Luglio 09

Piattaforma e-learning Moodle. Manuale ad uso dello studente. Vers. 1 Luglio 09 Piattaforma e-learning Moodle Manuale ad uso dello studente Vers. 1 Luglio 09 Sommario 1. Introduzione...2 1.1 L ambiente...2 1.2 Requisiti di sistema...4 2. Come accedere alla piattaforma...4 2.1 Cosa

Dettagli

INTRODUZIONE: ALL INCLUSIVE

INTRODUZIONE: ALL INCLUSIVE INTRODUZIONE: ALL INCLUSIVE è l insieme di servizi, strumenti e tecniche che rendono un sito web accessibile e ottimizzato per assicurare che venga rinvenuto nelle prime posizioni sui motori di ricerca.

Dettagli

Configurare attività e risorse in Moodle Parte I - Versione 1 non definitiva. a cura di Patrizio Porcelli. Pag. 1

Configurare attività e risorse in Moodle Parte I - Versione 1 non definitiva. a cura di Patrizio Porcelli. Pag. 1 a cura di Patrizio Porcelli Pag. 1 Uno sguardo d insieme ad un corso in Moodle Pag. 2 Inserire attività e risorse in Moodle Configurare attività e risorse in Moodle Parte I - Versione 1 non definitiva

Dettagli

Manuale Piattaforma Didattica

Manuale Piattaforma Didattica Manuale Piattaforma Didattica Ver. 1.2 Sommario Introduzione... 1 Accesso alla piattaforma... 1 Il profilo personale... 3 Struttura dei singoli insegnamenti... 4 I Forum... 5 I Messaggi... 7 I contenuti

Dettagli

Web Programming Specifiche dei progetti

Web Programming Specifiche dei progetti Web Programming Specifiche dei progetti Paolo Milazzo Anno Accademico 2010/2011 Argomenti trattati nel corso Nel corso di Web Programming sono state descritti i seguenti linguaggi (e tecnologie): HTML

Dettagli

ALL. C AFFIDAMENTO AI SENSI DELL ART. 125, COMMI 10 E 11, DEL D.LGS. 163/2006 E S.M.I. DELLA PROGETTAZIONE E REALIZZAZIONE DI UN

ALL. C AFFIDAMENTO AI SENSI DELL ART. 125, COMMI 10 E 11, DEL D.LGS. 163/2006 E S.M.I. DELLA PROGETTAZIONE E REALIZZAZIONE DI UN ALL. C AFFIDAMENTO AI SENSI DELL ART. 125, COMMI 10 E 11, DEL D.LGS. 163/2006 E S.M.I. DELLA PROGETTAZIONE E REALIZZAZIONE DI UN PORTALE WEB NELL AMBITO DELLA MISURA 2.6. DEL POI ENERGIA FESR 2007 2013

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

CONCORSO MED COMPUTER s.r.l. I.T.I.S. E. Divini. San Severino Marche

CONCORSO MED COMPUTER s.r.l. I.T.I.S. E. Divini. San Severino Marche CONCORSO MED COMPUTER s.r.l. I.T.I.S. E. Divini San Severino Marche Paciaroni Sara e Zega Michela - 1 - Titolo Some news in Med. Lasciatevi travolgere dalle nuove tecnologie. Abstract Oggi sono molte le

Dettagli

Lezione 1. Joomla 2.5

Lezione 1. Joomla 2.5 Lezione 1 Joomla 2.5 Joomla: introduzione Joomla è un cms (content managemente system) opensource. In pratica è un software che permette di realizzare siti web dinamici (l utente interroga il server, il

Dettagli

hottimo procedura di installazione

hottimo procedura di installazione hottimo procedura di installazione LATO SERVER Per un corretto funzionamento di hottimo è necessario in primis installare all interno del server, Microsoft Sql Server 2008 (Versione minima Express Edition)

Dettagli

XFACILE / XTOTEM Pagina 1. Presentazione

XFACILE / XTOTEM Pagina 1. Presentazione XFACILE / XTOTEM Pagina 1 Presentazione XFACILE / XTOTEM Pagina 2 Presentazione XFACILE XTOTEM è un sistema studiato per gestire Siti Internet e Pannelli Informativi. Con XTOTEM si possono disegnare e

Dettagli

Modulo 8. Strumenti di produzione Strumenti. Gli strumenti più utilizzati per produrre pagine Web sono essenzialmente due:

Modulo 8. Strumenti di produzione Strumenti. Gli strumenti più utilizzati per produrre pagine Web sono essenzialmente due: Pagina 1 di 6 Strumenti di produzione Strumenti Gli strumenti più utilizzati per produrre pagine Web sono essenzialmente due: 1. Netscape Composer, gratuito e scaricabile da netscape.org assieme al browser

Dettagli

Albano Squizzato ingsquizzato@libero.it. Moodle-manuale. manuale per il docente. Generazione Web 2013-14 - G9

Albano Squizzato ingsquizzato@libero.it. Moodle-manuale. manuale per il docente. Generazione Web 2013-14 - G9 Albano Squizzato ingsquizzato@libero.it Moodle-manuale manuale per il docente Generazione Web 2013-14 - G9 Come utilizzare Moodle La versatilità di Moodle consente la totale personalizzazione dell interfaccia,

Dettagli

Content Management System

Content Management System Content Management System Docente: Prof. Roberto SALVATORI CARATTERISTICHE PRINCIPALI DI UN CMS In quest ultimo decennio abbiamo avuto modo di osservare una veloce e progressiva evoluzione del Web, portando

Dettagli

Presentazione della famiglia openshare 2.2. 4/30/2003 Infosquare.com 1

Presentazione della famiglia openshare 2.2. 4/30/2003 Infosquare.com 1 Presentazione della famiglia 2.2 4/30/2003 Infosquare.com 1 La piattaforma Un ambiente completo e versatile per la costruzione di portali aziendali Una piattaforma integrata di content management per raccogliere,

Dettagli

porte aperte sull e-learning di Gianluca Affinito gianluca.affinito@gmail.com

porte aperte sull e-learning di Gianluca Affinito gianluca.affinito@gmail.com porte aperte sull e-learning di Gianluca Affinito gianluca.affinito@gmail.com Cos è Moodle Moodle è un software per la gestione di corsi a distanza utilizzato a livello mondiale nelle Università, nelle

Dettagli

Il World Wide Web. Il Web. La nascita del Web. Le idee di base del Web

Il World Wide Web. Il Web. La nascita del Web. Le idee di base del Web Il World Wide Web Il Web Claudio Fornaro ver. 1.3 1 Il World Wide Web (ragnatela di estensione mondiale) o WWW o Web è un sistema di documenti ipertestuali collegati tra loro attraverso Internet Attraverso

Dettagli

TECNOLOGIE DELL INFORMAZIONE E DELLA COMUNICAZIONE (T.I.C.)

TECNOLOGIE DELL INFORMAZIONE E DELLA COMUNICAZIONE (T.I.C.) TECNOLOGIE DELL INFORMAZIONE E DELLA COMUNICAZIONE (T.I.C.) PROGRAMMAZIONE INIZIALE ANNO SCOLASTICO: 2014/2015 INSEGNANTE: Teresa Bruno CLASSE: 2 a sez. A Operatore Elettrico SETTORE: Industria e Artigianato

Dettagli

Sistema di autopubblicazione di siti Web

Sistema di autopubblicazione di siti Web Sistema di autopubblicazione di siti Web Manuale d'uso Versione: SW 2.0 Manuale 2.0 Gennaio 2007 CEDCAMERA tutti i diritti sono riservati CEDCAMERA - Manuale d'uso 1 1 Introduzione Benvenuti nel sistema

Dettagli

LO STRUMENTO PRINCIPALE: IL SITO WEB

LO STRUMENTO PRINCIPALE: IL SITO WEB LO STRUMENTO PRINCIPALE: IL SITO WEB 1 Content Management System (CMS) Software (web based) dedicati alla gestione di un sito web: portali, siti aziendali, intranet, blog, Wiki L obiettivo è consentire

Dettagli

Notifica sul Copyright

Notifica sul Copyright Parallels Panel Notifica sul Copyright ISBN: N/A Parallels 660 SW 39 th Street Suite 205 Renton, Washington 98057 USA Telefono: +1 (425) 282 6400 Fax: +1 (425) 282 6444 Copyright 1999-2009, Parallels,

Dettagli

GFI Product Manual. ReportPack

GFI Product Manual. ReportPack GFI Product Manual ReportPack http://www.gfi.com info@gfi.com Le informazioni contenute nel presente documento sono soggette a modifiche senza preavviso. Salvo se indicato diversamente, le società, i nomi

Dettagli

Tilde WCM. Data. Moduli base. Versione 1.0. 29 Settembre 2011. giovedì 29 settembre 11

Tilde WCM. Data. Moduli base. Versione 1.0. 29 Settembre 2011. giovedì 29 settembre 11 Tilde WCM Moduli base Versione 1.0 29 Settembre 2011 Data IL CMS TILDE Il CMS o Content Management System, è lo strumento maggiormente utilizzato in qualsiasi progetto web. Ormai viene attivato su qualsiasi

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 3 Martedì 15-10-2013 1 Struttura ed organizzazione software dei sistemi

Dettagli

Piattaforma e-learning Unifi Guida rapida per gli studenti

Piattaforma e-learning Unifi Guida rapida per gli studenti Piattaforma e-learning Unifi Guida rapida per gli studenti Premessa: La piattaforma utilizzata per le attività a distanza è Moodle, un software per la gestione di corsi online. Dal punto di vista dello

Dettagli

Plone all Università di Ferrara - Case Study

Plone all Università di Ferrara - Case Study Plone all Università di Ferrara - Case Study Francesco Margutti, Cesare Stefanelli, Luca Tebaldi Università di Ferrara, Italia {francesco.margutti, cesare.stefanelli, luca.tebaldi}@unife.it 1. L Università

Dettagli

Relazione finale del progetto Sito Alunni Segrè

Relazione finale del progetto Sito Alunni Segrè Relazione finale del progetto Sito Alunni Segrè 1. Descrizione di contenuti, tempi, luoghi, fasi, modalità, strumenti e protagonisti Il progetto ha previsto la realizzazione da parte degli alunni dell

Dettagli

CAPITOLO 1 I SISTEMI OPERATIVI

CAPITOLO 1 I SISTEMI OPERATIVI CAPITOLO 1 I SISTEMI OPERATIVI Introduzione ai sistemi operativi pag. 3 La shell pag. 3 Tipi di sistemi operativi pag. 4 I servizi del sistema operativo pag. 4 La gestione dei file e il file system Il

Dettagli

GIOVANNI CALABRESE. Sito E-learning Istituto Tridente. Guida all utilizzo di Moodle per gli studenti

GIOVANNI CALABRESE. Sito E-learning Istituto Tridente. Guida all utilizzo di Moodle per gli studenti GIOVANNI CALABRESE Sito E-learning Istituto Tridente Guida all utilizzo di Moodle per gli studenti Sommario 1. COS È MOODLE... 1 1.1 Requisiti necessari...1 1.2 Configurazione del browser...1 Impostazione

Dettagli

CONTENT MANAGEMENT SYSTEM

CONTENT MANAGEMENT SYSTEM CONTENT MANAGEMENT SYSTEM P-2 PARLARE IN MULTICANALE Creare un portale complesso e ricco di informazioni continuamente aggiornate, disponibile su più canali (web, mobile, iphone, ipad) richiede competenze

Dettagli

ADOBE FLASH PLAYER 10.3 Pannello di controllo nativo

ADOBE FLASH PLAYER 10.3 Pannello di controllo nativo ADOBE FLASH PLAYER 10.3 Pannello di controllo nativo Note legali Note legali Per consultare le note legali, vedete http://help.adobe.com/it_it/legalnotices/index.html. iii Sommario Memorizzazione.......................................................................................................

Dettagli

CMS Open Source Evento Open Source Asolo Golf Club - 29 giugno 2005

CMS Open Source Evento Open Source Asolo Golf Club - 29 giugno 2005 CMS Open Source Evento Open Source Asolo Golf Club - 29 giugno 2005 Fabio Bottega (f.bottega@tecnoteca.it) I punti focali: CMS = comunicazione Gli attori coinvolti Scelta di un CMS Open Source CMS di riferimento

Dettagli

Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0)

Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0) Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0) Nota Bene: Si raccomanda di leggere queste dispense di fronte al computer, provando passo dopo passo le funzionalità descritte. Per

Dettagli

Corso di PHP. Prerequisiti. 1 - Introduzione

Corso di PHP. Prerequisiti. 1 - Introduzione Corso di PHP 1 - Introduzione 1 Prerequisiti Conoscenza HTML Principi di programmazione web Saper progettare un algoritmo Saper usare un sistema operativo Conoscere il concetto di espressione 2 1 Introduzione

Dettagli

Come portare la vostra intranet su IBM i con Drupal e Zend Server

Come portare la vostra intranet su IBM i con Drupal e Zend Server Come portare la vostra intranet su IBM i con Drupal e Zend Server by Enrico Zimuel Senior Consultant & Architect Zend Technologies Email: enrico.z@zend.com Copyright 2007, Zend Technologies Inc. Sommario

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

MANUALE UTENTE GESTIONE SITO SVILUPPATO IN TYPO3

MANUALE UTENTE GESTIONE SITO SVILUPPATO IN TYPO3 Pag.1 di 23 MANUALE UTENTE GESTIONE SITO SVILUPPATO IN TYPO3 Pag.2 di 23 INDICE 1. Introduzione... 3 1.1. Premessa documento... 3 1.2. Caratteristiche Typo3... 3 1.3. Backend e Frontend... 3 1.4. Struttura

Dettagli

GPL4i DMS-WEB. Copyright 2010 2014 JetLab S.r.l. Tutti i diritti riservati

GPL4i DMS-WEB. Copyright 2010 2014 JetLab S.r.l. Tutti i diritti riservati GPL4i DMS-WEB Copyright 2010 2014 JetLab S.r.l. Tutti i diritti riservati Copyright 2014 2015 JetLab S.r.l. Tutti i diritti riservati GPL4i è un marchio di JetLab S.r.l. Microsoft, Windows, Windows NT,

Dettagli

Giardinerie Digitali Evoco di Coppola Nicola. Web Marketing Bologna - Consulenza Progetti Comunicazione Online

Giardinerie Digitali Evoco di Coppola Nicola. Web Marketing Bologna - Consulenza Progetti Comunicazione Online Presentazione di Karmaleon CMS- Software per siti Web Cosa è Karmaleon è un software che permette la gestione automatizzata di siti e Portali Internet, multilingua e ottimizzato per Motori di Ricerca,

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Web Autore: Davide Revisione: 1.2 Data: 23/5/2013 Titolo: Innopedia File: Documentazione_tecnica Sito: http://inno-school.netsons.org/ Indice: 1. Presentazione

Dettagli

Sistemi per la produzione, gestione e conservazione di contenuti digitali CMS. L12 - Comunicazione e archiviazione digitale A.A 2015-2016.

Sistemi per la produzione, gestione e conservazione di contenuti digitali CMS. L12 - Comunicazione e archiviazione digitale A.A 2015-2016. Sistemi per la produzione, gestione e conservazione di contenuti digitali L12 - Comunicazione e archiviazione digitale A.A 2015-2016 Carlo Savoretti carlo.savoretti@unimc.it Produzione Contenuti prodotti

Dettagli

ERP Commercio e Servizi

ERP Commercio e Servizi ERP Commercio e Servizi Sistema informativo: una scelta strategica In questi ultimi anni hanno avuto grande affermazione nel mercato mondiale i cosiddetti sistemi software ERP. Tali sistemi sono in grado

Dettagli

BIMPublisher Manuale Tecnico

BIMPublisher Manuale Tecnico Manuale Tecnico Sommario 1 Cos è BIMPublisher...3 2 BIM Services Console...4 3 Installazione e prima configurazione...5 3.1 Configurazione...5 3.2 File di amministrazione...7 3.3 Database...7 3.4 Altre

Dettagli

Il Content Management System Plone

Il Content Management System Plone 1 Il Content Management System Plone Università degli Studi di Ferrara Stefano Marchetti stefano[at]redturtle.net Irene Capatti irene.capatti[at]redturtle.net 14 gennaio 2009 2 Di cosa parliamo Introduzione

Dettagli

Funzioni del Sistema Operativo

Funzioni del Sistema Operativo Il Software I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (ferramenta). La struttura del calcolatore può essere schematizzata come una serie di

Dettagli

Guida all uso di Innovatori PA

Guida all uso di Innovatori PA Guida all uso di Innovatori PA Innovatori PA La rete per l innovazione nella Pubblica Amministrazione Italiana Sommario Sommario... 2 Cos è una comunità di pratica... 3 Creazione della comunità... 3 Gestione

Dettagli

Differenza tra wordpress.com e CMS

Differenza tra wordpress.com e CMS Cosa è WordPress? 1 Differenza tra wordpress.com e CMS Il team di WP ha creato 2 siti differenti: wordpress.com ovvero un portale dove chiunque può creare un blog (gratuitamente) wordpress.org dove possiamo

Dettagli

Presentazione funzionale. (utente redattore) Portale SPORVIC

Presentazione funzionale. (utente redattore) Portale SPORVIC TD Group S.p.A. www.tdgroup.it Presentazione funzionale (utente redattore) Portale SPORVIC TD Group S.p.A. Via del Fischione, 19 56019 Vecchiano - Migliarino P. (PI) Tel. (+39) 050.8971 Fax (+39) 050.897

Dettagli

Piattaforma Digital Signage

Piattaforma Digital Signage Piattaforma Digital Signage La piattaforma MSO Gold Il Digital Signage è una nuova forma di comunicazione innovativa e dinamica che prevede la distribuzione di contenuti digitali da remoto o localmente,

Dettagli

Informativa Privacy del sito internet www.consulenzaing.com

Informativa Privacy del sito internet www.consulenzaing.com Informativa Privacy del sito internet www.consulenzaing.com In questa pagina si descrivono le modalità di gestione dell informativa privacy del sito in riferimento al trattamento dei dati personali degli

Dettagli

Utilizzo di Conference Manager per Microsoft Outlook

Utilizzo di Conference Manager per Microsoft Outlook Utilizzo di Conference Manager per Microsoft Outlook Maggio 2012 Sommario Capitolo 1: Utilizzo di Conference Manager per Microsoft Outlook... 5 Presentazione di Conference Manager per Microsoft Outlook...

Dettagli

Corso Creare Siti WEB

Corso Creare Siti WEB Corso Creare Siti WEB INTERNET e IL WEB Funzionamento Servizi di base HTML CMS JOOMLA Installazione Aspetto Grafico Template Contenuto Articoli Immagini Menu Estensioni Sito di esempio: Associazione LaMiassociazione

Dettagli

Facoltà di Ingegneria

Facoltà di Ingegneria Facoltà di Ingegneria Corso di laurea in Ingegneria dell Informazione FONDAMENTI DI INFORMATICA PRIMA PARTE Manuale di Installazione dell ECMs SharePoint PROFESSORE: STUDENTE: Prof. Mario Bochicchio Paiano

Dettagli

PER FARE UN SITO INTERNET

PER FARE UN SITO INTERNET Diocesi Brescia Corso per animatori della Cultura e della Comunicazione PER FARE UN SITO INTERNET I diversi modelli di siti Internet. Dove e come pubblicarlo. INTERNET Rete di computer mondiale ad accesso

Dettagli

IL SOFTWARE TIPI DI SOFTWARE. MACCHINE VIRTUALI Vengono definite così perché sono SIMULATE DAL SOFTWARE, UNIFORMANO L ACCESSO SISTEMA OPERATIVO

IL SOFTWARE TIPI DI SOFTWARE. MACCHINE VIRTUALI Vengono definite così perché sono SIMULATE DAL SOFTWARE, UNIFORMANO L ACCESSO SISTEMA OPERATIVO IL SOFTWARE L HARDWARE da solo non è sufficiente a far funzionare un computer Servono dei PROGRAMMI (SOFTWARE) per: o Far interagire, mettere in comunicazione, le varie componenti hardware tra loro o Sfruttare

Dettagli

GUIDA DOCENTE PIATTAFORMA E-LEARNING MOODLE

GUIDA DOCENTE PIATTAFORMA E-LEARNING MOODLE GUIDA DOCENTE PIATTAFORMA E-LEARNING MOODLE Università degli Studi di Bergamo Centro per le Tecnologie Didattiche e la Comunicazione GUIDA ANALITICA PER ARGOMENTI ACCESSO...2 RISORSE e ATTIVITA - Introduzione...5

Dettagli

UNIVERSITÀ DEGLI STUDI DI PADOVA

UNIVERSITÀ DEGLI STUDI DI PADOVA UNIVERSITÀ DEGLI STUDI DI PADOVA Configurazione di Thunderbird Febbraio 2011 di Alessandro Pescarolo SOMMARIO Sommario... 1 Introduzione... 2 Installazione su Windows... 2 Configurazione iniziale (per

Dettagli

Ministerial NEtwoRk for Valorising Activities in digitisation. Museo & Web CMS Una piattaforma open source per la gestione di siti web accessibili

Ministerial NEtwoRk for Valorising Activities in digitisation. Museo & Web CMS Una piattaforma open source per la gestione di siti web accessibili Ministerial NEtwoRk for Valorising Activities in digitisation Museo & Web CMS Una piattaforma open source per la gestione di siti web accessibili Il passo successivo: Museo & Web CMS Piattaforma opensource

Dettagli

Installazione del software - Sommario

Installazione del software - Sommario Guida introduttiva Installazione del software - Sommario Panoramica sulla distribuzione del software CommNet Server Windows Cluster Windows - Virtual Server CommNet Agent Windows Cluster Windows - Virtual

Dettagli

David Coen. Consulenza di immagine commerciale. Pagina web: davidcoen.altervista.org. Pagina Facebook: David Coen FOTOGRAFO

David Coen. Consulenza di immagine commerciale. Pagina web: davidcoen.altervista.org. Pagina Facebook: David Coen FOTOGRAFO David Coen Consulenza di immagine commerciale Pagina web: davidcoen.altervista.org Pagina Facebook: David Coen FOTOGRAFO David Coen, consulenza di immagine commerciale 2 David Coen - Consulenza di immagine

Dettagli

PROGRAMMA DEL CORSO MASTER WEB DEVELOPER

PROGRAMMA DEL CORSO MASTER WEB DEVELOPER PROGRAMMA DEL CORSO MASTER WEB DEVELOPER Il corso Master Web Developer con Certificazione internazionale Adobe Dreamweaver prepara lo studente a entrare nel mondo dello sviluppo Web (blog, siti, portali).

Dettagli

Guida dell'amministratore di JMP 8 alle versioni con licenza annuale per Windows, Macintosh e Linux

Guida dell'amministratore di JMP 8 alle versioni con licenza annuale per Windows, Macintosh e Linux Guida dell'amministratore di JMP 8 alle versioni con licenza annuale per Windows, Macintosh e Linux Gli estremi corretti per la citazione bibliografica di questo manuale sono i seguenti: SAS Institute

Dettagli

SISTEMA DI MONITORAGGIO DEI CONTRATTI PUBBLICI

SISTEMA DI MONITORAGGIO DEI CONTRATTI PUBBLICI SISTEMA DI MONITORAGGIO DEI CONTRATTI PUBBLICI Programmi Triennali ed Annuali (PROG) Redazione e pubblicazione del programma triennale, dei suoi aggiornamenti annuali e dell'elenco annuale dei lavori pubblici

Dettagli