1 / 273

Introduzione all'uso del computer

Introduzione all'uso del computer. U. n. i. x. Gianluigi Boca boca@pv.infn.it. Trasparenze disponibili su Web all'indirizzo http://www.pv.infn.it/~boca/lezioni/unix/index.htm. The Linux Users' Guide http://www.linuxhq.com/guides/LUG/guide.html. Referenze. Advanced Linux Programming

effie
Télécharger la présentation

Introduzione all'uso del computer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduzione all'uso del computer U n i x Gianluigi Boca boca@pv.infn.it Trasparenze disponibili su Web all'indirizzo http://www.pv.infn.it/~boca/lezioni/unix/index.htm

  2. The Linux Users' Guide http://www.linuxhq.com/guides/LUG/guide.html Referenze Advanced Linux Programming by M.Mitchell, J.Oldham, A.Samuel ISBN 0735710430 Web link per libri su Linux http://www.linux.org/books/index.html

  3. 1 4 7 Monitoring and Utilizing System Resources Numerazione binaria, ottale, esadecimale UNIX fondamentali 8 2 5 Getting started ... Introduzione Shell Programming 9 3 6 Informazioni minimali per usare la C shell su decux1 File managment Text Processing Indice del corso

  4. 1 Numerazione binaria, ottale, esadecimale Questo capitolo tratta di sistemi di numerazione a base diversa da quella decimale alla quale siamo abituati. Impareremo i numeri ottali, cioe’ quelli con base 8, i numeri binari vale a dire quelli con base 2, ed i numeri esadecimali, cioe’ quelli con base 16. Vedremo che questi sistemi di numerazione sono piu’ utili di quello decimale per descivere il contenuto di una qualunque cella di memoria o registro del computer. Questo poiche’ questi ultimi sono sempre composti o da circuiti elettronici o da dispositivi magnetici o da dispositivi ottici che possono assumere solo 2 possibili stati (ON ed OFF; magnetizzazione YES or NO; superficie riflettente o non riflettente etc.) Cosi’ il sistema binario, cioe’ quello che usa solo 2 cifre per descrivere i numeri, diventa il modo piu’ naturale da usare con un computer, per contare i numeri. L’utilita’ della numerazione ottale ed esadecimale discende in sostanza dal fatto che sono sistemi di numerazione piu’ sintetici (uno stesso numero in ottale od esadecimale e’ molto piu’ corto del corrispondente binario) che si possono molto facilmente e direttamente trasformare nel corrispondente numero binario.

  5. 7.1 Numerazioni con basi 2, 8, 16 La base di un sistema di numerazione e’ il numero di simboli (cifre) usati per descrivere i numeri. Il sistema binario usa solo due cifre : 0 ed 1 ; quello ottale usa otto cifre : 0, 1, 2, 3, 4, 5, 6, 7 ; quello decimale, come e’ noto, ne usa dieci , dallo 0 al 9 ; infine quello esadecimale ne usa sedici : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. In tutti i sistemi di numerazione, analogamente al caso della numerazione decimale, si usa la notazioneposizionale Base 10 0 1 2 3 4 5 6 7 8 9 ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nella colonna piu’ a destra riparto da0 10 10 10 11 12 13 14 15 16 17 18 19 Numeri decimali, notazione posizionale : 173.2 = 1x102 + 7x101+ 3x100+ 2x10-1 ho finito le cifre, metto 2 nella colonna piu’ a sinistra e nella colonna piu’ a destra riparto da0 20 20 20

  6. Numeri binari traduzione in numero decimale : 1011.1(2) 1x23+ 0x22 + 1x21+ 1x20+ 1x2-1 =11.5(10) 7.1 Numerazioni con basi 2, 8, 16 Base 10 Base 2 0 1 2 3 4 5 6 7 8 9 0 1 ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nella colonna piu’ a destra riparto da0 10 10 10 11 100 100 100 ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto da0, etc. 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10 11 12 13 14 15 16 17 18 19 20

  7. Numeri ottali traduzione in numero decimale : 172.6(8)1 x 82 + 7 x 81 + 2 x 80+ 6 x 8-1 = 122.75 (10) 7.1 Numerazioni con basi 2, 8, 16 Base 10 Base 2 Base 8 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nella colonna piu’ a destra riparto da0 10 10 10 11 12 13 14 15 16 17 10 11 12 13 14 15 16 17 18 19 ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto da0, etc. 20 20 20 21 22 23 24 20

  8. Numeri esadecimali traduzione in numero decimale : 1B2.6(16)1 x 162+11 x 161+2 x 160+6x16-1 = 434.375 (10) ho finito le cifre, metto 1 in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto da0, etc. 7.1 Numerazioni con basi 2, 8, 16 Base 16 Base 10 Base 2 Base 8 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10 11 12 13 14 15 16 17 10 11 12 13 14 15 16 17 18 19 10 10 10 20 11 12 13 14 21 22 23 24 20

  9. ultimo resto : cifra piu’ significativa Il resto della divisione diventa una cifra binaria primo resto : cifra meno significativa 7.2 Come passare da un numero decimale al corrispondente binario, ottale, esadecimale Direttamente con degli esempi, facciamo vedere coma passare da un numero decimale al corrispondente binario, ottale, esadecimale. Esempio : passare da 29.2 (decimale) al corrispettivo binario Si considera prima la parte intera, eseguendo divisioni successive per 2 fino a quando il risultato fa 0. Le cifre ottenute sono la parte intera del numero binario corrispondente a quello decimale. 1 29 : 2 = 14 14 : 2 = 7 7 : 2 = 3 3 : 2 = 1 1 : 2 = 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 il risultato della divisione e’ 0, il procedimento e’ finito 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1

  10. cifra decimale meno significativa La parte decimale del risultato della moltiplicazione non e’ 0, ma la precisione raggiunta mi soddisfa. Termino il procedimento. primo parte intera : cifra decimale piu’ significativa La parte intera del risultato diventa una cifra binaria. La parte decimale viene ancora moltiplicata per la base 2 Si considera poi la parte decimale, eseguendo moltiplicazioni successive per 2 fino a quando il risultato fa 0 oppure finche’ si e’ raggiunta la precisione desiderata. Le cifre ottenute sono la parte a destra del punto. 2 0.2 x 2 = 0.4 + 0 0 0 0.4 x2 = 0.8 + 0 0 0 0.8 x 2 = 0.6 + 1 1 1 0.6 x 2 = 0.2 + 1 1 1 . 0 0 0 0 0 0 1 1 1 1 1 1 Risultato finale : 29.2 decimale 11101.0011 binario

  11. ultimo resto : cifra piu’ significativa primo resto : cifra meno significativa Esempio : passare da 139 decimale al corrispettivo ottale E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio 1 dell’esempio precedente. Ora eseguo divisioni successive per 8 fino a quando il risultato fa 0. Le cifre ottenute sono il numero ottale corrispondente a quello decimale. il risultato della divisione e’ 0, il procedimento e’ finito 139 : 8 = 17 17 : 8 = 2 2 : 8 = 0 3 3 3 1 1 1 2 2 2 2 2 2 1 1 1 3 3 3 Risultato finale : 139 decimale 213 ottale

  12. ultimo resto : cifra piu’ significativa primo resto : cifra meno significativa Esempio : passare da 139 decimale al corrispettivo esadecimale E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio 1 dell’esempio precedente. Ora eseguo divisioni successive per 16 fino a quando il risultato fa 0. Le cifre ottenute sono il numero esadecimale corrispondente a quello decimale. il risultato della divisione e’ 0, il procedimento e’ finito 139 : 16 = 8 8 : 16= 0 11 11 11 8 8 8 8 8 8 B B B Risultato finale : 139 decimale 8B esadecimale

  13. 7.3 Come passare da un numero ottale od esadecimale al corrispondente binario e viceversa Passare da un numero ottale od esadecimale al corrispondente binario e’ molto facile e viene illustra to negli esempi che seguono. Anche il viceversa non comporta calcoli particolarmente difficili. Capiamo cosi’ anche perche’ i numeri ottali od esadecimale vengano preferiti, quando possibile, ai binari : sono molto piu’ sintetici di quest’ultimi (necessitano di minori numero di digits per descrivere lo stesso numero) e si possono all’occorrenza trasformare in binari molto facilmente.

  14. per ogni cifra ottale scrivo i corrispondenti 3 digits binari il numero binario corrispondente si ottiene accostando nell’ordine i digits binari faccio l’operazione inversa a quella di prima. Sostituisco ai 3 digits binari il corrispondente numero ottale Esempio : passare da 172 ottale al corrispettivo binario 1728 001 111 010 = 11110102 Risultato finale : 172 ottale 1111010 binario Esempio : passare da 1010001 binario al corrispettivo ottale Inizio suddividendo, PARTENDO DA DESTRA, il numero binario di 3 cifre in 3 cifre. Ad ogni terzina sostituisco la corrispondente cifra ottale. 1 010 010 010 010 001 001 001 001 001 001 001 2 010 001 001 001 001 001 010 010 001 2 2 1 1 1 1 2 1 1 Risultato finale : 1010001 binario 121 ottale

  15. per ogni cifra esadeciamle scrivo i corrispondenti 4 digits binari il numero binario corrispondente si ottiene accostando nell’ordine i digits binari faccio l’operazione inversa a quella di prima. Sostituisco ai 4 digits binari il corrispondente numero esadecimale Esempio : passare da 1D8 esadecimale al corrispettivo binario 1D816 0001 1101 1000 = 1110110002 Risultato finale : 1D8 ottale 111011000 binario Esempio : passare da 10111100110 binario al corrispettivo esadecimale Inizio suddividendo, PARTENDO DA DESTRA, il numero binario di 4 cifre in 4 cifre. Ad ogni quaterna sostituisco la corrispondente cifra esadecimale. 0101 0101 0101 101 1110 1110 1110 1110 0110 0110 0110 0110 2 1110 1110 0101 0101 0101 1110 0110 0110 0110 6 6 6 5 5 5 E E E Risultato finale : 10111100110 binario 5E6 esadecimale

  16. riporti 7.4 Somma tra numeri binari, ottali, esadecimali Valgono la stesse regole di somma e di riporto valide pei numeri decimali. Ancora una volta chiariamo queste regole con degli esempi. Esempio : eseguire la somma (decimale) 29 + 233 coi corrispondenti numeri binari, ottali, esadecimali Base 10 Base 2 Base 8 Base 16 1 1 1 1 1 1 1 1 1 1 35 + 351 = 1D + E9 = 29 + 233 = 11101 + 11101001 = 2 6 2 1 0 0 0 0 0 1 1 0 0 6 4 1 0 6

  17. 10100 x = 24 x = 14 x = 1 0 1 0 1 2 5 1 5 7.5 Moltiplicazione tra numeri binari, ottali, esadecimali Valgono la stesse regole di moltiplicazioni parziali valide pei numeri decimali. Ancora una volta chiariamo queste regole con degli esempi. Esempio : eseguire la moltiplicazione (decimale) 20 * 21 coi corrispondenti numeri binari, ottali, esadecimali Base 10 Base 2 Base 8 Base 16 20 x 21 = 1 0 1 0 1 2 5 1 5 20 10100 144 64 40 00000 50 14 10100 1A4 420 00000 644 10100 110100100

  18. 2 Introduzione Computer : insieme di circuiti elettronici + sistemi elettromeccanici (tastiera, stampante, monitors). Puo’ eseguire calcoli ed operazioni basandosi su istruzioni che vengono messe nella memoria allo scopo di manipolare dati (input) e produrre risultati (output) Sequenza di istruzioni = programma Un computer e’ formato (almeno) dalle seguenti parti essenziali 1) Memoria : insieme di dispositivi magnetici (nastri, dischi) ottici (dischi laser) o di circuiti elettronici (ad es. la RAM = random access memory) dove vengono conservate le informazioni (istruzioni dei programmi, dati di input, dati di output). La memoria a rapido accesso di solito e’ di dimensioni non molto grandi ed e’ di tipo transitorio. Vi accede di solito la CPU durante il processo di calcolo. La memoria di massa invece e’ di tipo permanente, e serve per immagazzinare grandi quantita’ di dati, e vi si accede in modo piu’ lento. Ciascun insieme di dati e’ chiamato file.

  19. Parte centrale Memoria RAM periferica periferica ingresso uscita CPU Memoria di massa periferica 2) CPU (central processor unit) costituito da (almeno) due parti : una parte che acquisisce le istruzioni del programma e le decodifica, una parte aritmetica che fa i calcoli. 3) Dispositivo di input : tastiera del computer, lettore di nastri, lettore di dischi etc. Serve per dare comandi e fornire dati 4) Dispositivo di output : video, stampante etc. Dispositivi per raccogliere i risultati.

  20. La parte centrale (CPU, RAM) e’ costituita da circuiti elettronci veloci, al giorno d’oggi i clock piu’ veloci raggiungono 3.0 GHz. La memoria di massa ed i dispositivi di input/output possono essere costituiti anche da parti meccaniche (tastiera, dischi) e l’accesso e’ piu’ lento. Di solito il passaggio dei dati tra unita’ lente ed unita’ veloci vengono gestiti in modo automatico senza usare la CPU. Le unita’ piu’ lente in linea di principio potrebbero essere staccate senza pregiudicare il funzionamento della parte centrale e per questo vengono dette unita’ periferiche. Le memorie e la CPU sono composte da parole (da registri nel caso della CPU). Ogni parola e’ composta da bytes ed ogni byte e’ composto da 8 bits. Un bit e’ un oggetto (ad es. un microcircuito elettronico bistabile; del materiale magnetizzabile di un disco o di un nastro etc.) che puo’ trovarsi in DUE stati i quali simboleggiano la cifra 0 e la cifra 1rispettivamente. In tal modo ad ogni parola o registro (che spesso al giorno d’oggi e’ composta da 8 bytes, cioe’ 64 bits) e’ associabile un numero binario. Tutti i dati (numeri, lettere e caratteri, istruzioni di un programma) vengono codificati in numeri binari.

  21. Il numero 19(10)viene messo in una parola di 32 bits col suo equivalente binario : 00000000000000000000000000010011 La parola Roma viene immagazzinata usando per ciascuna lettera 1 byte e codificando con il codice ASCII R 01010010; o 01101111; m 01101101; a 01100001 I bytes vengono ‘accostati’ l’uno all’altro formando una parola di 32 bits in totale. Nell’accostarli il carattere piu’ a sinistra viene messo dalla parte dei bits meno significativi (cioe’ quelli per cosi’ dire ‘piu’ a destra’) compiendo cosi’ in un certo senso una ‘inversione’. Quindi alla fine Roma viene immagazzinata in 32 bits come segue : 01100001011011010110111101010010 Esempio Il codice ASCII originariamente era uno standard USA; oggi e’ diventato internazionale. La codificazione dei caratteri e’ ‘machine independent’ e quindi permette di trasportare facilmente qualsiasi file di informazione da un computer ad un altro.

  22. Tabella ASCII X3.4-1977 http://www.cs.utk.edu/~shuford/terminal/ascii_table.txt

  23. Istruzioni e linguaggi dei computers  Il computer per eseguire il programma obbedisce ad una sequenza di istruzioni. Le istruzioni, al livello piu’ basso, vengono scritte in ciascuna parola del file contenente il programma, in CODICE MACCHINA, che dipende dal particolare computer. Ad esempio, una parola del tipo 011000000000011001010000 potrebbe significare : prendi il contenuto della locazione di memoria chiamata B e copialo nel registro n. 3 della CPU. Storicamente il codice macchina fu il primo linguaggio sviluppato. In seguito, per motivi di praticita’ fu introdotto il linguaggio assemblatore (ASSEMBLER) che usa forme mnemoniche piu’ facili da ricordarsi. Ad esempio, l’istruzione precedente potrebbe avere il suo equivalente assembler in LDX 3 B dove LDX sta per load (carica). Anche l’assembler dipende dal particolare computer, ed una istruzione assembler corrisponde ad una operazione della CPU.

  24. Successivamente all’assembler furono inventati i linguaggi ad alto livello che hanno una sintassiindipendentedal particolare computer e permette al programmatore di scrivere istruzioni senza dover conoscere alcunche’ del linguaggio macchina. Il programmatore dovra’ dunque scrivere un file ASCII in cui sono contenute le istruzioni del programma. Ciascun computer d’altra parte, dovra’ essere dotato di un COMPILATOREcioe’ di un programma in grado di trasformare automaticamente qualunque file ASCII di istruzioni del linguaggio ad alto livello in un file contenete l’equivalente in codice macchina. Le istruzioni del linguaggio ad alto livello avranno una sintassi facile da ricordare ed usare, con comandi che corrispondono a piu’ comandi di codice macchina. Sara’ cosi’ possibile usare un programma su qualunque macchina, a patto che abbia il compilatore adatto, e verra’ facilitato lo sviluppo di programmi (software) anche complessi da parte di piu’ persone. Il FORTRAN 77(ForTran = Formula Translation) e’ un linguaggio ad alto livello. Altri esempi sono : COBOL, PASCAL, BASIC, C, C++. Il Fortran 77 venne codificato nel 1980. E’ specialmente adatto per fare calcoli numerici per progetti, simulazioni, etc. Per questo linguaggio esistono inoltre molte librerie, cioe’ raccolte di programmi gia’ scritti nel corso degli anni che semplificano ed alleviano la mole di lavoro al programmatore.

  25. Multitasking e time sharing  Icomputers odierni in generale sfruttano il principio della multiprogrammazione (multitasking) che si basa sul fatto che il tempo con cui una CPU esegue calcoli matematici o logici e’ molto inferiore al tempo con cui il computer trasferisce i dati dall’input alla CPU o dalla CPU all’output. Si risparmia tempo complessivamente se si eseguono piu’ programmi in una volta e mentre i dati di un programma vengono trasferiti (in maniera automatica che non coinvolge la CPU) la CPU esegue calcoli per un altro programma. Un altro principio oggi seguito e’ quello del time sharing che permette l’uso del computer da parte di piu’ utenti alla volta che di solito agiscono da terminale (modo interattivo). Ciascun utente ha il diritto di usare il computer per una frazione di tempo, che dipende dal numero totali di utenti presenti in quel momento, ed interagisce direttamente col computer. Dato che il terminale ha bassa velocita’ di input (dovuto soprattutto alla lentezza umana ma anche alla bassa velocita’ intrinseca del terminale rispetto ad una CPU) il computer puo’ servire piu’ utenti alla volta senza che quest’ultimi in pratica ne risentano troppo.

  26. Sistema operativo Unix   Ogni computer usa un proprio sistema operativo che non e’ altro che un programma sempre in funzione sulla macchina quando l’utente non sta facendo girareil proprio. Il sistema operativo permette al programmatore di definire tutte le operazioni che la macchina deve fare, come ad esempio compilare un file di istruzioni fortran (simbolico), eseguirlo, creare dei files, fare una lista dei files presenti in memoria, spedire un messagio per posta elettronica (e-mail) e mille altre funzioni (applicazioni). Quando un utente incomincia una sessione sul computer (login) il sistema operativo viene messo automaticamente in funzione. Il sistema operativo riconosce il linguaggio di controllo del lavoro (JCL) che l’utente dovra’ usare. Sfortunatamente fino a pochi anni fa ogni computer aveva JCL propri, e l’utente doveva impararsi i linguaggi di controllo per ciascun computer. Un grosso passo avanti nella standardizzazione e’ stato compiuto con l’introduzione di UNIX, un sistema operativo concepito inizialmente nel 1969 da Ken Thompson e da allora sviluppato da molti ed oggi usato quasi universalmente. Una versione di Unix molto usata oggigiorno (ad es. sui PC) e’ LINUX. Esistono diverse versioni di JCL per Unix, che tra loro non differiscono moltissimo. Quelle oggi piu’ in auge si puo’ dire siano la Bourne shell (sh) , la C shell (csh) , la Korn shell (ksh)). Noi useremo la C shell.

  27. Informazioni minimali per usare la C shell su decux1 3 Come cominciare una sessione dal PC del laboratorio a) Cercare l’applicazione Telnet e connettersi ad axppv1.pv.infn.it b) Eseguire il login : Trying 192.84.142.1 … Connected to decux1.pv.infn.it Escape character is ‘^]’ Digital UNIX (decux1.pv.infn.it) (ttyp1) login:boca Password: Last login: Wed Dec 29 20:09:56 from axppv1.pv.infn.it Digital UNIX V4.0D (Rev. 878); Tue Dec 28 16:36:44 MET 1999 ******************************************************************* decux1>  username Password (non compare)

  28. D’ora in avanti la notazione in blu verra’ usata per indicare i caratteri che vengono scritti al terminale in input dall’utente, in verde i caratteri scritti in risposta dal computer, mentre la notazione incorsivoverra’ usata per simboleggiare dei caratteri da scrivere o per indicare cose da fare da parte dell’utente L’utente BOCA vuole cambiare la sua password passwd Changing password for boca. Old password:vecchia password New password:nuova password Verification:riscrivo la nuova password per sicurezza Esempio Cambiare la password La password deve avere da 6 a 8 caratteri (in molti computers puo’ essere piu’ lunga). Comando : passwd 

  29. Directories In memoria, per esigenze di ordine e comprensione, e’ molto utile organizzare gruppi di files in directories. Questo significa che ogni file viene associato ad una directory. In UNIX ciascun file viene di conseguenza identificato come segue : directoryname/filename Dopo che si e’ fatto il login nel computer ci si trova automaticamente nella home directory che, ad esempio, per l’utente boca su axppv1.pv.infn.it si chiama /home/boca Se a questa directory fosse associato ad esempio il file prova allora il nome completo del file sarebbe /home/boca/provaEsistono comandi per associare un file ad una particolare directory, per fare la lista di tutti i files che appartengono ad una data directory, ed un comando per sapere in che directory ci si trova (cioe’ sapere qual’e’ la directory di default). Directory di default significa la directory che viene sottointesa automaticamente - a meno che essa venga esplicitamente indicata - in tutti i comandi Unix. Percio’ se non ci sono esplicite indicazioni, quando si crea un nuovo file esso viene associato alla directory di default; quando si fa una lista di files esistenti tale lista e’ quella dei files associati alla direcotry di default ecc. ecc. 

  30. pwd /home/boca questo e’ il nome della corrente directory di default Esempio pwd /home/boca mkdir dimostrazione A questo punto e’ stata creata una nuova directory il cui nome completo e’ : /home/boca/dimostrazione cioe’ alla directory di default e’ stata aggiunta una / e poi il nome dimostrazione Esempio Sapere in che directory ci si trova (directory di default) Si usa il comando pwd  Creazione di una nuova directory L’utente puo’ creare una nuova directory col comando mkdir 

  31. Cambio di directory Per cambiare la directory di default di usa cd pwd /usr1/users/boca cd dimostrazione pwd /usr1/users/boca/dimostrazione L’utente boca si trovava inizialmente nella directory /usr1/users/boca, quindi col comando cd ha definito come directory di default quella vecchia (/usr1/users/boca) + /dimostrazione e quindi ora si trova nella directory /usr1/users/boca/dimostrazione come e’ dimostrato dal susseguente comando pwd Esempio  Elenco dei files appartenenti ad una data directory e/o aventi un certo nome Si usa il comando ls nomedirectory oppure lsnomefile 

  32. ESEMPIO ls /usr1/users/boca/cestino prova prova.bak prova1 prova1.bak L’utente boca ha richiesto l’elenco dei files appartenenti alla directory /usr1/users/boca/cestino ed il computer ha elencato i files esistenti cioe’ prova prova.bak prova1e prova1.bak ESEMPIO pwd /usr1/users/boca/cestino ls prova prova.bak prova1 prova1.bak In questo secondo esempio l’utente boca si trovava gia’ nella directory /usr1/users/boca/cestino (come testimonia il comando pwd) ed ha mandato il comando ls senza specificare alcuna directory : il computer percio’ ha assunto come directory quella di default. Il risultato dell’elenco e’ percio’ identico a quello dell’esempio precedente. ESEMPIO ls /usr1/users/boca/cestino/prova prova In questo esempio l’utente ha richiesto una lista di uno specifico file. ESEMPIO ls /usr1/users/boca/cestino/pro* prova prova.bak prova1 prova1.bak In questo esempio si e’ richiesto l’elenco di tutti i files che iniziano per pro nella directory /usr1/users/boca/cestino Si noti l’uso dell’asterisco (carattere speciale o metacarattere) che significa qualunque numero e tipo di carattere di seguito ai caratteri pro

  33. ls prova.for f77 -static -o prova.exe prova.for ls prova.for prova.exe L’utente ha compilato (e ne ha anche fatto il linking) del simbolico (scritto in ASCII) contenuto nel file prova.for il risultato (programma eseguibile) e’ stato messo nel nuovo file prova.exe Esempio Compilazione di simbolici Fortran  Per produrre un programma fortran bisogna tradurre il file ASCII che contiene le istruzioni in un file che contiene le istruzioni macchina. Per fare questo in UNIX c’e’ il comando f77 -static -onomeoutput nomeinput

  34. Stampa del contenuto di un file ASCII a terminale  Si possono usare diversi comandi per farlo. Ad esempio c’e’ cat nomefile oppure more nomefile con cat il file viene stampato interamente e di seguito, con more il file viene interamente stampato, ma con la possibilita’ di vederlo per pagine. Nomefile puo’ essere sia il nome completo del file (cioe’ con all’inizio la directory alla quale appartiene) oppure puo’ non avere la directory di appartenenza, nel qual caso il computer assume la directory di default.

  35. Richiesta di istruzioni sull’uso di un comando Rimozione di un file   In UNIX esite la possibilita’ di richiedere informazioni su come funziona un dato comando. L’istruzione da dare a terminale e’ mannomecomando Ad esempio, se si vogliono informazioni dettagliate sul comando ls basta battere man lsed una lunga lista di istruzioni comparira’ sul terminale, con la possibilita’ di vederlo per pagine. Si usa il comando rmnomefile Al solito, se nomefile non e’ il nome completo di directory, viene assunta la directory di default. ls prova prova.bak prova1 prova1.bak rm prova.bak ls prova prova1 prova1.bak L’utente ha rimosso dalla corrente directory il file prova.bak dalla directory di default, come e’ testimoniato dal comando lseseguito dopo la rimozione Esempio

  36. Creazione di un file ASCII con un text editor  Una necessita’ che si presenta spessissimo nell’uso di un computer, e’ il creare o modificare dei files ASCII. Il text editor e’ un programma che fa questo. Ci sono svariati tipi di text editors, noi useremo vi oppure nedit Il comando e’ vi nomefile oppureneditnomefile dove nomefile puo’ essere sia un file nuovo che un file gia’ esistente. Come sempre, se la directory non e’ esplicitata nel nome del file, quella di default viene assunta. L’uso ed i comandi di vi ed nedit sono articolati e complessi e se ne puo’ avere il dettaglio con i comandi man vi oppure man nedit

  37. user interface utilities and tools system services kernel Architettura di un sistema operativo  UNIX 4 Fondamentali Unix e’ concepito specialmente per macchine multiuser e multitasking Schematicamente un sistema operativo e’ fatto a strati, con un nocciolo di funzioni e programmi piu’ interne (kernel) e 3 strati via via piu’ esterni. Le funzioni delkernel controllano direttamente l’hardware del computer (controllo della memoria e della CPU e delle varie periferiche). Le funzioni dello strato system serviceschiamano le funzioni del kernel. Il linguaggio ASSEMBLER fa uso delle funzioni di questo strato.

  38. A volte anche linguaggi a piu’ alto livello chiamano queste routines per ottenere maggiore rapidita’ di esecuzione. Il software dello strato utilities and tools rende la complessita’ delle chiamate alle routines del system service trasparente all’utente. In questo strato ci sono ad esempio i compilatori dei linguaggi ad alto livello ( fortran, C, C++, cobol, pascal, etc. ), la utilities mail od il tool dbx ( debugger di programmi fortran). Distinguiamo le utilities dai tools sulla base della maggior complessita’ delle prime rispetto ai secondi. Nello strato piu’ esterno infine, c’e’ l’interfaccia con l’utente cioe’ la shell o command languageinterpreter, che viene usato per impartire i comandi al computer. Le shell che sono diventate d’uso piu’ comune in Unix sono : Bourne shell ( sh )storicamente la prima disponibile, che viene inclusa in tutte le versioni di Unix C shell ( csh )standard nei sistemi che usano il software Berkeley Software Distribution Korn shell ( ksh )standard per il software Sistem V ( AT&T) Le varie Unix shells differiscono tra loro per le funzioni che svolgono e per la sintassi dei loro comandi, ma tutte passano il controllo alle stesse funzioni al momento dell’esecuzione, con l’eccezione di alcuni comandi tipici di quella shell. In questo corso noi useremo la C shell

  39. Come cambiare la shell di default  Per cambiare la shell di default si usa il comando : chsh chsh changing shell for studente. Password: New shell [/bin/bash: /bin/tcsh Shell changed. Esempio

  40. Processi e loro priorita’ Parent process e child process   Chiamiamoprocess un programma attivo. Quando un utente incomincia una nuova sessione a terminale, viene attivato il programma costituito dalla shell usata per default, che attende ed esegue i comandi dati da terminale. Questo e’ un esempio di process a cui il sistema assegna un numero ( process identifier) che unicamente lo identifica.Questo process ha accesso alle risorse della macchina ( CPU, memoria, periferici ) con una certa priorita’che gli viene assegnata dal sistema stesso. La parte del kernel responsabile dello scheduling la assegna dinamicamente, aggiornandola ogni pochi secondi, calcolandola con un algoritmo complesso, che si basa anche su una priorita’ di base data dal system managerall’utente. Come gia’ detto, al momento del login viene attivato un process ( la shell ). Questo e’ un parent process . Quando diamo un comando da terminale, il process della shell viene interrotto ed un nuovo process, che esegue il comando, viene attivato. Quando quest’ultimo termina, il comando viene restituito alla shell, che riprende a funzionare. In Unix si dice che e’ stato generato un child process (quello che esegue il comando) da parte di un parent process (la shell).Questo meccanismo vien detto forking. Al child process viene assegnato un proprio process identifiernumber. Un child process puo’ a sua volta iniziare un altro process, diventando a sua volta parent process di un child process.

  41. Multitasking in UNIX  Multitasking( o multiprocessing) significa l’attivazione, da parte di un solo utente, di piu’ programmi contemporaneamente. In Unix il multitasking si ottiene quando un parent process fa il forking di uno o piu’ child process e tutti i process sono attivi contemporaneamente. Un esempio di multitasking e’ la stampa di un file alla line printer, durante la quale si possono eseguire altri comandi. In Unix ci possono essere piu’ process attivi o sospesi contemporaneamente, ma solo uno puo’ ricevere input da terminale. Questo si dice process in foreground mentre gli altri sono in background.  NOTA BENE  I processi attiviin background continuano anche quando il parent process che li ha lanciati esegue un logout dal computer. Se invece ci sono processi sospesial momento del logout, allora un messaggio di avviso viene mandato a terminale ed il logout non viene eseguito. Se l’utente ripete il comando logout allora la sessione termina ed i processi interrotti vengono persi.

  42. Esempio : f77 -static -o myfile.x myfile.f compilazione e link del file fortran myfile.f <ctrl>z la compilazione viene sospesa Stopped messaggio a terminale, mandato del sistema, che avvisa della sospensione cat myfile.f stampa a terminale di myfile.f fg riporta in attivita’ in foreground, il process sospeso f77 -static -o myfile.x myfile.fmessaggio a terminale che avvisa della ripresa della compilazione e link I comandi per fermare, mettere in background o portare in foreground un processo sono : 1) <ctrl>c termina un child process ( job ) che e’ attivo in foreground 2) <ctrl>zsospende l’esecuzione (ma non la termina) di un job che e’ attivo in foreground 3) & lancia un child process in background 4) fg n oppure fg %nporta in foreground un child process sospeso od attivo in background 5) bg n oppure bg %nfa diventare attivo un process sospeso e lo porta in background

  43. il seguente ASCII file e’ un esempio di shell script : ls -l * cat pippo mv pippo pluto Esempio : Shell scripts Il comando <<   Si definisce una shell script un ASCII file contenente dei comandi Unix. In Unix si puo’ attivare una shell script semplicemente battendone a terminale il nome del file ASCII che la la contiene. Quando si attiva uno script, il sistema esegue ciascun comando dello script come se lo stessimo battendo da terminale In una shell script, si usa il comando << label per indicare ad un programma quando finisce l’input che deve leggere.

  44. Piping  immaginiamo di avere il programma myprogram.x che legge 5 numeri da terminale e ne fa la media. Si consideri la seguente shell script : …. myprogram.x << end 9.1 2.4 5.6 7.8 9.2 end …. Questo script, arriva all’esecuzione del comando myprogram.x ed il << fa si’ che tutte le righe a partire dalla successiva, fino a quella che precede la label end vengano considerate come dati in ingresso per il comando stesso. Se non ci fosse << end lo script prenderebbe input per myprogram.x da terminale (standard input). Esempio : La creazione di una pipe e’ un tipo particolare di attivita’, sincronizzata dal kernel, che coinvolge piu’ processes, nella quale l’output di un comando diventa input del comando che segue, senza bisogno di creare un file intermedio. Ilpiping e’ indicato dalla barra verticale | Questo comando e’ particolarmente utile e conferisce ad Unix una flessibilita’ sconosciuta ad altri sistemi operativi.

  45. anticipiamo qui che il comando who elenca gli usernames che hanno attualmente una sessione aperta sul computer, mentre sort ordina alfabeticamente le righe di un testo ASCII. Infine more stampa il contenuto di un file (interpretato come file ASCII) ad una pagina per volta. who | sort | more questi tre comandi fan si’ che il kernel inizi 3 child process contemporaneamente, corrispondenti ai comandi who , sort , more. Tuttavia more aspettera’ input da sort che aspettera’ input da who . Quando l’output di who sara’ passato a sort , il child process responsabile di who finira’, e cosi’ quando in seguito sort avra’ passato tutto l’output a more, cessera’. Infine quando more avra’ finito di mandare output allo standard output, terminera’ ed il controllo ritornera’ al parent process. Esempio :

  46. Ridirezionamento dello standard input, output, error  Come gia’ detto piu’ sopra, in Unix vengono definiti stdin input stream, solitamente la tastiera del terminale stdout output stream, solitamente lo schermo del terminale stderr device o file dove vengono mandati i messaggi di errore, di solito lo schermo del terminale. In Unix e’ possibile, in modo semplice, comodo ed elegante, ridirezionare stdin , stdout , stderr su devices o files che non siano quelli dati di default all’inizio della sessione (terminale), con i simboli della seguente tabella

  47. simbolo significato > ridireziona stdout >! ridireziona stdout, senza tenere conto di noclobber >> ridireziona edappendi stdout >>! ridireziona edappendi stdout senza dare errore e creando un nuovo file se ancora non esiste >& ridireziona stdout e stderr >&! ridireziona stdout e stderr, senza tenere conto di noclobber >>& ridireziona ed appendi stdout e stderr >>&! ridireziona ed appendi stdout e stderr senza dare errore e creando un nuovo file se non esiste di gia’ < ridireziona stdin <<xxx leggi l’input fino alla linea identica con xxx | ridireziona stdout al prossimo comando (piping) | tee nomefileridireziona stdout, oltre che alla schermo, anche ad un file | & ridireziona stdout e stderr al prossimo comando

  48. ls *> output questo comando fa si’ che l’output di ls *venga messo nel file (ASCII) output invece che visualizzato al terminale. Se il file output esistesse gia’, verrebbe sovrascritto dalla nuova versione ( in gergo Unix : clobbering ) e la vecchia versione verrebbe persa. L’utente puo’ impedire il clobbering (per evitare che uno sbaglio faccia perdere un file) con il comando set noclobber cosi’ che il sistema avvisa che il file esiste gia’ ed impedisce l’esecuzione del comando. Un altro esempio e’ dato da : ls -l * >! output ls -l pippo* >>& output dove prima viene ridirezionato l’output del comando ls -l * nel file output , facendo eseguire l’operazione ( grazie a ! ) anche se e’ stato fatto precedentemente set noclobber . Il secondo comando appende ( aggiunge ) il risultato del comando ls -l pippo* al file output. Anche eventuali messaggi di errore generati dal comando ls verrebbero stampati in output . Esempio :

  49. Nomi dei files in UNIX  I nomi dei files e dei comandi Unix sono case sensitive . Le MAIUSCOLE precedono le minuscole. Esistono delle convenzioni, non obbligatorie, ma generalmente seguite, riguardo alle estensioni che si danno ai files estensione significato .a libreria di objects .bas source code di basic .c source code di C .cc source code di C++ .f source code di fortran .h header file per il C .l programma di lex .o object file ottenuto dalla compilazione del source code .p source code per pascal .s source code di assembler .y programma id yacc a.out programma eseguibile

More Related