Mengapa Sistem X Window menggunakan server?

25

Saya tidak pernah benar-benar mengerti mengapa sistem jendela harus memiliki server. Mengapa lingkungan desktop, manajer tampilan dan manajer jendela memerlukan xorg-server? Apakah hanya untuk memiliki lapisan abstraksi di atas kartu grafis? Mengapa sistem jendela menggunakan model client-server? Bukankah komunikasi antar proses melalui pipa bernama lebih sederhana?

Aadit M Shah
sumber
2
Pipa yang diberi nama tidak akan lebih sederhana karena pipa hanya untuk komunikasi satu arah. Jika Anda ingin komunikasi dua arah, Anda menggunakan soket daripada pipa. Dan sebenarnya beberapa sistem baru menggunakan soket yang dinamai (domain unix) secara default daripada soket TCP. Misalnya pada Ubuntu 14.04, X dikonfigurasikan untuk tidak mendengarkan pada soket TCP secara default.
kasperd
5
Unix dan X berevolusi sebelum PC menjadi sangat kuat dan murah, dalam suatu lingkungan di mana Anda biasanya memiliki banyak terminal yang agak sederhana yang terhubung ke satu atau beberapa komputer yang lebih kuat. Divisi ini dijalankan dengan X: Anda memiliki "terminal" - komputer murah sederhana dengan kartu grafis - menjalankan hanya server-X, dan mengumpulkan input dari mouse / keyboard dan menggambar layar ... Program aktual (X- klien) di sisi lain, dijalankan pada satu atau beberapa komputer yang lebih kuat - dibagikan oleh semua pengguna menggunakan terminal. Jadi membelah X menjadi dua bagian (yang bisa berjalan terpisah), masuk akal.
Baard Kopperud
@BaardKopperud X Terminal datang bertahun-tahun setelah X Window mulai populer sehingga mereka tidak dapat menjadi alasan mengapa X Window dirancang seperti itu. X mulai dengan workstation Unix yang menjalankan lebih dari server X.
jlliagre

Jawaban:

39

Saya pikir Anda sudah memperhatikan bahwa semacam "server" diperlukan. Setiap klien (lingkungan desktop, pengelola jendela, atau program berjendela) perlu berbagi tampilan dengan yang lain, dan mereka harus dapat menampilkan hal-hal tanpa mengetahui detail perangkat keras, atau mengetahui siapa lagi yang menggunakan layar. Jadi server X11 menyediakan lapisan abstraksi dan berbagi yang Anda sebutkan, dengan menyediakan antarmuka IPC.

X11 mungkin bisa dibuat untuk melindas pipa bernama, tetapi ada dua hal besar yang tidak bisa dilakukan pipa bernama.

  • Pipa yang diberi nama hanya berkomunikasi dalam satu arah.
  • Jika dua proses mulai memasukkan data ke ujung "pengiriman" dari pipa bernama, data akan bercampur.

Bahkan, sebagian besar klien X berbicara ke server menggunakan pipa bernama "baru dan lebih baik" yang disebut soket domain-UNIX. Ini sangat mirip pipa bernama kecuali bahwa itu memungkinkan proses berbicara di kedua arah, dan itu melacak siapa yang mengatakan apa. Ini adalah hal-hal yang sama yang harus dilakukan oleh jaringan, dan oleh karenanya soket UNIX-domain menggunakan antarmuka pemrograman yang sama dengan soket TCP / IP yang menyediakan komunikasi jaringan.

Tetapi dari sana, sangat mudah untuk mengatakan "Bagaimana jika saya menjalankan server pada host yang berbeda dari klien?" Cukup gunakan soket TCP alih-alih soket UNIX, dan voila: protokol remote-desktop yang mendahului Windows RDP selama beberapa dekade. Saya bisa sshke empat host jarak jauh yang berbeda dan menjalankan synaptic(manajer paket grafis) pada masing-masing, dan keempat jendela muncul di layar komputer lokal saya.

Jander
sumber
2
X menggunakan pipa bernama pada sistem SysV di mana pipa bernama adalah dua arah, termasuk Solaris & SCO Unixes.
alanc
14

Sistem jendela tidak harus memiliki server, tetapi Anda dapat memutuskan untuk menerapkan sistem jendela berdasarkan model klien-server. Melakukannya memiliki beberapa keuntungan karena Anda dengan jelas memisahkan kegiatan di klien dan server, mereka tidak perlu berjalan di mesin yang sama dan lebih mudah untuk melayani banyak klien. Itu saat ini masih sangat berguna (misalnya ketika Anda sshke komputer lain), tetapi Anda harus menyadari bahwa pada saat X dikembangkan, itu dipandang sebagai keharusan: mesin lokal Anda mungkin tidak cukup kuat untuk menjalankan klien.

Named pipes tidak akan memberi Anda keuntungan otomatis karena dapat dijalankan melalui jaringan seperti yang dilakukan oleh implementasi TCP. Tetapi pipa bernama misalnya tidak tersedia pada DOS, dengan DosExtender menjalankan Desqview / X (1992), dan AFAIK juga tidak pada VMS. Untuk implementasi tersebut, komunikasi khusus Unix akan menjadi masalah.

TCP tidak spesifik untuk Unix dan dimungkinkan untuk menjalankan klien di bawah VAX / VMS (pengembangan X dimulai pada tahun 1984) dan melayani output ke workstation grafis berbasis UNIX lokal Anda. Dari "Sistem X Window: Referensi Lengkap ke Xlib, X Protocol, ICCCM, XLFD" ¹:

Selama musim gugur 1986, Digital memutuskan untuk mendasarkan seluruh strategi desktop workstation untuk ULTRIX, VMS, dan MS-DOS pada X. Meskipun ini memuaskan bagi kami, itu juga berarti kami memiliki lebih banyak orang untuk diajak bicara. Ini menghasilkan beberapa penundaan, tetapi pada akhirnya, itu juga menghasilkan desain yang lebih baik. Ralph Swick of Digital bergabung dengan Project Athena selama periode ini dan memainkan peran penting di seluruh pengembangan versi 11. Rilis versi 10 terakhir tersedia pada bulan Desember 1986.

Dari "Manual Referensi Protokol X" ²:

Pembagian tanggung jawab

Dalam proses merancang protokol X, banyak pemikiran masuk ke dalam pembagian kemampuan antara server dan klien, dan ini menentukan informasi apa yang harus diteruskan bolak-balik melalui permintaan, balasan, dan peristiwa. Sumber informasi yang sangat baik tentang alasan di balik pilihan-pilihan tertentu yang dibuat dalam merancang protokol adalah artikel The X Window System, oleh Robert W. Scheifler dan Jim Gettys, yang diterbitkan dalam jurnal Association of Computing Machinery Transaction on Graphics, Vol 5, No. 2, April 1986 Keputusan yang akhirnya dicapai didasarkan pada portabilitas program klien, kemudahan pemrograman klien, dan kinerja.

Pertama, server dirancang, sebanyak mungkin, untuk menyembunyikan perbedaan dalam perangkat keras yang mendasarinya dari aplikasi klien. ...

Saya ingat artikel di TOG menjadi bacaan yang menarik. Hal itu tentu saja memicu minat saya pada X dan (ini sebelum WorldWideWeb) kesulitan yang kami hadapi pada informasi lebih lanjut sampai O'Reilly mulai menerbitkan buku seri X mereka.

¹ X Versi 11, Rilis 4, halaman 2-X, PDF tersedia online di sini
² Ini dari halaman 9 di edisi ke-2, diterbitkan oleh O'Reilly, yang saya beli pada tahun 1990. Ada edisi yang lebih baru tetapi saya tidak pernah repot-repot membeli ini dan mereka AFAIK hanya tersedia di kertas juga. Saya tidak berpikir mereka mengubah alasan pembagian tanggung jawab.

Anthon
sumber
2
Kami juga menggunakan terminal X khusus yang tanpa disk, didinginkan secara pasif dan segera diganti, yang semuanya bagus jika Anda membutuhkan 100 kursi.
Simon Richter
7

Sistem windowing berarti bahwa beberapa program independen berbagi sumber daya bersama, layar dan perangkat input. Sumber daya bersama hanya dapat diimplementasikan dengan aman dalam dua cara:

  • Sumber daya dapat dikontrol oleh kernel, dan aplikasi membuat panggilan kernel untuk mengaksesnya.
  • Sumber daya dapat dikendalikan oleh proses khusus (server), dan aplikasi menghubungi server untuk mengaksesnya.

Tentu saja, akses ke perangkat keras layar sebenarnya dikendalikan oleh kernel, tetapi itu tidak cukup untuk sistem windowing: Harus ada cara bagi proses untuk mendapatkan bagian tertentu dari tampilan (jendela) di mana ia dapat secara wajar yakin bahwa tidak ada proses lain yang akan mengganggu, dan harus ada tingkat perlindungan tertentu dari aplikasi apa yang dapat mengakses bagian sumber daya mana pada saat itu.

Sekarang semuanya bisa masuk ke kernel, yaitu AFAIK apa yang Windows lakukan. Ini memiliki keuntungan karena lebih cepat (biasanya memanggil kernel jauh lebih cepat daripada menghubungi proses lain), namun memiliki kelemahan karena kemungkinan membuka celah keamanan (setiap eksploitasi sistem adalah eksploitasi pada level kernel), dan pada saat yang sama waktu membatasi portabilitas (sistem yang diimplementasikan dalam kernel sangat digabungkan ke kernel; Anda tidak akan dapat dengan mudah porting ke sistem operasi lain, dan benar-benar tidak dapat melakukan jika Anda tidak memiliki akses ke kode kernel).

Jika Anda tidak ingin mengimplementasikannya di kernel, satu-satunya cara lain untuk mengimplementasikannya adalah sebagai proses khusus, yaitu server. Perhatikan bahwa server yang dihubungi melalui pipa bernama masih merupakan server. Juga, ketika berjalan pada mesin yang sama, banyak komunikasi antara X server dan klien terjadi melalui memori bersama hari ini; itu masih tidak mengubah fakta bahwa server tampilan adalah server.

Sekarang, mengapa server dihubungi menggunakan soket, dan tidak menggunakan pipa bernama? Nah, jika Anda melakukannya menggunakan soket, Anda hanya perlu memiliki satu soket untuk seluruh server, yang dapat melakukan semua komunikasi. Jika Anda berkomunikasi dengan pipa, Anda memerlukan dua pipa per klien. Terlepas dari kenyataan bahwa mengelola semua pipa itu akan cukup rumit, Anda mungkin juga mencapai beberapa batasan sistem operasi pada jumlah pipa terbuka jika cukup banyak program mencoba untuk berbicara dengan server pada saat yang sama.

Dan tentu saja keuntungan lain dari soket di atas pipa adalah bahwa dengan soket Anda dapat memiliki koneksi di seluruh mesin, yang sangat penting pada saat komputer yang sebenarnya digunakan bersama oleh banyak orang yang duduk di terminal khusus, sehingga program di komputer harus berkomunikasi ke terminal yang berbeda, tetapi masih sangat berguna bahkan hingga hari ini di lingkungan jaringan.

celtschk
sumber
Asumsi MS Windows Anda sebagian benar - beberapa struktur yang diperlukan untuk sistem windowing adalah semacam- di-kernel - tetapi rumit. Apa yang mungkin mengejutkan Anda tentang Windows adalah bahwa sebagian besar dari apa yang kami asosiasikan dengannya benar-benar spesifik untuk subsistem mode pengguna tunggal - subsistem Win32 - sesuatu seperti vm. Kernel itu sendiri - dan modul Eksekutifnya - terpisah dari semua itu. Pemisahan itulah yang memungkinkan subsistem POSIX terpisah untuk beroperasi di atas kernel NT. Lihatlah
mikeserv
1
Walaupun saya memang tidak tahu tentang desain spesifik itu, melihat gambar di artikel yang ditautkan, saya melihat sebuah kotak di ruang kernel yang berisi istilah "window manager". Karena dekorasi jendela sebenarnya diambil oleh program individual (jadi tidak ada yang seperti manajer jendela X11), saya hanya dapat menyimpulkan bahwa ini adalah komponen yang pada dasarnya melakukan hal yang sama seperti yang dilakukan oleh server tampilan X11. Bagian-bagian Win32 kemungkinan merupakan kombinasi dari fungsi manajer jendela X11 (yang bukan bagian dari server X11!) Dan toolkit X11 (dalam konteks klien juga dalam X).
celtschk
Ya - itulah yang saya maksud dengan mengurutkan / sebagian - itu adalah lapisan layanan eksekutif - ini seperti gado-gado layanan yang berjalan dalam mode kernel tetapi merupakan modul terpisah dalam dan dari diri mereka sendiri. Saya kira itu kernel - dengan cara yang sama driver kernel linux tidak perlu dikompilasi tetapi dapat dimuat / dibongkar secara modular. Ini lebih aneh dengan Windows karena semuanya tersembunyi. Bagaimanapun, saya selalu berpikir itu menarik - tetapi saya bukan ahli . Jawaban Anda hanya mengingatkan saya akan hal itu.
mikeserv
2

X pada awalnya, dikembangkan dan dikelola oleh MIT Dan, itu dengan lisensi MIT sumber terbuka, bukan itu, yang benar-benar penting.

Sementara dipandang sebagai tidak inovatif, pertimbangkan sejenak; bagaimana Anda akan menjelaskan pilihan untuk menggunakan paradigma client-server dalam perangkat lunak? Dan, mungkin saya harus mengatakan kepada CEO ..

Inilah cara saya belajar menghargai pilihan di perguruan tinggi. Dalam client-server, server mengelola sumber daya, dan terutama , sumber daya yang harus dilakukan bersama . Jadi, server X adalah proses yang berfungsi, untuk aplikasi klien , keyboard, mouse, dan framebuffer (atau, bagaimanapun Anda menulis ke layar pada sistem Anda).

Meskipun tidak benar, manajer jendela sering dijelaskan seperti ini: Sederhana saja, hal itu, yang meletakkan pegangan, dan dekorasi lainnya pada bingkai aplikasi, dan jendela, dialog, dll.

Dan LaBell
sumber
0

Model client-server adalah desain yang populer untuk semua jenis aplikasi, bahkan ketika hanya ada satu server dan hanya satu klien. Mereka memungkinkan antarmuka yang bersih dan terdefinisi dengan baik antara domain tanggung jawab.

Meskipun ada banyak cara yang dapat dilakukan oleh server dan klien, pilihan yang dibuat oleh X(terlepas dari kelebihan yang disebutkan oleh orang lain) tidak berlebihan: Anda dapat terhubung ke Xserver pada mesin yang berbeda dan membuka jendela di desktop Anda (atau bekerja sama dengan yang lain) Desktop). Ini dulunya sangat umum pada hari-hari ketika X dikembangkan, ketika banyak Universitas dan bisnis akan memiliki server Unix dan banyak "terminal X" yang berbicara dengannya. Dengan menggunakan protokol komunikasi siap-internet, X dapat digunakan secara mulus di dalam atau di seluruh host.

X adalah lingkungan GUI pertama yang secara transparan dapat menampilkan jendela dari komputer lain, konsisten dengan sejarah UNIX sebagai lingkungan multi-pengguna daripada OS untuk satu pengguna pada satu komputer. Banyak fitur UNIX tampak seperti berlebihan jika Anda satu-satunya orang yang pernah berinteraksi (secara fisik atau jarak jauh) dengan komputer Anda.

alexis
sumber
-1

Saya percaya x-server dirancang sebagai arsitektur client-server karena sumber daya komputasi awalnya langka dan mainframe melakukan sebagian besar pengangkatan berat. Terminal-X hanyalah klien tipis yang terhubung ke server-x dan menampilkan apa pun yang perlu ditampilkan kepada pengguna.

Itu memang memiliki banyak manfaat (meskipun protokol komunikasi untuk X sangat berat saat ini), terutama Anda dapat menampilkan tampilan yang sama pada banyak klien, berbagi layar dengan banyak pengguna mudah di X.

Karney Li
sumber
Terminal X datang bertahun-tahun setelah X Window mulai populer sehingga mereka tidak bisa menjadi alasan mengapa X Window dirancang seperti itu. Poin lain: Terminal X tidak terhubung ke server X, mereka menjalankan server X.
jlliagre