Linjedisciplin

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 april 2018; kontroller kräver 5 redigeringar .

Linjedisciplin [1] ( engelsk  linjedisciplin, ldisc ) är ett abstraktionslager av undersystemet av terminalenheter (tty) i UNIX-liknande operativsystem , nödvändigt för att simulera motsvarande kapacitet hos en hårdvaruterminal . Detta lager ligger mellan konsoldrivrutinen och UART - drivrutinen [2] .

Anslutningen till UART-drivrutinen görs genom en dubbelriktad kanal. Detta schema har flera varianter. Till exempel kan den virtuella teletypenheten /dev/tty fungera som en UART-drivrutin - i det här fallet kan processer på den lokala maskinen fungera med den befintliga virtuella terminalen. Om arbetet utförs genom en fysisk UART, tillhandahåller ett sådant schema kommunikation med processen på en fjärrarbetsstation, det vill säga fjärrterminalläget.

Anslutningen till konsolen görs genom två enkelriktade kanaler: en ingångskanal och en utgångskanal. Även här är variationer möjliga. Om en virtuell UNIX-terminaldrivrutin används som en konsol kan användaren, genom en sådan virtuell konsol, arbeta i ett UNIX-system i helskärmstextläge och växla mellan konsoler med snabbtangenter . Istället för en konsoldrivrutin kan ldisc-gränssnittet exporteras via en enhetsfil som /dev/ttyS0. I det här fallet kan ett kommunikationsprogram som minicom interagera med ldisc.

Det finns också ett ldisc-anslutningsschema, där både konsolen och UART ersätts med virtuella enhetsfiler. Ett sådant schema kallas en pseudoterminal.. I det här fallet ersätter en masterenhet som /dev/ptyp1 konsolen och används av ett specialiserat program som tmux , xterm eller socat . En slavenhet som /dev/ttyp1 ersätter UART och kan användas av alla användarprocesser.

Linjedisciplinmodulen tillhandahåller en buffert för att ta emot en linje från konsolutgångskanalen, bearbetar linjeredigeringskontrolltecken (inte att förväxla med terminalkontrollsekvenser), och tillhandahåller även en implementering av ekomekanismen - skickar tecken som tas  emot från konsolen tillbaka via konsolens ingångskanal. Efter bearbetning skickas strängen från bufferten till UART-kanalen. Data som tas emot från UART-kanalen, efter bearbetning, skickas till konsolens ingångskanal.

Det är ldisc-lagret som bestämmer hur systemanrop som read(2) och write(2) fungerar när man arbetar med olika terminalenhetsfiler . Det kan styras med hjälp av ioctl(2)-systemanropet (eller via tcsetattr(3) -bibliotekets wrapper- funktion) om åtminstone en av dess associerade komponenter exporteras via en enhetsfil. Samtidigt spelar ingen roll vilken komponent som exporteras - kontroll kan utföras både genom masterenheten och genom slaven. Till exempel, med hjälp av enhetsfilen /dev/tty (motsvarande slavsidan), kan du styra konsolens ekoläge , och med hjälp av enhetsfilen /dev/ttyS0 (motsvarande mastersidan) kan du styra ekoläge för själva kommunikationsprogrammet: med eko aktiverat kan allt som skrivits till /dev/ttyS0 omedelbart läsas baklänges.

Om programmet använder sin egen linjebearbetning, som att använda Ncurses- eller Readline- biblioteken , kan linjebearbetningsmekanismen som tillhandahålls av terminalenhetens undersystem inaktiveras genom att ställa in ldisc till råläge. I detta läge skickas data som tas emot från konsolutgångskanalen till UART-kanalen och data som tas emot från UART skickas till konsolens ingångskanal. Ingen databehandling sker i detta läge.

Anteckningar

  1. IBM. Delsystemet tty . Linjediscipliner . IBM Knowledge Center . Hämtad 2 september 2016. Arkiverad från originalet 17 september 2016.
  2. TTY:en avmystifierade . Hämtad 14 april 2013. Arkiverad från originalet 10 april 2013.

Länkar