Know-how, előadás, egyszintű memória
Mutatók és címkék
Amikor a mutató szerkezetét kifejlesztettük, a MI-összeszerelő kiküszöbölését, egyes parancsok átváltását a jogosultsági kategóriába és az engedélyezési mutatók törlését választottuk védelmi módszerként. Amint azt a "Védelem az illetéktelen hozzáférés ellen." Mindezeket a biztonsági szinteket továbbfejlesztették az AS / 400 idővel. De még egy ilyen fokú biztonság sem ad száz százalékos bizonyosságot, hogy az index tartalma nem lesz jogosulatlan változásnak kitéve.
Az "Objektumok" alatt megjegyezték, hogy a társult tér. amely mutatókat tartalmaz, a rendszerobjektum egy külön szegmensét foglalja el. Kezdetben a System / 38-ban két szegmenst akarunk használni: az egyiket az adatokra, a másik pedig a mutatókat. De ez a megközelítés csökkentette a rendszer teljesítményét. Az objektum használata során el kellett olvasnia az oldallemezről, mind az adatszegmensről, mind az indexszegmensről, ami növelte az általános költségeket. Ezenkívül két szegmensre van szükség a memória méretének növekedéséhez. A kapcsolódó mutatók szegmensének egyetlen előnye abban a reményben volt, hogy megóvhatja a mutatókat a felhasználók által végzett módosításoktól. De kiderült, hogy ez nem így van.
Hamarosan kiderült, hogy a mutatók kapcsolódó szegmense nem védhető a változásokból. A System / 38 (30-as szint) számára tervezett védelmi fokozattal a felhasználó. amelyiknek joga volt a tárgyhoz való hozzáféréshez, a tartalomgyűjtővel együtt dolgozhat. A mutatók elhelyezése az objektum különálló részében nem nyújt további védelmet. Meg kellett keresnem egy másik megoldást.
A mutatók hardveres védelme
Megértettük, hogy a mutatókhoz valamilyen hardveres memória védelem szükséges. Az idő nagyméretű rendszerei, például a System / 370, speciális hardverbiteket használtak a memória védelmére, lehetővé téve vagy megtagadva a felhasználó számára hozzáférést bizonyos memóriabájtok blokkjához. A védelmi biteket általában egy külön hardveres memóriamodulba helyezték, ahol a felhasználó nem tud hozzájutni hozzájuk. Minden egyes memóriához való hozzáféréssel ellenőrizte ezt a tömböt annak meghatározására, hogy a felhasználónak jogában áll-e hozzáférni ehhez a memóriablokkhoz. Általában ez a védelem egy fizikai memóriablokkra lett telepítve, egy oldal méretével.
A System / 38 hardveren kezdetben a hardvereknél ez a fajta memória védelmet nem tervezték: senki sem gondolta, hogy szükség lenne rá, mert a vetített rendszer védelme az objektum szinten történt. Azonban, amikor világossá vált, hogy a hardvervédelem valamilyen formája még mindig szükséges, megfontoltuk a blokk védelmét egy oldal méretben. Először is, ez drága volt, de ezen a megközelítésen is nem teljesen áll összhangban a fejlesztők terveivel. Ideális esetben minden 16 bájtnyi memóriát védettünk, mivel a mutató csak annyit foglal. De ahhoz, hogy a rendszer produktív legyen, szeretnék bárhová elhelyezni a mutatókat, de minden egyes 16 bájtnyi memória különálló hardver-sorozata elfogadhatatlanul költségessé vált. Végül megoldás volt: a memória további bitjeinek védelme a hibajavító kód ECC (hibajavító kód) esetén.
Néha a számítógép memóriája hibákat okozhat a hálózati feszültség ingadozása vagy egyéb okok miatt. A hibák elleni védelem érdekében az emlékek többsége hibajelző kódokat és hibajavító kódokat használ. Ezek így járnak el: további biteket adnak hozzá a memória minden szójához. A szómemória olyan számú bitet tartalmaz, amennyit egyetlen műveletben olvashatunk. A memóriából származó adatok olvasásakor ezeket az extra biteket ellenőrizzük, hogy megállapítsuk, hiba történt-e.
A hibaérzékelés legegyszerűbb formája a paraszt bit hozzáadása a szómemóriához. Az értéke úgy van megválasztva, hogy a szómemóriában lévő 1 bitek száma, beleértve a paritásbitet, mindig egyenletes. Ha a memória hiba lép fel, ami a változást az érték minden bit 1-0, vagy fordítva, akkor észlelhető, amikor a következő alkalommal, amikor olvasta a szót tűnik, hogy a bitek száma páratlan 1. A paritás lehetővé teszi egyetlen hiba definiálását, de nem mondja meg, hogy melyik bit jelentkezett. Egy ilyen mechanizmus segítségével, amelyet rendszerint egy PC-n alkalmaznak, meghatározhatja a páratlan számú hibát a szó memóriájában. De ha a hibák száma egyenletes, akkor ez nem segít.
A kereskedelmi feladatokhoz felhasznált legtöbb számítógép, különösen az AS / 400, további hibajavító biteket használ a hibák észlelésére és javítására. Ezek a további bitek meghatározhatják az összes egyszeri és többszörös hibát, és még azt is megjelölhetik, hogy melyik kategóriába tartoznak. Így a berendezés kijavíthatja a hibát és tovább dolgozhat. A hibajavítás értéke nyilvánvaló mindenki számára, aki látta a "memóriaparitás hiba" üzenetet a számítógép képernyőjén. Ilyen törött PC-vel mindaddig nem tehetünk semmit, amíg a hibás memóriamodult kicseréljük. Emiatt a modern PC-k régebbi modelljei ECC memóriát használnak.
Az eredeti System / 38 hardver 32 bites (4 bájtos) memóriaszóval rendelkezett. Az ECC további 7 bitet igényelt, vagyis minden memória szóhoz 39 bit szükséges. A technológia ezután csak 8 bites lépésekben növelte a szóméretet, azaz valójában a memória szó 40 bit nagyságú volt. Mindegyik 4 bájtos memóriaszóhoz további bitet biztosítottak, amelyiknek memóriavédelmi funkciókat kellett végrehajtania. Ezt egy címke bitnek neveztük.
A mutató az eredeti System / 38-ban négy egymást követő 4 bájtos memória szót foglalt, amelyek mindegyike saját címke bitje volt. Úgy döntöttünk, hogy minden memória szó esetében ez a bit 1 lenne, ha a szó a mutató négy részét tartalmazza; és 0, ha nem. A mutató önmagában csak egy kicsit, hogy ha mind a négy bitet négy egymást követő memória szavak 1-be, a logikai mutató címke értéke 1. Ha minden a négy bit értéke 0, és a logikai mutató tag 0.
Az AS / 400 következő verziói 64 bites (8 bájtos) memóriaszóval rendelkeznek. Ez a szó 8 bit ECC-t igényel; így a tag bittel kapcsolatban az AS / 400 memória szavakat 73 bitbe csomagolják. Még mindig mutatókat helyezünk el a 16 bájtos határokon, és minden egyes mutató egy logikai címke bitje. Ha az AS / 400 64 bites szó, két szó a két egymást követő mentesítési tartalmazó címkével mutató, egyaránt 1, és a logikai mutató címke beállítása 1. Ha bármelyik bit nulla, akkor a mutató egy logikai 0 tag. Az elfogadott terminológián belül a 64 bites memória szót kettős szónak nevezzük.
Amikor a memória az AS / 400-ra van írva, a memóriakezelési hardver felépíti az ECC-t, és tárolja a memóriával együtt. Az írási művelet során a készülék letiltja a címke bitjét a memóriaszóban (0-ra állítja). Tehát bármilyen szabványos memória-írási parancs végrehajtásánál a rögzített szavak címkéjének bitjei mindig 0-ra lesznek visszaállítva.
Aktív címkék mód
A "PowerPC technológiában" beszéltünk a PowerPC architektúra kiterjesztéseiről. Az egyik ilyen kiterjesztés az aktív címkézési mód. Amikor a PowerPC processzor ebben az üzemmódban fut, további parancsok érhetők el, amelyek nem érhetők el inaktív címkézési módban. Összesen az AS / 400 esetében 25 parancsot adtak hozzá, amelyek csak az aktív címkék módban állnak rendelkezésre. Ez magában foglalja a négyszavak többszörös betöltését és mentését a regiszterekben, valamint a hozzájuk fordított parancsokat. Vannak parancsok decimális számtani, a hívás / visszaadás és a kiválasztási parancsok rendszerfunkciói a vezérlõregiszterek számjegyeinek ellenõrzéséhez. Hat új parancs támogatja a címkéket.
Néhány ilyen speciális címkeparancs a címke bit értékeinek beállítására vagy ellenőrzésére szolgál. Az egyik, a "Save Quartet" parancs ("stq") a memóriában 16 bájtnyi adatot tárol két 64 bites regiszterből és tartalmazza a címke két bitjét. Egyéb - „Load quadword” ( „LQ”), betölti a 16 bájt memóriát két 64 bites regiszter, és a bitet a vezérlő regiszter 1, ha mindkét címkézett mentesítést néhány szót értéke 1 (különben ez a bit 0). Egy másik parancs lehetővé teszi, hogy memóriából címkéket olvasson speciális processzorregiszterbe. Ennek a parancsnak a használatát a következő részben tárgyaljuk.
A címkeparancsokat csak a SLIC-ben használják; A fordítót nem a MI programok hozták létre. Ez azt jelenti, hogy az MI programban generált memóriában tárolt memória minden esetben szabványos parancsokat használ, és letiltja a címkebiteket. Ha a mutatót a felbontási folyamat során hozza létre, akkor az SLIC két 64 bites regiszterben építi fel, és a "stq" parancsot használja a címkeregiszterek memóriában való engedélyezéséhez. A MIIC program használatával a mutató használatával a SLIC az "lq" paranccsal betölti a tartalmát a regiszterbe, majd ellenőrzi, hogy van-e beállítva a címke bitek. Ha a címke bitjei nullázódnak, akkor valaki megváltoztatta a mutatót, és ez most helytelen.
Az AS / 400 címkebitek nem akadályozzák a mutatók módosítását, de csak azt állapítják meg, hogy ezek a változások történtek-e. Ez a megközelítés eltér a legtöbb memória-védelmi rendszertől. Általában a memória védelme nem teszi lehetővé a változtatásokat, és van ilyen szintű oldalvédelem az AS / 400-ban. A mutatók azonban csak azokat a módosításokat ismerik fel, amelyek már megtörténtek, ami a rendszer korábbi verzióihoz képest csökkenti a hardver mennyiségét, de még mindig biztosítja a szükséges védelmi szintet.
A mutatókat nem lehet hamisítani. A címkék garantálják, hogy a mutatót az operációs rendszer (SLIC) hozza létre, és hogy nem módosította semmit, mint a SLIC. A gátlástalan felhasználó, aki megpróbálja létrehozni, másolni vagy módosítani egy mutatót, nem tartalmazhat a címke bitjeit, és 16 bájtot használhat fel. Ez az oka annak, hogy az AS / 400 mindig aktív tag-módban működik, annak ellenére, hogy a PowerPC processzorok. A benne használt inaktív címkék módja.
Mutatók és címkék a lemezen
A System / 38 fejlesztői egy másik problémát észleltek. Tegyük fel, hogy egy oldalt át kell helyezni a memóriából a lemezre. A memóriában további bitek vannak az ECC és a címkék számára, és nincs lemez a lemezen. A hibajavító kód egy másik formája, amelyet ciklikus redundancia-ellenőrzésnek (CRC) neveznek, ami nem ad további biteket az egyes memóriaszóhoz. Szükség van tehát arra, hogy mentse a címkebiteket a mutatókkal együtt, amikor egy mutatót tartalmazó oldalt helyez el a lemezre. Röviden, további lemezterületet kell találnia.
A mágneses lemez olyan síkokból áll, amelyek két rögzítési felületet tartalmaznak. Az egyes lemezek felületét koncentrikus körökre osztják, amelyeket pályáknak neveznek. A sávok pedig szektorokra vannak osztva, amelyek információkat tartalmaznak. A System / 38 és az AS / 400 szektor mérete 520 bájt. Minden szektor 8 bájtos fejlécet és 512 bájtos adatterületet tartalmaz. Az ágazat mérete úgy lett megválasztva, hogy az 512 bájtos System / 38 oldal illeszkedjen hozzá.
A System / 38-ban számos speciális IMPI parancsot határoztak meg a címkékkel való együttműködésre. Az egyik ilyen parancs, a "Címkék kivonat" - a memóriakártya címkéinek gyűjtésére szolgál. Amikor egy oldalt írtak a lemezre, a címkéket lemezre is írta. Egy másik IMPI parancs - "Címkék beillesztése" - a címkék visszahelyezése a memóriába, miután elolvasta az oldalt a lemezről.
A System / 38 fejlesztői, akik figyelemre méltó leleményességet mutattak, a címkék számára helyet találtak az oldal belsejében. Az az ügy az, hogy a mutatóban nincs hely. Ha van legalább egy mutató az oldalon, akkor vannak olyan kihasználatlan helyek, amelyekben tárolhatja a címkebiteket. Ha nincsenek mutatók az oldalon, akkor a címke összes bitje 0-nak felel meg, ezért nincs szükségük tárolásra. A System / 38 szektorfejléc tartalmazta, hogy vannak-e címkék az oldalon, és ha igen, hol pontosan.
A RISC processzorok megjelenése előtt továbbra is az AS / 400-as verziót használtuk, mind az 512 bájtos oldalméretet, mind a fent leírt címke bitek tárolásának módját. De sok éven át kínoztunk az oldal méretének növelésére irányuló vágytól.
Az új modellekben a lemezen lévő szektor méretét 520 bájtban tárolta. A négy kilobájtos oldal most nyolc egymást követő ágazatban van tárolva. Ha nyolc 8 bájtos fejléc van mindegyik oldalon a 4K-ban, akkor több, mint elég hely 256 bites bit tárolására.
A címkék memóriából való kivonatolása a processzor architektúrájába A PowerPC-t külön címjegyzék adta hozzá. Ha a processzor speciális címke parancsot futtat, a "kettős szavak többszörös betöltése" ("lmd"), legfeljebb 16 kettős szó (nyolc négyszava) 16 regiszterbe olvasható. A parancs végrehajtásakor a négy szó memóriájának nyolc tagregisztere a címkeregiszterben tárolódik. Ne feledje, hogy a címke regisztrálja a logó 8 logikai bitjét, és nem 16 fizikai bitet, mint a memóriában. Emlékezzünk arra, hogy egy négyszavas két 64 bites (8 bájtos) memória; ezért a negyedik szóban a címke két fizikai bitje van, így nyolc négyszeresben a címke 16 fizikai bitje van. Az "lmd" paranccsal az oldalcímke bitjei összegyűjthetők a lemezt követő íráshoz az adatok mellett. Ez a parancs csak az aktív címkék módban érhető el.