Multitasking. Segmentare



Yüklə 462 b.
tarix05.01.2018
ölçüsü462 b.
#37136


Multitasking. Segmentare

  • Să considerăm un sistem multitasking, în care sunt rulate 4 task-uri pe un sistem ce are disponibil 1 Mo de memorie fizică. Presupunem că jumătate din spaţiul unei aplicaţii reprezintă cod, iar cealaltă jumătate reprezintă date.


Planificatorul SO începe execuţia task-ului A milisecunde, apoi permite execuţia task-ului B, tot pentru câteva milisecunde. Totuşi, pe durata alocată, task-ul B citeşte o intrare, a operatorului, de la tastatură; dacă nici o tastă nu a fost apăsată, SO ia controlul şi marchează task-ul B ca fiind suspendat. Apoi planificatorul dă controlul task-ului C, pe durata de timp alocată, după care se va transfera controlul task-ului D. Acesta începe execuţia, dar imediat ce încearcă referirea segmentului de date, procesorul generează întreruperea non-prezent (NP).

  • Planificatorul SO începe execuţia task-ului A milisecunde, apoi permite execuţia task-ului B, tot pentru câteva milisecunde. Totuşi, pe durata alocată, task-ul B citeşte o intrare, a operatorului, de la tastatură; dacă nici o tastă nu a fost apăsată, SO ia controlul şi marchează task-ul B ca fiind suspendat. Apoi planificatorul dă controlul task-ului C, pe durata de timp alocată, după care se va transfera controlul task-ului D. Acesta începe execuţia, dar imediat ce încearcă referirea segmentului de date, procesorul generează întreruperea non-prezent (NP).

  • SO va determina că taskul D necesită acces la segmentul său de date -> evaluează stările celorlalte task-uri. Întrucât task-ul B este suspendat, SO decide să-l înlocuiască temporar din memorie pentru a face loc pentru segmentul de date al task-ului D.

  • Imaginea din memorie a lui B este scrisă pe disc şi descriptorul pentru B este marcat ca NP; task-ul B a fost scos (swapped out), şi SO care implementează memoria virtuală într-o astfel de manieră, implementează interschimbarea (swapping).





Planificatorul comută timpul de execuţie între A, C şi D.

  • Planificatorul comută timpul de execuţie între A, C şi D.

  • La un moment dat operatorul, care vede promptul, pentru intrarea de la task-ul B, va apăsa o tastă -> întrerupere hard, şi SO trebuie să planifice task-ul B. Deoarece nici unul dintre celelalte task-uri nu este suspendat, SO alege să suspende temporar un task (A). Deoarece task-ul B este mic, el înlocuieşte o parte din A (cod). Seg. cod A este marcat ca NP, task-ul B este interschimbat, şi descriptorii pentru task-urile A şi B sunt modif. corespunzător.

  • Task-ul B rulează acum la o adresă fizică diferită decât când a început.

  • SO poate interschimba segmente, bazându-se fie pe ce task a rulat cel mai mult, fie pe un alt sistem de priorităţi.

  • Cu cât timpul de interschimbare este mai mare, cu atât este mai mic timpul pentru execuţia aplicaţiilor.

  • Întrucât seg. de cod sunt nemodificabile -> nu trebuie salv. Disc, deci SO intersch. de 2 mai rapid cod faţă de date (pot fi şi ele marcate ca read-only şi atunci nici ele nu trebuie salvate).





Altă facilitate se referă la tehnica partajării segmentului care permite ca două sau mai multe task-uri să partajeze acelaşi cod. (sisteme multiutilizator).

  • Altă facilitate se referă la tehnica partajării segmentului care permite ca două sau mai multe task-uri să partajeze acelaşi cod. (sisteme multiutilizator).

  • Să presupunem, în ex. anterior, că task-urile A, B, C şi D reprezintă utilizatori ce rulează aplicaţii. Să presupunem că utilizatorii A şi C rulează aceeaşi aplicaţie (o foaie de calcul). A şi C, operează pe date diferite şi necesită segmente de date separate, dar execută acelaşi cod. Utilizatorii păstrează descriptori separaţi pentru codurile şi datele lor, dar adresele de bază pentru segmentele de cod, pentru A şi C referă aceeaşi locaţie.

  • De asemenea, un sistem de MV, orientat pe segmente, poate furniza un mod pentru a compacta memoria. Compactarea memoriei permite rezolvarea unei probleme numite fragmentare. Fragmentarea memoriei apare când memoria ce nu este continuă este disponibilă pentru a rula aplicaţii suplimentare.

  • Un alt avantaj al MV este eliminarea constrângerilor, datorate memoriei, pentru programele ce lucrează cu zone mari de memorie.





Paginarea şi administrarea memoriei cache

  • Paginarea şi administrarea memoriei cache

  • Paginarea este utilizată pentru a implementa MV bazată pe blocuri de dimensiune fixă, pagini. Asemănător segmentării, paginarea translatează adresele virtuale în adrese fizice, prin maparea (suprapunerea) blocurilor de lungime fixă, de memorie, în locaţiile de memorie fizică, denumite cadru pagină. Segmentarea şi paginarea sunt similare: un nume şi un offset sunt translatate într-o adresă.



Avantajul esenţial al paginării faţă de segmentare este reprezentat de dimensiunea fixă a paginării. Deoarece MV utilizează discul se pot alege dimensiuni de pagină care se potrivesc cu dimensiunea sectorului de pe disc. De asemenea paginarea evită problema fragmentării memoriei, specifică segmentării. Ori de câte ori o pagină este scoasă din memorie, altă pagină se potriveşte exact în spaţiul eliberat; (apare alt tip denumit “fragmentare internă”).

  • Avantajul esenţial al paginării faţă de segmentare este reprezentat de dimensiunea fixă a paginării. Deoarece MV utilizează discul se pot alege dimensiuni de pagină care se potrivesc cu dimensiunea sectorului de pe disc. De asemenea paginarea evită problema fragmentării memoriei, specifică segmentării. Ori de câte ori o pagină este scoasă din memorie, altă pagină se potriveşte exact în spaţiul eliberat; (apare alt tip denumit “fragmentare internă”).

  • Alt avantaj: alocarea pentru un obiect mare nu trebuie să fie făcută într-un spaţiu continuu de memorie.

  • Pagina poate conţine porţiuni din mai multe segmente, sau invers.



Cache-ul intern

  • Cache-ul intern

  • Performanţa unui calculator este determinată, în principal, de trei elemente: procesorul, memoria şi placa de bază.

  • Memoria cache are rolul de a scurta acest drum al informaţiei. Ea stochează datele astfel încât procesorul le poate accesa mult mai rapid.

  • Memoria cache memorează instrucţiuni şi date, recent accesate, astfel încât ele sunt furnizate transparent şi mai rapid decât memoria principală. Cahe-ul este organizată pe linii. Aceste linii sunt organizate ca seturi, fiecare set este mapat pe un grup separat de adrese de memorie, şi care sunt de obicei între 16 şi 64 linii pe set.

  • Programele tipice accesează aceleaşi locaţii de memorie, în mod repetat, sau accesează locaţii adiacente de memorie. Numele tehnic dat acestui fenomen este localizare temporală şi respectiv spaţială a referinţei.





Arhitectura procesorului 80386

  • Arhitectura procesorului 80386



Arhitectura procesorului 80486

  • Arhitectura procesorului 80486

  • Noi facilităţi de execuţie paralelă, prin expandarea unităţilor de decodificare şi execuţie instrucţiuni, într-o bandă de asamblare cu cinci nivele (stagii), fiecare nivel operează în paralel cu celelalte, (5 instr. în diferite stagii de execuţie, pe un interval de ceas).

  • Faţă de 386 conţine: UE în virgulă mobilă, cache, coada de instr. are 32 octeţi (dublă).



Procesoarele Pentium includ o serie de concepte noi:

  • Procesoarele Pentium includ o serie de concepte noi:

  • Bandă de asamblare (pipeline): mai multe instrucţiuni maşină sunt încărcate secvenţial într-o linie complexă de prelucrare, asemănătoare cu memoria FIFO (în locul celulelor de memorie, aici sunt automate secvenţiale, care efectuează diferite modificări asupra datelor ce trec prin pipeline) sau cu o bandă de asamblare. Prin pipeline se sparg (translatează) instrucţiunile în micro-operaţii ce se execută în unităţi separate. Rezultatul este 'asamblat' şi se trimite exteriorului. Dacă s-au încărcat date incorecte în structurile secvenţiale ale pipelineului (de ex. la execuţia speculativă ultimul salt a fost greşit) atunci pipeline-ul este golit şi reîncărcat cu date corecte; deci el conţine toate operaţiile / rezultatele ce se execută, în acel moment, în diferite stadii, în funcţie de poziţia lor în structura secvenţială a pipeline-ului.

  • Superscalar: procesoare cu mai multe benzi de asamblare, paralele, care pot executa mai multe instrucţiuni simultan, într-un singur tact (Pentium are două benzi, U şi V).



Superbandă de asamblare: procesorul poate diviza execuţia fiecărei instrucţiuni în 12 (10) etape (nivele), ce include, printre altele, etapele de: citire instrucţiune, decodificare, execuţie şi extragere. O instrucţiune înseamnă mai multe operaţii (etape de prelucrare). Mai multe instrucţiuni sunt suprapuse la execuţie; diferiţi paşi (etape) de execuţie ale unor instrucţiuni diferite sunt realizate în acelaşi ciclu procesor.

  • Superbandă de asamblare: procesorul poate diviza execuţia fiecărei instrucţiuni în 12 (10) etape (nivele), ce include, printre altele, etapele de: citire instrucţiune, decodificare, execuţie şi extragere. O instrucţiune înseamnă mai multe operaţii (etape de prelucrare). Mai multe instrucţiuni sunt suprapuse la execuţie; diferiţi paşi (etape) de execuţie ale unor instrucţiuni diferite sunt realizate în acelaşi ciclu procesor.

  • Execuţie dinamică (dynamic execution): se “sparge” codul operaţiei în mai multe micro-operaţii de lungime fixă, care după o aranjare corespunzătoare se execută simultan, într-un singur tact.

      • Predicţia ramificaţiilor multiple (sau în adâncime), prin care procesorul anticipează un număr de paşi pentru a anticipa ce urmează să prelucreze. Utilizând predicţia instrucţiunile de pe o ramură a programului sunt executate înainte de cunoaşterea rezultatului instrucţiunii de pe de ramificaţie respectivă.


Analiza fluxului de date, care constă în analiza dependenţelor între instrucţiuni, şi

      • Analiza fluxului de date, care constă în analiza dependenţelor între instrucţiuni, şi
      • Execuţie speculativă, care utilizează rezultatele primelor două elemente pentru a executa speculativ instrucţiuni. Este o tehnică folosită pentru a micşora impactul “hazardurilor” de control, adică dependenţele produse de salturi. Arhitectura procesoarelor decuplează distribuţia şi execuţia instrucţiunilor de furnizarea rezultatelor.
  • Execuţie în orice ordine (Out of Order Execution): execuţie în paralel, a instrucţiunilor, fără a ţine cont de ordinea lor secvenţială. Un procesor superscalar poate executa, în paralel, mai multe instrucţiuni; dacă există un conflict de resurse la execuţia în paralel a două instrucţiuni succesive, procesorul va executa instrucţiunea următoare, care nu intră în conflict cu prima, urmând ca ulterior să revină la instrucţiunea peste care a sărit. Stările conflictuale se pot rezolva şi prin redenumirea resurselor.



De exemplu să considerăm următorul cod:

  • De exemplu să considerăm următorul cod:

      • 1: add r1, r2 -> r7
      • 2: sub r7, r3 -> r3
      • 3: add r4, r5 -> r7
      • 4: sub r7, r6->r6
  • Instrucţiunile 1 şi 3 pot fi executate în paralel, dacă r7 este redenumit, iar instrucţiunile 2 şi 4 pot fi executate în paralel. Instrucţiunea 3 este executată înaintea instrucţiunii 2, şi nu în ordinea în care apar ele în program.

  • Dependenţe: este vorba despre dependenţele dintre instrucţiuni. Pentru a detecta dependenţele este necesar hard suplimentar (în procesor), adică o serie de comparatoare, care, de exemplu, compară registrul, în care scrie o instrucţiune, ce se află în etapa (nivelul) 4, cu registrele citite de instrucţiunile de pe nivelurile 3, 2. Dacă instrucţiunea de pe nivelul 4 va scrie în registrul utilizat de instrucţiunea din nivelul 2, atunci nivelul 2 este blocat, iar 3 şi 4 avansează, iar în nivelul 3 se formează o ‘bulă’ (gol).



Înaintarea: dacă, de exemplu, o instrucţiune aflată în nivelul de decodificare, are nevoie de nişte date, pe care instrucţiunea aflată în nivelul de execuţie tocmai le calculase, cea din etapa de decodificare ar trebui să aştepte ca rezultatul calculelor să fie pus într-un registru, ceea ce se va întâmpla abia mai târziu. În astfel de situaţii, însă, deoarece avem deja rezultatul necesar, acesta poate fi trimis de la ‘producător’ direct la ‘consumator’, fără a mai aştepta să-l scrie într-un registru. Această tehnică se numeşte ‘înaintare’ (forward), şi ea permite instrucţiunii din etapa de decodificare să-şi continue execuţia, fără a se mai introduce o ‘bulă’ (nop).

  • Înaintarea: dacă, de exemplu, o instrucţiune aflată în nivelul de decodificare, are nevoie de nişte date, pe care instrucţiunea aflată în nivelul de execuţie tocmai le calculase, cea din etapa de decodificare ar trebui să aştepte ca rezultatul calculelor să fie pus într-un registru, ceea ce se va întâmpla abia mai târziu. În astfel de situaţii, însă, deoarece avem deja rezultatul necesar, acesta poate fi trimis de la ‘producător’ direct la ‘consumator’, fără a mai aştepta să-l scrie într-un registru. Această tehnică se numeşte ‘înaintare’ (forward), şi ea permite instrucţiunii din etapa de decodificare să-şi continue execuţia, fără a se mai introduce o ‘bulă’ (nop).



Sistemul de întreruperi

  • Sistemul de întreruperi





Întreruperi în modul protejat

  • Întreruperi în modul protejat

  • Sunt permise, în tabela IDT, doar trei tipuri de porţi: întrerupere (interrupt gate), capcană (trap gate) şi task (task gate). Primele două prelucrează întreruperile în cadrul aceluiaşi task, în timp ce cea de-a treia realizează o comutare de task. Diferenţa dintre primele două este că prima pune indicatorul IF pe zero (dezactivează întreruperile), în timp ce cea de-a doua lasă indicatorul nemodificat.

  • Întreruperi suplimentare: 8 (Double Fault), 10 (TSS invalid), 11 (NP), 12 (eroare stivă), 13 (GP), 14 (PG), şi 17 (AC).







Yüklə 462 b.

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