Dela via


Översikt över Windows-konsolen och terminalekosystem

Det här dokumentet är en övergripande översikt över Windows-konsolen och Windows Terminal-produkter. Den omfattar:

  • Så här passar Windows-konsolen och Windows-terminalen in i ekosystemet med kommandoradsprogram i Windows och andra operativsystem.

  • En historik och framtida översikt över de produkter, funktioner och strategier som ingår i skapandet av plattformen, samt att skapa för den här plattformen.

Fokus för den aktuella konsolen/terminalen på Microsoft är att ge utvecklare på Windows-plattformen en förstklassig terminalupplevelse och fasa ut klassiska Windows-konsol-API:er och ersätta dem med virtuella terminalsekvenser som använder pseudokonsol. Windows Terminal visar den här övergången till en förstklassig upplevelse, bjuder in samarbete med öppen källkod från utvecklarcommunityn, stöder ett fullständigt spektrum av blandning och matchning av klientkommandon och terminalvärdprogram och förenar Windows-ekosystemet med alla andra plattformar.

Definitions

Vi rekommenderar att du bekantar dig med definitionerna av vanlig terminologi som används i det här utrymmet innan du fortsätter. Gemensam terminologi omfattar: kommandoradsprogram (eller konsolprogram),standardreferenser (STDIN, STDOUT, STDERR), TTY- och PTY-enheter, klienter och servrar, konsolundersystem, konsolvärd, pseudokonsol och terminal.

Arkitektur

Systemets allmänna arkitektur består av fyra delar: klient, enhet, server och terminal.

Flödesschemakälla för kommandoradskommunikation till mål som körs från klient till enhet till server till terminal

Klient

Klienten är ett kommandoradsprogram som använder ett textbaserat gränssnitt för att göra det möjligt för användaren att ange kommandon (i stället för ett musbaserat användargränssnitt) och returnerar en textrepresentation av resultatet. I Windows tillhandahåller konsol-API:et ett kommunikationslager mellan klienten och enheten. (Detta kan också vara en standardkonsolreferens med API:er för enhetskontroll).

Apparat

Enheten är ett mellanliggande kommunikationslager för meddelandehantering mellan två processer, klienten och servern. I Windows är detta konsoldrivrutinen. På andra plattformar är det TTY- eller PTY-enheten. Andra enheter som filer, rör och socketar kan användas som den här kommunikationskanalen om hela transaktionen är i oformaterad text eller innehåller virtuella terminalsekvenser, men inte med Api:er för Windows-konsolen.

Server

Servern tolkar de begärda API-anropen eller meddelandena från klienten. I Windows i klassiskt driftsläge skapar servern också ett användargränssnitt för att visa utdata på skärmen. Servern samlar dessutom in indata för att skicka tillbaka svarsmeddelanden till klienten, via drivrutinen, som en terminal som paketeras i samma modul. Med pseudokonsolläget är det i stället bara en översättare som presenterar den här informationen i virtuella terminalsekvenser till en ansluten terminal.

terminalfönster

Terminalen är det sista lagret som tillhandahåller grafiska visnings- och interaktivitetstjänster till användaren. Den ansvarar för att samla in indata och koda den som virtuella terminalsekvenser, som så småningom når klientens STDIN. Den tar också emot och avkodar de virtuella terminalsekvenser som den tar emot från klientens STDOUT för presentation på skärmen.

Ytterligare anslutningar

Som ett tillägg kan ytterligare anslutningar utföras genom att länka program som hanterar flera roller till en av slutpunkterna. Till exempel har en SSH-session två roller: det är en terminal för kommandoradsprogrammet som körs på en enhet, men den vidarebefordrar all mottagen information till en klientroll på en annan enhet. Den här sammanlänkningen kan ske på obestämd tid över enheter och kontexter som ger bred flexibilitet i scenariot.

På icke-Windows-plattformar är server - och terminalrollerna en enda enhet eftersom det inte finns något behov av ett kompatibilitetslager för översättning mellan en API-uppsättning och virtuella terminalsekvenser.

Microsoft-produkter

Alla Microsoft Windows-kommandoradsprodukter är nu tillgängliga på GitHub på en lagringsplats med öppen källkod, microsoft/terminal.

Windows-konsolvärd

Det här är det traditionella Windows-användargränssnittet för kommandoradsprogram. Den hanterar all konsol-API-service som anropas från alla anslutna kommandoradsprogram. Windows-konsolen hanterar också den grafiska användargränssnittsrepresentationen (GUI) för alla dessa program. Den finns i systemkatalogen som conhost.exe, eller openconsole.exe i dess formulär med öppen källkod. Den levereras med Windows-operativsystemet. Det finns också i andra Microsoft-produkter som skapats från lagringsplatsen med öppen källkod för en mer up-to-date-implementering av pseudokonsolinfrastrukturen . Enligt definitionerna ovan fungerar den antingen i en kombinerad server- och terminalroll traditionellt eller en roll som endast server via den föredragna pseudokonsolinfrastrukturen .

Windows-terminal

Det här är det nya Windows-gränssnittet för kommandoradsprogram. Windows Terminal fungerar som ett förstapartsexempel på att använda pseudokonsolen för att separera problemen mellan API-service och textbaserad programinterfacing, ungefär som alla andra plattformar än Windows.

Windows-terminalen är det viktigaste användargränssnittet för textläge för Windows. Den visar ekosystemets funktioner och driver Windows-utvecklingen mot att förenas med andra plattformar. Windows Terminal är också ett exempel på hur du skapar ett robust och komplext modernt program som sträcker sig över historiken och omfånget för Windows-API:er och ramverk. Enligt definitionerna ovan fungerar den här produkten i en terminalroll.

Viktiga historiska milstolpar

De viktigaste historiska milstolparna för konsolundersystemet är uppdelade i implementeringen före 2014 och flyttas sedan till en översikt över det arbete som utförts sedan 2014, då det förnyade fokuset på kommandoraden skapades under Windows 10-eran.

Inledande implementering

[1989-1990-talet] Det första konsolvärdsystemet implementerades som en emulering av DOS-miljön i Windows-operativsystemet. Koden är sammanflätade och samarbetar med kommandotolken, cmd.exe, som är en representation av dos-miljön. Konsolens värdsystemkod delar ansvarsområden och behörigheter med kommandotolkens tolk/gränssnitt. Den tillhandahåller också en basnivå av tjänster för andra kommandoradsverktyg för att utföra tjänster på ett CMD-liknande sätt.

DBCS för CJK

[1997-1999] Runt den här tiden introduceras DBCS-stöd ("Double-byte character set") för att stödja CJK-marknader (kinesiska, japanska och koreanska). Den här ansträngningen resulterar i en bifurcation av många av skriv- och läsmetoderna i konsolen för att tillhandahålla både "västerländska" versioner för att hantera en byte-tecken samt en alternativ representation för "östra" versioner där två byte krävs för att representera den stora matrisen med tecken. Denna bifurcation inkluderade den expanderande representationen av en cell i konsolmiljön till antingen 1 eller 2 celler breda, där 1 cell är smal (högre än den är bred) och 2 celler är breda, fullbredd eller på annat sätt en kvadrat där typiska kinesiska, japanska och koreanska ideografier kan skrivas in.

Säkerhet/isolering

[2005-2009] Med konsolundersystemets erfarenhet av att köras i den kritiska systemprocessen csrss.exemärktes det som särskilt farligt att ansluta olika klientprogram på olika åtkomstnivåer till en enda superkritisk och privilegierad process. I den här eran delades konsolundersystemet upp i klient-, drivrutins- och serverprogram. Varje program kan köras i sin egen kontext, vilket minskar ansvarsområdena och behörigheterna i varje program. Den här isoleringen ökade systemets allmänna robusthet eftersom eventuella fel i konsolundersystemet inte längre påverkade andra viktiga processfunktioner.

Förbättringar av användarupplevelsen

[2014-2016] Efter en lång tid av allmänt utspridda underhåll av konsolundersystemet av olika team i organisationen bildades ett nytt utvecklarfokuserat team för att äga och driva förbättringar i konsolen. Förbättringar under den här tiden inkluderade: radval, smidig storleksändring av fönster, omflöde av text, kopiera och klistra in, högt DPI-stöd och fokus på Unicode, inklusive konvergensen av uppdelningen mellan "västra" och "östra" lagrings- och strömmanipuleringsalgoritmer.

Virtuell terminalklient

[2015-2017] Med ankomsten av Windows-undersystemet för Linux, Microsofts ansträngningar för att förbättra upplevelsen av Docker i Windows och införandet av OpenSSH som den främsta fjärrkörningstekniken för kommandoraden introducerades de första implementeringarna av virtuella terminalsekvenser i konsolvärden. Detta gjorde det möjligt för den befintliga konsolen att fungera som terminal, kopplad direkt till de Linux-inbyggda programmen i respektive miljö, vilket återger grafiska attribut och textattribut till displayen och returnerar användarindata i lämplig dialekt.

Virtuell terminalserver

[2018] Under de senaste tjugo åren har alternativ från tredje part för inkorgskonsolvärden skapats för att erbjuda ytterligare utvecklarproduktivitet, med en framträdande centrerad i omfattande anpassningar och flikar. Dessa program behövde fortfarande köras och dölja konsolvärdfönstret. De bifogar som ett sekundärt "klientprogram" för att skrapa ut buffertinformation i avsökningsloopar när det primära kommandoradsklientprogrammet fungerade. Deras mål var att vara en terminal, som på andra plattformar, men i Windows-världen där terminaler inte kunde ersättas.

Under den här tidsperioden introducerades pseudokonsolinfrastrukturen . Pseudokonsolen tillåter alla program att starta konsolvärden i ett icke-interaktivt läge och bli det slutliga terminalgränssnittet för användaren. Den största begränsningen i detta arbete var det fortsatta kompatibilitetslöftet från Windows när det gäller att underhålla alla publicerade Windows-konsol-API:er på obestämd tid, samtidigt som ett ersättningsservervärdgränssnitt som matchade vad som förväntas på alla andra plattformar: virtuella terminalsekvenser. Därför utförde den här åtgärden speglingsbilden av klientfasen: pseudokonsolen projicerar det som skulle visas på skärmen som virtuella terminalsekvenser för en delegerad värd och tolkar svar i Indatasekvenser i Windows-format för klientprogramförbrukning.

Översikt för framtiden

Terminalprogram

[2019-Now] Det här är en era med öppen källkod för konsolundersystemet, med fokus på den nya Windows-terminalen. Windows Terminal, som tillkännagavs under Microsoft Build-konferensen i maj 2019, finns helt på GitHub på microsoft/terminal. Att skapa Windows Terminal-programmet ovanpå den raffinerade plattformen för pseudokonsol kommer att stå i fokus för den här eran, vilket ger utvecklare direkt en förstklassig terminalupplevelse på Windows-plattformen.

Windows Terminal avser inte bara att visa upp plattformen – inklusive WinUI-gränssnittstekniken , MSIX-paketeringsmodellen och C++/WinRT-komponentarkitekturen – utan även som en validering av själva plattformen. Windows Terminal driver Windows-organisationen att öppna och utveckla appplattformen efter behov för att fortsätta att lyfta utvecklarnas produktivitet. Den unika uppsättningen med krav på energianvändare och utvecklare i Windows-terminalen styr de moderna kraven på Windows-plattformen för vad dessa marknader verkligen behöver från Windows.

I Windows-operativsystemet omfattar detta att dra tillbaka det klassiska konsolvärdanvändargränssnittet från standardpositionen till förmån för Windows Terminal, ConPTY och virtuella terminalsekvenser.

Slutligen avser den här eran att erbjuda ett fullständigt val jämfört med standardupplevelsen, oavsett om det är Windows Terminal-produkten eller några alternativa terminaler.

Klientsupportbibliotek

[Framtiden] Med stöd och dokumentation för virtuella terminalsekvenser på klientsidan rekommenderar vi starkt windows-kommandoradsverktygsutvecklare att först använda virtuella terminalsekvenser över de klassiska Windows-API:erna för att dra nytta av ett enhetligt ekosystem med alla plattformar. En viktig del som saknas är dock att andra plattformar har ett brett utbud av hjälpbibliotek på klientsidan för hantering av indata som skrivskyddad och grafisk visning som ncurses. Det här specifika framtida färdplanselementet representerar utforskningen av vad ekosystemet erbjuder och hur vi kan påskynda införandet av virtuella terminalsekvenser i Windows kommandoradsprogram via det klassiska konsol-API:et.

Sekvensgenomströmning

[Framtiden] Kombinationen av virtuella terminalklient- och serverimplementeringar möjliggör fullständig blandning och matchning av klientkommandorads- och terminalvärdprogram. Den här kombinationen kan tala till antingen klassiska Windows-konsol-API:er eller virtuella terminalsekvenser, men det finns en kostnad för att översätta detta till den klassiska kompatibla Windows-metoden och sedan tillbaka till den mer universella virtuella terminalmetoden.

När marknaden har implementerat virtuella terminalsekvenser och UTF-8 på Windows tillräckligt kan konverterings-/tolkningsjobbet för konsolvärden inaktiveras. Konsolvärden skulle sedan bli en enkel API-anropstjänst och relä från enhetsanrop till värdprogrammet via pseudokonsolen. Den här ändringen ökar prestandan och maximerar dialekten av sekvenser som kan talas mellan klientprogrammet och terminalen. Genom den här ändringen skulle ytterligare interaktivitetsscenarier aktiveras och (slutligen) anpassa Windows-världen till familjen för alla andra plattformar i kommandoradsprogrammets utrymme.