Please download to get full document.

View again

of 8

Pengertian Manajemen Proses

Linux mengatur semua proses di dalam sistem melalui pemeriksaan dan perubahan terhadap setiap struktur data task_struct yang dimiliki setiap proses. Sebuah daftar pointer ke semua struktur data task_struct disimpan dalam task vector. Jumlah maksimum
0 views8 pages
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Documenttranscript
  Pengertian Manajemen Proses Linux mengatur semua proses di dalam sistem melalui pemeriksaan dan perubahan terhadap setiap struktur data task_struct yang dimiliki setiap proses. Sebuah daftar pointerke semua struktur data task_struct disimpan dalam task vector. Jumlah maksimum proses dalam sistem dibatasi oleh ukuran dari task vector. Linux umumnya memiliki task vector dengan ukuran 512 entries. Saat proses dibuat, task_struct baru dialokasikan dari memori sistem dan ditambahkan ke task vector. Linux juga mendukung proses secara real time. Proses semacam ini harus bereaksi sangat cepat terhadap event eksternal dan diperlakukan berbeda dari proses biasa lainnya oleh penjadwal.Proses akan berakhir ketika ia memanggil exit(). Kernel akan menentukan waktu pelepasansumber daya yang dimiliki oleh proses yang telah selesai tersebut. Fungsi do_exit() akan dipanggil saat terminasi yang kemudian memanggil __exit_mm/les/fs/sighand() yang akan membebaskan sumber daya. Fungsi exit_notify() akan memperbarui hubungan antara proses induk dan proses anak, semua proses anak yang induknya berakhir akan menjadi anak dari proses init. Terakhir akan dipanggil scheduler untuk menjalankan prosesbaru. 1. Deskriptor Proses Guna keperluan manajemen proses, kernel memelihara informasi tentang setiap proses di sebuah deskriptor proses dengan tipe task_struct. Setiap deskriptor proses mengandung informasi antara lain status proses, ruang alamat, daftar berkas yang dibuka, prioritas proses, dan sebagainya. Berikut gambaran isinya: Isi Deskriptor Proses struct task_struct{ volatile long state; /*-1 unrunnable,0 runnable,>0 stopped*/ unsigned long ags; /* 1 untuk setiap ag proses */ mm_segment_t_addr_limit;/* ruang alamat untuk thread */ struct exec_domain *exec_domain; long need_resched; long  counter; long priority;  /* SMP and runqueue state */ struct task_struct *next_task, *prev_task; struct task_struct  *next_run, *prev_run; ... /* task state *//* limits *//* le system info */ /* ipc stu *//* tss for this task *//* lesystem information *//* open le information *//* memory management info *//* signal handlers */ ...}; Setiap proses di Linux memiliki status. Status proses merupakan array dari ag yang mutually exclusive. Setiap proses memiliki tepat satu keadaan (status) pada suatu waktu. Status tersebut adalah:1.TASK_RUNNING. Pada status ini, proses sedang atau pun siap dieksekusi oleh CPU.2.TASK_INTERRUPTIBLE. Pada status ini, proses sedang menunggu sebuah kondisi. Interupsi, sinyal, atau pun pelepasan sumber daya akan membangunkan proses.3.TASK_UNINTERRUPTIBLE. Pada status ini, proses sedang tidur dan tidak dapat dibangunkan oleh suatu sinyal.4.TASK_STOPPED. Pada status ini proses sedang dihentikan, misalnya oleh sebuah debugger.5.TASK_ZOMBIE. Pada status ini proses telah berhenti, namun masih memiliki strukturdata task_struct di task vector dan masih memegang sumber daya yang sudah tidak digunakan lagi.Setiap proses atau pun eksekusi yang terjadwal secara independen memiliki deskriptor prosesnya sendiri.Alamat dari deskriptor proses digunakan untuk mengindentikasi proses. Selain itu, nomorID proses (PIDs) juga digunakan untuk keperluan tersebut. PIDs adalah 32-bit bilangan  yang mengidentikasikan setiap proses dengan unik. Linux membatasi PIDs berkisar 0-32767 untuk menjamin kompatibilitas dengan sistem UNIX tradisional.Karena proses merupakan sesuatu yang dinamis, maka deskriptor proses disimpan dalam memori yang dinamis pula. Untuk itu dialokasikan juga memori sebesar 8KB untuk setiap proses untuk menyimpan proses deskriptornya dan stack proses dari modus kernel. Keuntungan dari dal ini adalah pointer dari deskriptor proses dari proses yang sedang berjalan (running) dapat diakses dengan cepat menggunakan stack pointer. Selain itu, 8KB(EXTRA_TASK_STRUCT) dari memori akan di-cache untuk mem-bypass pengalokasi memorikernel ketika sebuah proses dihapus dan sebuah proses baru dibuat. Kedua perintah free_task_struct() dan alloc_task_struct() akan digunakan untuk melepaskan atau mengalokasikan memori seukuran 8KB sebagai cache.Deskriptor proses juga membangun sebuah daftar proses dari semua proses yang ada di sistem. Daftar proses tersebut merupakan sebuah doubly-linked list yang dibangun oleh bagian next_task dan prev_task dari deskriptor proses. Deskriptor init_task(mis:swapper) berada di awal daftar tersebut dengan prev_task-nya menunjuk ke deskriptor proses yang paling akhir masuk dalam daftar. Sedangkan makro for_each_task() digunakan untuk memindai seluruh daftar.Proses yang dijadwalkan untuk dieksekusi dari doubly-linked list dari proses dengan status  TASK_RUNNING disebut runqueue. Bagian prev_run dan next_run dari deskriptor proses digunakan untuk membangun runqueue, dengan init_task mengawali daftar tersebut. Sedangkan untuk memanipulasi daftar di deskriptor proses tersebut, digunakan fungsi-fungsi: add_to_runqueue(), del_from_runqueue(),move_rst_runqueue(), move_last_runqueue(). Makro NR_RUNNING digunakan untuk menyimpan jumlah proses yang dapat dijalankan, sedangkan fungsi wake_up_process membuat sebuah proses menjadi dapat dijalankan.Untuk menjamin akurasinya, array task akan diperbarui setiap kali ada proses baru dibuat atau pun dihapus. Sebuah daftar terpisah akan melacak elemen bebas dalam array task itu. Ketika suatu proses dihapus, entrinya ditambahkan di bagian awal dari daftar tersebut.Proses dengan status task_interruptible dibagi ke dalam kelas-kelas yang terkait dengan suatu event tertentu. Event yang dimaksud misalnya: waktu kadaluarsa, ketersediaan sumber daya. Untuk setiap event atau pun kelas terdapat antrian tunggu yang terpisah. Proses akan diberi sinyal bangun ketika event yang ditunggunya terjadi. Berikut contoh dari antrian tunggu tersebut:  Antrian Tunggu void sleep_on(struct wait_queue **wqptr) { struct wait_queue wait; current_state=TASK_UNINTERRUPTIBLE; wait.task=current; add_wait_queue(wqptr, &wait); schedule(); remove_wait_queue(wqptr, &wait); } Fungsi sleep_on() akan memasukkan suatu proses ke dalam antrian tunggu yang diinginkan dan memulai penjadwal. Ketika proses itu mendapat sinyal untuk bangun, makaproses tersebut akan dihapus dari antrian tunggu.Bagian lain konteks eksekusi proses adalah konteks perangkat keras, misalnya: isi register.Konteks dari perangkat keras akan disimpan oleh task state segment dan stack modus kernel. Secara khusus tss akan menyimpan konteks yang tidak secara otomatis disimpan oleh perangkat keras tersebut. Perpindahan antar proses melibatkan penyimpanan konteks dari proses yang sebelumnya dan proses berikutnya. Hal ini harus dapat dilakukandengan cepat untuk mencegah terbuangnya waktu CPU. Versi baru dari Linux mengganti perpindahan konteks perangkat keras ini menggunakan piranti lunak yang mengimplementasikan sederetan instruksi mov untuk menjamin validasi data yang disimpan serta potensi untuk melakukan optimasi.Untuk mengubah konteks proses digunakan makro switch_to(). Makro tersebut akan mengganti proses dari proses yang ditunjuk oleh prev_task menjadi next_task. Makro switch_to() dijalankan oleh schedule() dan merupakan salah satu rutin kernel yang sangat tergantung pada perangkat keras (hardware-dependent). Lebih jelas dapat dilihat pada kernel/sched.c dan include/asm-*/system.h. 2. Pembuatan Proses Dan Thread Linux menggunakan representasi yang sama untuk proses dan thread. Secara sederhana thread dapat dikatakan sebuah proses baru yang berbagi alamat yang sama dengan induknya. Perbedaannnya terletak pada saat pembuatannya. Thread baru dibuat dengan system call clone yang membuat proses baru dengan identitas sendiri, namun diizinkan untuk berbagi struktur data dengan induknya.Secara tradisional, sumber daya yang dimiliki oleh proses induk akan diduplikasi ketika membuat proses anak. Penyalinan ruang alamat ini berjalan lambat, sehingga untuk mengatasinya, salinan hanya dibuat ketika salah satu dari mereka hendak menulis di  alamat tersebut. Selain itu, ketika mereka akan berbagi alamat tersebut ketika mereka hanya membaca. Inilah proses ringan yang dikenal juga dengan thread. Thread dibuat dengan __clone(). __clone() merupakan rutin dari library system call clone().  __clone memiliki 4 buah argumen yaitu: • fn. fungsi yang akan dieksekusi oleh thread baru • arg. pointer ke data yang dibawa oleh fn • ags sinyal yang dikirim ke induk ketika anak berakhir dan pembagian sumber dayaantara anak dan induk. • child_stack. pointer stack untuk proses anak.clone() mengambil argumen ags dan child_stack yang dimiliki oleh __clone kemudian menentukan id dari proses anak yang akan mengeksekusi fn dengan argumen arg.Pembuatan anak proses dapat dilakukan dengan fungsi fork() dan vfork(). Implementasi fork() sama seperti system call clone() dengan sighandler SIGCHLD di-set, semua bendera clone di-clear yang berarti tidak ada sharing dan child_stack dibuat 0 yang berarti kernel akan membuat stack untuk anak saat hendak menulis. Sedangkan vfork() sama seperti fork() dengan tambahan bendera CLONE_VM dan CLONE_VFORK di-set. Dengan vfork(), induk dan anak akan berbagi alamat, dan induk akan di-block hingga anak selesai.Untuk memulai pembuatan proses baru, clone() akan memanggil fungsi do_fork(). Hal yang dilakukan oleh do_fork() antara lain: • memanggil alloc_task_struct() yang akan menyediakan tempat di memori dengan ukuran 8KB untuk deskriptor proses dan stack modus kernel. • memeriksa ketersediaan sumber daya untuk membuat proses baru. • nd_empty_procees() memanggil get_free_taskslot() untuk mencari sebuah slot di array task untuk pointer ke deskriptor proses yang baru. • memanggil copy_les/fm/sighand/mm() untuk menyalin sumber daya untuk anak, berdasarkan nilai ags yang ditentukan clone(). • copy_thread() akan menginisialisasi stack kernel dari proses anak.
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks
SAVE OUR EARTH

We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

More details...

Sign Now!

We are very appreciated for your Prompt Action!

x