Internal System : Windows Internal System : Windows Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Sommario CENNI INTRODUTTVI .................................................................................................................................. 2 SCHEDULER ................................................................................................................................................... 2 DESCRIZIONE ..........................................................................................................................................................2 SCHEDULING DELLA CPU ........................................................................................................................................2 OBIETTIVI DELLO SCHEDULING ................................................................................................................................3 VARI ALGORITMI DI SCHEDULING..............................................................................................................................4 THREAD........................................................................................................................................................... 4 DEFINIZIONE DI THREAD ..........................................................................................................................................4 APPLICAZIONI TIPICHE DEI THREAD..........................................................................................................................6 GESTIONE DEI THREAD E SCHEDULING DEI PROCESSI IN WINDOWS ........................................... 7 SYMMETRIC MULTIPROCESSING ...............................................................................................................................7 DIFFERENZE FRA PRODOTTI SERVER E PRODOTTI UTENTE .........................................................................................7 PROCESSI DI SISTEMA FONDAMENTALI ......................................................................................................................8 FOCUS SULLO SCHEDULING DI WINDOWS .................................................................................................................8 LIVELLI DI PRIORITÀ.................................................................................................................................................8 AUMENTO DI PRIORITÀ .............................................................................................................................................9 ALBERO DEI PROCESSI SU WINDOWS .........................................................................................................................9 ALTRI STRUMENTI DI VISUALIZZAZIONE INFORMAZIONI SUI PROCESSI .......................................................................11 SERVIZI DI WINDOWS ................................................................................................................................. 12 GESTIONE DEI SERVIZI ...........................................................................................................................................13 SERVIZI PRINCIPALI WINDOWS ................................................................................................................................13 GESTIONE MEMORIA WINDOWS ............................................................................................................ 14 PROCESSI E SPAZI DEGLI INDIRIZZI .........................................................................................................................14 FILE DI PAGING .....................................................................................................................................................15 PRESTAZIONI, LIMITI DELL'ARCHITETTURA E MEMORIA RAM ...................................................................................15 MONITORAGGIO DELLA MEMORIA RAM E UTILIZZO DELLA MEMORIA VIRTUALE .......................................................16 PROCESSORI A 64 BIT E SPAZIO DI INDIRIZZAMENTO................................................................................................17 Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Cenni introduttvi Windows, come tanti altri sistemi operativi, si basa su concetti fondamentali, che caratterizzano la gestione del lato hardware di un calcolatore, più nello specifico, ci sono delle caratteristiche differenti che differenziano i vari kernel dei sistemi operativi, le unità base di codice che operano al più basso livello di interazione con l’utente, il livello macchina e rendono disponibili alla shell di sistema le varie funzioni di sistema (hardware, periferiche di I/O, etc…). Fondamentalmente un kernel si differenzia per la politica di schedulazione dei processi implementata per ottimizzare l’esecuzione e lo svolgimento di compiti (processi) da parte della CPU e una gestione oculata dei thread (processi figli) che permettono di avere una maggiore parallelizazione nell’esecuzione, e la gestione della memoria. Scheduler In informatica lo scheduler (da to schedule letteralmente "mettere in lista", ovvero "pianificare") è un programma sotto forma di un algoritmo che, dato un insieme di richieste di accesso ad una risorsa (processi), stabilisce un ordinamento temporale per l'esecuzione di tali richieste, privilegiando quelle che rispettano determinati parametri, in modo da ottimizzare l'accesso a tale risorsa e consentire così il completamento dell’operazione in maniera ottimale. L'attenzione posta su alcuni parametri piuttosto che su altri, differenzia la cosiddetta politica di scheduling: solitamente lo scheduler può eseguire le richieste in base al loro ordine di arrivo (politica FIFO), oppure dare precedenza a quelle che impegnano per meno tempo la risorsa; possono esistere politiche che si basano su principi statistici o sulla predizione per individuare un ordinamento delle richieste che si avvicini il più possibile quello ottimale. Descrizione Generalmente l'obiettivo dello scheduling è quello di massimizzare il throughput, ovvero la produttività dell'intero sistema, minimizzando i tempi in cui la risorsa è inutilizzata; cercare l'ordinamento di richieste che minimizza il rapporto tra tempo di servizio (ovvero il tempo che una richiesta impiega per essere soddisfatta) e tempo di "turnaround" (il lasso di tempo che intercorre tra l'istante in cui la richiesta è generata e quello in cui la richiesta è soddisfatta); evitare fenomeni indesiderati come la starvation ovvero "l'attesa eterna" di alcune richieste, verificabile in determinate condizioni; dare all'utilizzatore del sistema la percezione che le richieste vengano soddisfatte contemporaneamente; Esistono in realtà molti requisiti che possono essere presi in considerazione, dipendenti anche dal problema specifico che lo scheduler deve gestire: esistono scheduler che si occupano di suddividere il tempo di uso del processore da parte di un processo, scheduler che gestisono richieste di lettura/scrittura da una periferica, anche gli algoritmi di sostituzione delle pagine della memoria sono da considerarsi "scheduler". Scheduling della CPU Lo scheduling è un'operazione molto importante per il corretto ed efficiente funzionamento del calcolatore. Infatti non solo consente di eseguire più programmi concorrentemente, 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 Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows 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 della CPU 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: la CPU (ovvero il processore) deve essere attiva il più possibile, ovvero devono essere ridotti al minimo i possibili tempi morti. Throughput: il numero di processi completati in una determinata quantità di tempo. Tempo di completamento: il tempo che intercorre tra la sottomissione di un processo ed il completamento della sua esecuzione. Tempo d'attesa: il tempo in cui un processo pronto per l'esecuzione rimane in attesa della CPU (wait time). Tempo di risposta: il tempo che trascorre tra la sottomissione del processo e l'ottenimento della prima risposta. Per analizzare gli algoritmi che verranno successivamente presentati verrà utilizzato il criterio del tempo d'attesa medio dei processi presi in considerazione. Obiettivi dello scheduling Un algoritmo di scheduling si pone i seguenti obiettivi: Fairness (equità): processi dello stesso tipo devono avere trattamenti simili Balance (bilanciamento): tutte le parti del sistema devono essere sfruttate Inoltre bisogna effettuare un distinguo tra i sistemi batch e i sistemi interattivi. Nei primi il throughput deve essere massimizzato e il Tempo di Turnaround deve essere minimizzato. Nei secondi, i sistemi interattivi, 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. Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Vari algoritmi di scheduling Esistono vari tipi di algoritmi di scheduling, ognuno con alcuni pregi e alcuni difetti, vediamone in dettaglio i più importanti: FCFS - L'algoritmo FCFS (First Come First Served) è un tipo di algoritmo FIFO: esegue i processi nello stesso ordine in cui essi vengono sottomessi al sistema. Il primo processo ad essere eseguito è esattamente quello che per primo richiede l'uso della CPU. Quelli successivi vengono serviti non appena questo ha terminato la propria esecuzione, e così avviene successivamente per tutti gli altri posti in coda. Questo tipo di algoritmo è molto semplice da implementare ma solitamente è anche poco efficiente, almeno considerando il tempo medio d'attesa. RR – L'algoritmo di scheduling RR (Round Robin) è un particolare algoritmo di tipo preemptive che esegue i processi nell'ordine d'arrivo, come il FCFS, ma esegue la prelazione del processo in esecuzione, ponendolo alla fine della coda dei processi in attesa, qualora l'esecuzione duri più del quanto di tempo stabilito, e facendo proseguire l'esecuzione al successivo processo in attesa. SRTF - L'algoritmo SRTF (Shortest Remaining Time First) si differenzia per il fatto che, quando viene sottomesso un nuovo processo la cui durata è minore del tempo necessario al processo in esecuzione per portare a terminare la propria sessione, lo scheduler provvede ad effettuare un context switch e assegna l'uso della CPU al nuovo processo. Multilevel Feedback - Non potendo stimare con precisione il tempo di esecuzione di un processo nel momento in cui entrerà nel sistema, vi è la possibilità di stimare il tempo trascorso. Viene introdotto il concetto di Feedback secondo il quale si penalizzano i processi che hanno speso più tempo nel sistema. Lo scheduling Multilevel Feedback (o Feedback con code multiple) è uno scheduling basato su quanti di tempo ed utilizza un meccanismo di priorità dinamica. Quando un processo entra nel sistema gli viene assegnata una priorità secondo criteri prefissati e viene inserito in una coda con un quanto di tempo fissato. Se il processo che si trova in stato di Running, finisce il suo quanto di tempo, viene spostato in una coda con un quanto di tempo più grande ma con una priorità minore. Ogni coda è gestita attraverso l'algoritmo di Round Robin, tutte tranne l'ultima che è servita tramite FCFS. Caratteristiche: o Favorisce processi più corti; o Con alcuni accorgimenti è possibile evitare condizioni di Starvation. Thread Un thread è una suddivisione di un processo in due o più filoni o sottoprocessi, che vengono eseguiti concorrentemente da un sistema di elaborazione monoprocessore (multithreading) o multiprocessore. Quindi un thread è una parte di programma che può essere eseguita in modo indipendente, contemporaneamente ad altri thread, così da sfruttare al meglio le risorse hardware. Molte grosse applicazioni, come Photoshop, sono multithreaded, cioè usano più thread per eseguire lavori simultanei su più CPU. Definizione di thread La specifica implementazione dei thread e dei processi dipende dal sistema operativo, ma, in generale, si può dire che un thread è contenuto all'interno di un processo, e che diversi thread contenuti nello stesso processo condividono alcune risorse (lo spazio d'indirizzamento del processo), mentre processi differenti non condividono le loro risorse. Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Un thread è composto principalmente da tre elementi: program counter valori nei registri stack Le risorse condivise con gli altri threads di uno stesso task sono essenzialmente: la sezione di codice la sezione di dati le risorse del sistema operativo Nelle architetture a processore singolo, quando la CPU esegue alternativamente istruzioni di thread differenti, si parla di multithreading a divisione di tempo: la commutazione fra i thread avviene di solito tanto frequentemente da dare all'utente l'impressione che tutti i task siano eseguiti contemporaneamente. Nelle architetture multi-processore i thread vengono invece realmente eseguiti contemporaneamente cioè in parallelo, ciascuno su un distinto core. Quando delle azioni sono effettuate a livello di thread tutta l'informazione di stato riguardante l'esecuzione viene tenuta in strutture dati a livello di thread. Ci sono, comunque, molte azioni che influiscono su tutti i thread di un processo e che il sistema operativo deve gestire a livello di processo. A questo genere di azioni appartengono la sospensione e la terminazione di un processo. In entrambi i casi, la rimozione dalla memoria dello spazio di indirizzamento si ripercuote su tutti i thread che condividono quello spazio di indirizzamento e che entrano quindi tutti insieme nello stato di sospensione o di terminazione. Come i processi anche i thread hanno uno stato di esecuzione e possono sincronizzarsi tra loro. Gli stati di un thread sono: Ready – Un thread nello stato di ready (pronto) è in attesa di esecuzione Deferred ready – Questo stato è usato per thread che sono stati selezionati per essere eseguiti su specifici processor ma che non hanno ancora iniziato l’esecuzione. Standby – Un thread in standby è stato selezionato per essere eseguito prossimamente in un particolare processore Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Running - Quando un thread è pronto per l’esecuzione viene messo nello stato di run e appunto viene eseguito fin quando non arriva un altro thread di maggiore priorità oppure si esaurisce il quanto di tempo Waiting – Un thread entra nello stato di attesa per un qualsiasi motivo, fra i quali può esserci una attesa di terminare una operazione di I/O, entrata volontaria in attesa, richiesta di risorsa hardware occupata, etc... Transition – Un thread entra in questo stato quando è pronto per l’esecuzione ma il kernel ha finito le pagine di memoria Terminated – Ultimo stato di un thread, quando viene terminato, appunto assume questo stato Initialized – Questo stato è definite internamente e si riferisce a quando il thread viene creato Ci sono quattro operazioni di base associate ai cambiamenti di stato di un thread. Creazione: quando un processo viene creato, si crea anche un thread. Successivamente un thread può creare un altro thread a cui deve fornire il puntatore delle istruzioni e gli argomenti: vengono creati un contesto per i registri e gli stack, e il nuovo thread è messo nella coda dei ready. Blocco: quando un thread deve aspettare un particolare evento entra in stato blocked (salvando i registri utente, il program counter e lo stack pointer) Sblocco: quando si verifica l'evento per cui il processo era stato posto in stato blocked, il thread passa allo stato ready. Terminazione: quando un thread completa il suo compito, il suo contesto per i registri e i suoi stack vengono deallocati. Applicazioni tipiche dei thread Applicazioni tipiche dei thread sono la parallelizzazione di un programma per sfruttare i moderni processori multi core: infatti, un singolo thread può essere eseguito su un solo core per volta. Nelle interfacce utente, i thread sono usati estensivamente per evitare di congelare l'interfaccia quando il programma sta eseguendo un altro compito in background. Per esempio, un browser Web può scorrere una pagina web anche se il suo caricamento non è completato; allo stesso modo, i controlli di un lettore multimediale sono accessibili anche mentre il lettore sta riproducendo un filmato. Il vantaggio principale dei Thread è nelle prestazioni: operazioni come creazione, terminazione e cambio tra due thread di un processo richiedono meno tempo rispetto alla creazione, terminazione e cambio di processi. I thread migliorano anche l'efficienza della comunicazione fra i programmi in esecuzione. Nella maggior parte dei sistemi operativi, la comunicazione fra processi indipendenti richiede l'intervento del kernel per fornire un meccanismo di protezione e di comunicazione. Comunque, poiché i thread all'interno di uno stesso processo condividono memoria e file, possono comunicare fra loro senza chiamare il kernel. Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Gestione dei thread e scheduling dei processi in windows Capitolo a parte merita la gestione dei processi su windows, su cui ci concentreremo particolarmente. Partiamo dal fatto che windows utilizza l’algoritmo di scheduling Multilevel Feedback, di cui abbiamo parlato in precedenza, e ricordiamo che vi è introdotto il concetto di Feedback secondo il quale si penalizzano i processi che hanno speso più tempo nel sistema. Lo scheduling Multilevel Feedback (o Feedback con code multiple) è uno scheduling basato su quanti di tempo ed utilizza un meccanismo di priorità dinamica. Quando un processo entra nel sistema gli viene assegnata una priorità secondo criteri prefissati e viene inserito in una coda con un quanto di tempo fissato. Se il processo che si trova in stato di Running, finisce il suo quanto di tempo, viene spostato in una coda con un quanto di tempo più grande ma con una priorità minore. Ogni coda è gestita attraverso l'algoritmo di Round Robin, tutte tranne l'ultima che è servita tramite FCFS. Peculiarietà che differenzia l’implementazione nel kernel windows del multilevel feedback, è una gestione molto più approfondita e sicura dei processi con priorità, in pratica c’è una divisione fra User Mode e Kernel Mode. Per proteggere la scrittura da parte dei processi di file critici di sistema e la modifica, esiste questa differenziazione fra processi in esecuzione kernel e user. Le applicazioni utente lavorano in modalità User mode, mentre il codice di Sistema (come servizi kernel e driver) sono eseguiti in kernel mode, questo gli consente di avere l’accesso completo alla memoria di sistema e alla CPU. Symmetric Multiprocessing Il multitasking è la tecnica per condividere un singolo processore usando thread multipli per ogni processo in esecuzione. Quando il computer possiede più di una unità di elaborazione (sistemi multi processore o sistemi multi core), i thread vengono eseguiti simultaneamente, avendo come risultato una parallelizazione che ha effetti molto positivi sulle prestazioni. Windows è un SO a simmetrizzazione multiprocessore (SMP), non c’è un vero e proprio processore principale, il Sistema operative è diviso in thread e viene diviso per essere eseguito su uno qualsiasi dei processori. Questo modello è in contrasto con il modello asimmetrico (ASMP), che tipicamente sceglie un processore come target su cui eseguire esclusivamente il kernel di sistema, e i rimanenti processori per eseguire il normale codice utente (user code). Differenze fra prodotti server e prodotti utente Come sappiamo, le versioni di windows sono chiamate con una nomenclatura diversa a seconda della specificità per cui sono state sviluppate, in questo caso le version server e home (utente). Esistono delle sostanziali differenze che si possono ridurre ad una serie di punti fondamentali: Il numero di processori supportati (in termini di chip fisici, non core o thread) L’ammontare di memoria RAM supportata Il numero di connessioni di rete supportate (la versione utente per esempio supporta un massimo di 10 connessioni concorrenti) Supporto per il media center Supporto per caratteristiche prettamente di stampo utente, quali temi, animazioni etc Supporto a feautures come BitLocker e varie altre funzioni di criptazione e sicurezza, firewall etc Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Processi di sistema fondamentali Fra i vari processi in esecuzione nel Sistema operative di casa Microsoft, ce ne sono alcuni fondamentali e sempre presenti: Idle process (contiene un thread per CPU per salvare il tempo di CPU in idle) System process (contiene le majority dei thread di sistema kernel mode) Session manager (Smss.exe) Local session manager (Lsm.exe) Windows subsystem Csrss.exe) Session 0 inizialization (Wininit.exe) Logon process (Winlogon.exe) Service control manager (Services.exe) e tutti I processi figli che crea come servizi di rete e gestione host Local security authentication server (Lsass.exe) Svchost.exe Focus sullo scheduling di Windows Windows implementa uno scheduling con priorità di tipo preemptive, viene così eseguito il processo con più priorità fra quelli in coda. Ogni processo può essere limitato oppure no ad essere eseguito su un determinato processore, questa caratteristica viene detta processor affinity, e l’affinità può essere decisa dallo sviluppatore in fase di stesura del codice, facendo si che 2 o più thread dello stesso programma abbiano processor affinity diversi. Quando un thread è stato selezionato per essere avviato, esso viene eseguito per un determinato tempo che viene chiamato quanto di tempo, questo quanto è un intervallo di tempo in cui il thread è in esecuzione, scaduto il quale, un altro thread con la stessa priorità è mandato in esecuzione. Il quanto di tempo può variare in base a varie ragioni: La configurazione del sistema (quanto lungo o corto, quanto variabile o fisso e separazione di priorità) Stato di background o foreground del processo Uso di oggetti che alterano il quanto Quando si verifica la fine del time slice (quanto di tempo) e magari il processo era ancora incompleto, si verifica il context switch, la procedura che permette di salvare lo stato attuale del processo (registri, PC, PID, IR, etc…), in modo da poterne riprendere l’esecuzione non appena ritoccherà al processo o thread. Livelli di priorità L’algoritmo di scheduling di windows come abbiamo detto in precedenza, utilizza un sistema di tipo preemptive basato sulla priorità, precisamente su 32 livelli di priorità che andreamo ad analizzare nel dettaglio seguentemente: Sedici livelli real time (da 16 a 31) Sedici livelli variabili (da 0 a 15), il livello 0 è riservato per il thread zero page Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Nel dettaglio nella figura sotto le priorità e i relativi livelli Aumento di priorità Lo schedulatore di windows talvolta aggiusta la priorità di un thread o processo usando un meccanismo di boost-priority interno predefinito. Ecco alcuni scenari possibili che causano questo “boost”: Boost al seguito del completamento di una operazione di I/O Boost a seguito di una attesa troppo lunga da parte del thread o processo, per evitare la starvation Boost al seguito di una troppa attesa nello stato di “pronto” di un processo o thread, per evitare la starvation (tecnica dell’inversione di priorità) Le versioni di windows per gli utenti poi, presentano altri meccanismi di boost della priorità, a seguito di riproduzioni multimediali per esempio. Albero dei processi su windows Procederemo ora ad illustrare come poter visualizzare le informazioni su un qualsiasi thread, come padre o il PID del padre (creatore) (utilizzando il performance monitor fornito su windows negli strument di debug). Oppure dati più particolari come una visuale ad albero dei processi in esecuzione su windows (utilizzando uno speciale strumento chiamato “Task List”). Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Questo log dello strumento Tlist ci permette appunto di poter analizzare a fondo la struttura gerarchizzata dei processi e i thread, con relativi PID e diramazioni. Per accedere a questo strumento bisogna aprire un terminale con il comando esegui “cmd”, e successivamente digitare “tasklist /t”. Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows In quest’ altro caso invece abbiamo analizzato tutte le altre informazioni relative ai processi, tramite il Performance Monitor, reperibile nel percorso Pannello di controllo / Strumenti di amministrazione. Altri strumenti di visualizzazione informazioni sui processi Oltre agli strumenti illustrati poche righe fa, esistono anche degli altri strumenti, alcuni con più funzionalità essendo adibiti a svolgere essenzialmente un compito solo e specifico, ed alcuni con minori potenzialità essendo software inseriti all’interno del SO (task manager classico ). Prenderemo in esame appunto, due strumenti, il task manager windows e il Process explorer di sysinternals. Il primo ha ovviamente il vantaggio di essere integrato in qualsiasi SO della microsoft, strumento base per la gestione e visualizzazione dei processi, permette di visualizzare alcuni parametri come Session ID, utilizzo della CPU, stato della CPU, qualsiasi informazione sulla memoria come stato, spazio allocato, spazio libero, spazio paginato e non, priorità e thread. Il secondo programma invece, Process Explorer, ha la peculiaretà di avere molte più funzioni avanzate che rende a disposizione dell’utente esperto. Ecco alcune delle caratteristiche aggiuntive di cui è fornito: Process secuirty token, una lista di privilegi e gruppi in cui è registrato ogni singolo processo che security token ha. Lista dei servizi interni ai processi Visualizzazione dei cambiamenti di thread e processi Processi che si basano su tecnologia .NET e specifici dettagli su di essi Ora di avvio di un processo o thread Lista di file mappati in memoria Abilità di sospendere un processo o thread Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Abilità di uccidere un determinato thread Visualizzazione ad albero dei processi Lista delle DLL in un processo Attività di un thread senza processo User mode e kernel mode thread stack Statistiche molto accurate su uso CPU e memoria Una cattura di schermata che illustra la GUI del Process Explorer Servizi di windows Un servizio di Windows è un programma eseguibile che svolge compiti specifici e che è progettato per non dover richiedere l'intervento dell'utente. Un servizio è un programma eseguito in background per fornire funzionalità di basso livello, strettamente integrate con il sistema operativo, a componenti di Windows o ad applicazioni. Normalmente i servizi di Windows vengono avviati quando il sistema operativo Windows è avviato, e girano in background per tutto il tempo durante il quale gira Windows. Concettualmente sono simili ai daemon di Unix. La lista dei servizi attivi appare nell'elenco dei processi di Windows Task Manager, normalmente associati agli username SYSTEM, SERVIZIO LOCALE o SERVIZIO DI RETE, sebbene non tutti i processi con username SYSTEM siano servizi. Molti servizi operano a livello molto basso, per esempio interagendo direttamente con l’hardware e vengono quindi eseguiti sotto l’account System, che ha il massimo livello di privilegi. Se aprite la citata finestra Servizi (eseguibile anche attraverso Start, Esegui, services.msc) e ne correte l’elenco, scoprirete probabilmente che oltre ai servizi di sistema la vostra configurazione di Windows include anche alcuni servizi applicativi. Alcuni esempi sono Diskeeper, Norton Antivirus Autoprotect Service, Norton Personal Firewall, Symantec Password Validation Service, e altri che vengono installati da applicazioni commerciali per funzionare a stretto contatto col sistema operativo e offrire la massima protezione e le migliori prestazioni. Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Gestione dei servizi Dopo che un servizio è stato installato può essere gestito mediante l'opzione Strumenti di amministrazione del Pannello di controllo di Windows, oppure digitando "Services.msc" nella casella dei comandi di Esegui del menù Start. La console di gestione "Servizi" fornisce: Una breve descrizione delle funzioni eseguite Il percorso del file eseguibile Lo stato corrente del servizio Il tipo di avvio Le dipendenze L'account sotto cui il servizio è in esecuzione Mediante il pannello l'utente può: Avviare, interrompere, sospendere o riavviare i servizi. Specificare i parametri di un servizio. Cambiare il tipo di avvio, scegliendo fra Automatico, Manuale e Disabilitato: Automatico avvia il servizio all'avviamento de sistema, Manuale avvia il servizio quando richiesto dall'utente o quando richiesto da un'applicazione (almeno teoricamente, ma in realtà solo in alcuni casi, a seconda del servizio), Disabilitato disabilita completamente il servizio ed impedisce l'esecuzione delle relative dipendenze, Automatico (Ritardato) nuovo tipo di avvio introdotto dal sistema operativo Windows Vista, che avvia il servizio con un breve intervallo dopo che il sistema ha completato le operazioni critiche di avviamento, in modo che l'avviamento avvenga più velocemente. Cambiare l'account sotto cui il servizio si registra. Configurare le opzioni di ripristino in caso di malfunzionamento. Esportare la lista dei servizi su un file di testo o su un file CSV. Anche in Windows Vista l'utente può manipolare i servizi digitando "services.msc" nella casella dei comandi, accessibile tenendo premuto il tasto windows e premendo il tasto "r". L'uso di MSConfig per gestire i servizi introduce la necessità di rispondere ad un prompt ad ogni riavvio, quindi questo strumento dovrebbe essere usato solo per il tempo strettamente necessario ad apportare al sistema le modifiche desiderate. Il Task Manager può essere sempre usato per fermare un servizio, o per chiuderlo forzatamente (kill) nel caso non risponda. Servizi principali windows Ecco un elenco dei servizi principali che si possono incontrare nei sistemi operativi windows, in un sistema pulito: Netlogon – Accesso alla rete Wuauserv – Aggiornamenti automatici AudioSrv – Audio Windows DHCP – Client DHCP Upnphost – Host di periferiche universali plug & play SENS – Notifica eventi di sistema W32Time – Ora di Windows Spooler - Spooler di stampa TlntSvr – Telnet MSIServer – Windows installer WZCSVC – Zero Configuration reti senza fili Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Gestione memoria windows Nei moderni sistemi operativi quali Windows, le applicazioni e molti processi di sistema fanno sempre riferimento alla memoria utilizzando indirizzi di memoria virtuale. Gli indirizzi di memoria virtuale vengono automaticamente tradotti in indirizzi (RAM) reali dall'hardware. Soltanto gli elementi centrali del kernel del sistema operativo riescono a ignorare tale traduzione dell'indirizzo e usano direttamente gli indirizzi di memoria reale. La memoria virtuale viene comunque utilizzata, anche quando la memoria richiesta da tutti i processi in esecuzione non supera il volume di memoria RAM installata sul sistema. Processi e spazi degli indirizzi A tutti i processi (ad esempio, le applicazioni eseguibili) in esecuzione su una versione di Windows a 32 bit vengono assegnati indirizzi di memoria virtuale (uno spazio di indirizzamento virtuale), che varia da 0 a 4.294.967.295 (2*32-1 = 4 GB), indipendentemente dalla quantità di memoria RAM installata sul computer. Nella configurazione predefinita di Windows, 2 gigabyte (GB) di tale spazio di indirizzamento virtuale sono dedicati all'utilizzo privato di ogni processo. I restanti 2 GB vengono condivisi tra i processi e il sistema operativo. In genere, le applicazioni (ad esempio, Blocco note, Word, Excel e Acrobat Reader) utilizzano soltanto una parte dei 2 GB dello spazio di indirizzo privato. Le pagine di memoria RAM vengono assegnate dal sistema operativo soltanto alle pagine di memoria virtuale in uso. L'opzione Estensione indirizzo fisico (PAE, Physical Address Extension) rappresenta la funzionalità dell'architettura Intel a 32 bit che estende l'indirizzo della memoria fisica RAM a 36 bit. L'opzione PAE non modifica la dimensione dello spazio di indirizzamento virtuale (resta pari a 4 GB), ma soltanto il volume della memoria RAM in uso che può essere indirizzata dal processore. La traduzione tra l'indirizzo di memoria virtuale a 32 bit utilizzato dal codice in esecuzione all'interno di un processo e l'indirizzo della memoria RAM a 36 bit viene gestita in modo automatico e chiaro dall'hardware del computer attenendosi alle tabelle di traduzione gestite dal sistema operativo. Tutte le pagine di memoria virtuale (indirizzo a 32 bit) possono essere associate a qualsiasi pagina di RAM fisica (indirizzo a 36 bit). Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows File di paging La memoria RAM è una risorsa limitata, mentre per scopi più pratici, la memoria virtuale è illimitata. È possibile che vengano eseguiti molti processi e che ciascuno di essi disponga di 2 GB di spazio di indirizzamento virtuale privato. Quando la quantità di memoria utilizzata da tutti i processi supera la memoria RAM disponibile, il sistema operativo sposta le pagine (di 4 KB) di più spazi di indirizzamento virtuale nel disco rigido del computer. In questo modo, viene liberata la memoria RAM per altri utilizzi. Nei sistemi Windows, queste pagine "spostate" vengono memorizzate in più file (file Pagefile.sys) nella radice di una partizione. In ogni partizione del disco può essere presente soltanto uno di questi file. Il percorso e la dimensione del file di paging vengono configurati in Proprietà del sistema. Fare clic su Avanzate, su Prestazioni, quindi selezionare il pulsante Impostazioni. Gli utenti chiedono di frequente come determinare la dimensione da assegnare al file di paging. Non esiste un solo modo per rispondere a questa domanda, poiché dipende dalla quantità di memoria RAM installata e dalla quantità di memoria virtuale richiesta dal carico di lavoro. Se non sono disponibili ulteriori informazioni, si consiglia di impostare una quantità pari a 1,5 volte la quantità di memoria RAM installata. Nei sistemi server, è probabile che l'utente voglia disporre di memoria RAM sufficiente al fine di evitare mancanze e non utilizzare il file di paging. In tali sistemi, non è necessario mantenere un file di paging di grandi dimensioni. Al contrario, se lo spazio su disco è abbondante, mantenere un file di paging di grandi dimensioni (ad esempio, pari a 1,5 volte la dimensione della memoria RAM installata) non causa problemi ed elimina la preoccupazione relativa alla dimensione. Prestazioni, limiti dell'architettura e memoria RAM Su tutti i sistemi di computer, l'aumento del carico di lavoro (il numero di utenti, il volume del lavoro) comporta una riduzione delle prestazioni, ma non in maniera lineare. Un aumento eccessivo del carico o della domanda comporta una significativa riduzione delle prestazioni. Ciò significa, che alcune risorse hanno una esigua disponibilità e sono diventate un collo di bottiglia. In questo caso, la risorsa che dispone di poca memoria non può essere aumentata. È stato raggiunto un limite dell'architettura. Di seguito sono riportati alcuni dei limiti dell'architettura più frequenti in Windows: 2 GB di spazio di indirizzamento virtuale condiviso per il sistema (kernel) 2 GB di spazio di indirizzamento virtuale per ogni processo (modalità utente) 660 MB di memoria PTE di sistema (Windows Server 2003 e versioni precedenti) 470 MB di archiviazione del pool di paging (Windows Server 2003 e versioni precedenti) 256 MB di archiviazione del pool non di paging (Windows Server 2003 e versioni precedenti) Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows Ciò è valido in modo specifico per Windows Server 2003, ma può essere valido anche per Windows XP e Windows 2000. Tuttavia, Windows Vista, Windows Server 2008 e Windows 7 non presentano questi limiti dell'architettura. I limiti per gli utenti e per la memoria kernel (punto 1 e 2, qui) sono i medesimi, ma le risorse kernel quali PTE e vari pool di memoria sono dinamici. Questa nuova funzionalità abilita sia la memoria di paging che quella non di paging. Inoltre, si abilita l'aumento dei PTE e del pool di sessione oltre i limiti sopra citati, fino a esaurire tutto il kernel. Monitoraggio della memoria RAM e utilizzo della memoria virtuale Performance Monitor è il principale strumento per monitorare le prestazioni di sistema e per identificare la posizione del collo di bottiglia. Per avviare Performance Monitor, fare clic su Start, quindi su Pannello di controllo, selezionare Strumenti di amministrazione, quindi fare doppio clic su Performance Monitor. Di seguito è riportato un riepilogo di alcuni importanti contatori e cosa indicano: Memoria, byte vincolati: questo contatore corrisponde a una misurazione della domanda di memoria virtuale. Indica il numero di byte allocati dal processo e a quali il sistema operativo ha vincolato la pagina di memoria RAM o uno slot di pagina nel file di paging (o entrambi). Con l'aumento dei byte vincolati maggiore rispetto alla memoria RAM disponibile, aumenta il paging e anche la dimensione del file di paging in uso. A un certo punto, l'attività di paging inizia a influire in modo significativo sulle prestazioni. Processo, Working Set, _Totale: questo contatore rappresenta una misurazione della memoria virtuale in uso "attivo". Questo contatore indica la quantità di memoria RAM necessaria affinché la memoria virtuale in uso per tutti i processi sia nella memoria RAM. Questo valore è sempre un multiplo di 4.096, ovvero la dimensione di pagina utilizzata in Windows. Quando la richiesta di memoria virtuale supera la disponibilità di memoria RAM, il sistema operativo regola la quantità di memoria virtuale del processo nel Working Set per ottimizzare l'utilizzo della memoria RAM disponibile e ridurre il paging. File di paging, % file di paging in uso: questo contatore rappresenta una misurazione della quantità del file di paging effettivamente utilizzata. Utilizzare questo contatore per determinare se il file di paging dispone di una dimensione appropriata. Quando il contatore raggiunge il valore di 100 vuol dire che il file di paging è pieno e le operazione verranno interrotte. A seconda della volatilità del carico di lavoro, è probabile che l'utente desideri che il file di paging abbia una dimensione sufficiente affinché non ne utilizzi più del 50-70%. Se viene utilizzata la maggior parte del file di paging, disporre di più file di paging su differenti dischi fisici potrebbe comportare un aumento delle prestazioni. Memoria, Pagine/sec: Questo contatore è uno di quelli meno compresi. Se questo contatore indica un valore elevato non sempre significa che il collo di bottiglia relativo alle prestazioni deriva da una carenza di memoria RAM. Il sistema operativo utilizza il sistema di paging per scopi diversi dalla sostituzione delle pagine, a causa di un impiego eccessivo della memoria. Memoria, Output pagine/sec: Questo contatore indica il numero di pagine di memoria virtuale scritte ogni secondo nel file di paging al fine di liberare le pagine di memoria RAM per altri scopi. Questo è il migliore contatore per effettuare un monitoraggio quando si sospetta che il paging rappresenti il proprio collo di bottiglia relativo alle prestazioni. Anche se il numero dei byte vincolati è superiore rispetto alla memoria RAM installata, nel caso in cui il contatore Output pagine/sec indica quasi sempre un valore pari o inferiore a zero significa che non è presente un problema importante relativo alle prestazioni e derivante dalla quantità di RAM insufficiente. Indicatori di limite di architettura: o Memoria, Byte nella cache, o Memoria, byte del pool non di paging, Internal System : Windows – Buonincontri Giovanni, Capasso Aldo Internal System : Windows o o o Memoria, byte del pool di paging, Memoria, byte totali codice di sistema, Memoria, byte totali driver di sistema: Tutti questi contatori rappresentano una misurazione di quanta parte dei 2 GB della parte condivisa dei 4 GB dello spazio di indirizzamento virtuali viene effettivamente utilizzata. Utilizzare questi contatori per determinare se il sistema sta per raggiungere uno dei limiti dell'architettura descritti in precedenza. Memoria, MB disponibili: questo contatore consente di misurare la quantità di memoria RAM disponibile per soddisfare la domanda di memoria virtuale (sia nuove allocazioni che il ripristino di una pagina dal file di paging). Quando la memoria RAM è scarsamente disponibile (ad esempio, il numero dei byte vincolati è superiore rispetto alla memoria RAM installata), il sistema operativo tenta di mantenere una determinata porzione della RAM disponibile per un utilizzo immediato e copia nel file di paging le pagine di memoria virtuale che non sono in uso attivo. Di conseguenza, questo contatore non raggiunge il valore zero e non rappresenta un buon modo per indicare la scarsa disponibilità di memoria RAM del sistema. Processori a 64 Bit e spazio di indirizzamento Come abbiamo detto in precedenza, i processori con una architettura a 64 bit hanno un notevole vantaggio sotto il profilo dello spazio di indirizzamento, che si traduce e si ripercuote sulle applicazioni in esecuzione su sistema. Quantità massima di memoria RAM disponibile per i vari sistemi a 64 bit Windows: Windows XP: Windows Vista Home Basic: Windows Vista Home Premium: Windows Vista Business, Enterprise and Ultimate: Windows 7 Starter: Windows 7 Home Basic: Windows 7 Home Premium: Windows 7 Professional, Enterprise and Ultimate: Windows Server 2003 Standard Edition (RTM, SP1 or SP2): Windows Server 2003 Enterprise Edition: Windows Server 2003 Datacenter Edition: Windows Server 2003 R2 Standard Edition: Windows Server 2003 R2 Enterprise Edition with SP2: Windows Server 2003 R2 Datacenter Edition with SP2: Windows Server 2008 Web Edition: Windows Server 2008 Standard Edition: Windows Server 2008 Enterprise Edition: Windows Server 2008 Datacenter Edition: Windows Server 2008 R2 Web Edition: Windows Server 2008 R2 Foundation Edition: Windows Server 2008 R2 Standard Edition: Windows Server 2008 R2 Enterprise Edition: Windows Server 2008 R2 High Performance Computing Edition: Windows Server 2008 R2 Datacenter Edition: 128 GB 8 GB 16 GB 128+ GB 2 GB 8 GB 16 GB 192 GB 32 GB 64 GB 512 GB 32 GB 2 TB 2 TB 32 GB 32 GB 2 TB 2 TB 32 GB 8 GB 32 GB 2 TB 128 GB 2 TB Internal System : Windows – Buonincontri Giovanni, Capasso Aldo