Line discipline [1] ( englanniksi line discipline, ldisc ) on UNIX-tyyppisten käyttöjärjestelmien päätelaitteiden alajärjestelmän (tty) abstraktiokerros , joka on tarpeen laitteistopäätteen vastaavien ominaisuuksien simuloimiseksi . Tämä kerros sijaitsee konsoliohjaimen ja UART - ohjaimen välissä [2] .
Yhteys UART-ohjaimeen tehdään kaksisuuntaisen kanavan kautta. Tällä kaavalla on useita muunnelmia. Esimerkiksi virtuaalinen teletyyppilaite /dev/tty voi toimia UART-ohjaimena - tässä tapauksessa paikallisen koneen prosessit voivat toimia olemassa olevan virtuaalisen päätteen kanssa. Jos työ suoritetaan fyysisen UART:n kautta, tällainen järjestelmä tarjoaa yhteyden prosessin kanssa etätyöasemassa, toisin sanoen etäpäätetilassa.
Yhteys konsoliin tehdään kahden yksisuuntaisen kanavan kautta: tulokanavan ja lähtökanavan. Tässäkin vaihtelut ovat mahdollisia. Jos UNIX-virtuaalipääteohjainta käytetään konsolina, käyttäjä voi tällaisen virtuaalikonsolin kautta työskennellä UNIX-järjestelmässä koko näytön tekstitilassa ja vaihtaa konsolien välillä pikanäppäimillä . Konsoliohjaimen sijaan ldisc-liitäntä voidaan viedä laitetiedoston , kuten /dev/ttyS0, kautta. Tässä tapauksessa viestintäohjelma, kuten minicom , voi olla vuorovaikutuksessa ldiscin kanssa.
On myös ldisc-yhteysmalli, jossa sekä konsoli että UART korvataan virtuaalisilla laitetiedostoilla. Tällaista järjestelmää kutsutaan pseudopäätteeksi.. Tässä tapauksessa päälaite, kuten /dev/ptyp1, korvaa konsolin, ja sitä käyttää erikoisohjelma, kuten tmux , xterm tai socat . Orjalaite, kuten /dev/typ1, korvaa UART:n ja sitä voivat käyttää kaikki käyttäjäprosessit.
Linjakurimoduuli tarjoaa puskurin rivin vastaanottamiseksi konsolin lähtökanavalta, käsittelee rivien muokkausohjausmerkkejä (ei pidä sekoittaa päätteen ohjaussarjoihin ) ja tarjoaa myös kaikumekanismin toteutuksen - lähettää konsolista vastaanotetut merkit takaisin konsolin tulokanavan kautta. Käsittelyn jälkeen puskurista oleva merkkijono lähetetään UART-kanavalle. UART-kanavalta vastaanotettu data lähetetään käsittelyn jälkeen konsolin tulokanavalle.
Ldisc-kerros määrittää, kuinka järjestelmäkutsut , kuten read(2) ja write(2), toimivat työskennellessäsi erilaisten päätelaitetiedostojen kanssa . Sitä voidaan ohjata ioctl(2)-järjestelmäkutsulla (tai tcsetattr(3) -kirjaston kääretoiminnolla ), jos ainakin yksi siihen liittyvistä komponenteista viedään laitetiedoston kautta. Samaan aikaan, mikä komponentti viedään, ei ole väliä - ohjaus voidaan suorittaa sekä isäntälaitteen että orjan kautta. Esimerkiksi laitetiedostolla /dev/tty (vastaa orjapuolta) voit ohjata konsolin kaikutilaa ja laitetiedostolla /dev/ttyS0 (vastaa pääpuolta) voit ohjata echo -tila itse viestintäohjelmalle: kun echo on käytössä , kaikki tiedostoon /dev/ttyS0 kirjoitettu voidaan lukea välittömästi taaksepäin.
Jos ohjelma käyttää omaa rivinkäsittelyään, kuten Ncurses- tai Readline -kirjastoja , päätelaitteen alijärjestelmän tarjoama rivinkäsittelymekanismi voidaan poistaa käytöstä asettamalla ldisc raaka-tilaan. Tässä tilassa konsolin lähtökanavalta vastaanotettu data lähetetään UART-kanavalle ja UART-kanavalta vastaanotettu data lähetetään konsolin tulokanavalle. Tässä tilassa ei tapahdu tietojenkäsittelyä.