Linková disciplína

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 9. dubna 2018; kontroly vyžadují 5 úprav .

Linková disciplína [1] ( anglicky  line disciplína, ldisc ) je abstraktní vrstva subsystému koncových zařízení (tty) operačních systémů typu UNIX , nezbytná pro simulaci odpovídajících schopností hardwarového terminálu . Tato vrstva se nachází mezi ovladačem konzoly a ovladačem UART [2] .

Připojení k ovladači UART je provedeno obousměrným kanálem. Toto schéma má několik variant. Například virtuální dálnopisné zařízení /dev/tty může fungovat jako ovladač UART - v tomto případě mohou procesy na místním počítači pracovat se stávajícím virtuálním terminálem. Pokud je práce prováděna prostřednictvím fyzického UART, pak takové schéma zajišťuje komunikaci s procesem na vzdálené pracovní stanici, to znamená režim vzdáleného terminálu.

Připojení ke konzole se provádí přes dva jednosměrné kanály: vstupní kanál a výstupní kanál. I zde jsou možné variace. Pokud je ovladač virtuálního terminálu UNIX použit jako konzola, pak může uživatel prostřednictvím takové virtuální konzoly pracovat v systému UNIX v textovém režimu na celou obrazovku a přepínat mezi konzolami pomocí horkých kláves . Místo ovladače konzoly lze rozhraní ldisc exportovat prostřednictvím souboru zařízení , jako je /dev/ttyS0. V tomto případě může komunikační program, jako je minicom , spolupracovat s ldisc.

Existuje také schéma připojení ldisc, ve kterém jsou konzola i UART nahrazeny soubory virtuálního zařízení. Takové schéma se nazývá pseudoterminál.. V tomto případě hlavní zařízení, jako je /dev/ptyp1, nahrazuje konzolu a používá jej specializovaný program, jako je tmux , xterm nebo socat . Podřízené zařízení, jako je /dev/ttyp1, nahrazuje UART a může být použito jakýmkoli uživatelským procesem.

Modul řádkové disciplíny poskytuje vyrovnávací paměť pro příjem řádku z výstupního kanálu konzoly, zpracovává řídicí znaky pro editaci řádku (nezaměňovat s řídicími sekvencemi terminálu) a také poskytuje implementaci mechanismu echo  - posílá znaky přijaté z konzoly zpět přes vstupní kanál konzoly. Po zpracování je řetězec z vyrovnávací paměti odeslán do kanálu UART. Data přijatá z kanálu UART jsou po zpracování odeslána do vstupního kanálu konzoly.

Je to vrstva ldisc, která určuje, jak systémová volání jako read(2) a write(2) fungují při práci s různými soubory koncových zařízení. Lze jej ovládat pomocí systémového volání ioctl(2) (nebo pomocí funkce tcsetattr(3) knihovny wrapper ), pokud je alespoň jedna z jeho přidružených komponent exportována prostřednictvím souboru zařízení. Zároveň nezáleží na tom, která komponenta se exportuje - řízení lze provádět jak přes hlavní zařízení, tak přes podřízené zařízení. Například pomocí souboru zařízení /dev/tty (odpovídající straně slave) můžete ovládat režim echo konzoly a pomocí souboru zařízení /dev/ttyS0 (odpovídající straně master) můžete ovládat režim echo pro samotný komunikační program: s povoleným echo lze vše zapsané do /dev/ttyS0 okamžitě číst zpětně.

Pokud program používá vlastní zpracování řádků, jako je použití knihoven Ncurses nebo Readline , pak lze mechanismus zpracování řádků poskytovaný subsystémem koncového zařízení deaktivovat nastavením ldisc na nezpracovaný režim. V tomto režimu jsou data přijatá z výstupního kanálu konzoly odesílána do kanálu UART a data přijatá z UART jsou odesílána do vstupního kanálu konzoly. V tomto režimu neprobíhá žádné zpracování dat.

Poznámky

  1. IBM. Subsystém tty . Linkové disciplíny . IBM Knowledge Center . Získáno 2. září 2016. Archivováno z originálu 17. září 2016.
  2. TTY demystifikován . Získáno 14. dubna 2013. Archivováno z originálu 10. dubna 2013.

Odkazy