Lucrarea nr. 9
Tehnici de acces la resursele hardware ale calculatorului
-
Scopul lucrarii : Prezentarea diferitelor tehnici de programare utilizate pentru acces la resursele hardware ale unui calculator.
-
Consideratii teoretice :
2.1 Structura unui sistem de calcul
Un sistem de calcul este un ansamblu de resure hardware si software care permit executia eficienta a unor programe aplicative. Acest ansamblu este stratificat pe mai multe nivele ierarhice de abstractizare (vezi Tabelul 1). Pentru solutionarea unei anumite probleme, un utilizator poate accesa resursele sistemului la diferite nivele. Nivelele inferioare ofera o mai mare libertate si flexibilitate, insa sunt necesare cunostinte detaliate referitoare la constructia interna a calculatorului ; programarea pe nivelele inferioare este dificila, ineficienta si necesita experienta. Pe nivelele superioare detaliile constructive sunt ascunse, activitatea de programarea este mult mai eficienta, insa programul rezultat este mai lent si programatorul are posibilitati limitate de acces direct la resurse.
Tabelul 1
Nivel de abstractizare
|
Mod de acces
|
Concepte de modelare a resurselor
|
Tip utilizator
|
Programe aplicative
|
Comenzi interactive
|
Specifice aplicatiei (ex : baza de date, desen,)
|
Nespecialist in tehnica de calcul
|
Limbaje de nivel inalt
|
Functii de intrare/iesire (biblioteci)
|
Fisier, structuri de date, obiecte, soclu
|
Programator de aplicatii
|
Sistem de operare (nivelul sistem)
|
Comenzi de operare sau Apeluri sistem
|
Fisier, canale de intrare/iesire
|
Administrator de sistem
|
Nucleul sistemului de operare
|
Apel drivere de nivel inferior si variabile sistem
|
Interfete de intrare/iesire, intreruperi
|
Programator de sistem
|
Masina fizica
|
Instructiuni de intrare/iesire in limbaj masina
|
Registre (porturi) de intrare/iesire, locatii de memorie
|
Proiectant de sisteme dedicate
|
Ierarhizarea facuta in tabelul 1 nu este unica, iar nivelele de abstractizare se intrepatrunde. O aplicatie complexa poate necesita acces la resursele sistemului la diferite nivele de abstractizare.
In lucrarea de fata sunt prezentate diferite posibilitati de acces la resursele unui calculator compatibil IBM PC AT. Vor fi analizate cu precadere metodele spacifice nivelelor inferioare.
-
Accesul la masina fizica
Un calculator –masina fizica - dispune de urmatoarele resurse accesibile utilizatorului : registre interne (de date, adrese sau cu functii speciale), indicatoare de conditie, locatii de memorie si porturi (registre) de intrare/iesire. O resursa speciala, se poate considera sistemul de intreruperi. Programatorul are acces la aceste resurse prin intermediul instructiunilor in cod masina. Orice calculator dispune de un limbaj cod masina unic ce permite transferul de informatii intre diferitele tipuri de resurse, controlul secventei de executie a programului si efectuarea unor operatii aritmetico-logice cu datele continute in resurse. Accesul la resurse se face prin diferite moduri de adresare (directa, indexata, bazata, etc.), insa datele sunt de obicei nestructurate (bit, octet, cuvint, dublucuvint).
Pentru procesoarele care faciliteaza programarea multitasking pot sa existe mecanisme prin care se ingradeste accesul programelor utilizator la anumite resurse ale sistemului. La aceste procesoare (ex : I’486, Pentium) exista mai multe regimuri de lucru si un sistem de acordare a drepturilor de acces. Regimul protejat sau supervizor este utilizat de catre sistemul de operare pentru partajarea resurselor intre taskurile concurente. Programele utilizator au acces numai la resursele alocate de catre sistemul de operare.
Accesul la interfetele de intrare/iesire se face printr-un set relativ redus de instructiuni de citire (IN) si scriere (OUT). Programatorul trebuie sa cunoasca modul de functionare a interfetei, adresa de baza si adresa relativa a registrelor interfetei. De asemenea trebuie sa cunoasca semnificatia bitilor continuti in registrele de comanda si stare. Orice modificare intervenita in structura interfetei presupune de obicei rescrierea rutinei de intrare/iesire.
Accesul la locatiile de memorie este mult mai flexibil ; cele mai multe tipuri de instructiuni accepta ca operand o locatie de memorie . In cadrul arhitecturii Intel o locatie se adreseaza prin specificarea (implicita sau explicita) a unui registru segment si a unei adrese relative fata de inceputul segmentului. Functie de regimul de lucru, continutul registrului segment este interpretat ca adresa de inceput a segmentului (modul real) sau ca un descriptor din care se poate determina (pe baza unor tabele) adresa de inceput a segmentului. Adresarea se poate face la nivel de octet, cuvint (doi octeti) sau dublucuvint (patru octeti).
-
Accesul la resurse prin drivere continute in nucleul sistemului de operare (accesul prin intreruperi)
Majoritatea sistemelor de operare dispun de un set de rutine (drivere) prin care faciliteaza accesul utilizatorului la resursele calculatorului. Rolul acestor rutine este de a oferi o cale eficienta si uniforma (standardizata) de acces, prin care detaliile constructive ale resurselor sunt ascunse. Aceste rutine au o specificatie de interfata (parametri de intrare si iesire) care nu se modifica nici in cazul modificarii resurselor pe care le deservesc. De exemplu interfata de disc flexibil a cunoscut diverse modificari insa interfata rutinei de tratare a cererilor de transfer la unitatea de disc nu s-a schimbat. Astfel se asigura o platforma stabila pentru programatori, chiar si in prezenta unor modificari hardware.
In cazul sistemului de operare MS-DOS accesul la driverele resurselor de sistem se realizeaza prin apeluri de intreruperi software (instructiunea INT n). Fiecarui tip de resursa ii este alocat cite un nivel de intrerupere. In tabelul 2 sunt indicate principalele intreruperi software utilizate pentru accesul la resurse. Adresa rutinei de tratare a intreruperii este inscrisa in tabela de intreruperi a sistemului, pe pozitia corespunzatoare nivelului de intrerupere utilizat; adresa fizica se calculeaza dupa formula : 0000 :*4.
Tabelul 2
Nivel intrerupere
|
Functia
|
INT 10h
|
Servicii pentru interfata video
|
INT 11h
|
Informatii despre echipamentele conectate in sistem
|
INT 12h
|
Informatii despre memorie
|
INT 13h
|
Servicii pentru interfata de disc
|
INT 14h
|
Servicii pentru canalul serial
|
INT 15h
|
Servicii sistem
|
INT 16h
|
Servicii de tastatura
|
INT 17h
|
Servicii pentru imprimanta
|
INT 18h
|
ROM Basic
|
INT 19h
|
Incarcare sistem de operare (Bootstrap)
|
INT 1Ah
|
Servicii de timp
|
INT 1Bh
|
Handler pentru CTRL-Breack
|
INT 1Ch
|
Intrerupere de ceas (folosita pentru lansarea unor rutine utilizator la fiecare intrerupere de ceas)
|
In cadrul unei rutine de intrerupere sunt implementate mai multe functii specifice unei anumite interfete (ex : initializare interfata, configurare,citire/scriere date, etc.). Codul functiei solicitate precum si alti parametri de apel se inscriu in registrele procesorului inainte de apelul rutinei. In Anexa 4 se dau semnificatiile registrelor procesorului pentru cele mai importante intreruperi software.
Rutinele de intrerupere software se regasesc in portiunea BIOS (Basic Input Output System) a sistemului de operare, rezidenta in memoria EPROM a sistemului. Pentru anumite aplicatii speciale, utilizatorul poate sa inlocuiasca driverele de sistem cu driverele proprii prin inscrierea in tabela de intreruperi a adresei noii rutine de tratare a intreruperii. Se recomanda ca la terminarea aplicatiei sa se refaca adresa rutinei initiale. Aceasta este si modalitatea prin care producatorii de interfete evoluate pot sa inlocuiasca driverele originale cu drivere adaptate noilor placi (ex : drivere SVGA).
2.4. Accesul prin apeluri sistem
Nivelul apelurilor de sistem ofera o interfata mai evoluata de acces la resursele sistemului. Se utilizeaza entitati logice pentru modelarea resurselor (ex : fisier, canal de comunicatie, handler etc.). In acest fel se face abstractie de detaliile constructive si functionale ale interfetelor adresate. De exemplu la o interfata de disc transferul de date se face la nivel de bloc de date, fara sa se tina cont de organizarea fizica a datelor pe sectoare, piste si discuri. Adresarea se face prin nume de fisier sau prin handler (handler= structura de date utilizata pentru identificarea si lucrul cu un fisier sau canal de comunicatie). In schimb datele nu pot fi citite/scrise la nivel de sector fizic.
In sistemul MS-DOS apelurile sistem sunt implementate prin intreruperea software INT 21h. Fiecare tip de functie are un identificator (un numar care la apel trebuie inscris in registrul AH) si un numar de parametri de intrare.Acesti parametri se inscriu in registrele interne ale procesorului inaintea instructiunii INT 21h.
Functiile sistem acopera majoritatea resurselor hardware si software ale sistemului. Pentru aceeasi interfata pot exista mai multe tipuri de functii, cu diferite grade de abstractizare. Numarul acestor functii a crescut continuu , la fiecare noua versiune a sistemului MS-DOS. In tabelul 3 se dau citeva exemple de astfel de functii.
Tabelul 3
Cod functie (AH)
|
Descrierea functiei
|
Parametri de intrare si iesire
(in AH se pune codul functiei)
|
00h
|
Terminarea programului (versiunea mai veche)
|
Intrare : CS- adresa de segment a PSP-ului programului de terminat
|
01h
|
Citirea cu ecou de la tastatura
|
Iesire : AL- caracterul citit
|
02h
|
Afisarea unui caracter
|
Intrare : DL- caracterul de afisat
|
03h
|
Intrare auxiliara (implicit COM1)
|
Iesire : AL - caracterul receptionat
|
04h
|
Iesire auxiliara (Implicit COM1)
|
Intrare : DL – caracterul de transmis
|
05h
|
Tiparirea unui caracter
|
Intrare : DL – caracterul de transmis
|
08h
|
Citirea fara ecou de la tastatura
|
Iesire : AL- caracterul citit
|
0fh
|
Deschiderea unui fisire
|
Intrare : DS :DX – poantor la FCB-ul
fisierului nedeschis
Iesire : AL=0 – s-a gasit fisierul
=FF – eroare
|
10h
|
Inchiderea unui fisier
|
idem
|
14h
|
Citirea secventiala a unui fisier folosind FCB (File Control Block)
|
Intrare : DS :DX – poantor la FCB-ul
fisierului deschis
Iesire : AL=0 – citire corecta
#0 – eroare
|
3ch
|
Crearea unui fisier
|
Intrare : DS :DX- poantor la numele
fisierului (sir ASCIIZ)
CX- atributul fisierului (00-
normal ;01- numai citire ;02-
ascuns ;03-sistem)
Iesire : CF=0- 0peratie reusita
AX- identificatorul logic al
fisierului
CF=1 Eroare
|
3dh
|
Deschiderea unui fisier folosind identificatorul logic
|
Intrare : DS :DX- poantor la numele
fisierului (sir ASCIIZ)
AL-codul de acces
Iesire : CF=0- Operatie reusita
AX- identificatorul logic al
fisierului
CF=1 Eroare
|
3eh
|
Inchiderea unui fisier folosind identificatorul logic
|
Intrare : BX – identificatorul logic al
fisierului
Iesire : CF=0- Operatie reusita
CF=1 Eroare
|
3fh
|
Citirea unui fisier folosind identificatorul logic
|
Intrare : BX – identificatorul logic al
fisierului
CX- nr. de octeti cititi
DS :DX- poantor la zona de
citire
Iesire : CF=0- Operatie reusita
Ax- numarul de caractere citite
CF=1 Eroare
|
4ch
|
Terminarea unui proces
|
Intrare : Al- codul de revenire
|
-
Accesul la resurse prin functii/proceduri de intrare/iesire continute in limbaje de programare de nivel inalt
Limbajele de nivel inalt permit accesul la resursele sistemului prin intermediul unor instructiuni de intrare/iesire (ex :Fortran) sau functii/proceduri standard de intrare/iesire (ex : C, Pascal).In limbajele orientate obiect exista biblioteci de clase standard care modeleaza interfata cu diferitele echipamente periferice. De obicei se lucreaza cu entiteti logice de tip fisier, soclu, canal de comunicatie, fereastra, etc. Numarul si tipul de operatii permise este dictat de specificul limbajului de programare (ex : la un limbaj pentru baze de date exista un numar mare de functii de cautare si regasire a datelor in fisiere).
Exista si limbaje care au instructiuni (ex : Pick si Poke in Basic) sau alte constructii de program (ex : poantori in C) care permit un acces mai intim la resurse. Se recomanda insa limitarea utilizarii unor astfel de metode deoarece pot produce erori greu de detectat.
-
Mersul lucrarii
3.1. Sa se scrie un program in limbaj de asamblare care transmite un text la imprimanta, folosind instructiuni de intrare/iesire si adresele fizice ale interfetei paralele. In tabelul 4 se dau adresele porturilor si semnificatia continutului acestora
Tabelul 4
Adresa
|
Tip operatie
|
Nume port
|
Descriere continut
|
X78
|
Scriere
|
Date
|
Registru de date pentru iesire
|
X78
|
Citire
|
Intrare de test
|
Registru de date pentru iesire
|
X79
|
Citire
|
Stare
|
D7- Busy- imprimanta ocupata
D6- Ack\ - acceptare data
D5- PaperEnd- lipsa hirtie
D4-SelectOut – imprimanta operationala
D3-Error\ -eroare la imprimanta
D2-0 – neutilizate
|
X7A
|
Scriere
|
Comanda
|
D7-6- neutilizate
D5- Dir- indica directia de transfer la unele tipuri de interfete (0- iesire ;1- intrare)
D4- IRQEn- validare intrerupere (la frontul crescator al semnalului Ack\)
D3- SelectIn\- selectie imprimanta
D2-Init\- initializare imprimanta
D1- AutoFeed\- salt automat la linie noua pentru CR
D0- Strobe\- indica prezenta unei noi date
|
3.2. Sa se scrie programe in limbaj de asamblare care acceseaza interfata video si interfata de disc prin intreruperi BIOS ; parametri de apel sunt descrisi in Anexa 4. Atentie : se va evita scrierea pe discul sistem ! ! !
3.3 Sa se scrie un program intr-un limbaj de nivel inalt care citeste si scrie un fisier, scrie pe ecran si scrie la imprimanta.Recomandare : pentru identificarea functiilor/procedurilor de intrare/iesire se va apela la Help-ul mediilor de programare utilizate.
3.4 Sa se compare cele trei programme scrise la punctele anteriare si sa se analizeze avantajele si dezavantajele diferitelor metode de acces la resursele sistemului. Sa se evidentieze limitarile impuse de fiecare metoda.
-
Intrebari si probleme
4.1 Apreciati care este metoda adecvata de acces la resurse pentru urmatoarele tipuri de aplicatii : baze de date, prelucrari de imagini, controlul proceselor, protocoale de comunicatie, jocuri, aplicatii in retea, si altele.
-
Sa se scrie un nou driver pentru intreruperea INT 13H (intreruperea de disc) care sa blocheze scrierea de informatii pe prima pista a discului.
-
Sa se scrie un driver care redirecteaza iesirea paralela (la imprimanta) pe un canal serial.
-
Sa se scrie un driver de tastatura care inlocuieste o secventa de taste apasate cu un anumit cod ASCII (pentru caractere speciale).
Anexa 4
Intreruperi BIOS
INT 10h Servicii pentru interfata video
Reg. AH
|
Tip functie
|
Continutul celorlalte registre
|
00
|
Initializare/configurare interfata
|
AL = 00 - 40x25 B/W text
= 01 - 40x25 16 color text
= 02 - 80x25 16 text
= 03 - 80x25 16 text color
= 04 - 320x200 mod grafic 4 culori
= 05 - 320x200 mod grafic 4 culori
= 06 - 640x200 grafic, alb/negru
= 07 - 80x25 text monocrom
= 0D - 320x200 grafic 16 culori
= 0E - 640x200 grafic 16 culori
= 0F - 640x350 grafic monocrom
= 10 - 640x350 grafic 16 culori
= 11 - 640x480 grafic alb/negru
= 12 - 640x480 grafic 16 culori
= 13 - 320x200 grafic 256 culori
|
01
|
Setare tip cursor
|
CH = linia de inceput a cursorului (conteaza ultimii 5 biti)
CL = linia de sfirsit a cursorului
|
02
|
Setare pozitie cursor
|
BH = numar pagina
DH = rind
DL = coloana
|
03
|
Citire pozitie cursor
|
BH = numar pagina
La revenire
DH = rind
DL = coloana
|
04
|
Citire pozitie creion optic
|
La revenire
BX = coloana in pixeli
CH = linia de rastru
DH = linia de caracter
DL = coloana de caracter
|
05
|
Selectie pagina
|
AL= pagina noua
|
06
|
Derulare in sus
|
AL = numar de linii derulate
BH = atributul liniei goale
CH = rindul coltului din stinga sus a ferestrei de derulare
CL = coloana coltului din stinga sus a ferestrei de derulare
DH = rindul coltului din dreapta jos a ferestrei de derulare
DL = coloqna coltului din dreapta jos a ferestrei de derulare
|
07
|
Derulare in jos
|
idem
|
08
|
Citeste caracter si atribut la pozitia curenta a cursorului
|
BH = pagina
La revenire
AH = atributul caracterului
AL = caracterul
|
09
|
Scrie caracter si atribut la pozitia curenta a cursorului
|
AL = codul ASCII al caracterului de scrie
BH = pagina
BL = atributul caracterului
CX = numar de caractere de scris
|
0A
|
Scrie numai caracter la pozitia curenta a cursorului
|
AL = codul ASCII al caracterului de scrie
BH = pagina
BL = culoarea caracterului
CX = numar de caractere de scris
|
0B
|
Setare culoare paleta
|
BH = identificator paleta
= 0 pentru setare fundal si margine
= 1pentru selectare paleta din 4 variante
BL = valoare paleta
|
0C
|
Scrie pixel la pozitia specificata
|
AL = culoare (se face XOR cu pixelul curent daca bitul 7 este 1)
BH = pagina
CX = coloana
DX = rindul
|
0D
|
Citeste culoare pixel la pozitia specificata
|
BH = pagina
CX = coloana
DX = rindul
La revenire
AL = culoarea pixelului
|
0E
|
Scrie text in mod teletype
|
AL = codul ASCII al caracterului de scris
BH = pagina
BL = culoarea pixelului
|
0F
|
Citeste modul grafic
|
AH =numarul de coloane de ecran
AL = modul setat
BH = pagina curenta
|
10
|
Citire/scriere registri de paleta
|
%AL = 00 scriere registri de paleta individual
BH = culoare
BL = registru paleta
% AL = 01 scriere culoare margine
BH = culoare
AL = 02 scrierea tuturor registrilor paleta
ES:DX = poantor la o tabela de 17 octeti reprezentind valoarea a 16 registre de paleta si unregistru de margine
% AL = 03 comuta intreintensitate si pilpiire
BL = 0 validare intensitate
1 validare pilpiire
% AL = 07 citeste registri de paleta (la PS2)
BL = registrul de citit
La revenire
BH = valoarea paletei
% AL = 10 scriere registre de culoare DAC
BH=registrul de scris
CH = valoare pt. Verde
CL = valoare pt. Albastru
DH = valoare pt.Rosu
% AL = 12 scriere bloc de registre DAC
BX = primul registru de scris
CX = numar de registre de scris
ES:DX = poantor la tabela de culori de scris
% AL = 13 scriere stare selectie culoare
BL = 0 Scriere bit 7 din registrul Mode Control
BH = valoare pentru bitul 7
BL = 1 scriere registru selectie culoare
BH = valoarea de scris
% AL = 17 citire bloc de registre DAC
BX = primul registru de citit
CX = numar de registre
ES:DX = poantor la buffer de citire
% AL = 18 actualizare registre masca DAC
BL = noua masca
% AL = 19 citire registre masca DAC
La revenire
BL = valoarea citita
% AL = 1A citire stare pagina color
BL = bitul 7 al registrului Mode Control
BH = bitii 2 si 3 ai registrului de selectie culoare daca BL = 0
= bitii 0 la 3 ai registrului de selectie culoare daca BL = 1
La revenire
BL = modul curent de paginare
CX = pagina curenta
% AL = 1B adunarea culorilor generarea umbrei
BX = primul registru de adunat
CX = numar de registre de adunat
|
INT 16h Servicii de tastatura
Reg. AH
|
Functia
|
Continutul altor registre
|
00
|
Asteapta apasare tasta si citeste
|
AL- codul tastei apasate
|
01
|
Citeste starea tastaturii (taste apasate)
|
|
02
|
Citeste stare taste Shift
|
|
03
|
Setare rata de scriere
|
|
04
|
Ajustare click
|
|
05
|
Scriere in buffer de tastatura
|
|
INT 13 Servicii de disc
Reg. AH
|
Functia
|
Continutul registrelor la intrare
|
Continutul registrelor la iesire
|
0
|
Resetare unitate
|
DL= numarul unitatii (80h, 81h, -disc rigid)
|
AH=starea operatiei (0 – operatie reusita)
CY=0 operatie reusita
|
1
|
Citire stare
|
idem
|
AL- satrea operatiei anterioare
|
2
|
Citire sector
|
AL= nr. De sectoare de citit
ES :BX- adresa buffer
CL0-5= numar sector
CL6-7=numar pista biti 8-9
CH=numar pista biti 0-7
DL=numar disc
DH0-5=numar cap
DH6-7=numar pista biti 10-11
|
AH=starea
CY=0 operatie reusita
1 eroare
|
3
|
Scriere sector
|
idem
|
idem
|
4
|
Verificare sector
|
Idem
|
idem
|
0Ch
|
Pozitionare pe pista data
|
Idem
|
idem
|
0Dh
|
Resetare controlor disc rigid
|
DL=unitate(80, 81)
|
idem
|
INT 11h - Echipamente instalate
- nu are parametri de intrare
-in AX returneaza lista echipamentelor instalate in sistem:
Bit 0 - driver de disc flexibil instalat
Bit 1 - prezenta coprocesor matematic
Bits 2,3 memoria RAM instalata (nu se mai foloseste)
Bits 4,5- mod video la initializare
00- nimic
01- 40x25 color
10- 80x25 color
11- 80x25 alb/negru
Bits 6,7- numar de unitati de disc
Bit 8- prezenta DMA
Bits 9,10,11 -numar de placi seriale RS232 instalate
Bit 12 - placa de jocuri instalata
Bit 13- imprimanta seriala atasata
Bits 14,15- numar de imprimante atasate
Dostları ilə paylaş: |