Dalam Linux, konteks juga dipanggil konteks CPU Ia adalah persekitaran yang CPU mesti bergantung sebelum menjalankan sebarang tugas, termasuk daftar CPU dan pembilang program adalah untuk menukar konteks CPU sebelumnya tugas (iaitu, daftar CPU dan pembilang program) disimpan, kemudian muatkan konteks tugas baharu ke dalam daftar dan pembilang program ini, dan akhirnya lompat ke lokasi baharu yang ditunjukkan oleh pembilang program untuk menjalankan tugas baharu.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
Linux ialah sistem pengendalian berbilang tugas. Ia menyokong tugasan yang jauh lebih besar daripada bilangan CPU untuk dijalankan pada masa yang sama sebenarnya berjalan pada masa yang sama Sistem memperuntukkan CPU kepada mereka secara bergilir-gilir dalam tempoh masa yang singkat, memberikan pengguna ilusi bahawa banyak tugasan dijalankan pada masa yang sama.
Sebelum setiap tugasan dijalankan, CPU perlu mengetahui di mana tugas itu dimuatkan dan di mana ia mula dijalankan. Dalam erti kata lain, sistem perlu menyediakan daftar CPU dan pembilang program (Kaunter Program, PC) terlebih dahulu Tetapi memori yang sangat pantas
Kaunter program: digunakan untuk menyimpan lokasi arahan yang dilaksanakan oleh CPU, atau lokasi arahan seterusnya yang akan dilaksanakan
Ringkasnya, kami mempunyai jawapannya
Konteks yang biasa kita rujuk juga dipanggil konteks CPU Ia adalah persekitaran yang mesti bergantung kepada CPU hidup sebelum menjalankan sebarang tugas, termasuk daftar CPU dan pembilang program
Iaitu untuk menyimpan konteks CPU dahulu (iaitu, daftar CPU dan pembilang program ) daripada tugasan sebelumnya, kemudian muatkan konteks tugas baharu ke dalam daftar dan pembilang program ini, dan akhirnya lompat ke lokasi baharu yang ditunjukkan oleh pembilang program dan jalankan tugas baharu.
2 Pengenalan terperinci penukaran konteks
进程上下文切换
线程上下文切换
中断上下文切换
Mari kita fahami 2 perkara pengetahuan berikut yang terlibat dalam penukaran konteks panggilan sistem , Keadaan berjalan proses
Keadaan berjalan proses:
Linux membahagikan ruang berjalan proses kepadadan . Keadaan proses yang berjalan dalam dua ruang ini dipanggil
dan 内核空间
masing-masing. 用户空间
内核态
用户态
Ruang kernel (Ring 0): Mempunyai kebenaran tertinggi dan boleh mengakses terus semua sumber (baca fail ,)
Mengagihkan memori, operasi IO, mencipta proses anak... semuanya adalah operasi kernel. Ini juga menunjukkan bahawa apabila operasi IO kerap, parameter Sistem akan menjadi sangat tinggi.
Ruang pengguna (Ring 3): hanya boleh mengakses sumber terhad, tidak boleh mengakses terus peranti perkakasan seperti memori dan mesti membuat sistem panggilan Hanya dengan memasukkan kernel anda boleh mengakses sumber istimewa ini
Atur cara ruang pengguna biasa termasuk: Cangkang, pangkalan data, pelayan web, program PHP, program Java.. .
Apabila anda menggunakan arahan atas untuk melihat CPU dalam sistem Linux, anda boleh melihat pengguna dan sistem, yang sepadan dengan mod pengguna dan kernel. Sumber cpu yang diduduki oleh keadaan
dan tidak mempunyai kebenaran untuk io fail . Apabila fail perlu dibaca, ia Melibatkan panggilan sistem
Peralihan daripada mod pengguna kepada mod kernel perlu diselesaikan melalui panggilan sistem. Sebagai contoh, apabila melihat fail, berbilang panggilan sistem perlu dilaksanakan: buka, baca, tulis, tutup, dsb. Proses panggilan sistem adalah seperti berikut: Simpan lokasi arahan mod pengguna asal dalam daftar CPU; > Selepas panggilan sistem selesai, daftar CPU perlu memulihkan keadaan pengguna asal yang disimpan, kemudian beralih ke ruang pengguna dan teruskan menjalankan proses Jadi, panggilan sistem Proses sebenarnya melibatkan dua suis konteks CPU. Proses suis konteks? Oleh kerana proses memerlukan sumber sistem yang agak besar (seperti ingatan tidak mencukupi), proses akan digantung pada masa ini dan sistem akan menjadualkan proses lain untuk pelaksanaan; Apabila proses dengan keutamaan yang lebih tinggi (proses operasi sistem) memerlukan potongan masa, untuk memastikan proses dengan keutamaan yang lebih tinggi boleh dilaksanakan, proses semasa akan digantung ; Jika terdapat fungsi tidur dalam proses semasa, ia juga akan digantung Penukaran konteks urutan? Untuk sistem pengendalian, thread ialah unit pelaksanaan terkecil, dan proses ialah unit pengurusan sumber terkecil Apabila proses mempunyai berbilang utas, utas ini akan berkongsi sumber proses induk (iaitu berkongsi sumber yang sama seperti memori maya dan pembolehubah global). Sumber ini tidak perlu diubah suai semasa penukaran konteks. Selain itu, urutan juga mempunyai data peribadinya sendiri, seperti tindanan dan daftar, yang juga perlu disimpan semasa penukaran konteks. Ringkasnya, terdapat dua situasi penukaran konteks benang: Dua sebelum dan selepas Thread tergolong dalam proses yang berbeza, kerana sumber tidak dikongsi, jadi proses penukaran adalah sama seperti penukaran konteks proses; selepas tergolong dalam proses yang sama, kerana memori maya dikongsi, jadi apabila menukar, sumber seperti memori maya kekal tidak berubah Hanya data peribadi, daftar dan data bukan kongsi lain yang perlu ditukar. Sampuk suis konteks? Pengendalian gangguan akan mengganggu penjadualan biasa dan pelaksanaan proses. Apabila mengganggu proses lain, keadaan semasa proses perlu disimpan Selepas gangguan tamat, proses masih boleh meneruskan berjalan dari keadaan asalnya. Ringkasan Menurut laporan ujian Tsuna, setiap suis konteks memerlukan puluhan nanosaat hingga beberapa mikrosaat masa CPU Kali ini Masih cukup mengagumkan . Tidak kira senario mana yang menyebabkan penukaran konteks, anda harus tahu: Penukaran konteks CPU, ya Ia adalah satu daripada fungsi teras yang memastikan operasi normal sistem Linux Dalam keadaan biasa, kita tidak perlu memberi perhatian khusus kepadanya. Walau bagaimanapun, penukaran konteks yang berlebihan akan memakan masa CPU dalam menyimpan dan memulihkan data seperti daftar, tindanan kernel dan memori maya, sekali gus memendekkan proses sebenar proses . Masa berjalan menyebabkan prestasi keseluruhan sistem menurun dengan ketara. Cadangan berkaitan: "Tutorial Video Linux"用户态
panggilan sistem:
Pelaksanaan proses ditamatkan, dan CPU yang digunakan sebelum ini akan dikeluarkan, dan potongan masa menunggu seterusnya akan diambil daripada baris gilir sedia . proses;
Apabila proses hanya mempunyai satu utas, proses itu boleh dianggap sama kepada benang.
Atas ialah kandungan terperinci apakah konteks dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!