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?
25
Jawaban:
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.
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
ssh
ke empat host jarak jauh yang berbeda dan menjalankansynaptic
(manajer paket grafis) pada masing-masing, dan keempat jendela muncul di layar komputer lokal saya.sumber
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
ssh
ke 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" ¹:
Dari "Manual Referensi Protokol X" ²:
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.
sumber
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:
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.
sumber
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.
sumber
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 keX
server 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.
sumber
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.
sumber