Cunoștințe, prelegere, memorie unică

Indicatori și etichete

La proiectarea structurii indicelui, de asamblare de protecție Remedy au fost aleși MI, traducerea unora dintre comenzile din categoria celor privilegiați și îndepărtarea din funcție de indicii.





După cum se menționează în "Protecția împotriva accesului neautorizat." Toate aceste îmbunătățiri ale nivelurilor de securitate au fost introduse în AS / 400 în timp. Dar chiar și un astfel de grad de securitate nu oferă sută la sută certitudine că conținutul indexului nu va fi supus unor modificări neautorizate.







În "Obiecte" sa observat că spațiul asociat. care conține pointeri, ocupă un segment separat al obiectului de sistem. Inițial, în System / 38, am vrut să folosim două segmente: una pentru date și cealaltă pentru indicatori. Dar această abordare a redus performanța sistemului. La utilizarea obiectului, a fost necesar să se citească de pe discul de pagină, atât segmentul de date cât și segmentul de index, care au mărit cheltuielile generale. În plus, două segmente au necesitat o creștere a dimensiunilor memoriei. Singurul avantaj al segmentului de pointeri asociat a fost speranța că ar putea proteja pointerii de la modificarea de către utilizatori. Dar sa dovedit că nu este așa.

Curând a devenit clar că nu putem proteja segmentul de indicatori asociat de schimbări. Cu gradul de protecție planificat pentru System / 38 (nivelul 30), utilizatorul. care avea dreptul de a accesa obiectul, ar putea lucra cu conținutul său folosind asamblorul MI. Plasarea indicatoarelor într-o parte separată a obiectului nu a oferit protecție suplimentară. A trebuit să caut o altă soluție.

Protecția hardware a indicatoarelor

Am înțeles că este necesară o anumită formă de protecție a memoriei hardware pentru indicatori. Multe dintre sistemele mai mari ale timpului, cum ar fi System / 370, utilizează biți hardware speciali pentru a proteja memoria, permițând sau negând accesul utilizatorilor la un anumit bloc de octeți de memorie. Bitii de protecție erau de obicei plasați într-o matrice de memorie hardware separată, unde utilizatorul nu putea ajunge la ele. Cu fiecare acces la memorie, această matrice a fost verificată pentru a determina dacă utilizatorul are dreptul de a accesa acest bloc de memorie. De obicei, această protecție a fost instalată pe un bloc fizic de memorie cu dimensiunea unei pagini.

Folosit inițial în hardware-ul System / 38 acest tip de protecție a memoriei nu a fost planificat: nimeni nu a crezut că ar fi necesar, deoarece protecția sistemului proiectat a fost efectuată la nivelul obiectului. Cu toate acestea, când a devenit clar că este încă nevoie de o anumită formă de protecție hardware, am considerat posibilitatea de a proteja un bloc de o dimensiune a unei pagini. Dar, în primul rând, a fost scump, dar, în plus, această abordare nu este pe deplin în concordanță cu planurile de dezvoltatori. În mod ideal, am văzut protecția pentru fiecare 16 de octeți de memorie, deoarece pointerul ocupă doar atât de mult. Dar pentru a face sistemul productiv, am vrut să pot plasa indicii oriunde, dar apoi o gamă hardware separată de biți de protecție pentru fiecare 16 octeți de memorie a devenit inacceptabilă la cost. În cele din urmă, a existat o soluție: folosiți pentru protejarea biților suplimentari de memorie pentru codul de corectare a erorilor ECC (codul de corectare a erorilor).

Uneori, memoria calculatorului poate cauza erori datorită fluctuațiilor de tensiune din rețeaua de alimentare sau din alte motive. Pentru a proteja împotriva erorilor, majoritatea memoriilor utilizează codurile de detectare a erorilor și codurile de corectare a erorilor. Ei se comportă astfel: se adaugă biți suplimentari la fiecare cuvânt din memorie. Memoria cuvântului conține cât de mulți biți se pot citi într-o singură operație. La citirea datelor din memorie, acești biți suplimentari sunt verificați pentru a determina dacă a apărut o eroare.

Cea mai simplă formă de detectare a erorilor este adăugarea unui bit de paritate la memoria cuvântului. Valoarea sa este aleasă astfel încât numărul de biți 1 din memoria cuvântului, inclusiv bitul de paritate, să fie întotdeauna egal. Dacă apare o eroare de memorie, determinând o modificare a valorii oricăruia dintre biții de la 1 la 0 sau invers, acesta va fi detectat atunci când apare data viitoare când citiți cuvântul că numărul de biți impare 1. Paritatea face posibilă determinarea unei singure erori, dar nu spune în ce descărcare a apărut. Cu ajutorul unui astfel de mecanism, aplicat de obicei pe un PC, puteți determina un număr impar de erori în memoria cuvântului. Dar dacă numărul de erori este egal, nu va fi de ajutor.

Cele mai multe computere utilizate pentru sarcini comerciale, în special AS / 400, utilizează biți suplimentari de coduri de corecție pentru detectarea și corectarea erorilor. Acești biți suplimentari pot defini toate erorile simple și multiple și chiar indică în ce categorie au apărut anumite categorii. Astfel, echipamentul poate corecta eroarea și poate continua să funcționeze. Valoarea corecției de eroare este evidentă pentru toți cei care au văzut mesajul "error parity memory" pe ecranul PC-ului. Cu un astfel de PC rupt, nu se poate face nimic decât după înlocuirea modulului de memorie defect. Din acest motiv, multe modele mai vechi de PC-uri moderne utilizează memoria ECC.

Hardware-ul original System 38 a avut un cuvânt de memorie de 32 biți (4 octeți). ECC a necesitat încă 7 biți, adică au fost necesari 39 de biți pentru fiecare cuvânt de memorie. Tehnologia permitea apoi mărirea dimensiunii cuvântului numai în trepte de 8 biți, adică cuvântul de memorie avea o dimensiune de 40 de biți. Pentru fiecare cuvânt de memorie de 4 octeți, a fost furnizat un bit suplimentar, care trebuia să efectueze funcții de protecție a memoriei. Am numit-o un etichetă.

Pointerul din sistemul / 38 original a luat patru cuvinte consecutive de memorie de 4 octeți, fiecare cu propriul bit de tag. Am hotărât că pentru fiecare cuvânt de memorie acest bit ar fi 1 dacă cuvântul conține oricare dintre cele patru părți ale pointerului; și 0 dacă nu. Pentru indicatorul în sine un singur bit, astfel încât, dacă toate cele patru biți în patru cuvinte consecutive de memorie sunt setate la 1, logic valoarea etichetei pointer este 1. Dacă oricare dintre cele patru biți este egal cu 0, iar tag-ul indicator logic este 0.

Versiunile ulterioare ale AS / 400 au un cuvânt de memorie pe 64 de biți (8 octeți). Acest cuvânt necesită 8 biți de ECC; astfel încât în ​​ceea ce privește bitul tag-urilor, cuvintele de memorie AS / 400 sunt împachetate în 73 de biți. Încă mai punem indicii pe limite de 16 octeți și fiecare pointer are un bit de etichetă logică. Dacă / 400 64 biți cuvânt AS, două cuvinte în două tag-ul de descărcare succesive conținând pointer, sunt ambii 1, iar eticheta pointer logic este setat la 1. Dacă oricare dintre biții este zero, atunci indicatorul este o etichetă logică 0. Pentru a rămâne în terminologia acceptată, numim cuvântul de memorie pe 64 de biți un cuvânt dublu.

Ori de câte ori memoria este scrisă în AS / 400, hardware-ul de gestionare a memoriei construiește ECC și îl salvează împreună cu cuvântul de memorie. În timpul operației de scriere, acest echipament dezactivează, de asemenea, bitul de tag în cuvântul de memorie (îl stabilește la 0). Deci, ca urmare a executării oricărei comenzi de scriere a memoriei standard, biții tag-ului cuvintelor înregistrate vor fi întotdeauna resetați la 0.

Modurile etichetelor active

În "tehnologia PowerPC" am vorbit despre extensiile arhitecturii PowerPC. Una dintre aceste extensii este modul etichete active. Când procesorul PowerPC rulează în acest mod, sunt disponibile comenzi suplimentare care nu sunt disponibile în modul de etichetare inactiv. În total pentru AS / 400, au fost adăugate 25 de comenzi, disponibile numai în modul tag-uri active. Acestea includ comenzi pentru încărcarea și salvarea mai multor cuvinte quad în registre, precum și comenzi inverse pentru ele. Există, de asemenea, comenzi de aritmetică zecimală, funcții de sistem ale comenzilor de apel / retur și selecție pentru verificarea valorilor cifrelor din registrele de control. Șase noi comenzi acceptă etichete.

Unele dintre aceste comenzi speciale de etichete sunt utilizate pentru a seta sau a verifica valorile biți tag. Una dintre ele, comanda "Save Quartet" ("stq") stochează în memorie 16 octeți de date de la doi registre pe 64 de biți și include doi biți ai etichetei. Altele - „quadword Load“ ( „LQ“), încarcă 16 bytes de memorie în două registru pe 64 de biți, și setează bitul în registrul de control la 1, în cazul în care ambele descărcarea etichetat în câteva cuvinte sunt egale cu 1 (în caz contrar acest bit este setat la 0). O altă comandă vă permite să citiți etichete din memorie într-un registru special de procesoare. Utilizarea acestei comenzi va fi discutată în secțiunea următoare.

Comenzile de etichete sunt utilizate numai în SLIC; Ele nu sunt generate de programele de traduceri pentru MI. Aceasta înseamnă că orice memorie stocată în memoria generată pentru programul MI utilizează întotdeauna comenzi standard și dezactivează biți de etichete. Când un pointer este creat în timpul procesului de rezoluție, SLIC îl construiește în două registre pe 64 de biți și utilizează comanda "stq" pentru a permite înregistrarea tagurilor în memorie. Cu orice încercare de a utiliza pointerul prin programul MI, SLIC încarcă conținutul său cu comanda "lq" în registre și apoi verifică dacă biții de tag sunt setați. Dacă biții tag sunt resetați, atunci cineva a schimbat pointerul și acum este incorect.

Bitiții tag-ul AS / 400 nu împiedică modificarea indicatorilor, ci determină doar dacă au fost făcute aceste modificări. Această abordare este diferită de majoritatea schemelor de protecție a memoriei. De obicei, protecția memoriei nu permite modificări și există o protecție la nivel de pagină în AS / 400. Cu toate acestea, indicatorii recunosc doar modificările care au avut deja loc, care, în comparație cu versiunile anterioare ale sistemului, reduc cantitatea de hardware, dar oferă totuși nivelul necesar de protecție.

Pointerii nu pot fi falsificați. Etichetele garantează că pointerul este creat de sistemul de operare (SLIC) și că nu a schimbat nimic altceva decât SLIC. Un utilizator lipsit de scrupule care încearcă să creeze, să copieze sau să modifice un pointer nu poate include biți ai etichetei și va avea ca rezultat 16 octeți inutili. De aceea, AS / 400 funcționează întotdeauna în modul tag-uri active, în ciuda faptului că procesoarele PowerPC. Utilizat în acesta, poate acționa în modul de etichete inactive.

Indicii și etichetele de pe disc

Dezvoltatorii sistemului / 38 au întâmpinat o altă problemă. Să presupunem că trebuie să mutați o pagină din memorie pe disc. În memorie există biți suplimentari pentru ECC și etichete și nu există nici un disc pe disc. Se utilizează o altă formă de cod de corectare a erorilor numit CRC CRC (controlul redundanței ciclice), care se adaugă nici un biți în plus pentru fiecare cuvânt de memorie. Deci, aveți nevoie de o modalitate de a salva biți de etichete împreună cu pointeri atunci când mutați o pagină care conține indicii pe un disc. Pe scurt, trebuie să găsiți un spațiu pe disc suplimentar.

Un disc magnetic este un set de planuri având două suprafețe de înregistrare. Suprafața fiecărui disc este împărțită în cercuri concentrice, numite urme. La rândul lor, piesele sunt împărțite în sectoare care conțin informații. Dimensiunea sectorului pentru System / 38 și AS / 400 este de 520 de octeți. Fiecare sector conține un antet de sector de 8 octeți și o zonă de date de 512 octeți. Dimensiunea sectorului a fost aleasă astfel încât să se încadreze în ea pagina cu 512 de octeți / 38 de sisteme.

În System / 38, au fost definite mai multe comenzi IMPI speciale pentru lucrul cu etichete. Una dintre aceste comenzi, "Extract Tags" - a fost folosită pentru a colecta etichete din pagina memoriei. Când scrieți o pagină pe disc, etichetele au fost de asemenea scrise pe disc. O altă comandă IMPI - "Introduceți etichete" - a fost utilizată pentru a plasa etichetele în memorie după citirea paginii de pe disc.

Dezvoltatorii de sistem / 38, care au demonstrat ingeniozitate remarcabilă, au găsit pentru etichete un loc în interiorul paginii. Problema este că un spațiu din pointer nu este folosit. Dacă pe pagină există cel puțin un indicator, atunci există un spațiu neutilizat în care puteți stoca biți de etichete. Dacă nu există indicii pe pagină, atunci toți biți ai etichetei pentru ea sunt egali cu 0, prin urmare nu este nevoie să le stocați. Antetul sectorului din System / 38 conținea informații despre dacă există etichete pe pagină și, dacă da, exact unde.

Înainte de apariția procesoarelor RISC, am continuat să folosim pe AS / 400 atât o dimensiune a paginii egală cu 512 octeți, cât și metoda de stocare a biților de etichete descrisi mai sus. Dar de câțiva ani am fost chinuiți de dorința de a mări dimensiunea paginii.

În noile modele, dimensiunea sectorului de pe disc a fost salvată la 520 octeți. Pagina de patru kilobyte este acum stocată în opt sectoare consecutive. Dacă există 8 opțiuni de octeți pe fiecare pagină în 4K, există mai mult spațiu suficient pentru a stoca biți de 256 biți.

Pentru a extrage etichete din memorie în arhitectura procesorului PowerPC a fost adăugat un registru special de etichete. Atunci când procesorul execută o echipă specială tag „încărcare multiplă cuvânt dublu“ ( „LMD“), în cele 16 de registre pot fi citite din memorie de până la 16 de cuvinte duble (opt cuvinte quad). La executarea comenzii, în registrul de etichete sunt stocate opt registre de tag-uri ale memoriei de patru cuvinte. Rețineți că registrul de etichete stochează 8 biți logici ai etichetei și nu 16 biți fizici, ca în memorie. Amintiți-vă că un quadword este două cuvinte de memorie pe 64 de biți (8 octeți); prin urmare, în al patrulea cuvânt există doi biți fizici ai etichetei, astfel încât în ​​opt cvadruple există 16 biți fizici ai etichetei. Cu comanda "lmd", biții tag-urilor de pagină pot fi colectați pentru scrierea ulterioară pe disc împreună cu datele. Această comandă este disponibilă și numai în modul tag-uri active.







Articole similare

Trimiteți-le prietenilor: