GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara Linux mempertahankan kendali CPU pada mesin single-core?

Kernel mendapatkan kontrol cukup sering dalam operasi normal:setiap kali proses memanggil panggilan sistem, dan setiap kali terjadi interupsi. Interupsi terjadi saat perangkat keras menginginkan perhatian CPU, atau saat CPU menginginkan perhatian kernel, dan satu perangkat keras tertentu dapat diprogram untuk meminta perhatian secara berkala (timer). Dengan demikian kernel dapat memastikan bahwa, selama sistem tidak mengunci terlalu keras sehingga interupsi tidak lagi dihasilkan, kernel akan dipanggil secara berkala.

Akibatnya,

jika proses itu melakukan komputasi yang berjalan sangat lama tanpa menghasilkan

bukan masalah:Linux adalah sistem operasi multitugas preemptive, i.e. itu melakukan banyak tugas tanpa memerlukan kerja sama program yang sedang berjalan.

Ketika datang ke proses pembunuhan, kernel tetap terlibat. Jika suatu proses ingin mematikan proses lain, ia harus memanggil kernel untuk melakukannya, sehingga kernel memegang kendali. Jika kernel memutuskan untuk menghentikan proses (e.g. pembunuh OOM, atau karena proses mencoba melakukan sesuatu yang tidak boleh dilakukan, seperti mengakses memori yang belum dipetakan), proses tersebut juga memegang kendali.

Perhatikan bahwa kernel dapat dikonfigurasi untuk tidak mengontrol subset dari CPU sistem itu sendiri (menggunakan isolcpus yang sudah tidak digunakan lagi parameter kernel), atau untuk tidak menjadwalkan tugas pada CPU tertentu itu sendiri (menggunakan cpuset tanpa load balancing, yang terintegrasi penuh di cgroup v1 dan cgroup v2); tetapi setidaknya satu CPU dalam sistem harus selalu dikelola sepenuhnya oleh kernel. Itu juga dapat dikonfigurasi untuk mengurangi jumlah interupsi pengatur waktu yang dihasilkan, bergantung pada tujuan penggunaan CPU tertentu.

Juga tidak banyak perbedaan antara sistem single-CPU (single-core, dll.) dan sistem multi-CPU, masalah yang sama berlaku untuk keduanya sejauh menyangkut kontrol kernel:setiap CPU perlu memanggil kernel secara berkala jika memang demikian. untuk digunakan untuk multitasking di bawah kendali kernel.


Linux dan sebagian besar OS modern menggunakan preemptive multitasking yang berarti kernel memiliki kontrol penuh atas waktu setiap proses diizinkan untuk berjalan dan akan mendahului proses jika berjalan terlalu lama, tidak seperti multitasking kooperatif di mana proses akan melewati kontrol kapan pun diinginkan

Pada dasarnya dalam preemptive multitasking kernel akan dipecat secara berkala dari timer, dan setiap kali kernel memegang kendali (ketika timer terjadi atau panggilan sistem dipanggil) kernel akan menyimpan konteks proses saat ini dan kemudian beralih ke proses berikutnya ' konteks. Itu disebut sakelar konteks di mana seluruh status proses termasuk semua informasi utas, nilai register ... disimpan dan dipulihkan untuk membuat proses terus berjalan dari titik yang tepat sebelum didahului tanpa mengetahuinya tidak berjalan terus menerus. Oleh karena itu banyak proses yang akan muncul untuk berjalan secara bersamaan dalam satu inti CPU, meskipun pada kenyataannya hanya 1 proses yang dijalankan setiap saat. Kernel juga hanyalah proses khusus yang melakukan semua proses dan penanganan sumber daya. Itu tidak dijalankan dari inti terpisah hanya untuk memantau proses lain

Lihat juga Apa artinya mengatakan “kernel linux bersifat preemptive”?


Linux
  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. Linux – Bagaimana Pembunuh Oom Memutuskan Proses Mana Yang Harus Dibunuh Pertama?

  3. Linux – Bagaimana Cara Memeriksa Informasi Struktur Direktori File Unix/linux?

  1. Linux – Bagaimana Kernel Linux Menjadwalkan Cpu, Antara Proses/Utas Ruang Pengguna dan Tugas/Pekerjaan Kernel?

  2. Bagaimana cara menghitung penggunaan CPU dari suatu proses oleh PID di Linux dari C?

  3. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  1. Bagaimana perbandingan kernel Linux dengan arsitektur mikrokernel?

  2. Apakah kernel Linux 3.x menggunakan penjadwal proses CFS?

  3. Bagaimana CPU mengetahui alamat fisik mana yang dipetakan ke alamat virtual mana?