INIŢIERE ÎN SISTEMUL DE OPERARE LINUX COMPETENŢE GENERALE SI SPECIFICE 1. Aplicarea unor comenzi şi utilitare Linux. ▫ Recunoaşterea şi utilizarea corectă a comenzilor DOS echivalente Linux. ▫ Identificarea structurii de fişiere şi directoare a sistemului de operare. 2. Proiectarea aplicaţiilor pentru rezolvarea unor probleme utilizând programarea C/C+ + sub Linux. ▫ Cunoaşterea şi înţelegerea programarii „open souce”. ▫ Identificare noţiunilor de bază ale programării structurate. ▫ Utilizarea instrumentelor de programare Linux. 3. Analiza rezolvării unei probleme prin compilarea, depanarea şi execuţia programului C/C++. ▫ Aplicarea unor opţiuni de compilare şi link – editare. ▫ Depanarea pas cu pas a programelor executabile. ▫ Utilizarea utilitarului make. Generalităţi S.O Linux Linux este un sistem de operare bazat pe Unix, ceea ce înseamnă că moşteneşte din caracteristicile acestuia: multitasking (adică poate rula mai multe programe în acelaşi timp), multiuser (adică mai mulţi utilizatori pot folosi calculatorul în acelaşi timp sau la momente diferite, în sesiuni de lucru diferite), securitate (fiecare user are drepturi şi restricţii la folosirea tuturor resurselor puse la dispoziţie de sistemul de operare), programe specializate (unul din principiile de bază spune că programele care alcătuiesc SO-ul trebuie să execute un singur “job”, dar acela foarte bine; problemele mai complexe vor fi realizate din înlănţuirea mai multor programe (procese de execuţie) ceea ce conduce la următoarea caracteristică: interoperabilitate (programele trebuie să comunice între ele, astfel încât să poată fi folosite împreună. O altă caracteristică se referă la respectarea standardelor (Linux este construit pe standarde, POSIX fiind unul din standardele de bază) şi portabilitate (astăzi Linux rulează pe procesoare x86, Alpha, Sun SPARC şi UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64 şi AMD x86-64). Alte caracteristici sunt scalabilitate (Linux se găseşte în aparate electronice cu utilitate casnică, PDA-uri, workstation-uri, sisteme desktop şi sisteme server), customizabil (oferă o mulţime de opţiuni pentru programele rulate, interfeţele folosite, şi posibilităţile de configurare). O caracteristică foarte importantă este modul de dezvoltare distribuit, caracteristic oricărui software liber. Practic, versiunile noi apar cu mare rapiditate, bug-urile se repară foarte repede (ceea ce Computer Science and Electrical Engineering Department Adrian FLOREA 1 este enorm de important când apar “carenţe” în securitatea unui sistem). În general oricine este binevenit să contribuie şi să îmbunătăţească Linux-ul. Iniţial aplicaţiile pentru Linux aveau un caracter ştiinţific, aplicaţii cu baze de date, aplicaţii pentru reţele şi uneltele specifice programatorilor (compilatoare, link-editoare, debugger-e). Utilizatorii obişnuiţi se plângeau că interfeţele acestor aplicaţii nu sunt destul de prietenoase. În ultimii ani însă aplicaţiile pe SO Linux s-au schimbat şi s-au făcut progrese majore spre sistemul desktop “user friendly”. Înfăţişarea Linux-ului s-a schimbat şi îmbunătăţirile continuă să apară şi să fie vizibile “de la o zi la alta”. Există aplicaţii pentru office (AbiWord, OpenOffice, etc), aplicaţii pentru comunicare în reţea (suita Mozilla, clientul de mail şi organizator Evolution, messenger-ul Pidgin, etc), aplicaţii pentru entertainment (pentru video şi DVD există Mplayer sau Xine, pentru muzică XMMS, foarte multe jocuri de calitate ca Doom, Unreal Turnament, Civilization, etc). Principalele avantaje Linux Pretul initial este nul sau sub 50$. Comoditatea utilizarii Linux-ului se refera: • la pretul total al acestuia, care este foarte mic neavand nevoie de licenta sau in caz contrar aceasta este foarte ieftina; • la abilitatea de a modifica orice cod din acesta fiind open-source; • la capabilitatea de a folosi componente hardware ieftine la fel ca si solutiile software. Linux ofera si o foarte mare siguranta, neavand nevoie de softuri antivirus, in caz contrar, acesti antivirusi se folosesc pentru a detecta virusii care infecteaza sistemele Windows. Modalitatea de acces direct la codul sursa, permite modificarea oricarei component a acestuia (SO), alaturi de alte aplicatii care vin cu acesta. Diferit de alte produse comerciale, softurile open-source sunt construite pe bucati care interactioneaza una cu cealalta, astfel incat utilizatorul este liber sa mixeze si sa potriveasca componentele dupa propriul scop. Un alt avantaj al Linux-ului consta in posibilitatea gasirii solutiilor (ajutor) pe Internet. Este foarte probabil ca cineva dintr-un newsgroup sau mailing list sa doreasca sa te ajute in rezolvarea problemei. Fiindca codul sursa este accesibil, in cazul in care ai nevoie sa repair ceva la system, poti construi un patch chiar tu, ajutand astfel si pe ceilalti utilizatori ai Linux-ului. Utilizatorii OS-urilor non open source sunt obligati intre timp sa astepte un release official pana la rezolvarea unei probleme, putandu-se ajunge si la o asteptare de cateva luni. Geneza Fedora xx i686 Proiectul Fedora a fost creat în toamna anului 2003 cand a încetat dezvoltarea de către Red Hat Linux, continuarea proiectului fiind realizată în cadrul unei comunitati “open-source”. Red Hat Enterprise Linux (RHEL) a ramas singura distributie suportata comercial de catre Red Hat. Versiunile RHEL sunt bazate pe Fedora, cu o selectie a pachetelor instalate, perioadă de testare mai îndelungata şi suport comercial. Numele Fedora deriva de la un proiect voluntar, Fedora Linux, care furniza un numar de aplicatii suplimentare pentru Red Hat Linux si de la termenul Fedora (”a hat made of felt with a creased crown”), care este un element distinctiv al siglei "Shadowman" folosita de catre Red Hat. Fedora Linux si Red Hat Linux au format împreuna Fedora Core iar in 2007 prin unirea cu Fedora Extras a rezultat Fedora. Comenzi şi utilitare Linux [selecţie] Pentru a testa următoarele comenzi se accesează meniul ApplicationsSystem ToolsTerminal. 1. Pentru a determina câte / şi care partitii sunt instalate pe sistemul de calcul se foloseste comanda fdisk cum urmeaza: $ fdisk –l 2. Pentru a determina care kernel il folosesti in momentul de fata se tasteaza comanda: Computer Science and Electrical Engineering Department Adrian FLOREA 2 $ uname –r 3. Pentru a determina structura de fisiere si directoare de pe sistemul de calcul se tasteaza comanda (dir) existenta si in DOS. Ambele returneaza aceleasi date, diferand detaliile. $ dir 4. Pentru afişarea conţinutului directoarelor se poate folosi şi comanda (ls). $ ls Diferența dintre ls și dir constă în faptul că ls se bazează pe un “evidențiator” de sintaxă (SyntaxHighlighter). 5. Pentru a curata fereastra terminalului se tasteaza comanda (clear) existentă in Linux si de asemenea in limbajul de programare C/C++ accesata ca functie (clear();). Comanda echivalenta DOS este cls. $ clear 6. Pentru a schimba directorul current se foloseşte comanda (cd) existenta in Linux si DOS. $ cd 7. Pentru a afişa informaţii despre utilizatorii înregistraţi se foloseşte: $ who 8. Afişarea sau schimbarea hostname-ul sistemului se realizează cu comanda: $ hostname 9. Pentru ştergerea unui director gol se foloseşte (rmdir) specifică atât Linux cât şi DOS: $ rmdir 10. Pentru ştergerea unui fişier sau director se foloseşte (rm). Opţiunea “-r” asigură ştergerea recursivă (imbricată). $ rm -r 11. Pentru a oferi informaţii privitoare la un fişier (permisiuni, dimensiune, proprietar, data accesării, etc) se foloseşte: $ stat 12. Crearea de noi directoare se realizează folosind comanda (mkdir) specifică atât Linux cât şi DOS: $ mkdir 13. Copierea unui fişier la o altă locaţie sau sub un alt nume se face folosind (cp). Echivalentul de DOS este comanda xcopy. $ cp 14. Copierea de fişiere aflate la distanţă, în regim securizat (accesul pe staţie s-a făcut cu ssh) se realizează cu utilitarul (scp). $ scp [[user@]from-host:]source-file [[user@]to-host:][destination-file] $ scp aflorea@172.16.21.22:/home/aflorea/Hands-on-30.zip Hands-on-30.zip Computer Science and Electrical Engineering Department Adrian FLOREA 3 Ultima comanda presupune că se cunoaşte faptul că userul aflorea există pe staţia 172.16.21.22 (se verifică cu ifconfig iar apoi cu who). Se copiază de la respectiva adresă (172.16.21.22:/home/aflorea/) din contul userului aflorea în directorul curent. Dacă scp este însoțită de opțiunea –r atunci are loc copierea recursivă cu toate subdirectoarele. 15. Mutare sau redenumirea unui fişier (dintr-o sursă într-o destinaţie) sub un alt nume se face folosind (mv). $ mv 16. Afișarea spațiului folosit și a celui rămas disponibil penrtru utilizator $ quota 17. Facilitarea operării cu fișiere utilizând utilitarul midnight commander (manager de fișiere în mod text – foarte asemănător cu versiunea de Windows a vechii aplicații – Norton Commander sau a mai recentei aplicații – Total Commander) $ mc 18. Afişarea unei liste cu comenzi posibile se face folosind (help). $ help 19. Afişarea la ieşirea standard (terminal) a unui şir de caractere se face folosind (echo). Se utilizează de multe ori în fişiere de tip shell având un caracter explicative. $ echo 20. Căutarea de fişiere se poate realiza după numele sau tipul fișierului respectiv după numele proprietarului sau grupul din care face parte proprietarul fișierului. $ find [cale] [expresie] [acțiune] Parametri opționali specifică unde se face căutarea, ce fișiere (sunt căutate) și ce acțiune trebuie întreprinsă după găsirea fișierelor. $ find /tmp -name ‘*.cpp’ -print // Afișarea fișierelor de tip .cpp din directorul tmp. $ find / -user aflorea -print // Afișarea fișierelor utilizatorului aflorea $ find ./powertop-1.8/ -name '*.h' -exec rm "{}" ";" // Ștergerea fișierelor de tip header din folderul specificat 21. Căutarea în cadrul fişierelor (la nivel de linie) a diverselor şiruri de caractere se face folosind (grep). $ grep "return_values" -r ./ *.c 22. Lansarea editoarelor de text emacs, gedit $ emacs sim-outorder.cpp & $ gedit sim-outorder.cpp & Simbolul & permite continuarea execuției în sistemul de operare fără a închide editorul (nu rămâne agățat ecranul). Computer Science and Electrical Engineering Department Adrian FLOREA 4 23. Vizualizarea în mod text a fișierelor. vi fișier Pentru salvarea datelor și ieșirea din editor :wq Pentru ieșirea din editor fără a salva datele :q 24. Concatenarea conţinutului mai multor fişiere de tip text şi afişarea la consolă a fişierului rezultat se se face folosind (cat). $ cat 25. Dezarhivarea unui fişier (.gz) compresat anterior cu gzip se face folosind (gunzip). $ gunzip simplesim-3.0b.tar => generează fişierul .tar 26. Crearea unui arhive (fişier .gz) se face folosind (gzip). $ gzip simplesim-3.0b.tar => generează fişierul simplesim-3.0b.tar.gz 27. Arhivarea / dezarhivarea unui grup de fişier, păstrând informaţiile legate de permisiuni, proprietar, data creării, se face folosind (tar). $ tar –cf copie.tar *.pdf (=> are loc arhivarea și se generează fişierul .tar) $ tar –xvf simplesim-3.0b.tar (=> extrage directorul simplesim-3.0 din arhiva.tar) 28. Arhivarea / dezarhivarea unui fişier se poate face folosind (bzip2). $ bzip2 fișier (=> se generează fişierul fișier.bz2) $ bunzip2 fișier.bz2 (=> extrage fişierul din arhiva.bz2) 29. Afişarea căii curente (path) se realizează cu utilitarul (pwd). $ pwd 30. Raportarea informaţiilor privitoare la procesele din sistem: identificatori, stare, proprietar, etc se face folosind utilitarul (ps). Id-ul procesului dorit (<pid>) se poate “omorî” – vezi comanda kill. <pid> reprezintă prima coloană din afişaj. $ ps –aux $ ps –ef 31. Trimiterea unui semnal (implicit de terminare) tuturor proceselor existente în sistem se face folosind utilitarul (kill). Id-ul procesului dorit a fi terminat este (<pid>). $ kill –n 9 <pid> $ kill <pid> $ killall -u aflorea => opreşte (omoară) toate procesele utilizatorului aflorea 32. Accesarea la distanţă a unui server (HPC) / staţii de lucru folosind un client securizat cu rol de interpretor de comenzi se face cu utilitarul (ssh). $ ssh –l aflorea@Zamolxe.hpc.ulbsibiu.ro => obligă utilizatorul aflorea să îşi introducă parola proprie $ hostname => Zamolxe.hpc.ulbsibiu.ro Pentru conectarea pe CELL trebuie anterior conectat pe Zamolxe (HPC) – XEON. $ ssh computecell-000 $ hostname => ComputeCell-000.hpc.ulbsibiu.ro Computer Science and Electrical Engineering Department Adrian FLOREA 5 33. Oprirea sistemului de operare se realizează folosind comanda (halt). $ halt 34. Restartarea sistemului de calcul se realizează folosind comanda (reboot). $ reboot 35. Oprirea sistemului de calcul (eventual restartarea acestuia) se realizează cu utilitarul (shutdown). $ shutdown $ shutdown –h now 36. Configurarea interfetelor de retea se face folosind comanda (ifconfig). Comanda echivalenta DOS este ipconfig. $ ifconfig 37. Modificarea permisiunilor de acces la fişiere / directoare se face folosind comanda (chmod). Comanda echivalenta DOS este attrib. “+” setează un flag iar “-” şterge (resetează) un flag. $ chmod +r script.cgi $ chmod 755 hello_ppu (transformă fişierul hello_ppu într-un executabil) Dacă la rularea unui fișier de tip shell (trebuie să includă pe prima linie secvența de caractere “#!/bin/sh”), fie acesta ./run_applu.sh apare mesajul de eroare “Permission denied” atunci verificăm dacă fișierul are caracter executabil (dacă este setat atributul x). Pentru aceasta se execută: $ ls -l Dacă fișierul nu este executabil atunci îi setez flagul / atributul x prin comanda: $ chmod +x run_applu.sh Oprirea simulării se poate face în orice moment și cu comanda Ctrl + Z. 38. Modificarea proprietarului fişierelor / a grupului din care face parte proprietarul se realizează cu comanda (chown). $ chown 39. Substituirea unui utilizator cu root (administrator) în vederea obţineri de drepturi suplimentare se face folosind comanda (su). Evident trebuie apoi introdusă parola de root. $ su 40. Substituirea unui utilizator cu root (administrator) pentru a gestiona drepturile de acces asupra unor fişiere / directoare se face folosind comanda (sudo nautilus). Nautilus reprezintă managerul de fişiere oferit de GNOME (the Free Software Desktop Project). $ sudo nautilus Comenzile urmatoare sunt caracteristice job-urilor de pe supercomputer (HPC) 41. Lansarea unui job in executie se face folosind comanda (bsub). $ bsub 42. Terminarea executiei unui job se face folosind comanda (bkill). $ bkill Computer Science and Electrical Engineering Department Adrian FLOREA 6 43. Suspendarea temporara a executiei unui job se face folosind comanda (bstop). $ bstop 44. Vizualizarea unui job (sau a tuturor celor aflate) in executie se face folosind comanda (bjobs). $ bjobs –a (all) $ bjobs –L <jid> (details on job jid) 45. .gcc – apelează compilatorul care există implicit instalat. Cu opțiunea –v se afișează versiunea compilatorului Cu opțiunea –V <nr_version> se apelează dacă există instalată versiunea < nr_version > a compilatorului nu a celui care există implicit Folosirea terminalelor virtuale pentru lansarea de simulări pe noduri multiple ale sistemului HPC Din Putty se execută succesiunea de comenzi: 1. Pentru crearea unui terminal virtual (VT) tastați: screen 2. Pentru a trece din VT în terminal real se apasă Ctrl + A + D. Atenție, nu Ctrl + D întrucât această comandă omoară terminalul. 3. Pentru reatașarea terminalului se tastează screen -R 4. Dacă există mai multe terminale se tastează screen -R <pid> 5. Omorârea unui terminal virtual sau ieșirea din acesta se face cu comanda exit sau Ctrl + D Dintre aplicaţiile existente pe SO Windows care permit conexiunea pe supercomputerul HPC se amintesc: putty, winscp, SshClient, etc. Computer Science and Electrical Engineering Department Adrian FLOREA 7 Analiza rezolvării unei probleme prin compilarea, depanarea şi execuţia programului C/C++ Pentru instalarea Cygwin (emulator de Linux pe SO Windows), sau pentru lucrul cu comenzi Linux în special cele legate de compilare, link-editare şi depanare se recomandă folosirea cărţii “Predicţia dinamică a valorilor in microprocesoarele generaţiei următoare”, autor Adrian Florea (Universitatea “Lucian Blaga” Sibiu), editura MatrixRom, Bucureşti, 2005, paginile 96-144 (http://webspace.ulbsibiu.ro/adrian.florea/html/docs/FINAL_Matrix05.pdf ). În referinţa sugerată se găseşte o sinteză foarte bună aferentă instalării şi metodologiei de simulare / dezvoltare folosind mediul SimpleScalar. Cerinţe: 1. Se vor testa în terminal toate comenzile prezentate anterior. 2. Să se scrie un program simplu în C (minimul / maximul dintr-un şir) care se compilează (se generează codul .asm şi .exe) şi se execută. Modificări de operat pentru compilarea / depanarea / rularea şi extinderea simulatoarelor mediului Simplescalar pe SO Linux • • • • • • • Se dezarhivează fişierul arhivă în format tar.gz "simplesim-3.0b.tar.gz". o $ gunzip simplesim-3.0b.tar o $ tar –xvf simplesim-3.0b.tar În acest fel rezultă directorul SIMPLESIM-3.0/*.* cu fisierele componente, dintre care si directorul target-pisa. Fisierele acestui director (care descriu functionarea unei arhitecturi PISA) sunt copiate în directorul parinte (SIMPLESIM-3.0). Revenind în prompter de Linux se tasteaza comanda $cd SIMPLESIM-3.0 si se ajunge în directorul tocmai copiat. Se tasteaza în continuare succesiunea de comenzi: o $ make config-pisa şi o $ make Execuţia comenzii make poate genera o eroare la compilare deoarece tipul returnat de functia myrand() din fisierul misc.c care apeleaza la rândul ei functia random() difera de cel returnat de functia standard definita în stdlib.h (din /usr/include). Eroarea se corecteaza modificând tipul functiei random() în misc.c (din long în int). În fisierul eval.c se comenteaza liniile 79 şi 81 şi rămâne “DE BAZĂ” #include <errno.h>. Se comentează linia 886 “extern int errno;”. În fisierul range.c se comenteaza liniile 77 şi 79 şi rămâne #include <errno.h>. Se comentează linia 96 “extern int errno;”. Se recompilează: make. Executia din nou a comenzii make se va încheia cu mesajul "My work is done here… " ceea ce demonstreaza compilarea / asamblarea / link-editarea cu succes a simulatoarelor setului SimpleScalar 3.0. Computer Science and Electrical Engineering Department Adrian FLOREA 8 Modificări de operat pentru compilarea / depanarea / rularea şi extinderea simulatorului M-SIM pe SO Linux 1. Se dezarhivează fişierul arhivă în format tar.gz " m-sim_v2.0.tar.gz". • $ gunzip m-sim_v2.0.tar • $ tar –xvf m-sim_v2.0.tar În acest fel rezultă directorul m-sim_v2.0/*.* cu fisierele componente, dintre care si directorul target-alpha. Fişierele acestui director (care descriu functionarea unei arhitecturi ALPHA 21264) sunt copiate în directorul parinte (m-sim_v2.0). 2. Revenind în prompter de Linux se tasteaza comanda $cd m-sim_v2.0 si se ajunge în directorul tocmai copiat. Se tasteaza în continuare comanda: • $ make config-alpha 3. În fisierul machine.h se comenteaza linia 224 (extern enum md_opcode md_mask2op[];). 4. Se copiază variabila “md_mask2op[]” şi se pune la linia 237 (între } şi ;) practic după definiţia enumerării md_opcode1. 5. Se compilează: make. Executia comenzii make se va încheia cu mesajul "My work is done here… " ceea ce demonstreaza compilarea / asamblarea / link-editarea cu succes a simulatorului M-SIM 2.0. 6. Se copiaza din dir Sv_Trivial_LVP_80nm_nthread urmatoarele: • CACTI\def.h • power [c;h] • sim-outorder.c 7. Se compilează: make. => sim-outorder (imbogatit cu mecanism de reutilizare dinamica a instructiunilor + a celor triviale si predictia valorilor instructiunilor load critice Optiuni noi de simulare:{ –rb:size 1024 –lvpt:size 2048 } 8. In m-sim_v2.0 cream directorul results 9. Copiem din multithread/spec2000binaries/*.arg 10. Se lanseaza comanda ./sim-outorder -redir:sim ./results/applu.res -fastfwd 1000000 -max:inst 10000000 -lvpt:size 16 applu.arg ./sim-outorder -redir:sim ./results/applu_equake.res -fastfwd 1000000 -max:inst 10000000 applu.arg equake.arg ./results/galgel_lucas.res ./results/mesa_mgrid.res.res 1 galgel.arg lucas.arg mesa.arg mgrid.arg Obs: La versiunea m-sim_v3.0 modificarea există deja. Computer Science and Electrical Engineering Department Adrian FLOREA 9 Alte comenzi şi utilitare Linux Pentru instalarea utilitarului cssh și instalarea remote a simulatorului de procesor IBM CELL se execută următoarele comenzi: 1. Se schimba utilizatorul in root [aflorea@localhost ~]$ su Password: 2. [root@localhost ~]# yum install clusterssh 3. Se editeaza fisierul de host-uri [root@localhost ~]# gedit /etc/hosts Se adaugă stațiile și numele acestora: 172.16.21.14 student_8 student_8 172.16.21.35 student_2 student_2 [root@localhost ~]# cssh -l root student_8 student_2 4. Din root@statie02 se tasteaza: yum -y install tcl xterm blt tk scp aflorea@172.16.21.25:/home/aflorea/Arhitecturi_Avansate/Cell_Bucuresti/cell-install-3.1.0-0.0.noarch.rpm cell-install-3.1.0-0.0.noarch.rpm rpm -ivh cell-install-3.1.0-0.0.noarch.rpm scp aflorea@172.16.21.25:/home/aflorea/Arhitecturi_Avansate/Cell_Bucuresti/CellSDK-Devel-Fedora_3.1.0.0.0.iso CellSDK-Devel-Fedora_3.1.0.0.0.iso ./cellsdk -o -a --iso ./ install Computer Science and Electrical Engineering Department Adrian FLOREA 10