Làm thế nào để một thiết bị đầu cuối Linux hoạt động?


32

Nếu bạn kích hoạt một thiết bị đầu cuối và gọi một thực thi (giả sử một dòng được định hướng cho đơn giản), bạn sẽ nhận được phản hồi cho lệnh từ tệp thực thi. Làm thế nào để điều này được in cho bạn (người dùng)? Liệu các thiết bị đầu cuối làm một cái gì đó như thế pexpectnào? (cuộc thăm dò chờ đầu ra) hay gì? Làm thế nào để nó được thông báo về đầu ra sẽ được in ra? Và làm thế nào để một thiết bị đầu cuối bắt đầu một chương trình? (Đây có phải là thứ gì đó giống với os.fork của python không Tôi đang xem nguồn gốc của konsole (kde) và yakuake (có thể sử dụng konsole) và tôi không thể biết được điều đó xảy ra ở đâu.


6
Hãy xem một trình giả lập thiết bị đầu cuối đơn giảnmột hệ điều hành đồ chơi đơn giản với lớp vỏ đơn giản (và mười lăm trang đầu tiên của cuốn sách). Ngoài ra, đọc câu trả lời này cho một câu hỏi liên quan.

2
Liên kết này cũng xen kẽ với chủ đề thiết bị đầu cuối và lịch sử tty: linusakesson.net/programming/tty/index.php

@nwildner ngầu,
mike

Câu trả lời:


30

Ban đầu bạn chỉ có các thiết bị đầu cuối câm - lúc đầu thực sự là máy đánh chữ (tương tự như máy đánh chữ điện, nhưng với một cuộn giấy) (do đó / dev / tty - TeleTYpers), nhưng sau đó là màn hình + tổ hợp bàn phím - chỉ gửi mã khóa đến máy tính và máy tính đã gửi lại một lệnh viết chữ cái trên thiết bị đầu cuối (tức là thiết bị đầu cuối không có tiếng vang cục bộ, máy tính phải ra lệnh cho thiết bị đầu cuối viết những gì người dùng gõ vào thiết bị đầu cuối) - đây là một trong những lý do Tại sao nhiều lệnh Unix quan trọng lại quá ngắn. Hầu hết các thiết bị đầu cuối được kết nối bằng các đường nối tiếp, nhưng (ít nhất) một thiết bị được kết nối trực tiếp với máy tính (thường là cùng một phòng) - đây là bàn điều khiển. Chỉ một số người dùng được chọn được tin cậy để làm việc trên "bảng điều khiển" (đây thường là "thiết bị đầu cuối" duy nhất có sẵn trong chế độ một người dùng).

Sau đó, cũng có một số thiết bị đầu cuối đồ họa (được gọi là "xterminals", không bị nhầm lẫn với xtermchương trình) với màn hình & card màn hình đồ họa, bàn phím, chuột và bộ xử lý đơn giản; mà chỉ có thể chạy một máy chủ X. Họ không tự mình thực hiện bất kỳ tính toán nào, vì vậy các máy khách X chạy trên máy tính mà họ được kết nối. Một số đã có ổ cứng, nhưng chúng cũng có thể khởi động qua mạng. Chúng rất phổ biến vào đầu những năm 1990, trước khi PC trở nên rẻ và mạnh mẽ.

Một "trình giả lập thiết bị đầu cuối" - "cửa sổ đầu cuối" mà bạn mở bằng các chương trình như xtermhoặc konsole- cố gắng bắt chước chức năng của các thiết bị đầu cuối câm đó. Ngoài ra các chương trình như PuTTY(Windows) mô phỏng các thiết bị đầu cuối.

Với PC, trong đó "bàn điều khiển" (bàn phím + màn hình) và "máy tính" chỉ là một đơn vị, bạn có "thiết bị đầu cuối ảo" (trên Linux, các phím Alt + F1 đến Alt + F6), nhưng các phím này cũng vậy bắt chước thiết bị đầu cuối kiểu cũ. Tất nhiên, với việc Unix / Linux trở thành một hệ điều hành máy tính để bàn thường được sử dụng bởi người dùng singe, giờ đây bạn thực hiện hầu hết công việc của mình "tại bàn điều khiển", nơi người dùng trước khi sử dụng các thiết bị đầu cuối được kết nối bởi các đường nối tiếp.


Tất nhiên đó là cái vỏ bắt đầu các chương trình. Và nó sử dụng fork-systemcall (ngôn ngữ C) để tạo một bản sao của chính nó với cài đặt môi trường, sau đó exec-systemcall được sử dụng để biến bản sao này thành lệnh bạn muốn chạy. Shell tạm ngưng (trừ khi lệnh được chạy trong nền) cho đến khi lệnh hoàn thành. Khi lệnh kế thừa các cài đặt cho stdin, stdout và stderr từ shell, lệnh sẽ ghi vào màn hình của terminal và nhận đầu vào từ bàn phím của terminal.


Và ở giữa các thiết bị đầu cuối nối tiếp câm và Xterms có en.wikipedia.org/wiki/Blit_(computer_terminal)
sendmoreinfo

31

Khi bạn mở một thiết bị đầu cuối, bạn đang bắt đầu một chương trình giả lập thiết bị đầu cuối, chẳng hạn như xterm, gnome-terminal, lxterm, konsole, lỗi

Một trong những điều đầu tiên trình giả lập thiết bị đầu cuối thực hiện là phân bổ một thiết bị đầu cuối giả (thường được gọi là giả, hoặc viết tắt là pty). Pty là một cặp tệp thiết bị ký tự : pty master, là phía mà trình giả lập thiết bị đầu cuối mở và nô lệ pty, là phía mà các chương trình chạy bên trong thiết bị đầu cuối mở. Trên hầu hết các đơn vị hiện đại, chủ là /dev/ptmx(mà mọi trình giả lập thiết bị đầu cuối đều mở) và nô lệ là /dev/pts/NUMBER. Trình điều khiển hạt nhân cho các thiết bị đầu cuối giả theo dõi quá trình nào điều khiển chính cho từng thiết bị nô lệ. Trình giả lập thiết bị đầu cuối có thể truy xuất đường dẫn đến nô lệ tương ứng thông qua một ioctl trên thiết bị chính.

Khi trình giả lập thiết bị đầu cuối đã mở thiết bị chính, nó sẽ khởi động một quy trình con (thường là trình bao, nhưng tùy thuộc vào người dùng đã gọi trình giả lập thiết bị đầu cuối để quyết định). Trình giả lập thực hiện điều này theo cách thông thường để gọi một chương trình:

  • ngã ba một quá trình con,
  • mở thiết bị pty nô lệ trên các mô tả tệp 0, 1 và 2 (đầu vào tiêu chuẩn, đầu ra tiêu chuẩn và luồng lỗi),
  • thực hiện shell hoặc chương trình khác trong tiến trình con.

Khi đứa trẻ (hoặc bất kỳ quá trình nào khác) ghi vào nô lệ pty, trình giả lập sẽ thấy đầu vào trên pty master.

Ngược lại, khi trình giả lập ghi vào thiết bị chính, nó được xem như là đầu vào trên Slave.

Mong đợi hoạt động chính xác theo cùng một cách. Sự khác biệt giữa Expect và trình giả lập thiết bị đầu cuối như xterm là nơi chúng nhận đầu vào mà chúng cung cấp cho chương trình (script so với đầu vào bàn phím) và những gì chúng làm với đầu ra (tệp nhật ký hoặc trình phân tích cú pháp so với vẽ văn bản trong cửa sổ).


Một trong những ví dụ đơn giản về những gì được mô tả ở đây là việc triển khai scriptlệnh của BusyBox , trong đó xgetptychức năng là cốt lõi của công việc /dev/ptmx.
Ruslan

@Tim Tôi đánh giá cao tiếng Anh không phải là ngôn ngữ mẹ đẻ của bạn. Nhưng nếu bạn chỉnh sửa một bài đăng, thì hãy chắc chắn rằng bạn không làm sai. Nếu bạn không hiểu nó, đừng chỉnh sửa. Ngoài ra, một lần nữa, xin vui lòng không sử dụng đậm để làm nổi bật những thứ không cần làm nổi bật.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.