PTS 슬레이브는 PTM 파일 설명자와 어떻게 통신합니까?

PTS 슬레이브는 PTM 파일 설명자와 어떻게 통신합니까?
  1. /dev/ptmx는 UNIX 98 마스터입니다.복제 장치 원천
  2. 프로세스가 /dev/ptmx를 열면파일 설명자PTM(의사 터미널 마스터)의 경우 /dev/pts 디렉터리에 PTS(의사 터미널 슬레이브)를 생성합니다.원천. 가지다노드 없음기본 장치의 파일 시스템에서원천.
  3. 슬레이브에 기록된 데이터가 마스터에 나타납니다.설명자입력으로. 마스터에 기록된 데이터는 슬레이브에 입력으로 제공됩니다.원천.
  4. Unix 및 관련 컴퓨터 운영 체제에서 파일 설명자(FD, 덜 일반적으로 fildes)는 파일에 액세스하는 데 사용되는 추상 지정자(핸들)입니다.문서또는 기타 입력/출력자원, 파이프나 네트워크 소켓 등원천.

결론적으로:

  1. /dev/ptmx는 단지 마스터 복제를 위한 "몰드"(실제로는 파일 설명자)입니다.
  2. 의사 터미널은 양방향 통신을 제공하는 한 쌍의 가상 장치입니다. 채널의 한쪽 끝은파일 설명자(마스터) 다른 하나는 /dev/pts/n입니다.장비(노예).
  3. PTM 장치는 없고 파일 설명자만 있습니다.
  4. 파일 디스크립터는 액세스에 사용됩니다.문서또는자원.

질문:

  1. 파일 설명자가 처리하는 PTM 리소스는 어디에 있습니까?
  2. PTM 마스터를 "장치"라고 부르는 이유는 무엇입니까? /dev에 항목이 없기 때문입니다.
  3. 하나 할 수 있나요?수정됨SSHD와 같은 프로그램이 중간 PTM 없이 PTS와 직접 통신할 수 있습니까?

답변1

의사 터미널이 어떻게 작동하는지 이해하려면 이를 실제 물리적 터미널의 추상화로 생각해야 합니다. 오늘날 가장 일반적인 물리적 터미널은 Linux 가상 콘솔이지만 당시에는 실제 물리적 터미널이 매우 흔했으며 사용자가 일상 작업에서 볼 수 있는 컴퓨터 시스템의 유일한 부분인 경우가 많았습니다.

실제 물리적 터미널에는 두 가지 뚜렷한 측면(원하는 경우 "측면")이 있습니다.

  • 사용자가 앉는 "외부". 이쪽에는 사용자가 문자를 입력할 수 있는 키보드와 컴퓨터 출력을 볼 수 있는 화면이 있습니다. 의사 터미널 추상화에서는 이것이 "주요" 끝입니다.

  • 운영 체제에서 문자 장치로 표시되는 "내부" 측면입니다. 의사 터미널 추상화에서 이는 "슬레이브" 측입니다.

프로그램이 사용자와 통신하는 데 사용하는 물리적 터미널의 "외부" 측면과 "내부" 문자 장치 사이에는 전체 처리 세트가 있으며, 터미널 하드웨어 자체는 화면을 업데이트하고 운영 체제는 사용자 키 입력을 버퍼링할 수 있습니다. 라인 편집 등을 수행합니다.

Digital Equipment Corporation VT220 터미널

Digital Equipment Corporation VT220 터미널. 당신은 그것의 "앞면"을보고 있습니다. 의사 터미널의 경우 이는 "기본" 측면으로 표시됩니다. Wikimedia의 이미지.

  1. 파일 설명자가 처리하는 PTM 리소스는 어디에 있습니까?

    커널 메모리에 위치합니다. 프로세스가 열리면 /dev/ptmx커널은 마스터와 슬레이브로 구성된 새로운 의사 터미널을 생성합니다. 마스터 측은 이를 생성한 프로세스에 속하므로 /dev; 슬레이브 측은 터미널과 통신하려는 모든 프로세스에 의해 열릴 수 있으므로 /dev.

  2. PTM 마스터를 "장치"라고 부르는 이유는 무엇입니까? /dev에 항목이 없기 때문입니다.

    우리는 보통 그것을 장치라고 부르지 않습니다. 우리는 일반적으로 이를 의사 터미널의 기본 측면이라고 부릅니다. 하지만 그렇습니다. 일반 파일이라기보다는 문자 장치에 가깝습니다. 예를 들어, 이를 보유한 프로세스는 이전 위치를 조회할 수 없습니다. 새 바이트를 읽거나 새 바이트를 쓸 수만 있습니다.

  3. SSHD와 같은 수정된 프로그램이 중간 PTM 없이 PTS와 직접 통신할 수 있습니까?

    sshd는 의사 터미널의 슬레이브 측과 통신하지 않습니다. sshd는 의사 터미널의 마스터 측을 보유하고 슬레이브 측은 Sshd에서 생성된 프로세스(예: 쉘)에 의해 사용됩니다.

    sshd는 다음과 같이 작동합니다:

    • 네트워크를 통해 로그인 요청이 이루어지고 사용자가 인증되면 Sshd는 마스터를 보유하고 의사 터미널의 요청에 따라 프로세스(일반적으로 셸)를 생성합니다. 표준 입력, 표준 출력 및 표준 오류로 슬레이브.

    • 네트워크에서 수신된 문자는 Sshd에 의해 의사 터미널의 마스터 측에 기록됩니다. 이는 사용자가 키보드로 입력하는 것을 시뮬레이션합니다. 커널은 이 문자 스트림을 처리합니다(또는 처리하지 않습니다). 의사 터미널 슬레이브(예: 쉘)가 있는 프로세스는 마치 실제 터미널과 통신하는 것처럼 이를 수신합니다.

    • 마스터 장치와 슬레이브 장치 사이에는 운영 체제 커널이 있는데, 이는 슬레이브 장치의 상태에 따라 특정 처리를 수행할 수도 있고 특정 처리를 수행하지 않을 수도 있습니다. 바라보다라인 규율, 그리고 매뉴얼 페이지stty(1) 그리고ioctl(2) (특히터미널 또는 의사 터미널의 슬레이브 측에 적용됩니다.).

 _______             ______       ______       ______       _____       ______
(       ) bytes in  |      |     |      |     |      |     |     |     | Bash |
(Network)---------->| Sshd |---->|Master|---->|  OS  |---->|Slave|---->|  Vi  |
(       )<----------|      |<----| PTY  |<----|kernel|<----| PTY |<----| Less |
(_______) bytes out |______|     |______|     |______|     |_____|     |______|

 _______           _____      ______      ______      _____      _____      _______
<       > Events  |     |    |      |    |      |    |     |    |     |    (       )
<  GUI  >-------->|Xterm|--->|Master|--->|  OS  |--->|Slave|--->| Ssh |--->(Network)
<       ><--------|     |<---| PTY  |<---|kernel|<---| PTY |<---|     |<---(       )
<_______> Drawing |_____|    |______|    |______|    |_____|    |_____|    (_______)

답변2

이 oracle 링크의 맨 위로 이동하면 "서문"을 찾을 수 있습니다.

STREAMS 프로그래밍 가이드에서는 STREAMS를 사용하여 애플리케이션을 설계 및 구현하는 방법과 STREAMS 모듈 및 드라이버를 사용하여 다음 요구 사항을 충족하는 아키텍처를 구현하는 방법을 설명합니다.솔라리스TM 7DDI/DDK.

Solaris7은 1998년부터 2010년까지입니다. 이 oracle/solaris 링크는 여전히 잘 설명된 C 코드의 설정을 설명합니다.

fdm = open("/dev/ptmx", O_RDWR);  /* open master */
grantpt(fdm);                     /* change permission of slave */
unlockpt(fdm);                    /* unlock slave */
slavename = ptsname(fdm);         /* get name of slave */
fds = open(slavename, O_RDWR);    /* open slave */

char dev가 켜져 있는 다음 두 줄을 분리합니다.

fdm = open("/dev/ptmx", O_RDWR);    /* open master */
fds = open( slavename,  O_RDWR);    /* open slave */

대칭이 보입니다. 유일한 차이점은 다음과 같습니다.

  • 주파수 분할 다중화의 목적string "/dev/ptmx"
  • fds는 variable slavename다음과 같은 문자열을 포함합니다...?(보너스 Q))

물론 링크는 여기서 이루어집니다: slavename = ptsname(fdm). 일반 영어: 마스터 장치를 열어 반환된 fd에 속한 슬레이브 장치의 이름을 반환합니다. 아무도 그렇다고 말하지 않았어하찮은.

아니면 오타인가요? 아니요! 마스터가 보유하고 있는 "티켓"(예: fdm")에 할당한 번호/이름(/dev/pts/8, /dev/pts/17,...)을 확인하려면 ptsname()을 찾아야 합니다. 핸들") ").

그리고 man ptsname:

이것점호()함수는 슬레이브 의사 터미널 장치의 이름을 반환합니다.주인에게말하는FD로.

파일 설명자 "fd_"를 얻기 위해 의사 장치가 두 번 열리지만 처음으로 fdm "only"가 fds를 얻습니다. 그런 다음 fds를 사용하여 새 슬레이브 장치를 읽고 씁니다.

호텔 투숙객은 먼저 공용 객실에서 개인 객실 열쇠를 받으시기 바랍니다.


real physical VT그러나 사운드 지원 컬러 단말기의 최초 발명가에 대한 명확한 그림이 없었다면 나는 이 모든 것을 결코 깨닫지 못했을 것입니다.

관련 정보