Qqberci Creative Commons License 2005.03.22 0 0 12

No hát itt van az eltérés. Az indexelt file kezelésénél a felhasználói program átadja a csatorna részére azt a "csatornaprogramot", aminek az egyik eleme egy kulcs szerinti keresést ír elõ és aminek a címrésze arra a tárhelyre mutat, ahol az van, hogy "NEVEMTEVE". Ezután valóban SVC, a csatorna elindul és a CPU szabaddá válik és a csatorna elkezd keresni. Mivel ilyenkor már nyitott a file, (tételezzük fel az egyszerûség kedvéért, hogy egyetlen lemezen van a file) a csatornaprogram tartalmazni tudja a cilinderindextábla elsõ sávjának címét. Erre indít egy többsávos keresést, majd az elsõ, a keresettnél nagyobb kulcsot megtalálva behozza a hozzá tartozó cilindercímet oda, ahol azt a következõ csatornaparancsok címzeni fogják. Folytatva a láncot, átpozicionál a megtalált címre és ott megtalálja a sávindextáblát, amibõl megintcsak beolvassa az elsõ, a keresettnél nagyobb kulcshoz tartozó rekordot és az abban talált sávcímmel kiegészíti a korábban "megszerzett" pozicionálási címet. Elvégzi a fejkiválasztást, levárja a sáv elejét és elkezdi olvasni a sávot, keres. Ha a file blokkolatlan, akkor kulcs egyenlõre keres és vagy van ilyen rekord, vagy eléri az elsõ nála nagyobb kulcsot és akkor nincs, kulcshiba. Ez az a pillanat, amikor a CPU ismát munkát kap, de eddigre már a tárban van a keresett rekord vagy megvan a hibajelzés, hogy nincs olyan. Ha a file blokkolt, akkor megkeresei az elsõ olyan blokk-kulcsot, ami a kértnél nagyobb és behozza a hozzá tartozó blokkot, ebben kell lennie a keresett rekordnak. Itt indul újra a CPU, mert a szétblokkolás már az õ dolga.

 

Az "odafelé" kommunikáció a CPU és a csatorna között a CAW (channel address word, a csatornaprogram kezdõcíme) és a készülékcím által törtönik, visszafelé pedig a megszakított állapothoz tartozó "régi-PSW"-ben lévõ készülékcím és a CSW (channel status word) hozza az információt a mûvelet eredményérõl.

 

A csatornaprogram fix hosszúságú, 8 byte-os csatornaparancsokból áll és ezek között ugyanúgy van feltételes ugró utasítás, mint a "gépi" utasításkészletben.

 

Egy tipikus lemezes olvasó csatornaprogram úgy néz ki, hogy pozicionál - rekordot keres - ugrik vissza ha nincs meg - beolvas.

 

Ha a file több készóléken helyezkedik el, akkor van még egy Master Index Table, amelyik megmondja az adott rekordhoz tartozó készülékcímet.

 

Ha a nucleus keresné meg a tárban lévõ indextábla alapján a rekord helyét, akkor ez egyrészt értékes feldolgozókapacitást fogyasztana, másrészt a tárméret határt szabna az indextábla (pontosabban az éppen tárban tartózkodó összes program által együttesen használható indexterület) méretének. Így viszont, ha van például egy olyan rendszer, ahol van 16 ALU és mondjuk 48 lemezelérésre alkalmas csatorna, akkor ez azt jelenti, hogy 16 CPU-igénylõ dolgozhat valós idõben párhuzamosan 48 lemezes kereséssel. Ha tehát egy programnak 8-10 file-ból kell kulcs szerinti adat, ammor elindítja a kéréseket, majd átadja az ALU-t másnak és várakozó állapotba kerül. Ha minden adata bejött, akkor átminõsül "futásra kész"státusúvá és a prioritásának megfelelõen egyszer majd elindul valamelyik ALU-n (nem szükségszerûen ugyanazon, mint ahonnal leállt)

Előzmény: NevemTeve (11)