”Ruang pengguna” mengacu pada lingkungan runtime proses normal (sebagai lawan dari kernel). Ini tidak selalu berarti proses-proses ini benar-benar dimulai oleh pengguna karena sistem standar biasanya memiliki beberapa proses ”daemon” (atau latar belakang) yang berjalan sebelum pengguna bahkan membuka sesi. Proses daemon juga dianggap sebagai proses ruang pengguna.
Ketika kernel berhasil melewati tahap inisialisasi, ia memulai proses pertama, init
. Proses #1 sendiri sangat jarang berguna sendirian, dan sistem mirip Unix berjalan dengan banyak proses tambahan.
Pertama-tama, proses dapat mengklon dirinya sendiri (dikenal sebagai sebuah fork). Kernel mengalokasikan ruang memori proses yang baru (tapi identik), dan proses lain yang menggunakannya. Saat ini, satu-satunya perbedaan antara dua proses ini adalah pid mereka. Proses baru biasanya disebut proses anak, dan proses asli yang pid-nya tidak berubah, disebut proses induk.
Kadang-kadang, proses anak terus menjalani hidupnya sendiri secara mandiri dari induknya, dengan data sendiri yang disalin dari proses induk. Dalam banyak kasus, proses anak ini menjalankan program lain. Dengan beberapa pengecualian, memorinya hanya digantikan oleh program baru, dan eksekusi program baru ini dimulai. Ini adalah mekanisme yang digunakan oleh proses init (dengan proses nomor 1) untuk memulai layanan tambahan dan menjalankan seluruh urutan startup. Pada titik tertentu, satu proses di antara anak-anak
init
memulai antarmuka grafis bagi pengguna untuk masuk (urutan kejadian yang sebenarnya dijelaskan lebih detail di
Bagian 9.1, “Boot Sistem”).
Ketika sebuah proses menyelesaikan tugas yang dimulai, itu berakhir. Kernel kemudian memulihkan memori yang ditugaskan untuk proses ini, dan berhenti memberikannya irisan waktu berjalan. Proses induk diberitahu tentang proses anaknya yang dihentikan, yang memungkinkan proses untuk menunggu penyelesaian tugas yang didelegasikan kepada proses anak. Perilaku ini terlihat jelas dalam penerjemah baris perintah (dikenal sebagai shells). Ketika sebuah perintah diketik ke dalam shell, prompt hanya akan kembali ketika eksekusi perintah selesai. Kebanyakan shell memungkinkan untuk menjalankan perintah di latar belakang, itu sekedar menambahkan &
ke ujung perintah. Prompt ditampilkan lagi segera, yang dapat menyebabkan masalah jika perintah perlu menampilkan data sendiri.
A ”daemon” adalah proses yang dimulai secara otomatis oleh urutan boot. Itu terus berjalan (di latar belakang) untuk melakukan tugas-tugas pemeliharaan atau memberikan layanan ke proses lain. ”Tugas latar belakang” ini sebenarnya sebarang, dan tidak cocok dengan apa pun dari sudut pandang sistem. Mereka hanyalah proses, sangat mirip dengan proses lain, yang berjalan pada gilirannya ketika irisan waktu mereka datang. Perbedaannya hanya dalam bahasa manusia: sebuah proses yang berjalan tanpa interaksi dengan pengguna (khususnya, tanpa antarmuka grafis) dikatakan berjalan ”di latar belakang” atau ”sebagai daemon”.
B.5.3. Inter-Process Communications
Suatu proses yang terisolasi, apakah itu daemon atau aplikasi interaktif, jarang berguna saat berdiri sendiri, itulah sebabnya ada beberapa metode yang memungkinkan proses terpisah untuk saling berkomunikasi, baik untuk bertukar data atau mengendalikan satu sama lain. Istilah umum yang mengacu pada ini adalah inter-process communication, atau disingkat IPC.
Sistem IPC yang paling sederhana adalah menggunakan berkas. Proses yang ingin mengirim data menulis ke berkas (dengan nama diketahui sebelumnya), sementara renerima hanya harus membuka berkas dan mebaca isinya.
Dalam kasus dimana Anda tidak ingin menyimpan data pada disk, Anda dapat menggunakan pipe, yang hanya merupakan objek dengan dua ujung; byte yang ditulis dalam satu ujung dapat dibaca di ujung yang lain. Jika ujungnya dikendalikan oleh proses terpisah, ini mengarah ke saluran komunikasi antar-proses yang sederhana dan nyaman. Pipa dapat diklasifikasikan menjadi dua kategori: pipa bernama, dan pipa anonim. Sebuah pipa bernama diwakili oleh sebuah entri pada sistem berkas (meskipun data yang ditransmisikan tidak disimpan di sana), sehingga kedua proses dapat membukanya secara independen jika lokasi dari pipa bernama diketahui sebelumnya. Dalam kasus dimana proses-proses yang berkomunikasi saling terkait (misalnya, induk dan proses anaknya), proses induk juga dapat membuat pipa anonim sebelum fork, dan anak mewarisi itu. Kedua proses kemudian akan dapat bertukar data melalui pipa tanpa perlu sistem berkas.
Tidak semua komunikasi antar-proses digunakan untuk memindahkan data. Dalam banyak situasi, satu-satunya informasi yang perlu ditransmisikan adalah pesan kontrol seperti “jeda eksekusi” atau “melanjutkan eksekusi”. Unix (dan Linux) menyediakan mekanisme yang dikenal sebagai sinyal, dimana suatu proses dapat sekedar mengirim sinyal tertentu (dipilih dari daftar sinyal yang telah ditentukan) ke proses lain. Satu-satunya persyaratan adalah mengetahui pid dari target.
Untuk komunikasi yang lebih kompleks, ada juga mekanisme yang memungkinkan proses untuk membuka akses, atau berbagi, bagian dari memori yang dialokasikan untuk proses lain. Memori yang sekarang dipakai bersama di antara mereka dapat digunakan untuk memindahkan data antar proses.
Akhirnya, koneksi jaringan juga dapat membantu proses-proses berkomunikasi; proses-proses ini bahkan dapat berjalan di komputer yang berbeda, mungkin terpisah ribuan kilometer.
Sudah biasa bagi sistem mirip Unix untuk, sedikit banyak, menggunakan semua mekanisme ini.
Pustaka fungsi memainkan peran penting dalam sistem operasi mirip Unix. Mereka bukan program yang utuh, karena mereka tidak dapat dieksekusi sendiri, tetapi merupakan koleksi fragmen kode yang dapat digunakan oleh program standar. Di antara pustaka umum, Anda dapat menemukan:
pustaka C standar (glibc), yang berisi fungsi-fungsi dasar seperti untuk membuka berkas atau koneksi jaringan, dan yang lain memfasilitasi interaksi dengan kernel;
toolkit grafis, seperti Gtk+ dan Qt, memungkinkan banyak program untuk menggunakan kembali objek grafis yang mereka sediakan;
pustaka libpng, yang memungkinkan memuat, menafsirkan, dan menyimpan gambar dalam format PNG.
Berkat pustaka tersebut, aplikasi dapat menggunakan kembali kode yang ada. Pengembangan aplikasi disederhanakan karena banyak aplikasi dapat menggunakan kembali fungsi yang sama. Dengan pustaka yang sering dikembangkan oleh orang yang berbeda, perkembangan global dari sistem lebih dekat dengan filosofi sejarah Unix.
Selain itu, pustaka ini sering dirujuk sebagai “pustaka bersama”, karena kernel bisa hanya memuat mereka ke dalam memori sekali, bahkan jika beberapa proses menggunakan pustaka yang sama pada waktu yang sama. Hal ini memungkinkan penghematan memori, bila dibandingkan dengan situasi (hipotetis) sebaliknya dimana kode untuk pustaka akan dimuat sebanyak proses yang menggunakannya.