Proses di Linux
Proses adalah satuan eksekusi program Proses di Linux preemptive saat: 1. Waktu kuantumnya telah habis 2. ada proses baru yang masuk ke state TASK_RUNNING dan prioritasnya lebih tinggi dibandingkan dengan prioritas current proses
Proses yang baru->logical copy address space parent, mengeksekusi kode yang sama dengan parent Meskipun parent dan child men-share halaman yang mengandung program kode(text), namun memiliki data(stack dan heap) yang terpisah, sehingga perubahan oleh child ke lokasi memori tidak dapat diketahui oeh parent, dan begitu lah sebaliknya.
linux menggunakan lightweight process yang mendukung multithreaded application. Umumnya, 2 lightweight process dapat men- share resource yang sama, seperti address space. Ketika 1 proses memodifikasi shared resource, proses lain dapat langsung melihat perubahannya. Tentunya dibutuhkan sinkronisasi saat mengakses shared resource tsb.
linux scheduling: berdasar teknik time- sharing -> beberapa proses berjalan dalam time multiplexing karena CPU time dibagi menjadi potongan-potongan untuk setiap runnable process.
scheduling policy: aturan-aturan yang digunakan untuk menentukan kapan dan bagaimana memilih proses yang baru untuk dijalankan. scheduling policy juga berdasar pada ranking proses berdasar prioritas Di linux, prioritas proses bersifat dinamik Scheduler menjaga proses mana yang sedang berjalan dan menyesuaikan prioritas secara periodik.
Saat berbicara tentang scheduling, proses diklasifikasikan sebagai IO Bound dan CPU Bound.
1. Interactive processes berinteraksi secara konstan dengan user contoh program interaktif: command shells, text editor,aplikasi berbasis grafik
2. Batch processes Tidak memerlukan interaksi dengan user, kebanyakan berjalan di background contoh program batch: programming language compiler, database search engine, scientific computation.
3. Real-time processes memerlukan scheduling yang cukup rumit proses jenis ini tidak pernah diblok oleh proses lain yang prioritasnya rendah contoh program realtime: video and sound applications, robot controllers, dan programs yang mengumpulkan data dari physical sensors.
Scheduling algorithm adalah instruksi/kode yang mengimplmentasikan scheduling policy yang diberikan struktur yang paling penting untuk scheduling adalah task_struct informasi yang tersimpan di dalam task struct digunakan untuk me-restore status proses baru untuk menjalankan dan memberikan kontrol sistem ke proses tersebut
scheduler mengalokasikan CPU time untuk runnable processes melalui informasi di task struct Scheduling terjadi saat schedule(), yang bertujuan untuk menemukan proses dalam queue meng-assign ke CPU
1. Direct invocation of schedule() Terjadi ketika: ▪ Current process terblok karena menunggu resource tertentu ▪ current process diambil dari ready queue kemudian diletakkan di appropriate wait queue, statusnya diubah menjadi: TASK_INTERRUPTIBLE atau TASK_UNINTERRUPTIBLE ▪ Ketika resource yang diinginkan telah tersedia, proses akan dibangunkan dan di-remove dari wait queue
2. Lazy invocation of schedule() Terjadi ketika: ▪ Current process telah menggunakan kuantumnya, hal ini dicek di: update_process_times() ▪ Proses ditambahkan ke ready queue dan prioritasnya lebih tinggi daripada proses yg sedang dijalankan, hal ini dicek di: wake_up_process() ▪ Proses memanggil sched_yield() Lazy invocation menggunakan need_resched flag dari process descriptor dan akan menyebabkan schedule() dipanggil kemudian.
linux scheduling algorithm bekerja dengan membagi CPU time menjadi epoch. dalam 1 epoch, tiap proses memiliki waktu kuantum yang durasinya dihitung ketika epoch dimulai proses hanya menggunakan kuantum ketika sedang mengakses CPU, sedangkan saat proses menunggu IO, kuantum tidak digunakan
Sebuah proses berakhir ketika semua runnable process telah menggunakan semua kuantumnya umumnya, proses yang berbeda memiliki waktu kuantum yang berbeda tiap proses memiliki base-time quantum, yakni nilai kuantum waktu yang di-assign oleh scheduler ke proses jika telah menyelesaikan kuantum di epoch sebelumnya. user dapat mengubah base-time quantum proses mereka dengan menggunakan syscall nice( ) dan setpriority( )
untuk memilih proses mana yang akan dijalankan berikutnya,ada 2 jenis prioritas: 1. Prioritas static-> untuk proses realtime 2. Prioritas dinamik->untuk semua proses lainnya Prioritas statik dari proses real time selalu lebih tinggi daripada prioritas dinamik proses yg konvensional proses yang konvensional baru akan dijalankan jika sudah tidak ada lagi proses real-time yang dijalankan
terjadi di Kernel Mode kontrol eksekusi dari proses, dimana kernel dapat menghentikan eksekusi dari proses yang sedang berjalan di CPU dan melanjutkan proses lain yang telah dihentikan sebelumnya
Switching dibutuhkan karena : 1. Jumlah proses lebih banyak daripada jumlah CPU 2. Diperlukan cara untuk membagi waktu CPU 3. Untuk multiprocessing/tasking 4. Komputer lebih produktif
Prinsip umum - simpan state dari old process - load state dari proses baru yang telah disimpan
1. hardware context 2. task state segment 3. switching 4. save FPU, MMX dan XMM registers
- kumpulan dari data yang harus di load ke register sebelum proses melanjutkan eksekusinya di CPU - disimpan di process descriptor dan di Kernel Mode
tipe segment khusus pada arsitektur 80x86 untuk menyimpan hardware context dibutuhkan oleh CPU karena : mengambil address dari Kernel mode stack dari TSS akses I/O permission bitmap
1. switch page global directory 2. switch kernel mode stack 3. switch hardware context
dijalankan oleh fungsi schedule() memiliki tiga parameter prev, next, last
80x86 tidak menyimpan register FPU dan XMM secara otomatis instruksi MMX beroperasi di register FPU kerugian : tidak dapat menggabungkan instruksi floating-point dengan instruksi MMX keuntungan : kode untuk menyimpan FPU dapat digunakan untuk menyimpan status MMX
Ada pertanyaan?