Lucrarea nr



Yüklə 99,15 Kb.
tarix03.12.2017
ölçüsü99,15 Kb.
#33744

Lucrarea nr. 9



Tehnici de acces la resursele hardware ale calculatorului


  1. Scopul lucrarii : Prezentarea diferitelor tehnici de programare utilizate pentru acces la resursele hardware ale unui calculator.




  1. 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.


    1. 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).




    1. 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



    1. 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.




  1. 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.




  1. 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.

    1. Sa se scrie un nou driver pentru intreruperea INT 13H (intreruperea de disc) care sa blocheze scrierea de informatii pe prima pista a discului.

    2. Sa se scrie un driver care redirecteaza iesirea paralela (la imprimanta) pe un canal serial.

    3. 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




Yüklə 99,15 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin