Kanal I/O
Inom datorer är kanal-I/O en högpresterande input/output ( I/O)-arkitektur som är implementerad i olika former på ett antal datorarkitekturer, särskilt på stordatorer . Tidigare implementerades kanaler i allmänhet med anpassade enheter, olika namngivna kanal , I/O-processor , I/O-kontroller , I/O- synkroniserare eller DMA-kontroller .
Översikt
Många I/O-uppgifter kan vara komplexa och kräver att logik tillämpas på data för att konvertera format och andra liknande uppgifter. I dessa situationer är den enklaste lösningen att be CPU:n att hantera logiken, men eftersom I/O-enheter är relativt långsamma kan en CPU slösa tid (i datorperspektiv) på att vänta på data från enheten. Denna situation kallas 'I/O-bunden'.
Kanalarkitektur undviker detta problem genom att bearbeta en del av eller hela I/O-uppgiften utan hjälp av CPU:n genom att överföra arbetet till dedikerad logik. Kanaler är logiskt sett fristående, med tillräcklig logik och fungerande lagring för att hantera I/O-uppgifter. Vissa är kraftfulla eller flexibla nog att användas som en dator på egen hand och kan tolkas som en form av samprocessor , till exempel 7909 Data Channel på en IBM 7090 eller IBM 7094 ; men de flesta är det inte. På vissa system använder kanalerna minne eller register som kan adresseras av den centrala processorn som arbetsminne, medan det på andra system finns i kanalhårdvaran. Vanligtvis finns det standardgränssnitt mellan kanaler och externa kringutrustningar, och flera kanaler kan fungera samtidigt.
En CPU betecknar vanligtvis ett lagringsblock som, eller skickar, ett relativt litet kanalprogram till kanalen för att hantera I/O-uppgifter, som kanalen och styrenheten i många fall kan slutföra utan ytterligare ingripande från CPU:n (undantag : de kanalprogram som använder "programkontrollerade avbrott", PCI, för att underlätta programladdning, efterfrågesökning och andra viktiga systemuppgifter).
När I/O-överföringen är klar eller ett fel upptäcks kommunicerar styrenheten vanligtvis med CPU:n genom kanalen med hjälp av ett avbrott . Eftersom kanalen normalt har direktåtkomst till huvudminnet, kallas den också ofta för en DMA-kontroller ( direct memory access) .
I de senaste implementeringarna initieras kanalprogrammet och kanalprocessorn utför all nödvändig bearbetning tills antingen ett sluttillstånd eller ett programkontrollerat avbrott (PCI). Detta eliminerar mycket av CPU—Channel-interaktionen och förbättrar systemets övergripande prestanda avsevärt. Kanalen kan rapportera flera olika typer av slutvillkor, som kan vara otvetydigt normala, otvetydigt kan indikera ett fel eller vars betydelse kan bero på sammanhanget och resultaten av en efterföljande avkänningsoperation. I vissa system kan en I/O-styrenhet begära ett automatiskt försök igen av vissa operationer utan CPU-intervention. I tidigare implementeringar krävde alla fel, oavsett hur små de var, CPU-ingrepp, och omkostnaderna var följaktligen mycket högre. Ett programkontrollerat avbrott (PCI) används fortfarande av vissa äldre operationer, men trenden är att gå bort från sådana PCI:er, utom där det är oundvikligt.
Historia
Den första användningen av kanal I/O var med IBM 709 vakuumrör stordator, vars modell 766 Data Synchronizer var den första kanalkontrollern, 1957. Dess transistoriserade efterföljare, IBM 7090 , hade två till åtta 6-bitars kanaler (7607:an). ) och en kanalmultiplexor (7606) som kan styra upp till åtta kanaler. 7090 och 7094 kan också ha upp till åtta 8-bitars kanaler med 7909.
Medan IBM använde datakanalkommandon på några av sina datorer och tillät kommandokedja på t.ex. 7090, använde de flesta andra leverantörer kanaler som hanterade enstaka poster. Vissa system, t.ex. GE-600-serien , hade dock mer sofistikerade I/O-arkitekturer.
Senare, för större IBM System/360- och System/370 -datorer var kanalerna fortfarande skrymmande och dyra separata komponenter, såsom IBM 2860 Selector-kanalen (en till tre väljarkanaler i en enda låda), IBM 2870 Byte-multiplexorkanalen (en multiplexorkanal, och, valfritt, en väljarunderkanal i en enda box), och IBM 2880 Block-multiplexorkanal (en eller två blockmultiplexorkanaler i en enda box). På 303x-processorkomplexen övergav IBM den implementeringen och använde samma cycle-stealing-implementation som på 370/158. Ingen efterföljande produkt i System/360-serien hade fasta kanaler.
Amdahl Corporations hårdvaruimplementering av System/370-kompatibla kanaler var helt annorlunda. En enda intern enhet, kallad "C-Unit", stödde upp till sexton kanaler med samma hårdvara för alla stödda kanaler. Två interna "C-Units" var möjliga, med stöd för upp till 32 totalt kanaler. Varje "C-Unit" utförde oberoende en process som allmänt kallas en "skiftande kanaltillståndsprocessor" (en typ av cylinderprocessor ), som implementerade en specialiserad finita tillståndsmaskin (FSM). Varje CPU-cykel, var 32:e nanosekund i 470V/6 och /5 och var 26:e nanosekund i 470V/7 och /8, läser "C-enheten" hela statusen för nästa kanal i prioritetssekvens och dess I/O- kanal i-taggar . De nödvändiga åtgärderna definierade av den kanalens senaste tillstånd och dess intags utfördes: data lästes från eller skrevs till huvudminnet, operativsystemets program avbröts om ett sådant avbrott specificerades av kanalprogrammets programkontrollavbrottsflagga, och " C-Unit" lagrade slutligen den kanalens nästa tillstånd och ställde in dess I/O Channel out-taggar och gick sedan vidare till nästa lägre prioritetskanal. Förköp var möjligt, i vissa fall. Tillräcklig FIFO-lagring tillhandahålls inom "C-enheten" för alla kanaler som emulerades av denna FSM. Kanaler kan enkelt konfigureras om till kundens val av väljare, bytemultiplexor) eller blockmultiplexorkanal, utan några betydande begränsningar genom att använda kommandon från underhållskonsolen. "Two-byte interface" stöddes också, liksom "Data-In/Data-Out" och andra högpresterande IBM-kanalalternativ. Inbyggda kanal-till-kanal-adaptrar erbjöds också, kallade CCAs på Amdahl-speak, men kallade CTCs eller CTCAs i IBM-speak. En riktig spelväxlare, och detta tvingade IBM att designa om sina stordatorer för att ge liknande kanalkapacitet och flexibilitet. IBM:s initiala svar var att endast inkludera avskalade modell 158:or, som fungerar i "Channel Mode", som Model 303x-kanalenheter. I Amdahls "C-enhet" kan vilken kanal som helst vara vilken typ, väljare, bytemultiplexor) eller blockmultiplexor, utan att reservera kanalerna 0 och 4 för bytemultiplexorerna, som på vissa IBM-modeller.
För mindre IBM-datorer, System/360 Models 50 och lägre, och System/370 Models 158 och lägre, implementerades kanaler i CPU:ns mikrokod och själva CPU:n fungerade i ett av två lägen, antingen "CPU Mode" eller "Channel Mode" ", med kanalläget 'stjäla' cykler från CPU-läget (IBM 2860, 2870 och 2880, och Amdahl-kanalerna hade dedikerad hårdvara).
Några av de tidigaste kommersiella icke-IBM-kanalsystemen fanns på UNIVAC 490 , CDC 1604 , Burroughs B5000 , UNIVAC 1107 och GE 635 . Sedan dess har kanalkontroller varit en standarddel av de flesta stordatordesigner och primära fördelar stordatorer har framför mindre, snabbare persondatorer och nätverksdatorer.
Superdatorn CDC 6600 från 1965 använde 10 logiskt oberoende datorer som kallas perifera processorer (PP) och 12 enkla I/O-kanaler för denna roll. PPs var en modifierad version av CDC:s första persondatorer, 12-bitars CDC 160 och 160A. Operativsystemet fanns från början och kördes i PP0. Kanalerna hade ingen direkt tillgång till minne och kunde inte orsaka avbrott; programvara på en PP använde synkrona instruktioner för att överföra data mellan kanalen och antingen A-registret eller PP-minnet.
Långt senare implementerades kanalerna som en inbyggd processor som låg i samma låda som processorn, allmänt kallad "kanalprocessor", och som vanligtvis var en RISC-processor, men som kunde vara en System/390- mikroprocessor med speciell mikrokod som i IBMs CMOS stordatorer.
SCSI introducerades 1981 som en lågkostnadskanal motsvarande IBM Block Multiplexer Channel är nu allmänt förekommande i form av Fibre Channel och Serial Attached SCSI .
Moderna datorer kan ha kanaler i form av bus-mastering kringutrustning, såsom PCI Direct Memory Access (DMA)-enheter. Grunden för dessa enheter är densamma som för de ursprungliga kanalkontrollerna, nämligen avlastningsöverföring, avbrott och kontextväxling från huvudprocessorn.
Kanalkontroller har gjorts så små som enkelchipsdesigner med flera kanaler på dem, som till exempel används i NeXT -datorerna.
Beskrivning
Referensimplementeringen av kanal I/O är den för IBM System/360-familjen av stordatorer och dess efterföljare, men liknande implementeringar har antagits av IBM på andra linjer, t.ex. 1410 och 7010 , 7030 , och av andra stordatorleverantörer, t.ex. som Control Data , Bull ( General Electric / Honeywell ) och Unisys .
Datorsystem som använder kanal I/O har speciella hårdvarukomponenter som hanterar alla in-/utgångsoperationer i sin helhet oberoende av systemens CPU(er). CPU:n i ett system som använder kanal I/O har vanligtvis bara en maskininstruktion i sin repertoar för inmatning och utmatning; denna instruktion används för att skicka in-/utgångskommandon till den specialiserade I/O-hårdvaran i form av kanalprogram . I/O fortsätter därefter utan ingripande från CPU:n tills en händelse som kräver notifiering av operativsystemet inträffar, vid vilken punkt I/O-hårdvaran signalerar ett avbrott till CPU:n.
En kanal är en oberoende hårdvarukomponent som koordinerar alla I/O till en uppsättning kontroller eller enheter. Det är inte bara ett kommunikationsmedium, trots namnet; det är en programmerbar enhet som hanterar alla detaljer om I/O efter att ha fått en lista över I/O-operationer att utföra (kanalprogrammet).
Varje kanal kan stödja en eller flera kontroller och/eller enheter, men varje kanalprogram får endast riktas mot en av dessa anslutna enheter. Ett kanalprogram innehåller listor med kommandon till själva kanalen och till styrenheten och enheten som den är riktad till. När operativsystemet har förberett en komplett lista med kanalkommandon, exekverar det en enda I/O-maskininstruktion för att initiera kanalprogrammet; kanalen övertar därefter kontroll av I/O-operationerna tills de är slutförda.
Det är möjligt att utveckla mycket komplexa kanalprogram, inklusive testning av data och villkorlig förgrening inom det kanalprogrammet. Denna flexibilitet frigör processorn från omkostnader för att starta, övervaka och hantera individuella I/O-operationer. Den specialiserade kanalhårdvaran är i sin tur dedikerad till I/O och kan utföra den mer effektivt än processorn (och helt parallellt med processorn). Channel I/O är inte olikt direkt minnesåtkomst (DMA) för mikrodatorer, bara mer komplex och avancerad.
På stora stordatorsystem är CPU:er bara en av flera kraftfulla hårdvarukomponenter som fungerar parallellt. Särskilda in-/utgångskontroller (de exakta namnen varierar från en tillverkare till en annan) hanterar uteslutande I/O, och dessa är i sin tur kopplade till hårdvarukanaler som också är dedikerade till in- och utgång. Det kan finnas flera processorer och flera I/O-processorer. Den övergripande arkitekturen optimerar in-/utgångsprestanda utan att försämra ren CPU-prestanda. Eftersom de flesta verkliga tillämpningar av stordatorsystem är mycket I/O-intensiva affärsapplikationer, hjälper den här arkitekturen att tillhandahålla de mycket höga nivåerna av genomströmning som skiljer stordatorer från andra typer av datorer.
I IBM ESA/390- terminologi är en kanal en parallell dataanslutning inuti det trädliknande eller hierarkiskt organiserade I/O-undersystemet. I System/390 I/O-burar ansluts kanalerna antingen direkt till enheter som är installerade inuti buren (kommunikationsadapter som ESCON , FICON , Open Systems Adapter ) eller så löper de utanför buren, under det upphöjda golvet som kablar till tjockleken på en tumme och direktanslut till kanalgränssnitt på större enheter som banddelsystem, direktåtkomstlagringsenheter (DASD), terminalkoncentratorer och andra ESA/390-system.
Typer av kanaler
Kanaler skiljer sig åt i antal och typ av samtidiga I/O-operationer som de stöder. I IBM-terminologi stöder en multiplexerkanal ett antal samtidiga interfolierade operationer med långsam hastighet, som var och en överför en byte från en enhet åt gången. En väljarkanal stöder en höghastighetsoperation, överföring av ett datablock åt gången. En blockmultiplexer stöder ett antal logiskt samtidiga kanalprogram, men endast en höghastighetsdataöverföring åt gången.
Kanaler kan också skilja sig åt i hur de associerar kringutrustning med lagringsbuffertar. I UNIVAC-terminologi kan en kanal antingen vara internt specificerat index (ISI), med en enda buffert och enhet aktiv åt gången, eller externt specificerat index (ESI), där enheten väljer vilken buffert som ska användas.
Kanalprogram
Ett kanalprogram är en sekvens av kanalkommandoord (CCW) som exekveras av I/O-kanalundersystemet i IBM System/360 och efterföljande arkitekturer. Ett kanalprogram består av ett eller flera kanalkommandoord. Operativsystemet signalerar I/O-kanalundersystemet att börja exekvera kanalprogrammet med en SSCH-instruktion (startunderkanal). Den centrala processorn är sedan fri att fortsätta med icke-I/O-instruktioner tills den avbryts. När kanaloperationerna är klara avbryter kanalen den centrala processorn med ett I/O-avbrott. I tidigare modeller av IBMs stordatorlinje var kanalenheten en identifierbar komponent, en för varje kanal. I moderna stordatorer implementeras kanalerna med hjälp av en oberoende RISC-processor, kanalprocessorn, en för alla kanaler. IBM System/370 Extended Architecture och dess efterföljare ersatte de tidigare SIO ( start I/O ) och SIOF ( start I/O fast release ) maskininstruktionerna (System/360 och early System/370) med SSCH ( start sub-channel ) instruktion (ESA/370 och efterföljare).
Channel I/O ger avsevärda besparingar i input/output. Till exempel, på IBM:s Linux på IBM Z , kräver formateringen av ett helt spår av en DASD endast ett kanalprogram (och därmed endast en I/O-instruktion), men flera kanalkommandoord (ett per block). Programmet exekveras av den dedikerade I/O-processorn, medan applikationsprocessorn (CPU) är ledig för annat arbete.
Kanalkommandoord
Ett kanalkommandoord ( CCW ) är en instruktion till en specialiserad I/O-kanalprocessor som i själva verket är en finita tillståndsmaskin. Den används för att initiera en I/O-operation, såsom "läsa", "skriva" eller "känna", på en kanalansluten enhet. På systemarkitekturer som implementerar kanal-I/O är vanligtvis alla enheter anslutna via kanaler, och därför all I/O användning av CCW.
CCW är organiserade i kanalprogram av operativsystemet och I/O-subrutin, ett verktygsprogram eller av fristående programvara (som test- och diagnosprogram). En begränsad "förgreningsmöjlighet", följaktligen en dynamiskt programmerbar förmåga, är tillgänglig inom sådana kanalprogram, genom användning av "statusmodifierare"-kanalflaggan och "överföring-i-kanal" CCW.
Kedja
IBM CCW är kedjade för att bilda kanalprogrammet. Bitar i CCW indikerar att följande plats i lagringen innehåller en CCW som är en del av samma kanalprogram. Kanalprogrammet exekverar normalt sekventiella CCW tills ett undantag inträffar, en Transfer-in-Channel (TIC) CCW exekveras, eller en CCW exekveras utan att kedjeindikeringen indikeras. Kommandokedja berättar för kanalen att nästa CCW innehåller ett nytt kommando. Datakedja indikerar att nästa CCW innehåller adressen för ytterligare data för samma kommando, vilket gör att till exempel delar av en post kan skrivas från eller läsas till flera dataområden i lagring (samla-skrivning och spridningsläsning).
Självmodifierande kanalprogram
Kanalprogram kan modifiera sin egen funktion under exekvering baserat på avlästa data. Till exempel används självmodifiering flitigt i OS/360 ISAM .
Exempel på kanalprogram
Följande exempel läser en diskpost som identifieras av en inspelad nyckel . Spåret som innehåller posten och det önskade värdet på nyckeln är känt. Enhetens kontrollenhet kommer att söka efter spåret för att hitta den begärda posten. I detta exempel <> indikerar att kanalprogrammet innehåller lagringsadressen för det angivna fältet.
SÖKA SÖKNYCKEL LIKA TIC *-8 Tillbaka till sökning om inte LÄS DATA
TIC (överföring i kanalen) kommer att få kanalprogrammet att förgrena sig till SEARCH-kommandot tills en post med en matchande nyckel (eller slutet av spåret) påträffas. När en post med en matchande nyckel hittas kommer DASD-styrenheten att inkludera Status Modifier i kanalstatus, vilket gör att kanalen hoppar över TIC CCW; sålunda kommer inte kanalprogrammet att förgrenas och kanalen kommer att utföra READ-kommandot.
Ovanstående exempel är korrekt för oblockerade poster (en post per block). För blockerade poster (mer än en post per block) måste den inspelade nyckeln vara densamma som den högsta tangenten inom det blocket (och posterna måste vara i tangentsekvens), och följande kanalprogram skulle användas:
SÖKA SÖKNYCKEL HÖG ELLER LIKA TIC *-8 Tillbaka till sökning om inte hög eller lika LÄS DATA
Om datauppsättningen är allokerad i spår och slutet av spåret nås utan att den begärda posten hittas, avslutas kanalprogrammet och returnerar en statusindikering "ingen post hittades". På liknande sätt, om datauppsättningen är allokerad i cylindrar och slutet av cylindern nås utan att den begärda posten hittas, avslutas kanalprogrammet och returnerar en statusindikering "ingen post hittades". I vissa fall har systemmjukvaran möjlighet att uppdatera spår- eller cylindernumret och köra om I/O-driften utan att avbryta applikationsprogrammet.
Kanalprogram i virtuella lagringssystem
På de flesta system fungerar kanaler med riktiga (eller fysiska) adresser , medan kanalprogrammen är byggda med virtuella adresser . Operativsystemet ansvarar för att översätta dessa kanalprogram innan de körs, och för just detta ändamål har Input/Output Supervisor (IOS) en speciell snabbfixfunktion som designades in i OS Supervisor bara för de "fixar" som är relativt kort varaktighet (dvs. betydligt kortare än "väggklockatid"). Sidor som innehåller data som ska användas av I/O-operationen är låsta i verkligt minne, eller sidfixerade . Kanalprogrammet kopieras och alla virtuella adresser ersätts med riktiga adresser innan I/O-operationen startas. När operationen är klar är sidorna ofixade.
Eftersom sidfixning och avfixing är en CPU-dyr process används ibland långvarig sidfixing för att minska CPU-kostnaden. Här är det virtuella minnet sidfixerat under applikationens livslängd, snarare än att fixa och frigöra runt varje I/O-operation. Ett exempel på ett program som kan använda långsiktig sidfixering är Db2 .
Ett alternativ till långsiktig sidfixering är att flytta hela applikationen, inklusive alla dess databuffertar, till ett föredraget område med huvudlagring. Detta åstadkoms genom en speciell SYSEVENT i MVS/370 genom z/OS operativsystem, där applikationen först byts ut från var den än befinner sig, förmodligen från ett icke föredraget område, för att byta och söka extern lagring, och är, för det andra, inbytt till ett föredraget område (SYSEVENT TRANSWAP). Därefter kan applikationen markeras som icke-swapbar av en annan speciell SYSEVENT (SYSEVENT DONTSWAP). Närhelst en sådan applikation avslutas, vare sig den är normalt eller onormalt, utfärdar operativsystemet implicit ytterligare en speciell SYSEVENT för applikationens räkning om det inte redan har gjort det (SYSEVENT OKSWAP).
Startar med kanal I/O
Även bootstrapping av systemet, eller Initial Program Load (IPL) i IBM-nomenklaturen, utförs av kanaler, även om processen delvis simuleras av CPU:n genom en implicit Start I/O (SIO)-instruktion, ett implicit Channel Address Word ( CAW) på plats 0 och ett implicit kanalkommandoord (CCW) med en opkod för Read IPL, också på plats 0. Kommandokedjning antas, så den implicita CCW på plats 0 faller igenom till fortsättningen av kanalprogrammet på platser 8 och 16, och eventuellt någon annanstans bör en av dessa CCW vara en överföring-i-kanal (TIC).
För att ladda ett system läser den implicita Read IPL CCW det första blocket av den valda IPL-enheten in i 24-byte dataområdet på plats 0, kanalen fortsätter med det andra och tredje dubbelordet, som är CCW, och detta kanalprogram laddas den första delen av systemet laddar programvaran någon annanstans i huvudminnet. Det första dubbelordet innehåller en PSW som, när den hämtas vid slutet av IPL:n, får CPU:n att exekvera IPL-texten (bootstrap loader) som läses in av CCW på plats 8. IPL-texten lokaliserar, laddar och överför sedan kontroll till operativsystemets Nucleus. Nucleus utför eller initierar all nödvändig initiering och startar sedan normala OS-operationer.
Detta IPL-koncept är enhetsoberoende. Den kan IPL-ing från en kortlek, från ett magnetband eller från en direktåtkomstlagringsenhet (DASD), t.ex. disk, trumma. Kommandot Read IPL (X'02'), som simuleras av CPU:n, är ett Read EBCDIC Select Stacker 1-läskommando på kortläsaren och ett Read-kommando på bandmedia (som i sig är sekventiell åtkomst till sin natur), men en speciellt Read-IPL-kommando på DASD.
DASD-styrenheter accepterar X'02'-kommandot, försöker cylindra X'0000'-huvud X'0000', hoppar till indexpunkten (dvs. precis förbi spårbeskrivningsposten (R0)) och behandlar sedan Read IPL-kommandot som om det var ett Read Data (X'06') kommando. Utan detta speciella DASD-kontrollerbeteende skulle enhetsoberoende IPL inte vara möjlig. På en DASD finns IPL-texten på cylinder X'0000', spår X'0000' och post X'01' (24 byte), och cylinder X'0000', spår X'0000' och post X' 02' (ganska stor, säkert något mer än 3 000 byte). Volymetiketten finns alltid på cylinder X'0000', spår X'0000' och block X'03' (80 byte). Volymetiketten pekar alltid på VTOC, med en pekare av formen HHHH (det vill säga, VTOC måste finnas inom de första 65 536 spåren). VTOC:s Format 4 DSCB definierar omfattningen (storleken) av VTOC:n, så volymetiketten behöver bara en pekare till det första spåret i VTOC:s utsträckning, och eftersom Format 4 DSCB, som beskriver VTOC, alltid är den allra första DSCB:n i VTOC pekar HHHH också på Format 4 DSCB.
Om ett försök görs till IPL från en enhet som inte initierats med IPL-text går systemet helt enkelt in i ett vänteläge. DASD-initieringsprogrammet (direktåtkomstlagringsenhet), IBCDASDI, eller DASD-initieringsapplikationen, ICKDSF, placerar en väntetillstånds-PSW och en dummy CCW-sträng i de 24 byten, om enheten endast är avsedd för data, inte för IPL, efter vilka dessa program formaterar VTOC och utför andra hårddiskinitieringsfunktioner.