Tại sao Hệ thống X Window sử dụng máy chủ?


25

Tôi không bao giờ thực sự hiểu tại sao một hệ thống cửa sổ phải có một máy chủ. Tại sao môi trường máy tính để bàn, trình quản lý hiển thị và trình quản lý cửa sổ cần xorg-server? Có phải chỉ có một lớp trừu tượng trên đỉnh của card đồ họa? Tại sao các hệ thống cửa sổ sử dụng mô hình máy khách-máy chủ? Sẽ không liên lạc giữa các quá trình thông qua các đường ống được đặt tên sẽ đơn giản hơn?


2
Các đường ống được đặt tên sẽ không đơn giản hơn vì các đường ống chỉ dành cho giao tiếp một chiều. Nếu bạn muốn giao tiếp hai chiều, bạn sử dụng ổ cắm chứ không phải đường ống. Và thực tế một số hệ thống mới hơn sử dụng các socket (tên miền unix) theo mặc định thay vì các socket TCP. Ví dụ: trên Ubuntu 14.04, X được cấu hình để không nghe trên ổ cắm TCP theo mặc định.
kasperd

5
Unix và X đã phát triển trước khi PC trở nên mạnh mẽ và rẻ tiền, trong một trường hợp mà bạn thường có rất nhiều thiết bị đầu cuối khá đơn giản được kết nối với một hoặc một vài máy tính mạnh mẽ hơn. Bộ phận này được thực hiện với X: Bạn có "thiết bị đầu cuối" - máy tính giá rẻ đơn giản có card đồ họa - chỉ chạy máy chủ X và thu thập dữ liệu đầu vào từ chuột / bàn phím và vẽ màn hình ... Các chương trình thực tế (X- mặt khác, các máy khách) chạy trên một hoặc một vài máy tính mạnh mẽ hơn - được chia sẻ bởi tất cả người dùng sử dụng thiết bị đầu cuối. Vì vậy, chia X thành hai phần (có thể chạy tách biệt), có ý nghĩa.
Baard Kopperud

@BaardKopperud Thiết bị đầu cuối X xuất hiện nhiều năm sau khi Cửa sổ X bắt đầu phổ biến vì vậy chúng không thể là lý do tại sao X Window được kiến ​​trúc theo cách đó. X bắt đầu với các máy trạm Unix đang chạy nhiều hơn máy chủ X.
jlliagre

Câu trả lời:


39

Tôi nghĩ rằng bạn đã nhận thấy rằng một số loại "máy chủ" là cần thiết. Mỗi khách hàng (môi trường máy tính để bàn, trình quản lý cửa sổ hoặc chương trình cửa sổ) cần chia sẻ màn hình với tất cả những người khác và họ cần có thể hiển thị mọi thứ mà không cần biết chi tiết về phần cứng hoặc biết ai khác đang sử dụng màn hình. Vì vậy, máy chủ X11 cung cấp lớp trừu tượng và chia sẻ mà bạn đã đề cập, bằng cách cung cấp giao diện IPC.

X11 có thể được chế tạo để chạy trên các đường ống có tên, nhưng có hai điều lớn mà đường ống có tên không thể làm được.

  • Đặt tên ống chỉ giao tiếp theo một hướng.
  • Nếu hai quy trình bắt đầu đưa dữ liệu vào đầu "gửi" của một ống có tên, dữ liệu sẽ được xen kẽ.

Trên thực tế, hầu hết các máy khách X nói chuyện với máy chủ bằng cách sử dụng một đường dẫn có tên "mới và được cải tiến" được gọi là ổ cắm tên miền UNIX. Nó rất giống một đường ống có tên ngoại trừ việc nó cho phép các quá trình nói theo cả hai hướng và nó theo dõi xem ai đã nói gì. Đây là những loại tương tự mà mạng phải thực hiện và do đó, các socket miền UNIX sử dụng giao diện lập trình giống như các socket TCP / IP cung cấp liên lạc mạng.

Nhưng từ đó, thật dễ dàng để nói "Điều gì sẽ xảy ra nếu tôi chạy máy chủ trên một máy chủ khác với máy khách?" Chỉ cần sử dụng ổ cắm TCP thay vì ổ cắm UNIX và voila: giao thức máy tính để bàn từ xa có trước RDP của Windows hàng thập kỷ. Tôi có thể sshchạy bốn máy chủ từ xa khác nhau và chạy synaptic(trình quản lý gói đồ họa) trên mỗi máy chủ và tất cả bốn cửa sổ xuất hiện trên màn hình máy tính cục bộ của tôi.


2
X đã sử dụng đường ống có tên trên các hệ thống SysV trong đó các đường ống được đặt tên là hai chiều, bao gồm cả Solaris & SCO Unixes.
alanc

14

Một hệ thống cửa sổ không cần phải có máy chủ, nhưng bạn có thể quyết định triển khai hệ thống cửa sổ dựa trên mô hình máy khách-máy chủ. Làm như vậy có một số lợi thế khi bạn phân tách rõ ràng các hoạt động trong máy khách và máy chủ, chúng không cần phải chạy trên cùng một máy và việc phục vụ nhiều máy khách sẽ dễ dàng hơn. Điều đó hiện vẫn rất tiện dụng (ví dụ như khi bạn sshvào một máy khác), nhưng bạn phải nhận ra rằng tại thời điểm X được phát triển, điều đó được coi là một điều cần thiết: máy cục bộ của bạn có thể không đủ mạnh để chạy máy khách.

Các đường ống được đặt tên sẽ không cung cấp cho bạn lợi thế tự động để có thể chạy qua mạng như việc triển khai TCP sẽ làm. Nhưng các ống được đặt tên là ví dụ không có sẵn trên DOS, với DosExtender chạy Desqview / X (1992) và AFAIK cũng không có trên VMS. Đối với những triển khai đó, một giao tiếp cụ thể của Unix sẽ là một vấn đề.

TCP không phải là Unix cụ thể và có thể có một máy khách chạy theo VAX / VMS (phát triển X bắt đầu vào năm 1984) và phục vụ đầu ra cho máy trạm đồ họa dựa trên UNIX cục bộ của bạn. Từ "Hệ thống cửa sổ X: Tham chiếu đầy đủ đến Xlib, Giao thức X, ICCCM, XLFD":

Vào mùa thu năm 1986, Digital đã quyết định dựa trên toàn bộ chiến lược máy trạm để bàn của mình cho ULTRIX, VMS và MS-DOS trên X. Mặc dù điều này rất hài lòng với chúng tôi, nhưng điều đó cũng có nghĩa là chúng tôi thậm chí còn có nhiều người để nói chuyện hơn. Điều này dẫn đến một số chậm trễ, nhưng, cuối cùng, nó cũng dẫn đến một thiết kế tốt hơn. Ralph Swick của Digital đã tham gia Project Athena trong giai đoạn này và đóng vai trò quan trọng trong quá trình phát triển phiên bản 11. Bản phát hành cuối cùng 10 được phát hành vào tháng 12 năm 1986.

Từ "Hướng dẫn tham khảo giao thức X" ²:

Phân chia trách nhiệm

Trong quá trình thiết kế giao thức X, nhiều người đã nghĩ đến việc phân chia khả năng giữa máy chủ và máy khách, điều này xác định thông tin nào phải được truyền qua lại thông qua các yêu cầu, trả lời và sự kiện. Một nguồn thông tin tuyệt vời về cơ sở lý luận đằng sau những lựa chọn nhất định trong việc thiết kế giao thức là bài viết Hệ thống X Window, của Robert W. Scheifler và Jim Gettys, được xuất bản trên Tạp chí Hiệp hội Máy tính Giao dịch trên Đồ họa, Tập 5, Số. Ngày 2 tháng 4 năm 1986 Các quyết định cuối cùng đạt được dựa trên tính di động của các chương trình khách hàng, dễ lập trình khách hàng và hiệu suất.

Đầu tiên, máy chủ được thiết kế, càng nhiều càng tốt, để che giấu sự khác biệt trong phần cứng cơ bản khỏi các ứng dụng khách. ...

Tôi nhớ bài viết trong TOG là một bài đọc thú vị. Nó chắc chắn đã kích thích sự quan tâm của tôi đối với X và (trước đây là WorldWideWeb), chúng tôi gặp khó khăn trong việc tìm hiểu thêm thông tin cho đến khi O'Reilly bắt đầu xuất bản các cuốn sách X của họ.

¹ X phiên bản 11, Release 4, trang 2-X, PDF có sẵn trực tuyến ở đây
² Đây là từ trang 9 trong ấn bản lần thứ 2, xuất bản bởi O'Reilly, mà tôi đã mua năm 1990. Hiện có phiên bản mới hơn nhưng tôi không bao giờ làm phiền để mua những cái này và chúng là AFAIK chỉ có sẵn trên giấy. Tôi không nghĩ họ đã thay đổi lý do phân chia trách nhiệm.


2
Chúng tôi cũng đã sử dụng các thiết bị đầu cuối X chuyên dụng không đĩa, làm mát thụ động và có thể thay thế ngay lập tức, tất cả đều tuyệt vời nếu bạn cần 100 chỗ ngồi.
Simon Richter

7

Một hệ thống cửa sổ có nghĩa là một số chương trình độc lập chia sẻ một tài nguyên chung, màn hình và các thiết bị đầu vào. Tài nguyên được chia sẻ chỉ có thể được thực hiện một cách an toàn theo hai cách:

  • Tài nguyên có thể được kiểm soát bởi kernel và các ứng dụng thực hiện các cuộc gọi kernel để truy cập nó.
  • Tài nguyên có thể được kiểm soát bởi một quy trình chuyên dụng (máy chủ) và các ứng dụng liên hệ với máy chủ để truy cập nó.

Tất nhiên, quyền truy cập vào phần cứng màn hình thực tế được điều khiển bởi kernel, nhưng điều đó không đủ cho hệ thống cửa sổ: Phải có một cách để một quy trình được gán một phần nhất định của màn hình (cửa sổ) trong đó có thể hợp lý chắc chắn rằng không có quá trình nào khác sẽ can thiệp và phải có một mức độ bảo vệ nhất định về ứng dụng nào có thể truy cập vào phần nào của nguồn tài nguyên tại thời điểm đó.

Bây giờ toàn bộ điều có thể đã đi vào kernel, đó là AFAIK những gì Windows làm. Điều này có ưu điểm là nhanh hơn (thường gọi kernel nhanh hơn nhiều so với liên hệ với quá trình khác), tuy nhiên nó có nhược điểm là có thể mở các lỗ hổng bảo mật (bất kỳ khai thác nào của hệ thống đều là khai thác ở cấp kernel), và cũng vậy thời gian hạn chế tính di động (một hệ thống được triển khai trong kernel được kết hợp chặt chẽ với kernel; bạn sẽ không thể dễ dàng chuyển nó sang hệ điều hành khác và hoàn toàn không thể thực hiện nếu bạn không có quyền truy cập vào mã kernel).

Nếu bạn không muốn triển khai nó trong kernel, cách duy nhất khác để thực hiện nó là một quy trình chuyên dụng, đó là một máy chủ. Lưu ý rằng một máy chủ được liên lạc qua các ống có tên vẫn là một máy chủ. Ngoài ra, khi chạy trên cùng một máy, rất nhiều giao tiếp giữa máy chủ X và máy khách xảy ra thông qua bộ nhớ dùng chung trong những ngày này; điều đó vẫn không thay đổi thực tế rằng máy chủ hiển thị là một máy chủ.

Bây giờ, tại sao máy chủ được liên lạc bằng cách sử dụng ổ cắm và không sử dụng đường ống có tên? Vâng, nếu bạn làm điều đó bằng cách sử dụng các socket, bạn chỉ cần có một socket cho toàn bộ máy chủ, có thể thực hiện tất cả các giao tiếp. Nếu bạn giao tiếp với đường ống, bạn cần hai đường ống cho mỗi khách hàng. Ngoài việc quản lý tất cả các đường ống đó sẽ khá cồng kềnh, bạn cũng có thể đạt một số giới hạn hệ điều hành về số lượng ống mở nếu đủ nhiều chương trình cố gắng nói chuyện với máy chủ cùng một lúc.

Và tất nhiên, một ưu điểm khác của ổ cắm trên đường ống là với ổ cắm, bạn có thể có kết nối giữa các máy, điều này đặc biệt quan trọng tại thời điểm máy tính thực tế được chia sẻ bởi nhiều người ngồi trên thiết bị đầu cuối chuyên dụng, vì vậy các chương trình trên máy tính phải giao tiếp đến các thiết bị đầu cuối khác nhau, nhưng nó vẫn rất hữu ích ngay cả ngày nay trong môi trường mạng.


Giả định MS Windows của bạn là một phần đúng - một số cấu trúc cần thiết cho hệ thống cửa sổ là loại trong nhân - nhưng nó phức tạp. Điều có thể làm bạn ngạc nhiên về Windows là phần lớn những gì chúng tôi liên kết với nó thực sự cụ thể đối với một hệ thống con chế độ người dùng duy nhất - hệ thống con Win32 - một cái gì đó giống như một vm. Hạt nhân - và các mô-đun điều hành cấu thành của nó - nằm ngoài tất cả những điều đó. Đó là sự phân tách cho phép một hệ thống con POSIX riêng hoạt động trên đỉnh NT. Hãy xem thử
mikeerv

1
Trong khi tôi thực sự không biết về thiết kế cụ thể đó, nhìn vào hình ảnh trong bài viết được liên kết, tôi thấy một hộp trong không gian kernel chứa thuật ngữ "trình quản lý cửa sổ". Vì các trang trí cửa sổ thực tế được vẽ bởi các chương trình riêng lẻ (vì vậy không có gì giống như trình quản lý cửa sổ X11), tôi chỉ có thể kết luận rằng đây là thành phần về cơ bản giống như máy chủ hiển thị X11. Các bộ phận Win32 có thể là sự kết hợp các chức năng của các trình quản lý cửa sổ X11 ( không phải là một phần của máy chủ X11!) Và các bộ công cụ X11 (trong ngữ cảnh máy khách cũng trong X).
celtschk

Vâng - đó là những gì tôi muốn nói bằng cách sắp xếp / một số - đó là lớp dịch vụ điều hành - nó giống như một loạt các dịch vụ chạy trong chế độ kernel nhưng lại là các mô-đun riêng biệt. Tôi đoán đó là kernel - theo cách tương tự trình điều khiển kernel linux không cần được biên dịch nhưng có thể được tải / dỡ theo mô-đun. Nó chỉ lạ hơn với Windows bởi vì tất cả đều nằm trong kết thúc tốt đẹp. Dù sao, tôi luôn nghĩ nó thật thú vị - nhưng tôi không phảichuyên gia . Câu trả lời của bạn chỉ khiến tôi nhớ về nó.
mikeerv

2

X ban đầu, được phát triển và duy trì bởi MIT Và, đó là với giấy phép MIT nguồn mở, thực sự không phải vậy.

Trong khi được xem là không chủ ý, hãy xem xét một lúc; Làm thế nào bạn sẽ giải thích một lựa chọn để sử dụng mô hình máy khách-máy chủ trong một phần mềm? Và, có lẽ tôi nên nói với một CEO ..

Đây là cách tôi học để đánh giá cao sự lựa chọn ở trường đại học. Trong máy khách-máy chủ, máy chủ quản lý tài nguyên và đặc biệt là mọi tài nguyên phải được chia sẻ . Vì vậy, máy chủ X là quá trình phục vụ cho các ứng dụng khách , bàn phím, chuột và bộ đệm khung (hoặc, tuy nhiên bạn ghi vào màn hình trên hệ thống của bạn).

Mặc dù không thực sự chính xác, trình quản lý cửa sổ thường được giải thích như sau: Đơn giản là, điều đó, đặt tay cầm và các trang trí khác trên khung của ứng dụng và cửa sổ, hộp thoại, v.v.


0

Các mô hình máy khách-máy chủ là một thiết kế phổ biến cho tất cả các loại ứng dụng, ngay cả khi chỉ có một máy chủ và chỉ một máy khách. Chúng cho phép một giao diện rõ ràng, được xác định rõ ràng giữa các lĩnh vực trách nhiệm.

Mặc dù có nhiều cách mà máy chủ và máy khách có thể giao tiếp, sự lựa chọn được đưa ra X(bất kể lợi thế được đề cập bởi người khác) không phải là thừa: Bạn có thể kết nối với Xmáy chủ trên một máy khác và mở các cửa sổ trên máy tính để bàn của bạn (hoặc trên một hợp tác khác máy tính để bàn). Điều này từng rất phổ biến vào thời mà X được phát triển, khi nhiều trường Đại học và doanh nghiệp sẽ có một máy chủ Unix và nhiều "thiết bị đầu cuối X" đã nói chuyện với nó. Bằng cách sử dụng giao thức liên lạc có sẵn trên internet, X có thể được sử dụng liền mạch trong hoặc trên các máy chủ.

X là môi trường GUI đầu tiên có thể hiển thị trong suốt các cửa sổ từ một máy khác, phù hợp với lịch sử của UNIX là môi trường nhiều người dùng thay vì HĐH cho một người dùng trên một máy tính. Rất nhiều tính năng UNIX có vẻ như quá mức nếu bạn là người duy nhất từng tương tác (vật lý hoặc từ xa) với máy tính của bạn.


-1

Tôi tin rằng máy chủ x được thiết kế theo kiến ​​trúc máy khách-máy chủ vì tài nguyên máy tính ban đầu rất khan hiếm và các máy tính lớn đã thực hiện hầu hết các công việc nặng nhọc. Thiết bị đầu cuối X chỉ là các máy khách mỏng được kết nối với máy chủ x và hiển thị bất cứ thứ gì cần thiết để hiển thị cho người dùng.

Nó có rất nhiều lợi ích (mặc dù giao thức truyền thông cho X rất nặng hiện nay), đáng chú ý là bạn có thể hiển thị cùng một màn hình trên nhiều máy khách, chia sẻ màn hình với nhiều người dùng rất dễ dàng trong X.


Thiết bị đầu cuối X xuất hiện nhiều năm sau khi Cửa sổ X bắt đầu phổ biến vì vậy chúng không thể là lý do tại sao X Window được kiến ​​trúc theo cách đó. Một điểm khác: Thiết bị đầu cuối X không kết nối với máy chủ X, họ đang chạy máy chủ X.
jlliagre
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.