Sunteți pe pagina 1din 33

Curs 1 – Arhitectura

Microprocesor = UCP de uz general


- accent pus pe flexibilitate si performanta
- interfata generala pt utilizator (tastatura, mouse, ecran etc)
- folosit in PCs, servere, tel. mobile etc
Microcontroler = microprocesor + memorie + periferice in acelasi cip
- accent pus pe dimensiuni si costuri reduse
- interfata modelata dupa aplicatii
- folosit in ceasuri digitale, telecomenzi, aparate electrocasnice etc
Arhitectura = organizarea interna a hardware-ului unui microcontroler
- fiecare arhitectura are propriul set de instructiuni (lbj. de asamblare)

Arhitectura Harvard (Intel 8051, Microchip AVR, PIC)


- arhitectura in care instructiunile si datele sunt stocate in zone separate de memorie
- in cazul arh. von Neumann, instructiunile si datele sunt stocate in aceeasi zona de memorie (x86, ARM)
Memoria de program si memoria de date impart aceleasi adrese, dar sunt accesate prin tipuri diferite de
instructiuni.

Memoria FLASH (memoria de program) – 64kB


- poate fi reprogramata in circuit
- ofera spatiu de stocare non-volatil
- permite upgrade-uri de firmware
- 512B (0xFE00 – 0xFFFF) – factory use
- 128B (0x10000 – 0x1007F) – memorie scratchpad, poate fi utilizata pt stocare non-volatila a
constantelor de program
Memoria de date (RAM) – 256B
Impartita in 3 zone:
- Lower 128
- Upper 128
- Registre cu fct. speciale (SFR)
Fizic sunt 384 locatii de memorie, cu toate ca Upper 128 imparte acelasi spatiu cu SFR (80h – FFh)
- SFR – accesate printr-un mod de adresare directa in conjunctie cu o adresa 0x80 – 0xFF
- Upper 128 – uz general, locatii accesate prin adresare directa
- Primii 32B din memoria interna de date sunt adresabili ca 4 seturi de cate 8 registri de uz general R0:R7
- Urmatorii 16B sunt adresabili pe biti
PSW – Program Status Word
SFR – Special Function Registers

- SFR-urile ofera control si schimb de date cu resursele si perifericele uC


- Regisrele ale caror adrese se termina cu 0h sau 8h sunt byte/bit-adresabile
- Majoritatea registrelor nu sunt adresabile pe bit (incluzand SP = stack pointer si DPTR = data pointer
register)

o Acumulator (ACC) si B
- A: utilizat implicit de anumite instructiuni
- B: utilizat in inmultire si impartire
- Aceste registre sunt input/output ale ALU
o PSW – Program Status Word
- indica starea operatiilor aritmetico-logice folosind mai multi biti precum Carry
- selecteaza setul/bancul de registri (Bank 0 – Bank 3)
o Stack Pointer – SP
o Data Pointer – DPTR (DPH si DPL)
- registru de 16 biti folosit pt accesarea memoriei externa de program/date
o Timere – TH0, TL0, TH1, TL1, TMOD, TCON
o Porturi I/O Paralele – P0, P1, P2, P3
o Registre de comunicare seriala – SBUF si SCON
o Registre de administrare a intreruperilor – IP si IE
o Registrul de control al puterii – PCON
Curs 2 – Setul de instructiuni
- Format: Opcode si 0/1/2 octeti de operanzi
- Operanzi: valoare numerica, registru, locatie de memorie, port I/O
- Instructiune Destinatie, Sursa

Moduri de adresare 8051

Adresare in registru
- implica transferul de informatii intre registre
- trebuie specificat intai setul de registre (0-3)

Adresare directa
- Transfera date la/de la locatia indicata de nr. hexazecimal

Adresare indirecta
- acest mod foloseste un pointer pt. a stoca adresa efectiva a operandului
- doar R0, R1 si DPTR pot fi folosite ca registre pointer
- R0 si R1 pot retine adrese de 8b, iar DPTR de 16b

Adresare constanta imediata


- mod de adresare cu operanzi de 8/16b
- constanta indicata in instructiune

Adresare relativa
- folosita de salturi precum SJMP (short jump) si salturi conditionale (ex. JNZ)
- instructiunile transfera controlul dintr-o parte de program in alta
- adresa destinatie trebuie sa fie intre -128 si +127 octeti fata de adresa instructiunii curente, deoarece
se foloseste un offset de 8b
Adresare absoluta
- ACALL si AJMP
- instructiuni de 2 octeti unde adresa absoluta de 11b este specificata de operand
- Primii 5b din cei 16b ai adresei PC nu se modifica. Ultimii 11b sunt incarcati din aceasta instructiune,
deci adresa la care se realizeaza saltul trebuie sa fie in urmatorii 211 = 2048b = 2KB din memoria de
program

Adresare lunga
- LCALL si LJMP
- instructiuni de 3 octeti unde ultimii 2 octeti specifica adresa de 16b la care se face saltul
- permite utilizarea intregii memorii de cod de 64KB

Adresare indexata
- utila atunci cand vrem sa preluam date dintr-o tabela (look-up table)
- un registru de 16b (data pointer) pastreaza adresa bazei, iar acumulatorul retine un
deplasament/offset de 8b = valoarea indexului
- suma valorii din aceste doua registre formeaza adresa efectiva pentru JMP sau MOVC

Tipuri de instructiuni
Operatii aritmetice
- adunari, scaderi, incrementari, multiplicari, impartiri etc
- C8051 nu are cunostiinte speciale legate de formatul de date
- bitii de status din PSW sunt setati cand anumite conditii sunt indeplinite, permitand utilizatorului sa
administreze diferite formate de date (binar cu semn, binar fara semn, binar codat zecimal, ASCII etc.)

Operatii logice
- instructiuni logice si operatii booleane (AND, OR, XOR, NOT)

Instructiuni de transfer de date


- transferul se poate face intre memoria interna de date RAM si un SFR, fara ca informatia sa treaca prin
acumulator
- se poate face transfer de date intre memoria RAM externa si cea interna prin adresare indirecta
- Upper 128 din RAM sunt accesabili doar prin adresare indirecta, iar SFR-urile doar prin adresare directa
MOV R1, R2 NU ESTE PERMIS

Instructiuni cu variabile booleane (cu un bit)


- set, clear, and, or si complement
- operatii pe biti si salturi conditionate
- toate accesarile de biti se fac prin adresare directa

Instructiuni de salturi (program branching)


- controleaza fluxul de executie al programului
- unele instructiuni au capacitati de decizie inainte sa execute transferul controlului catre alte parti din
program (conditional branches)
Curs 3 – Timere

Timerele sunt folosite pentru:


- a obtine intervale de timp (ceas)
- numararea evenimentelor
- generarea baud-rate

Intervale de timp (ceas)


- timerul este programat sa depaseasca la un anumit interval de timp - overflow
- overflow flag este setat sau se genereaza o intrerupere – acestea sunt utilizate pentru a sincroniza
programul sau pt. a executa o instructiune
ex: verifica starea intrarilor, actualizeaza iesirea DAC sau intrarea ADC
Numararea evenimentelor (counter)
- determina aparitiile unui event in loc sa masoare timpul dintre doua evenimente
Baud-rate generator
- genereaza baud-rate pentru porturile seriale UART0 si UART1

Moduri de lucru ale timerelor/numaratoarelor


Modul 1 si modul 0:
- configureaza Timer1 sa functioneze ca timer/contor pe 16b
- TL1 si TH1 retin valoarea pe 16b
- Cand numarul din TH1|TL1 face overflow-ul de la FFFFh la 0000h, TF1 este setat iar TH1 si TL1 se
reseteaza la 00h
- numaratoarea continua pana la urmatorul overflow si tot asa
- frecventa de overflow = T1CLK / 216
- modul 0 este similar, dar foloseste doar 13b pentru numarare
Modul 2 (auto-reload):
- Timer1 functioneaza ca timer/contor pe 8bit cu reincarcare automata a valorii de start
- TL1 = timerul propriu-zis pe 8b
- TH1 = stocheaza valoarea de reload
- cand numarul din TL1 ajunge la overflow (FFh in 00h), TF1 este setat iar valoarea din TH1 este incarcata
automat in TL1
- numaratoarea continua pana la urmatorul overflow si tot asa
- acest mod este convenabil pt crearea unor intervale periodice regulate
- Timer1 poate fi folosit ca baud-rate generator pe 8b pentru UART
- frecventa de overflow = T1CLK /( 28 – TH1)

Curs 4 – Comunicare seriala

- comunicarea paralela implica transmiterea unui intreg octet de date printr-un grup de fire paralele
- comunicarea seriala implica transmiterea datelor bit cu bit pe un singur fir
- comunicarea seriala poate fi asincrona sau sincrona
Standarde de comunicare seriala
- RS-232 (cu UART)
- Serial peripheral interface (SPI)
- System management bus (SMBus)
- Serial ATA (SATA)
C8051 are 2 UART-uri, un SPI si un SMBus.

UART = Universal Asynchronous receiver/transmitter


Comunicarea seriala asincrona
In comunicarea asincrona, transmitatorul si receptorul nu au ceas comun.
Transmitatorul
- shifteaza datele primite paralel printr-o linie seriala, folosind propriul clock
- adauga bitii de start, stop si paritate
Receptorul
- extrage datele folosind propriul clock
- converteste datele primite serial in date paralele dupa ce elimina bitii de start, stop si paritate
Bitii
- bitul de start: indica inceputul cuvantului de date (data word)
- bitul de stop: indica finalul cuvantului de date
- bitul de paritate: optional; folosit pt detectarea erorilor
- bitii de date: datele transmise
Baudrate: bitrate-ul unui port serial (biti pe secunda - bps)
ex. 115200 baud = 115200 bps
daca se folosesc date pe 8b, 1 start, 1 stop si niciun bit de paritate, datele efective transmise sunt:
115200*8/10 = 92160 bps

Comunicarea asincrona este usor de implementat, dar nu este eficienta deoarece necesita 2-3 biti de
control la fiecare 8b de date. Metoda este folosita in special pentru volume mici de date.

Comunicarea seriala sincrona


In modul sincron, transmitatorul si receptorul au ceas comun. De obicei, transmitatorul ofera receptorului
un semnal de clock pe langa cel serial de date.

Transmitatorul
- shifteaza datele primite paralel printr-o linie seriala, folosind propriul clock
- fara biti de start/stop/paritate
- ofera semnalul de clock pentru receptor
Receptorul
- extrage datele folosind clock-ul oferit de catre transmitator
- converteste datele primite serial in date paralele
-

Blocul UART1
UART1 este accesat prin doua SFR-uri – SBUF1 si SCON1.

SBUF1 = Serial Port Buffer - este esential format din doua buffere:
- unul de scriere care incarca datele ce urmeaza a fi transmise
- unul de citire care acceseaza datele primite din buffer
- sunt doua registre separate (write-only si receive-only)
SCON1 = Serial Port Control Register – contine bitii de stare/status si control
- bitii de control seteaza modul de operare pt portul serial
- bitii de status indica finalul transmisiunii sau receptiei si sunt testati in software (polling) sau
programati sa execute o intrerupere
Moduri de operare
- 8-bit UART cu baud-rate variabil (modul 1) – utilizat cel mai des
- 9-bit UART cu baud-rate variabil (modul 3) – TB81 si RB81 stocheaza al 9lea bit
Modul de 9-bit suporta comunicarea multiprocesor – un procesor master selecteaza slave-ul folosind al
9lea bit.
Cerinte ale ceasului UART
- UART are nevoie de un clock pentru timing-ul bitilor
- baud-rate-urile UART sunt in general mult mai mici decat frecventa MCU (Master Clock Unit), deci
ceasul de sistem nu poate fi utilizat direct ca ceas UART
- Timerele sunt folosite pentru generarea baud-rate, prin dividerea frecventei ceasului sistemului
- O precizie de ±2% a timpului bitilor este necesara pt ca transmitatorul si receptorul sa poata comunica
fara erori (se utilizeaza si oscilatoare externe cu cristale, cu eroare de 0.1%)

Programarea UART-urilor
Secventa de programare a UART:
1. Se configureaza crossbar-ul digital XBR2 pt. a permite operatia UART (enable)
2. Se initializeaza Timer1 pentru a se genera baud-rate-ul dorit
3. Se selecteaza modul de operare al portului serial si se activeaza/dezactiveaza receptia UART
(enable/disable) – registrul SCON1
4. Se activeaza intreruperile UART si se seteaza prioritatile (optional)

Fanioane de intreruperi UART


RI1 si TI1 – fanioane din SCON1
Bitii sunt setati de hardware, dar resetati de software.

- RI1 = este setat la sfarsitul receptiei de caractere = receive buffer full


 conditia este testata in software (polling) sau programata sa cauzeze o intrerupere
- Daca se doreste citirea de la intrare a unui caracter (de la dispozitivul conectat la portul serial), trebuie
asteptat pana cand RI1 este setat, apoi se reseteaza RI1 si se citeste caracterul din SBUF1

- TI1 este setat la finalul transmisiei si indica transmit buffer empty


 Daca aplicatia doreste sa trimita un caracter la disp. conectat la portul serial, trebuie mai intai sa
verifice daca portul este pregatit (ready)
 Daca a fost trimis un caracter anterior, trebuie asteptat ca transmisia sa se incheie inainte de a
trimite urmatorul caracter

Transmisia de date este initiata prin scrierea in SBUF1.


Flag-ul TI1 din SCON1.1 este setat la inceput si trebuie resetat (clear – clr) manual in software.

UART Baud-Rate
Generat de Timer1 in modul 2 (auto-reload).
𝑇1𝐶𝐿𝐾
𝑈𝐴𝑅𝑇 𝐵𝑎𝑢𝑑 − 𝑅𝑎𝑡𝑒 =
2(256 − 𝑇𝐻1)

T1CLK = SYSCLK sau SYSCLK / 4:8:12:48


Intreruperi
Intrerupere = aparitie a unei conditii care cauzeaza o suspendare temporara a programului in timp ce aceasta
este executata de un alt program/subprogram
- sunt importante deoarece permit unui sistem sa raspunda asincron unui eveniment si sa se ocupe de
acesta in mijlocul executiei altei sarcini
- un sistem condus prin intreruperi (interrupt driven system) ofera iluzia executiei mai multor sarcini
simultan
- programul care executa intreruperea se numeste rutina de deservire a intreruperii (interrupt service
routine = ISR)

ISR-ul
- ISR-ul executa raspunsul la intrerupere (in general o operatie de input/output)
- Atunci cand apare o intrerupere, programul principal suspenda executia temporar si sare la ISR
- ISR-ul termina executia printr-o instructiune RETI = return from interrupt (diferita de RET)

Organizarea intreruperilor - prioritate


C8051 suporta 20 de surse de intreruperi, printre care:
- 2 surse externe (INT0, INT1)
- 5 intreruperi ale timerelor (Timer overflow)
- 2 intreruperi ale porturilor seriale (UART0 si UART1)
Fiecare sursa de intreruperi are unul sau mai multe fanioane intr-un SFR care indica statusul.
Atunci cand un periferic atinge conditia valida de intrerupere, fanionul este setat (1).
 fanioanele sunt “level sensitive” = daca flag-ul nu este resetat (0) in ISR de catre hardware sau
software, intreruperea se va declansa din nou , chiar daca evenimentul nu mai apare
Toate intreruperile sunt dezactivate dupa resetarea sistemului si activate individual de software.
In cazul in care doua intreruperi apar simultan sau o intrerupere apare in timp ce alta este in executie, exista
un ordin de prioritate fix si doua niveluri de prioritate programabile.

Activarea/dezactivarea intreruperilor
Sursele de intreruperi sunt activate/dezactivate (enable/disable) individual prin SFR-urile IE, EIE1, EIE2.
Bitul EA (IE7) este bitul care activeaza/dezactiveaza toate intreruperile la nivel global.
Pentru a activa o intrerupere trebuie setati bitii de enable global si individual, insa exista intreruperi care
necesita mai mult de 2 biti.
Intreruperea RESET (intreruperea 0) nu poate fi dezactivata si are mereu cea mai mare prioritate.

 daca un fanion ramane setat dupa instructiunea RETI, o noua cerere de intrerupere este generata
imediat si CPU va reintra in ISR dupa completarea urmatoarei instructiuni
 daca o intrerupere este dezactivata, fanionul este ignorat de catre hardware, iar executia continua
normal
Nivelurile de prioritate = SFR-urile IP, EIP1 si EIP2
- resetate la fiecare system reset
Cele doua niveluri de prioritate permit ISR-ului sa fie intrerupt de un ISR cu prioritate mai mare. Acest lucru
este util deoarece sunt evenimente care necesita actiuni immediate, iar alte evenimente pot tolera o
intarziere.
 daca doua intreruperi sunt recunoscute simultan, este executata cea cu prioritate mai mare.
 daca ambele intreruperi au acelasi nivel de prioritate, se foloseste ordinea fixa de prioritate
Anumite fanioane de intrerupere sunt resetate automat de hardware atunci cand CPU trece la ISR.
Majoritatea fanioanelor nu sunt resetate de hardware si necesita resetarea in software (clr).

Curs 5 – Arhitectura ARM


ARM = Advanced RISC Machine –bazata pe arhitectura RISC (Reduced Instruction Set Computing)

Caracteristici RISC
- arhitectura LOAD/STORE
- dimensiune fixa a instructiunilor – 32b
- nu are registru acumulator dedicat
- putine moduri de adresare
Caracteristici non-RISC
- numar mic de registre (<32)
- fara ferestre de registre
- unele instructiuni necesita mai multe cicluri de ceas pt executie (majoritatea necesita 1 ciclu)
- intarzierile (delayed branches) nu sunt utilizate pentru a preveni blocarea pipeline-ului

CPU ARM
- poate opera ca uP/uC de uz general, chiar si in timpul executiei aceluiasi program
o la un anumit moment de timp CPU-ul se poate afla intr-un singur mod
o CPU-ul poate sa schimbe modul de lucru la evenimente externe (intreruperi) sau prin cod

Moduri de operare
Ne-privilegiate:
- USR (user) – modul general al utilizatorului pt programe normale
Privilegiate:
- SYS (system) – pentru rularea unor sarcini privilegiate de sistem
- FIQ (fast interrupt request) – pentru raspunderea la FIQs
- IRQ (interrupt request) – pentru raspunderea la IRQs
- SVC (supervisor) – implicit la reset sau cand o instructiune SVC este executata
- ABT (abort) – pentru procesarea erorilor de memorie (exceptii)
- UND (undefined) – cand apare o instructiune nedefinita
Setul de registre
- registre multifunctionale, fara un rol implicit
- registre multifunctionale, cu rol implicit
- registre dedicate

Dimensiune fixa: 32-bit

Registre logice si fizice:


- fiecare mod de operare are propriul sau set de registre de lucru
- 37 de registre fizice (1 PC, 1 CPSR, 5 SPSR, 30 GPR)
- 16 + 1 sau 2 registre logice in fiecare set

Registre multifunctionale
- R0 - R7: registre fizice multifunctionale, fara rol implicit, disponibile in toate modurile de operare
- R8 – R12: registre logice multifunctionale, fara rol implicit, mapped in doua registre fizice fiecare
o un registru fizic este folosit in modul FIQ, celelalte in alte moduri
- R13, R14: registre logice multifunctionale, cu rol implicit, mapped in 6 reg. fizice
o R13 – implicit SP = stack pointer
o R14 – implicit LR = link register
o folosite pentru a stoca adrese de intoarcere
- R15: PC = program counter – reg. fizic, atribut de arhitectura, ultimii 2 biti mereu 0
o scrierea in registru = saltul la o instructiune
- CPSR (Current Program Status Register) – reg. fizic, retine fanioanele CPU
- SPSR (Saved Program Status Register) – reg. logic mapped in 5 reg. fizice (pt fiecare tip de intrerupere)
o stocheaza fanioanele CPU din apelarile programelor in modurile de manipulare a exceptiilor

 CPSR
Memoria
Harta memoriei: 4GB = 2Gw = 1Gdw

Conventii de stocare de date:


- ARM foloseste ambele conventii (little endian si big endian)
- Fanionul E este folosit pt a comuta intre conventii

Memory management
- implicit: adresare liniara (adrese fizice de 32b)
- MMU = Off-chip Memory Management Unit – coprocesor CP15
o poate executa paginare/mgmt. al memoriei virtuale
o 4 clase de pagini
 sectiuni (1MB) – accesibile printr-un nivel de adresare indirecta
 pagini mari/medii/mici (large/medium/tiny) – 16kB/4kB/1kB – acc. prin 2 niv. adr. ind.
- Memory-mapped I/O (fara instructiuni dedicate pt porturile de transfer)

Moduri de adresare
- putine moduri de adresare (caract. RISC)
 Adresare implicita in registru: MOV R1, R2
 Adresare imediata: MOV R1, #1234
 Adresare indirecta in registru (multe tipuri)
- memoria poate fi accesata doar prin instructiuni LOAD/STORE
- memoria poate fi accesata doar pt. stocare de date (procesarea de date in lucru se stocheaza doar in
registre)
Consecinte dimensiune fixa 32b a instructiunilor:
- adresare directa cu adrese de dimensiune maxima (32b) nu este posibila
- adresele full-size pot ti folosite doar pt adresare indirecta
 Adresare indirecta in registru
Adresa fizica FA a locatiei de memorie este accesata si pastrata intr-un registru de baza
FA <- (r)
STR r0, [r1] - stocheaza continutul r0 la adresa indicata de continutul r1
LDR r2, [r1] – incarca in r2 continutul de la adresa indicata de r1
 Adresare indirecta cu offset
Adresa fizica FA - registru de baza (orice GPR R0-R15) si un offset nr. intreg (+/-)
FA <- (r) + offset
STR r0, [r1, #12] – stocheaza continutul r0 la adresa indicata de continutul r1 + offset
 Adresare indirecta cu offset pre-indexata
Dupa adunarea r1 + offset, registrul de baza r1 se updateaza cu noua adresa ( r1 = r1 + #offset)
 Adresare indirecta cu offset post-indexata
Continutul r0 se stocheaza la adresa indicata de r1, apoi r1 se incrementeaza cu offset.
Offsetul este accesat in cazul:
- adresarii immediate (constanta adaugata in registru de baza : STR ro, [r1, #12])
- adresarii in registru (continutul GPR adaugat in reg. baza : STR ro, [r1,r2])
- adresare shiftata in registru (continutul GPR este shiftat cu 0-31 pozitii,
apoi adaugat in reg. baza: STR ro, [r1, r2, LSL #2])
Curs 6 – Setul de instructiuni ARM

Accesarea registrelor folosind instructiuni ARM


- toate instructiunile pot accesa r0-r14 direct
- majoritatea instructiunilor permit folosirea PC
 Instuctiuni specifice care permit folosirea CPSR si SPSR

Fanioane din registrele CPSR si SPSR – program status registers


Fanioane:
- N = 1 --- nicio insemnatate logica --- bitul 31 al rezultatului a fost setat, indica un nr. negativ in
operatiile cu semn
- Z = 1 --- rezultatul contine doar 0-uri --- rezultatul este 0
- C = 1 --- dupa shiftare, carry flag = 1 --- rezultat > 32b
- V = 1 --- nicio insemnatate logica --- rezultatul > 31b; indica o posibila corupere a bitului de semn in
cazul numerelor cu semn
PC – Program Counter (R15)

- toate instr. au lungime de 32 biti


- toate instructiunile trebuie sa fie aliniate pe cuvant (word aligned)
- valoarea PC este stocata in bitii [31:2] cu bitii [1:0] = 0 (instr. nu poate fi aliniata pe bit/jumatate de
word)
R14 – folosit ca registru de legatura cu subrutina (link register = LR) si stocheaza adresa ede intoarcere
atunci cand se executa o subrutina/legatura

Manipularea erorilor (exception handling) si tabelul de vectori


Atunci cand apare o exceptie, nucleul:
- copiaza CPSR in SPSR
- seteaza bitii corespunzatori in CPSR
o daca nucleul se afla in starea Thumb, va intra in starea ARM
- selecteaza registrele din setul corespunzator
- stocheaza adresa de intoarcere in LR
- seteaza PC la adresa vectorului corespunzator

Pentru intoarcere:
- Se reface CPSR din SPSR
- Se reface PC din LR

The Instruction Pipeline (banda de instructiuni)


Procesoarele ARM folosesc tehnica benzii rulante pt. a creste viteza fluxului de instructiuni.
 permite realizarea simultana a mai multor operatii
PC – FETCH  PC-4 – DECODE  PC-8  EXECUTE
 PC indica catre instructiunea care trebuie preluata (fetch) decat catre cea care trebuie executata.

Executie conditionala
Seturile de instructiuni permit, in general, executarea subrutinelor doar conditional.
Prin refolosirea conditiei de evaluare, ARM creste nr. de instructiuni
- Toate instructiunile contin un camp conditional care determina daca CPU le va executa
- Instructiunile ne-executate consuma 1 ciclu de timp (fetch & decode)
Acest lucru elimina nevoia de mai multe ramuri (branches), care opresc pipeline-ul (3 cicluri pt reumplere)
- permite cod in linie, foarte dens, fara ramuri
- timpul pierdut pt neexecutia unor instructiuni este in general mai mic decat apelul unei subrutine si
intoarcerea in program
Pentru a executa instructiunea conditional, sintaxa este:
ADD r0,r1,r2 ; r0 = r1 + r2 (ADDAL)
; ... and set flags

Implicit, operatiile de procesare de date nu afecteaza fanioanele de conditie (cu exceptia comparatiilor).
Pentru a actualiza fanioanele de conditie, bitul S al instructiunii trebuie setat ulterior.
Instructiuni cu ramuri (Branch)
Offset-ul pentru instructiunile cu ramuri este calculat de asamblor:
- facand diferenta dintre instructiunea ramurii si adresa tinta – 8 (pt. pipeline)
- Ofera un offset de 26-biti, shiftat la dreapta cu 2 biti (cei 2 biti din dreapta sunt mereu 0)
- range: +/- 32MB
Cand sunt executate instructiunile, procesorul shifteaza offset-ul cu 2 biti, il extinde pe 32b si il incarca in PC.
Executia continua de la noul PC, dupa ce pipeline-ul a fost umplut (refill).
Instructiunea de ramura cu legatura (branch with link) implementeaza apelul unei subrituine scriind PC-4 in
LR-ul setului curent.
Pentru intoarcerea din subrutina, in PC se stocheaza valoarea din LR.
Instructiunile cu ramuri nu afecteaza LR.
Arhitectura 4T ofera mai multe instructiuni ARM cu ramuri.

Instructiuni de procesare a datelor


Cea mai mare familie de instructiuni ARM, toate cu acelasi format.
- operatii aritmetice
- comparatii (fara rezultat, doar coduri de setare a conditiilor)
- operatii logice
- schimb de date intre registre
Arhitectura LOAD/STORE – instructiunile de procesare de date functioneaza doar cu registre, NU si cu
memoria.
Pt. a executa o anumita operatie, un operand trebuie mereu sa fie un registru (Rn), iar al doilea operand este
trimis catre ALU prin barrel shifter.
Instructiunile de comparare modifica valoarea fanioanelor de conditie (CONDITION FLAGS).

BARREL SHIFTER
- ARM nu are instructiuni de shiftare
- Foloseste acest circuit care shifteaza anumite operatii
 shiftare la stanga cu o anumita valoare (*2) (LSL)
 shiftare logica la dreapta (/2) (LSR)
 shiftare aritmetica la dreapta (pastreaza semn) (ASR)
 rotate right (ROR) – bitii shiftati se intorc la coada
 rotate right extended (RRX) – foloseste CPSR C-flag ca al 33lea bit
Al doilea operand – registru shiftat
 val. de shiftare este retinuta ori
 intr-un camp de 5-bit imediat instructiunii (shiftarea se face intr-un singur ciclu,
fara overhead)
 byte-ul de jos al unui registru (necesita un ciclu in plus, ARM nu are suficiente
porturi sa citeasca 3 registre simultan, identic cu shiftarea din alte procesoare)
- Daca nu se specifica shiftarea, se aplica implicit LSL #0 (nu afecteaza val. registru)
Folosirea unui registru shiftat:
- folosirea unei instr. de multiplicare cu o constanta necesita incarcarea constantei intr-un registru (si
asteptarea unui nr. de cicli pt ca aceasta sa fie completata)
- O solutie mai optima este combinarea MOV, ADD, SUB si RSB cu shiftari, pt a reduce nr. ciclilor necesari

Valoarea imediata
- Nu exista o instructiune care sa incarce direct o constanta imediata de 32b fara sa execute o incarcare
de date din memorie
- Instr. ARM nu folosesc fluxul de instructiuni ca date
- Instr. procesare de date au disponibili 12b pentru operandul 2 (max. 4096)
 se fol. pt stocarea val. pe 8b (0-255), care sunt rotite la dreapta cu un nr. par de
pozitii, pt a obtine mai multe valori

Incarcarea de constante de 32-biti


- MOV/MVN nu incarca intotdeauna constantele dorite
o Se foloseste LDR rd, =num. const.

Instructiuni de multiplicare
- 2 tipuri: MUL si MLA (multiply accumulate – aduna gratis, in acelasi ciclu)
MUL {<cond>}{S] Rd, Rm, Rs ; Rd = Rm * Rs
MLA {<cond>}{S] Rd, Rm, Rs, Rn ; Rd = Rm * Rs + Rn
 Restrictii: Rm si Rd nu pot folosi acelasi registru  se interschimba Rm si Rs (swap), deoarece
inmultirea este comutativa. De asemenea, PC nu se poate folosi.
 ARM foloseste algoritmul lui Booth pentru inmultirea intregilor

Instructiuni de citire/scriere (LOAD/STORE)


Arhitectura ARM are doar instructiuni Load/Store si nu suporta procesare de date in memorie. Pentru a folosi
datele din memorie, acestea trebuie mutate intai in registre.
Acest lucru este eficient, doarece instructiunile de procesare de date in registre nu sunt incetinite de
accesarea memoriei.

ARM are 3 seturi de instructiuni pentru interactiunea cu memoria:


 Single register data transfer – LDR/STR
 Block data transfer – LDM/STM
 Single data swap – SWP

Single register data transfer


LDR/STR (word) si LDRB/STRB (byte)
ARM v4 are suport pt. halfword si dare cu semn (LDRH/STRH & LDRSB/LDRSH)
Se poate adauga si conditie: <LDR/STR>{cond}{size} Rd, <addr.>
STR r0, [r1] --- stocheaza continutul r0 la locatia indicata de r1
LDR r2, [r1] --- incarca in r2 continutul de la locatia indicata de r1
Instructiunile pot accesa nu doar locatia indicata in registrul de baza, dar pot accesa si locatii cu
offset (+/-) fata de registru: (0-4095B = unsigned 12bit). Offsetul poate fi aplicat inaintea transferului
(pre-indexat) sau dupa transfer (post-indexat).
Instructiunile Load/Store Halfword/Signed Byte pot folosi adresare pre/postindexata in acelasi
fel ca instructiunile normale de load/store. Totusi, formatul offsetului este mai constrans (8bit –
0:255B).
Efectele endianess
ARM poate fi setat sa acceseze datele in ambele moduri:
- little endian (cel mai nesemnificativ octet este stocat in bitii 0-7 ai unui cuvant adresat)
- big endian (cel mai nesemnificativ octet este stocat in bitii 24-31 ai unui cuvant adresat)
o Acest lucru nu este relevant decat daca datele sunt stocate in words si apoi accesate in cantitati
mai mici.

Block data transfer


Instructiunile Load/Store Multiple instructions (LDM/STM) permit folosirea a 1-16 registre pentru
transferul de date cu memoria. Registrele pot fi orice subset din setul curent de registre sau un subset al unui
set user-mode atunci cand uC se afla intr-un mod privilegiat.

Registrul de baza este folosit sa determine unde se va face accesul in memorie:


- 4 moduri diferite de adresare permit incrementarea/decrementarea inclusiva/exclusiva a locatiei reg.
baza
- reg. baza poate fi optional actualizat dupa finalizarea transferului (daca se pune “!”)
- reg. cu cel mai mic numar face transferul cu cea mai joasa locatie de memorie accesata

Instructiunile sunt foarte eficiente pentru:


- salvarea si restaurarea continutului (stiva de memorie)
- mutarea unor blocuri mari de date
Stive
Datele noi sunt incarcate – PUSH
Datele sunt extrase din stiva – POP
Doi pointeri definesc stiva:
 base pointer (indica base)
 stack pointer (indica top)

Operatii cu stive:
Traditional, o stiva creste in jos in memorie, cu ultimul element impins la adresa cea mai mica.
ARM suporta si stive care cresc in sus.
Valoarea SP poate indica catre:
 ultima adresa ocupata (full-stack) – necesita pre-decrementare
 urmatoarea adresa ocupata (empty-stack) – necesita post-decrementare
Tipul stivei este dat prin postfix-ul instructiunilor:
 STMFD / LDMFD : Full Descending stack
 STMFA / LDMFA : Full Ascending stack
 STMED / LDMED : Empty Descending stack
 STMEA / LDMEA : Empty Ascending stack
NOTA: Compilatorul ARM suporta doar stive care cresc in jos (full descending stacks).

Stivele sunt utilizate pentru a crea un spatiu temporar de registre de lucru pentru subrutine. Orice
registru necesar este impins in stiva la inceputul subrutinei si extras la final, pentru a-l restabili.

Daca instructiunea POP are bitul S setat (cu ‘^’), transferul PC intr-un mod privilegiat va cauza ca SPSR
sa fie copiat in CPSR.

Daca instructiunile nu sunt folosite pentru a implementa stive:


 STMIA / LDMIA : Increment After
 STMIB / LDMIB : Increment Before
 STMDA / LDMDA : Decrement After
 STMDB / LDMDB : Decrement Before

Instructiuni Swap/Swap Byte (interschimbare) --- SWP {cond} {B} Rd, Rm, [Rn]
Intreruperi Software (SWI)
SWI = instructiune definita de utilizator
Cauzeaza o exceptie pentru vectorul hardware SWI, cauzeaza trecerea in modul supervisor.
SWI exception handler – examineaza campul de comentariu al instructiunii (24b) si decide ce operatie este
necesara.

Instructiuni de transfer PSR


MRS si MSR – transmit continutul CPSR/SPSR intr-un GPR.

Coprocesoare
Arh. ARM suporta 16 coprocesoare.
Fiecare set de instructiuni al unui coprocesor ocupa o parte din setul de instructiuni ARM.
Instructiunile coprocesoarelor sunt de 3 tipuri
- Procesare de date
- Transfer de date in/din registre (to/from ARM)
- Transferuri de date in/din memorie (load/store to/from memory)
Un coprocesor poate fi implementat hardware, software (prin exceptii/instructiuni nedefinite) sau chiar in
ambele.

Instructiuni transfer date:


MRC = Move to Register from Coprocessor
MCR = Move to Coprocessor from Register
LDC / STC = transfer in/din memorie (poate avea offset)

SUMAR ARM
- Instructiunile au 32 biti
- Majoritatea instructiunilor se executa intr-un singur ciclu
- Orice instructiune poate fi executata conditional
- Arhitectura load/store
 instructiunile de procesare de date functioneaza doar cu registre
 instructiuni specifice de acces in memorie cu auto-indexare
 tipuri de date 32b, 8b sau 16b pt. ARM v4
- Set extins de instructiuni cu ajutorul coprocesoarelor
Curs 8 – Memory Management
Este procesul prin care microprocesorul organizeaza si structureaza memoria.
- pentru a furniza cai de alocare dinamica a unor portiuni din memorie si eliberarea lor atunci cand nu
mai sunt necesare
- pentru a proteja portiuni din memorie de un program/utilizator sau de intentiile rele alea altor
programe/utilizatori
Mem. Mgmt este folositor doar in cazul unui mediu multi-user, multi-tasking.
Poate fi facut doar in contextul unei memorii segmentate (memoria este impartita in sectiuni cu setari
specifice de protectie).

Organizarea liniara
- accest continuu in memorie
- spatiu de adrese: 0 – 2n-1 (pt. adrese de n-bit)
- adresa fizica este un atribut de arhitectura
Organizarea segmentata
- memoria este impartita in segmente (pagini)
- in segmente exista adresare liniara relativa la baza segmentului
- adresa fizica NU este un atribut de arhitectura

Mecanisme de mgmt. al memoriei


Mgmt. memoriei poate fi realizat doar in cazul memoriei segmentate, in care utilizatorul nu are acces
direct la memoria fizica, ci indirect prin VM = memoria virtuala.
- Segmentarea mem. virtuala
- Paginarea mem. virtuala
Mecanismele pot fi folosite individual sau simultan.

Principii de segmentare a VM
- Memoria este impartita disjunct, nu neaparat concatenat, in segmente de dimensiune variabila
- Segmentele au proprietati care permit personalizarea acestora si protectia informatiilor
- Segmetntele pot fi schimbate intre mem. fizica si mem. externa
Memoria virtuala VM – cuprinde toate resursele de memorie (interne si externe) ale microcomputerului.
Harta memoriei virtuale este obtinuta prin concatenarea nr. maxim de segmente, cu dimensiunea maxima a
fiecaruia.

Principii de paginare – LA FEL, doar ca segmentarea se face inaintea paginarii daca exista ambele. Paginarea se
va face in fiecare segment, ulterior.

Adresa virtuala
SELECTOR
- folosit pentru a identifica segmentul din memoria cirtuala
o INDEX – indexul segmentului
o TI (Table Indicator) – indica daca informatia este in spatiul de adrese global (0) sau local (1)
o RPL (Requested Privilege Level)
EA – Adresa efectiva
- folosita pt. identificarea informatiei in segment
Exemplu:

Descriptorii segmentelor
Fiecare segment este caracterizat de un descriptor de segment care stocheaza informatii precum:
- pozitia segmentului in memoria virtuala
- dimensiunea segmentului
- proprietatile segmentului (inclusiv cele de protectie)

Tipuri de descriptori

A. Descriptori de segmente de lucru – identifica segmente de lucru care stocheaza programe/date


B. Descriptori de control
b1. Descriptori de sistem – identifica sgmt. utilizate de CPU pt. a administra memoria
b2. Descriptori de status al task-urilor (TSS) – identifica sgmt. utilizate de CPU pt multitasking
b3. Gates – indica sgmt. utilizate de CPU pt protectie multi-nivel, multitasking si intreruperi

Tabele descriptori
Segmente cu utilizare speciala, folosite pentru a stoca descriptorii de segmente.
- se gasesc in memorie
- sunt segmente
- stocate in spatiul global de adrese
Ex. GDT (Global Descriptor Table), LDT (Local Descriptor Table)
Translatia adreselor virtuale VA
1. Este selectat tabelul de descriptori corespunzator
2. Este selectat un descriptor specific din tabel, folosint campul INDEX al VA
3. Este citita toata informatia legata de segmentul tinta (pozitie, marime, propr.)
4. Se executa verificari:
a. este locatia de memorie tinta in segmentul tinta?
b. am dreptul sa ccesez acest segment?
5. Daca verificarile sunt ok, FA-ul locatiei de memorie este calculat prin insumarea campului BASE din
descriptor cu EA-ul din VA.

GDTR (Registru GDT) --- (T1 = 0)


- GDT-BASE: stocheaza adresa fizica a GDT
- GDT-LIMIT: stocheaza marimea GDT-ului
! – Singura entitate din VM care poate fi accesata direct, fara un descriptor
LDTR (Registru LDT) --- (T1 = 1)
Stocheaza selectorul care indica la descriptorul LDT din GDT
- GDT identificat ca in cazul anterior
- descriptorul LDT din GDT identificat folosind campul INDEX din LDTR
- LDT identificat folosind campul BASE din descriptorul LDT
Campul ACCESS

- P (present) : 0 daca nu e in mem. fizica, 1 daca sgmt. e in mem. fizica


- DPL (descriptor privilege level) – fol. in mecanisme de protectie multi-nivel
- S (sgmt. descriptor) – 0 pt. segmente de sistem (tip B) si 1 pt segmente normale de lucru (tip A)
- P/D (program/data) – 0 pt. sgmt. date, 1 pt. sgmt. program
- C (conforming) – 0 pt sgmt. conform regulilor de protectie cu privilegii multi-nivel (ce plm), 1 pt exceptii
- R (readable) – 0 pt execute-only, 1 pt read-and-execute (la sgmt. program)
- A (accessed) – tehnica LRU (memory swapping)
- ED (expanding down) – 0 pt sgmt. date, 1 pt stiva
- W (writeable) – 0 pt sgmt. read-only, 1 pt read-write
- A (idem)

SUMAR
Descriptorii de tip A si B1 stocheaza info. precum:
- locatia sgmt. in memorie (BASE)
- dimensiunea sgmt. (FIELD)
- tipul sgmt (S)
- accesul la informatie (R si W)
- memory swapping (P si A)
- privilegii multi-nivel (DPL si C)

Registre Cache
- Translatia VA-FA consuma foarte mult timp pentru fiecare acces de memorie
- Segmentul poate fi refolosit pentru a face translatia mai rapid
- Toate registrele care stocheaza un selector (CS, DS, ES, SS, FS, GS, LDTR) au registre cache
corespunzatoare care stocheaza BASE, LIMIT, ACCESS din ultimul descriptor
- sunt registre fizice, nu sunt atribute de arhitectura
- resetate cand registrul de baza se schimba
Paginarea memoriei virtuale

Principii:
- memoria este impartita in sectiuni cu dimensiune FIXA, disjuncte, concatenate – PAGINI
- paginile au proprietati care permit protectia informatiei
- paginile pot trece intre mem. fizica si mem. externa identiFICAT
Harta memoriei virtuala = concatenarea tuturor paginilor

Pasi pentru transpunerea VA in FA


1. Directorul de tabele este identificat folosind FA stocata in registrul special CR32
2. Un descriptor special din tabela este selectat folosind campul DIRECTORY din VA
3. O tabela specifica de pagini este identificata folosind FA din descriptorul selectat
4. Un descriptor din tabela de pagini este selectat folosind campul TABLE din VA
5. O pagina specifica este identificata folosind FA din descriptorul selectat
6. Locatia de memorie din pagina curenta este selectata folosind OFFSET din VA si din Page Base

Mecanism paginare Intel IA32 (386, 486, Pentium, Core)


Virtual Addr. (VA) si Linear Addr. (LA) sunt compuse din 3 campuri
- DIRECTORY (10b) – index in Table Directory
- TABLE (10b) – index in Page Table
- OFFSET (12b) – index in Page
Dimensiuni:
- Table Directory – 4kB
- Page Tables – 4kB
- Page size – 4kB
- CR3 – registru care stocheaza FA a Table Directory

Fundamentele paginarii
- Memoria este accesata direct prin unul sau mai multe tabele de descriptori
- Designul oricarui mecanism de paginare incepe cu
o harta memoriei
o dimensiunea paginii
o numarul de niveluri de adresare indirecta
- VA este compusa din mai multe campuri (in fct. de nr. niveluri adr. indirecta)
o INDEX lvl. 1 - pt descriptori din tabelul Lvl. 1
o INDEX lvl. 2 – pt descriptori din tabelul Lvl.2
o EA sau OFFSET – indexul memoriei in interiorul paginii
- Dimensiunile campurilor
o dimensiunea EA depinde de dimensiunea paginii
o dimensiunile campurilor INDEX depind de dimensiunile tabelelor de descriptori
- Pagina/tabelul de descriptori stocheaza
o FA a urmatorului element (pagina/tabel)
o proprietatile (incl. protectie) pt urm. element
- Dimensiunea paginii/tabelei de descriptori este cea mai mica putere a lui 2 care ofera suficient spatiu
pentru informatia stocata in descriptor
CURS 11 MECANISME DE PROTECTIE

Ce trebuie sa protejam?

 User-ul si datele sale, de catre alti useri


 Sistemele de operare si datele sale, de catre useri

Mecanisme de protectie

 Managemetul memoriei isi auto-ofera mecanismul de protective


 Privilegii multi-level de protectie

Workflow: cum functioneaza


1. Cel care creeaza CPU determina si regulile de protectie
2. La rulare regulile se verifica “on-chip”
3. Daca o regula e incalcata se genereaza automat o intrerupere software
4. CPU continua prin excluderea corespondenta ISR

Entitati protejate:
1. MEMORIA DE SEGMENT (cel mai mic segment care are nevoie de protectie, e accesat de catre
SELECTOR-atribut de arhitectura; selectorul duce la descriptorul de segment care permite designerului
sa defineasca pozitia, size-ul si accesibilitatea segmetului din memorie)
2. TASK-UL (reprezinta o colectie de programe familiare; protejat prin mecanismul multi-level; privilegiu
dinamic care depinde de programul care ruleaza)

I. PRIVILEGIU DAT DE MANAGEMENTUL MEMORIEI

Memoria virtuala e impartita in 2 jumatati

 Global address space (TI=1) (folosit de sis de operiare, userul are acces limitat)
 Local address space (TI=0) (general folosit de user)
Accesul la informatia din memorie se face indirect prin DESCRIPTORII SEGMENT
Tabele de descriptori :GTD si LDTs sunt localizati in global address space, sunt accesibili doar de catre sistemul
de operare si de administratorul sistemului; au dimensiune fixa

Verificari “on-chip”

II. PRIVILEGIUL MULTI-LEVEL DE PROTECTIE AL MECANISMULUI

Nivelele de protectie (cercuri)


Informatia din memorie este clasificata pe nivele de protectie
REGULI GENERALE:
1. Datele poti fi accesate de programul curent daca nivelul de autorizate al programului este egal sau mai
mae decat cel al data classification
2. Programele pot fi accesate de programul curent dacanivelul de autoriazre al programului curent este
egal cu cel al programului pe care dorim sa il accesam

PROTECTIA DATELOR SI CODULUI


Datele pot fi accesate in:
1. Segmentul de date cu selectorii DS ES FS GS SS
2. In segmente de cod citibile cu selectorul CS

Indicatorii nivelelor de privilegiu


1. DPL (Descriptor Privilege Level)(in descriptorul de segmente)- reprezinta clasificarea traget-ului data
segment si reprezinta autorizatia programului care ruleaza
2. RPL (Requested privilege level)(in selectorul VA) – e atribut de arhitectura, userul poate cere un anumit
nivel de privilegiu, iar acesta poate doar sa scada nivelul de privilegiu al programului curent
3. CPL (Current Privilege Level)(al programului curent) – Mentinut de CPU, reprezinta autorizatia
programului curent; CPL=DPL al descriptorului al carui selector e CS
Regula accesului de date: datele pot fi accesate de programul curent daca autorizatia programului curent
este egala sau mai mare decat cea a clasificarii datelor.
Max(CPL,RPL) <=DPL
!!! O autorizatie mai buna este data de un numar mai mic

VERIFICAREA ACCESULUI LA DATE


1. Verificarea 1

2. Verificarea 2: Este programul curent lasat sa acceseze segmentul de date? Regula cu maximul
3. Verificarea 3: Este informatia in ,imitele segmentului

VERIFICAREA ACCESULUI LA COD


1. Verificarea 1tipul segmentuli trebuie sa fie relativ la : segmentul folosit CS si bitul ACCESS
2. Verificarea 2: regula CPL=DPL
3. Verificarea 3: EA<=LIMIT

CONTROLUL TRANSFERULUI INTRE INELELE DE PRIVILEGIU


Premise: regula CPL=DPL, acces la rutine software
Tiputi de control de transfer al programului
1. Intra-segment transfer: mereu acordat (nivelul de privilegiu nu se schimba)
2. Inter-segment transfer la acelas nivel de prioritate: mereu acordat (dupa regula CPL=DPL)
3. Inter-segment acces intre nivelele de prioritate: e acordat doar in gates (cai) de acces

GATES (cai de acces) [dimensiune=8B]


Sunt descriptori de tipul B3
Sunt folositi pentru: apeluri intre inelele de prioritate, multitasking si interrupt request responses
Selectorul gate e loaded in CS

EX de apel la progrm prin GATE


REZUMAT control transfer

 Apeluri intre programe cu acelasi nivel d eprivilegiu este permis fara GATE
 Apelul catre un program cu nivel de prioritate mai mare se poate doar cu GATE
 Apeluri care un programe cu nivel mai mic de privilegiu NU e permis
 Jump-uri intre programe cu acelasi privilegiu sunt permise si cu si fata GATE
 Jumpu-uri intre nivelele de prioritate NU sunt permise

PROTECTIA PAGINILOR
Descriptorii in Table Directory si Page Table au 32bit si contin capurile de protectie:
1. U/S 0:supervisor, 1:user obisnuit ; paginile pot fi folosite de orice program
2. R/W =1 supervisorul poate scrie in pagina
CURS 13 MULTITASKING

Este o metoda prin care un computer pare ca face mai multe taskuri in acelasi timp
Task-urile sunt excluse concomitent in loc sa fie excluse secvential
Poate fi realizat de single-CPU sau multi-CPU calculatoare, cele multi pot executa mai multe taskuri in
paralel decat cele single
Multitaskingul presupune programarea momentului cand un task se intrerupe si altul isi poate continua
rularea
Cand se schimba continutul la o anumita frecventa se creeaza iluzia de rulare in paralel

TSS (TASK STATE SEGMENT)

 Un segment care pastreaza continutul unui task


 Folosit in schimbul continutului
 E descris de un descriptor de tipul B2 numit TSS descriptor
 Min size: 44B/104B pentru 16/32 bit procesor intel
 Definit de user si se poate selecta optional
 Poate avea un Subsection Statica (nu se schimba atunci cand se schimba task-ul) sau Subsection
Dinamic (se schimba la fiecare scjimbare a taskului)

Task switching:
Unele microprocesoare nu au o instructiune speciala pentru schimbarea taskului, asa ca se folosec
jumpuri
Etapelee task switching:
1. Verificari a multilevel privilegiilor
2. Alte verificari : a TSS pentru taskul curent si pentru cel care urmeaza sa fie rulat
3. Salvarea continutului taskului vechi in al sau TSS
4. Restaurarea continutului noului task

S-ar putea să vă placă și