Rumah > Tutorial sistem > LINUX > teks badan

Meneroka pensuisan konteks pada CPU Linux

WBOY
Lepaskan: 2024-02-05 13:06:10
ke hadapan
620 orang telah melayarinya

Seperti yang kita sedia maklum, Linux ialah sistem pengendalian yang menyokong multitasking Bilangan tugas yang boleh dijalankan pada masa yang sama jauh melebihi bilangan CPU. Sudah tentu, tugas-tugas ini sebenarnya tidak berjalan pada masa yang sama (untuk satu CPU), tetapi kerana sistem memperuntukkan CPU kepada tugas-tugas ini secara bergilir-gilir untuk tempoh masa yang singkat, mewujudkan ilusi berbilang tugas yang berjalan pada masa yang sama .

Konteks CPU

Sebelum setiap tugasan dijalankan, CPU perlu tahu di mana untuk memuatkan dan memulakan tugas itu. Ini bermakna sistem perlu menetapkan mendaftar dan pembilang program CPU terlebih dahulu.

Daftar CPU ialah kepingan memori yang kecil tetapi sangat pantas dibina ke dalam CPU. Kaunter program digunakan untuk menyimpan lokasi arahan yang sedang dilaksanakan oleh CPU atau lokasi arahan seterusnya yang akan dilaksanakan.

Kedua-dua ini adalah persekitaran yang diperlukan untuk CPU sebelum ia boleh melaksanakan sebarang tugas, jadi ia dipanggil "konteks CPU". Sila rujuk gambar di bawah:

探讨 Linux CPU 的上下文切换

Sekarang anda tahu apa itu konteks CPU, saya rasa mudah untuk anda fahami Penukaran konteks CPU. "Suis konteks CPU" merujuk kepada menyimpan konteks CPU (daftar CPU dan pembilang program) tugas sebelumnya, kemudian memuatkan konteks tugas baharu ke dalam daftar dan pembilang program ini, dan akhirnya melompat ke pembilang program.

Konteks yang disimpan ini disimpan dalam kernel sistem dan dimuatkan semula apabila pelaksanaan tugas dijadualkan semula. Ini memastikan bahawa keadaan asal tugasan tidak terjejas dan tugasan kelihatan berjalan secara berterusan.

Jenis penukaran konteks CPU

Anda mungkin mengatakan bahawa penukaran konteks CPU tidak lebih daripada mengemas kini daftar CPU dan nilai pembilang program, dan daftar ini direka bentuk untuk menjalankan tugas dengan cepat, jadi mengapa ia menjejaskan prestasi CPU?

Sebelum menjawab soalan ini, pernahkah anda terfikir apakah "tugas" ini? Anda mungkin mengatakan bahawa tugas ialah proses atau benang. Ya, proses dan utas adalah tugas yang paling biasa, tetapi terdapat jenis tugas lain selain itu.

Jangan lupaGangguan perkakasan juga merupakan tugas biasa Isyarat pencetus perkakasan akan menyebabkan pengendali gangguan dipanggil.

Oleh itu, terdapat sekurang-kurangnya tiga jenis suis konteks CPU yang berbeza:

  • Proses penukaran konteks
  • Penukaran konteks benang
  • Mengganggu penukaran konteks

Jom tengok satu persatu.

Proses penukaran konteks

Linux membahagikan ruang proses proses kepada ruang kernel dan ruang pengguna mengikut tahap keistimewaan, yang sepadan dengan tahap keistimewaan CPU Ring 0Ring 3 dalam rajah di bawah.

  • Ruang kernel(Ring 0) mempunyai kebenaran tertinggi dan boleh terus mengakses semua sumber
  • Ruang pengguna (Ring 3) hanya boleh mengakses sumber terhad dan tidak boleh mengakses terus peranti perkakasan seperti memori. Ia mesti terperangkapke dalam kernel melalui panggilan sistemuntuk mengakses sumber istimewa ini.
探讨 Linux CPU 的上下文切换

Melihatnya dari perspektif lain, proses boleh berjalan dalam ruang pengguna dan ruang kernel. Apabila proses berjalan dalam ruang pengguna, ia dipanggil keadaan pengguna proses tersebut Apabila ia jatuh ke dalam ruang kernel, ia dipanggil keadaan kernel proses.

Penukaran daripada mod pengguna kepada mod kernel perlu diselesaikan melalui panggilan sistem. Sebagai contoh, apabila kami melihat kandungan fail, kami memerlukan panggilan sistem berikut:

  • open(): Buka fail
  • read(): Baca kandungan fail
  • write(): Tulis kandungan fail ke fail output (termasuk output standard)
  • close(): Tutup fail

Jadi adakah penukaran konteks CPU akan berlaku semasa panggilan sistem di atas? Sudah tentu ya.

Ini memerlukan menyimpan lokasi arahan mod pengguna asal dalam daftar CPU terlebih dahulu. Seterusnya, untuk melaksanakan kod mod kernel, daftar CPU perlu dikemas kini ke lokasi baharu arahan mod kernel. Akhir sekali, lompat ke keadaan kernel untuk menjalankan tugas kernel.

Kemudian selepas panggilan sistem tamat, daftar CPU perlu memulihkankeadaan pengguna yang disimpan asal, dan kemudian beralih ke ruang pengguna untuk meneruskan proses tersebut.

Jadi, semasa panggilan sistem, sebenarnya terdapat dua suis konteks CPU.

Tetapi perlu diingatkan bahawa proses panggilan sistem tidak akan melibatkan penukaran proses, dan juga tidak akan melibatkan penukaran sumber sistem seperti memori maya. Ini berbeza daripada apa yang biasa kita panggil "penukaran konteks proses". Penukaran konteks proses merujuk kepada penukaran daripada satu proses ke proses yang lain, manakala proses yang sama sentiasa berjalan semasa panggilan sistem

Proses panggilan sistem selalunya dipanggil suis mod keistimewaan, bukannya suis konteks. Tetapi sebenarnya, semasa proses panggilan sistem, penukaran konteks CPU juga tidak dapat dielakkan.

Proses penukaran konteks vs panggilan sistem

Jadi apakah perbezaan antara penukaran konteks proses dan panggilan sistem? Pertama sekali, proses diuruskan oleh kernel, dan penukaran proses hanya boleh berlaku dalam mod kernel. Oleh itu, konteks proses bukan sahaja termasuk sumber ruang pengguna seperti memori maya, stack dan pembolehubah global, tetapi juga termasuk keadaan ruang kernel seperti kernel stack dan registers.

Jadi proses penukaran konteks mempunyai satu langkah lagi daripada panggilan sistem:

Sebelum menyimpan keadaan kernel dan daftar CPU proses semasa, anda perlu menyimpan memori maya, tindanan, dll. proses dan memuatkan keadaan kernel proses seterusnya.

Menurut laporan ujian Tsuna, setiap suis konteks memerlukan berpuluh-puluh nanosaat hingga mikrosaat masa CPU. Masa ini agak besar, terutamanya dalam kes sejumlah besar suis konteks proses, yang boleh menyebabkan CPU menghabiskan banyak masa untuk menyimpan dan memulihkan sumber seperti daftar, tindanan kernel dan memori maya dengan mudah. Inilah yang kita bincangkan dalam artikel lepas, faktor penting yang menyebabkan purata beban meningkat.

Jadi, bilakah proses tersebut akan dijadualkan/ditukar untuk dijalankan pada CPU? Sebenarnya, terdapat banyak senario, biar saya ringkaskan untuk anda di bawah:

  • Apabila hirisan masa CPU proses kehabisan, ia akan digantung oleh sistem dan ditukar kepada proses lain menunggu CPU berjalan. Apabila sumber sistem tidak mencukupi (seperti memori tidak mencukupi), proses tidak boleh berjalan sehingga sumber mencukupi. Pada masa ini, proses itu juga akan
  • digantung
  • , dan sistem akan menjadualkan proses lain untuk dijalankan. Apabila sesuatu proses secara automatik
  • menggantung dirinya sendiri
  • melalui fungsi sleep, ia secara semula jadi akan dijadualkan semula. Apabila proses dengan keutamaan yang lebih tinggi sedang berjalan, untuk memastikan perjalanan proses keutamaan tinggi, proses semasa akan digantung oleh proses keutamaan tinggi
  • .
  • Apabila gangguan perkakasan berlaku, proses pada CPU akan interrupt-suspended
  • dan sebaliknya melaksanakan rutin perkhidmatan gangguan dalam kernel.
  • Sangat perlu untuk memahami senario ini, kerana mereka adalah pembunuh di sebalik tabir apabila masalah prestasi berlaku dengan penukaran konteks.

Penukaran konteks benang

Perbezaan terbesar antara utas dan proses ialah utas ialah unit asas penjadualan tugas

, manakala proses ialah unit asas

pemerolehan sumber. Secara terang-terangan, apa yang dipanggil penjadualan tugas dalam kernel sebenarnya menjadualkan utas dan proses hanya menyediakan sumber seperti memori maya dan pembolehubah global untuk utas. Jadi, untuk urutan dan proses, kita boleh memahaminya dengan cara ini:

Apabila satu proses hanya mempunyai satu utas, ia boleh dianggap bahawa satu proses adalah sama dengan satu utas

  • Apabila proses mempunyai berbilang utas, utas ini berkongsi sumber yang sama, seperti memori maya dan pembolehubah global.
  • Selain itu, benang juga mempunyai data peribadinya sendiri, seperti tindanan dan daftar, yang juga perlu disimpan semasa penukaran konteks.
  • Dengan cara ini, penukaran konteks benang sebenarnya boleh dibahagikan kepada dua situasi:

Pertama sekali, dua utas sebelum dan selepas tergolong dalam proses yang berbeza. Pada masa ini, kerana sumber tidak dikongsi, proses penukaran adalah sama seperti penukaran konteks proses.

  • Kedua, dua benang sebelum dan selepas tergolong dalam proses yang sama. Pada masa ini, memandangkan memori maya dikongsi, sumber memori maya kekal tidak berubah semasa penukaran, dan hanya data peribadi, daftar dan data tidak dikongsi rangkaian lain yang perlu ditukar.
  • Jelas sekali, penukaran benang dalam proses yang sama menggunakan lebih sedikit sumber berbanding menukar berbilang proses. Ini juga merupakan kelebihan multi-threading dan bukannya multi-process.

Ganggu penukaran konteks

Selain dua suis konteks sebelumnya, terdapat senario lain yang turut mengeluarkan penukaran konteks CPU, dan itu ialah interrupt

.

Untuk bertindak balas dengan cepat kepada acara, gangguan perkakasan akan mengganggu proses penjadualan dan pelaksanaan biasa dan kemudian memanggil pengendali gangguan

.

Apabila mengganggu proses lain, keadaan semasa proses perlu disimpan supaya proses masih boleh dipulihkan daripada keadaan asal selepas gangguan.

Tidak seperti konteks proses, penukaran konteks gangguan tidak melibatkan keadaan pengguna proses tersebut. Oleh itu, walaupun proses gangguan mengganggu proses dalam mod pengguna, tidak perlu menyimpan dan memulihkan sumber mod pengguna seperti memori maya dan pembolehubah global proses tersebut.

Selain itu, seperti penukaran konteks proses, penukaran konteks gangguan juga menggunakan CPU. Masa penukaran yang berlebihan akan menggunakan banyak sumber CPU dan malah mengurangkan prestasi keseluruhan sistem secara serius. Oleh itu, apabila anda mendapati bahawa terdapat terlalu banyak gangguan, anda perlu memberi perhatian untuk menyemak sama ada ia akan menyebabkan masalah prestasi yang serius untuk sistem anda.

Kesimpulan

Ringkasnya, tidak kira senario mana yang membawa kepada penukaran konteks, anda harus tahu:

Penukaran konteks CPU ialah salah satu fungsi teras untuk memastikan operasi normal sistem Linux, dan secara amnya tidak memerlukan perhatian khusus kami.

Walau bagaimanapun, penukaran konteks yang berlebihan akan menggunakan masa CPU untuk menyimpan dan memulihkan data seperti daftar, susunan kernel, memori maya, dll., sekali gus memendekkan masa berjalan sebenar proses dan menyebabkan penurunan ketara dalam prestasi sistem keseluruhan.

Atas ialah kandungan terperinci Meneroka pensuisan konteks pada CPU Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lxlinux.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!