Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INGINERIE
ELECTRIC I TEHNOLOGIA
INFORMAIEI
Coordonator:
Gyorodi Robert
Student: Pendea Raul Marius
Anul IV, grupa 1641
Oradea, 2017
Cuprins
1.Informaii generale...................................................................................................... 3
1.1
1.2
1.Informaii generale
Un sistem de operare este un program care controleaza distributia
resurselor unui calculator si mediaza comunicarea dintre hardware, pe de o
parte, si aplicatiile utilizatorilor, pe de alta parte.
2
1.1
1.2
2.1 Windows
Windowsul a fost proiectat s ruleze pe o varietate de arhitecturi,
inclusiv CISC bazate pe Intel sau RISC. Varianta iniial a lui Windows NT
suporta i x86 i MIPS. Apoi a fost adugat suportul pentru DEC Alpha AXP
(dei era procesor pe 64bii, NTul rula n 32). Suportul pentru Motorola
PowerPC a fost adauga n NT 3.51. Pentru ca toate aceste arhitecturi nu se
mai foloseau, Windows 2000 suporta numai x86. Windows XP i 2003 adauga
suport pentru inc 3 arhitecturi Intel IA64, AMD x8664 si Intel EM64T.
9
11
ntreruperi n Windows
La fel ca i n Linux, device driverele trebuie s fac o cerere de obinere a
ntreruperii nainte de folosire. Dac cererea este acceptat, ntreruperea va
avea asociat o rutin de tratare. Atunci cnd device driverul nu mai folosete
ntreruperea, aceasta trebuie eliberat.
2.2 Linux
Driverul e un nivel de abstractizare ntre software i circuitele
hardware, deci trebuie s comunice cu ambele.
I/O cnd acceseaz dispozitivele periferice, de obicei printrun cip extern sau
circuite separate n procesor.
Din acelai motiv, Linuxul implementeaz conceptul de porturi I/O pe
toate platformele hardware pe care ruleaz, chiar i pe acelea unde
procesorul folosete un singur spaiu de adrese.
Chiar dac o magistral periferic are un spaiu de adrese separat
pentru porturile I/O, nu toate dispozitivele ii mapeaz registrele la porturile
I/O. n timp ce porturile I/O sunt folosite de plcile ISA, majoritatea
dispozitivelor PCI ii mapeaz registrele n regiunea de adrese din memorie.
Aceast abordare e de preferat pentru c nu necesit instruciuni speciale,
procesoarele accesnd memoria mult mai eficient.
#include
<linux/kernel.h>
void barrier(void)
#include
<asm/system.h>
void rmb(void);
void
read_barrier_depends(void);
void wmb(void);
void mb(void);
void smp_rmb(void);
void
smp_read_barrier_depends(void);
void smp_wmb(void);
void smp_mb(void);
Porturile I/O
Porturile I/O sunt mijloacele prin care driverele comunic cu multe
dispozitive, cel puin o parte din timp.
Kernelul ofer o interfa care permite driverului s cear porturile de
care are
nevoie. Funcia principal e request_region:
#include <linux/ioport.h>
struct resource *request_region(unsigned long first, unsigned
long n, const char *name);
Mai exist i o funcie care permite driverului s vad dac un anumit set
de porturi e
disponibil:
int check_region(unsigned long first, unsigned long n);
Operaii cu stringuri
Unele procesoare au implementate instruciuni speciale pentru a
transfera rapid secvene de diverse tipuri de date (byte, word, long)
ctre i dintrun port. Acestea sunt denumite instruciuni string i sunt
definite de urmtoarele macrouri:
void insb(unsigned port, void *addr, unsigned long count); void
outsb(unsigned port, void *addr, unsigned long count);
14
Dependena de platform
Memoria I/O
n ciuda popularitii porturilor n lumea x86, principalul mecanism de
15
Alocarea i maparea
Regiunile de memoria I/O trebuie alocate nainte de a fi folosite.
Interfaa pentru
alocarea regiunilor de memorie este (definit n <linux/ioport.h>):
Tratarea ntreruperilor
Dei cteva dispozitive pot fi controlate folosit numai porturile I/O,
majoritatea sunt ceva mai complicate de att. Pentru c multe dispozitive
funcioneaz cu tehnologii mult inferioare ca vitez fa de procesor i
acesta trebuie s atepte, sau introdus ntreruperile prin care dispozitivele
anun procesorul c ceva sa ntamplat.
O ntrerupere e un semnal pe care hardwareul l poate trimite cnd
vrea s atrag atenia procesorului. Linuxul trateaz ntreruperile ntrun
mod asemntor cu acela cu care trateaz semnalele. Un driver trebuie doar
s nregistreze un agent, care se va ocupa de ntrerupere cnd va aprea.
Se va folosi ca exemplu portul paralel care, dei e o interfa
simpl, poate s genereze ntreruperi. Aceasta caracteristic e folosit
de imprimant pentru a notifica driverul c e gata s accepte urmatorul
caracter.
17
Locking
Deoarece rutinele de tratare a ntreruperilor se execut n context
ntrerupere, aciunile care se pot efectua sunt limitate: nu se poate accesa
memoria din userspace, nu se pot apela funcii blocante, nu se pot folosi
spinlockuri pentru sincronizare deoarece acest lucru ar duce la deadlock n
cazul n care spinlockul este deja obinut.
Totui, exist cazuri n care device driverele trebuie s se sincronizeze cu
ntreruperile. n aceste situaii este necesar dezactivarea ntreruperii cu
care dorim s ne sincronizm
void disable_irq(unsigned int irq);
18
Funcionarea pe x86
Cel mai de jos nivel al tratrii ntreruperii se gsete n fiierul entry.S,
scris n limbaj de asamblare, care se ocup de nivelul main. Codul pune
numrul ntreruperii n stiv i sare la un segment care apeleaz do_IRQ,
definit n irq.c.
Primul lucru pe carel face do_IRQ e s accepte ntreruperea pentru ca
controllerul s se ocupe de alte sarcini. Apoi blocheaza numrul, pentru a
preveni alt procesor s se ocupe de ntrerupere, reseteaz civa bii de
status (inclusiv IRQ_WAITING) i apoi caut agentul care se ocup de acest
IRQ. Dac nu exist agent nu face nimic, blocajul e ridicat i se iese din
do_IRQ.
De obicei exist totui cel putin un agent pentru IRQ i se
apeleaz funcia handle_IRQ_event care invoc agentul.
Verificarea disponibilitii IRQului se face prin setarea bitului
IRQ_WAITING pentru fiecare IRQ care nu are un agent. Cnd se execut
ntreruperea, do_IRQ reseteaz bitul i apoi iese din funcie pentru c nu
exist handler.
Partajarea ntreruperilor
Hardwareul modern a fost conceput s permit partajarea
ntreruperilor (cerut de busul PCI). Aa c i kernelul de linux suport
partajarea ntreruperilor pe toate magistralele (chiar i pe ISA).
ntreruperile partajate sunt instalate prin request_irq, ca i cele non
partajate dar bitul SA_SHIRQ trebuie s fie specificat n argument cnd se
19
3. Bibliografie
Linux Device Drivers, Third Edition, O'Reilly
Microsoft Windows Internals, Fourth Edition, Microsoft Press
www.netbsd.org
en.wikipedia.net
20