GNU/Linux >> Belajar Linux >  >> Linux

Apa itu Proses Linux, Utas, Proses Ringan, dan Status Proses

Linux telah berkembang banyak sejak awal. Ini telah menjadi sistem operasi yang paling banyak digunakan ketika datang ke server dan pekerjaan kritis misi. Meskipun tidak mudah untuk memahami Linux secara keseluruhan tetapi ada aspek-aspek yang mendasar untuk Linux dan perlu dipahami.

Pada artikel ini, kita akan membahas tentang proses Linux, utas dan proses ringan dan memahami perbedaan di antara mereka. Menjelang akhir, kita juga akan membahas berbagai status untuk proses Linux.

Proses Linux

Dalam bentuk yang sangat dasar, proses Linux dapat divisualisasikan sebagai menjalankan sebuah program. Misalnya, cukup buka editor teks di kotak Linux Anda dan proses editor teks akan lahir.

Berikut adalah contoh ketika saya membuka gedit di komputer saya :

$ gedit &
[1] 5560

$ ps -aef | grep gedit
1000      5560  2684  9 17:34 pts/0    00:00:00 gedit

Perintah pertama (gedit &) membuka jendela gedit sementara perintah ps kedua (ps -aef | grep gedit) memeriksa apakah ada proses terkait. Pada hasilnya Anda dapat melihat bahwa ada proses yang terkait dengan gedit.

Proses adalah dasar untuk Linux karena setiap pekerjaan yang dilakukan oleh OS dilakukan dalam hal dan oleh proses. Pikirkan saja apa saja dan Anda akan melihat bahwa itu adalah sebuah proses. Hal ini karena setiap pekerjaan yang dimaksudkan untuk dilakukan memerlukan sumber daya sistem ( yang disediakan oleh kernel) dan merupakan proses yang dilihat oleh kernel sebagai entitas yang dapat menyediakan sumber daya sistem.

Proses memiliki prioritas berdasarkan konteks kernel mana yang mengubahnya. Sebuah proses dapat di-pre-empted jika sebuah proses dengan prioritas lebih tinggi siap untuk dieksekusi.

Misalnya, jika suatu proses sedang menunggu sumber daya sistem seperti beberapa teks dari file teks yang disimpan di disk, maka kernel dapat menjadwalkan proses dengan prioritas lebih tinggi dan kembali ke proses menunggu saat data tersedia. Ini membuat bola terus bergulir untuk sistem operasi secara keseluruhan dan memberi pengguna perasaan bahwa tugas sedang dijalankan secara paralel.

Proses dapat berbicara dengan proses lain menggunakan metode komunikasi antar proses dan dapat berbagi data menggunakan teknik seperti memori bersama.

Di Linux, fork() digunakan untuk membuat proses baru. Proses baru ini disebut sebagai proses anak dan setiap proses anak awalnya berbagi semua segmen seperti teks, tumpukan, tumpukan dll sampai anak mencoba membuat perubahan apa pun ke tumpukan atau tumpukan. Jika ada perubahan, salinan terpisah dari segmen tumpukan dan tumpukan disiapkan untuk turunan sehingga perubahan tetap spesifik untuk anak. Segmen teks bersifat hanya-baca sehingga induk dan anak berbagi segmen teks yang sama. Artikel fungsi fork C menjelaskan lebih lanjut tentang fork().

Utas Linux vs Proses Ringan

Utas di Linux tidak lain adalah aliran eksekusi proses. Sebuah proses yang mengandung beberapa aliran eksekusi dikenal sebagai proses multi-threaded.

Untuk proses non multi-threaded hanya ada aliran eksekusi yang merupakan aliran eksekusi utama dan karenanya juga dikenal sebagai proses single-threaded. Untuk kernel Linux, tidak ada konsep thread. Setiap utas dilihat oleh kernel sebagai proses yang terpisah tetapi proses ini agak berbeda dari proses normal lainnya. Saya akan menjelaskan perbedaannya di paragraf berikut.

Utas sering dicampur dengan istilah Proses Berat Ringan atau LWP. Alasannya tanggal kembali ke saat-saat ketika Linux hanya mendukung utas di tingkat pengguna. Ini berarti bahwa bahkan aplikasi multi-utas dilihat oleh kernel sebagai satu proses saja. Hal ini menimbulkan tantangan besar bagi perpustakaan yang mengelola utas tingkat pengguna ini karena harus menangani kasus-kasus yang tidak menghalangi eksekusi utas jika ada utas lain yang mengeluarkan panggilan pemblokiran.

Kemudian implementasi berubah dan proses dilampirkan ke setiap utas sehingga kernel dapat menanganinya. Tapi, seperti yang dibahas sebelumnya, kernel Linux tidak melihatnya sebagai thread, setiap thread dilihat sebagai proses di dalam kernel. Proses ini dikenal sebagai proses ringan.

Perbedaan utama antara proses ringan (LWP) dan proses normal adalah bahwa LWP berbagi ruang alamat yang sama dan sumber daya lain seperti file terbuka, dll. Karena beberapa sumber daya dibagikan, proses ini dianggap ringan dibandingkan dengan proses normal lainnya. dan karenanya dinamakan proses ringan.

Jadi, secara efektif kita dapat mengatakan bahwa utas dan proses ringan adalah sama. Hanya saja thread merupakan istilah yang digunakan pada level user sedangkan light weight process adalah istilah yang digunakan pada level kernel.

Dari sudut pandang implementasi, utas dibuat menggunakan fungsi yang diekspos oleh pustaka pthread yang sesuai dengan POSIX di Linux. Secara internal, fungsi clone() digunakan untuk membuat proses bobot normal dan ringan. Ini berarti bahwa untuk membuat proses normal fork() digunakan yang selanjutnya memanggil clone() dengan argumen yang sesuai sedangkan untuk membuat thread atau LWP, fungsi dari pthread library memanggil clone() dengan flag yang relevan. Jadi, perbedaan utama dihasilkan dengan menggunakan flag berbeda yang dapat diteruskan ke fungsi clone().

Baca lebih lanjut tentang fork() dan clone() di halaman manual masing-masing.

Cara Membuat Utas di Linux menjelaskan lebih lanjut tentang utas.

Status Proses Linux

Siklus hidup proses Linux yang normal tampaknya sangat mirip dengan kehidupan nyata. Proses lahir, berbagi sumber daya dengan orang tua untuk beberapa waktu, mendapatkan salinan sumber daya mereka sendiri ketika mereka siap untuk membuat perubahan, melewati berbagai keadaan tergantung pada prioritas mereka dan akhirnya mati. Pada bagian ini akan dibahas berbagai keadaan proses Linux :

  • RUNNING – Status ini menentukan bahwa proses sedang dalam eksekusi atau menunggu untuk dieksekusi.
  • INTERRUPTIBLE – Status ini menetapkan bahwa proses sedang menunggu untuk diinterupsi karena sedang dalam mode tidur dan menunggu beberapa tindakan terjadi yang dapat membangunkan proses ini. Tindakan tersebut dapat berupa interupsi perangkat keras, sinyal, dll.
  • UN-INTERRUPTIBLE – Sama seperti status INTERRUPTIBLE, satu-satunya perbedaan adalah bahwa proses dalam status ini tidak dapat dibangunkan dengan mengirimkan sinyal.
  • STOPPED – Status ini menentukan bahwa proses telah dihentikan. Ini dapat terjadi jika sinyal seperti SIGSTOP, SIGTTIN dll dikirim ke proses.
  • TRACED – Status ini menentukan bahwa proses sedang di-debug. Setiap kali proses dihentikan oleh debugger (untuk membantu pengguna men-debug kode) proses memasuki status ini.
  • ZOMBIE – Status ini menetapkan bahwa proses dihentikan tetapi masih berkeliaran di tabel proses kernel karena induk dari proses ini masih belum mengambil status penghentian proses ini. Induk menggunakan keluarga fungsi wait() untuk mengambil status penghentian.
  • MATI – Status ini menetapkan bahwa proses dihentikan dan entri dihapus dari tabel proses. Status ini dicapai ketika induk berhasil mengambil status penghentian seperti yang dijelaskan dalam status ZOMBIE.

Linux
  1. Linux – Apa Memori Tinggi dan Memori Rendah Di Linux?

  2. Linux – Log Utas Sebelumnya Yang Sekarang Ditutup?

  3. Dalam bahasa apa Windows, Mac OS X dan Linux ditulis?

  1. Karakter apa yang dilarang dalam nama direktori Windows dan Linux?

  2. Apa perbedaan antara lsof dan netstat di linux?

  3. Apa itu memori tinggi dan memori rendah di Linux?

  1. Apa Proses Zombie Dan Bagaimana Menemukan &Membunuh Proses Zombie?

  2. Pengantar Utas Linux – Bagian I

  3. Apakah utas kernel Linux benar-benar proses kernel?