Rumah  >  Artikel  >  Tutorial sistem  >  Melihat lebih dekat pemasa kernel Linux: mekanisme tak segerak berasaskan gangguan dan prinsip konteks bukan proses

Melihat lebih dekat pemasa kernel Linux: mekanisme tak segerak berasaskan gangguan dan prinsip konteks bukan proses

王林
王林asal
2024-07-18 11:13:55614semak imbas

深入了解 Linux 内核定时器:基于中断的异步机制与非进程上下文原则

1. Pemasa inti 1. Konsep asas

Dalam senario tertentu, kami perlu melakukan tindakan tertentu selepas masa tertentu, dan kami tidak mahu membazirkan CPU dengan menunggu Pada masa ini, pemasa adalah mekanisme yang sangat sesuai. Pemasa digunakan untuk melaksanakan fungsi pada titik tertentu pada masa hadapan untuk menyelesaikan tugas tertentu.

Pemasa kernel memberitahu kernel untuk memanggil fungsi tertentu dengan parameter tertentu pada titik masa tertentu. Pemasa berjalan secara tidak segerak pada pendaftarnya Apabila pemasa sedang berjalan, tugas yang mendaftarkan pemasa mungkin sedang tidur atau berjalan pada pemproses lain, atau mungkin telah lama dikeluarkan.

Pemasa kernel dalam Linux dilaksanakan berdasarkan gangguan (lembut) Pemasa aplikasi Linux, iaitu, ia berada dalam konteks gangguan dan bukannya konteks proses. Terdapat beberapa prinsip yang perlu diikuti dalam konteks bukan proses:

Akses ke ruang pengguna tidak dibenarkan

arus tidak bermakna dan oleh itu tidak tersedia

Tidak boleh tidur atau jadual. Jadual atau beberapa jenis tunggu_acara tidak boleh dipanggil, begitu juga sebarang fungsi yang boleh menyebabkan tidur dipanggil. Semaphore juga tidak tersedia kerana semaphore boleh menyebabkan hibernasi.

应用定时器2_linux 应用定时器_应用定时器2安卓版下载

Kod kernel boleh menentukan sama ada ia sedang dalam konteks gangguan dengan memanggil fungsi in_interrupt(). Kernel boleh menentukan sama ada penjadualan dibenarkan pada masa ini dengan memanggil in_atomic(). Situasi di mana penjadualan tidak dibenarkan termasuk: berada dalam konteks gangguan dan konteks yang memiliki kunci pembawa.

Oleh kerana pemasa dilaksanakan secara tidak segerak, fungsi pemprosesan pemasa mesti memberi perhatian kepada perlindungan pengecualian bersama.

2.Pemasa disokong oleh kernel linux

Inti Linux menyokong dua jenis pemasa:

Pemasa klasik: pemasa yang ketepatannya bergantung pada kekerapan jam komputer terganggu. Ketepatan pemasa biasanya agak rendah, dengan ketepatan 1000/HZms. Pemasa ini dijana pada frekuensi tetap, iaitu setiap 1000/HZms. Jika ciri jam dinamik tidak didayakan, tiada gangguan pemasaan sebenar mungkin berlaku apabila pemasa tamat tempoh Contohnya, hanya pemasa berikut ditambahkan pada sistem: pemasa tamat tempoh 11ms, 52ms dan 78ms, dan pemasa tamat tempoh dengan tepat pemasa akan tamat tempoh pada gandaan 4 ms (4, 8, 12...), jadi mungkin tidak semestinya terdapat gangguan pemasaan pada masa apabila pemasa tamat tempoh.

Pemasa kadar bingkai tinggi: Ketepatan pemasa klasik agak rendah Dalam sesetengah kes, pemasa ketepatan yang lebih tinggi diperlukan, seperti aplikasi multimedia dalam sistem pengendalian Linux Cina, jadi pemasa jenis ini diperkenalkan dalam sistem. Pemasa ini pada asasnya boleh berlaku pada bila-bila masa.

应用定时器2_linux 应用定时器_应用定时器2安卓版下载

Dua konsep pengecualian juga diperlukan di sini:

Jam dinamik: Jam berkala pemasa aplikasi linux hanya diaktifkan apabila tugasan perlu dilaksanakan sebenarnya, jika tidak, teknologi jam berkala dilumpuhkan. Pendekatannya adalah untuk melumpuhkan jam berkala jika anda perlu menjadualkan melahu untuk dijalankan, kemudian dayakan jam berkala sehingga pemasa seterusnya tamat tempoh atau gangguan berlaku. Jam satu pukulan adalah prasyarat untuk merealisasikan jam dinamik, kerana ciri utama jam dinamik ialah jam boleh dihentikan atau dimulakan semula mengikut keperluan, dan jam berkala tulen tidak sesuai untuk senario ini.

Jam berkala: Jam yang membentuk masa jam secara berkala.

Dari segi aplikasi, pemasa mempunyai dua kegunaan utama:

Masa tamat: Menunjukkan gangguan yang akan berlaku selepas tempoh masa tertentu Malah, apabila menggunakan tamat masa, dalam kebanyakan kes, tamat masa tidak dijangka berlaku, dan pemasa sering dibatalkan sebelum tamat masa. Di samping itu, walaupun ia tidak dibatalkan, insiden tamat masa selalunya bukan insiden yang tepat Contohnya, pelbagai pemasa tamat masa yang digunakan dalam rangkaian sering menyatakan maksud bahawa jika tiada... sebelum ini masa, ia boleh. dipertimbangkan ..., nilai masa ini selalunya merupakan nilai empirikal atau nilai yang dikira, dan bukan keperluan masa yang tepat. Dalam situasi ini pemasa klasik adalah mencukupi.

Pemasa: digunakan untuk melaksanakan pemasaan Sebagai contoh, semasa memainkan bunyi, data perlu dihantar ke kad bunyi secara berkala lama kelamaan, herotan bunyi akan berlaku. Pada masa ini, pemasa berketepatan tinggi mesti digunakan.

应用定时器2安卓版下载_linux 应用定时器_应用定时器2

Linux boleh digesa untuk berfungsi dalam mod berikut melalui konfigurasi:

Jam dinamik kadar bingkai tinggi

Jam tempoh kadar bingkai tinggi

Jam dinamik kadar bit rendah

Jam tempoh kadar kod rendah

3. Pemasa isirung kadar bit rendah

linux 应用定时器_应用定时器2安卓版下载_应用定时器2

Pemasa kadar bit rendah ialah pemasa kernel yang paling biasa Kernel akan menggunakan gangguan jam pemproses atau mana-mana sumber jam berkala yang sesuai sebagai garis dasar masa pemasa. Gangguan jam berlaku secara berkala, HZ kali sesaat. Fungsi pemprosesan pemasa yang sepadan dengan gangguan ini biasanya pemasa_gangguan Dalam pemprosesan fungsi ini, ia akhirnya akan dilaraskan kepada do_timer dan update_process_timers. Antaranya, do_timer akan bertanggungjawab untuk tugas seluruh sistem dan global: mengemas kini jiffies dan statistik proses pemprosesan dan fungsi terakhir akan melaksanakan statistik proses untuk membentuk TIMER_SOFTIRQ untuk memberikan kesedaran masa kepada penjadual.

Apabila pemasa tamat tempoh, pemasa akan dialih keluar daripada tatasusunan pengaktifan sebelum fungsi pemprosesan pemasa dipanggil Oleh itu, jika anda ingin melaksanakan semula selepas tempoh masa selepas pelaksanaan ini, anda perlu menambah semula pemasa. peranti. Dalam sistem SMP, fungsi pemasa akan dilaksanakan oleh CPU di mana ia didaftarkan.

Pelaksanaan pemasa kernel mesti memenuhi keperluan dan andaian berikut:

Pengurusan pemasa mestilah semudah mungkin.

Reka bentuk mesti mempunyai kebolehskalaan yang baik apabila pemasa aktiviti dikurangkan dengan banyak

Kebanyakan pemasa tamat tempoh dalam beberapa saat atau paling lama beberapa minit, dan pemasa dengan kelewatan yang lama agak jarang berlaku.

Pemasa harus dijalankan pada CPU yang sama seperti tempat ia didaftarkan.

Pelaksanaan pemasa kernel kadar bit rendah adalah sangat bijak. Ia berdasarkan struktur data per-CPU. Tatasusunan asas timer_list mengandungi penunjuk yang menunjuk kepada struktur ini. Jika asas adalah NULL, pemasa ini belum dipanggil untuk dijalankan jika tidak, penunjuk ini memberitahu struktur data yang mana (iaitu, CPU mana) yang menjalankannya.

Apabila kod kernel mendaftarkan pemasa (melalui add_timer atau mod_timer), operasi akhirnya dilakukan oleh internal_add_timer (dalam kernel/timer.c), yang menambahkan pemasa baharu pada "jadual lata" yang dikaitkan dengan CPU semasa "dalam pemasa tatasusunan sehala.

Cara jadual melata berfungsi:

Jika pemasa tamat tempoh dalam masa 0 hingga 255 kejap berikutnya, ia akan ditambahkan pada salah satu daripada 256 tatasusunan yang disediakan khas untuk pemasa jangka pendek, menggunakan tamat tempoh (iaitu tatasusunan yang ditambahkan ditentukan oleh bit masa tamat tempoh) lebih rendah 8 bit yang ditentukan) tentukan tatasusunan yang hendak ditambah

Jika ia tamat tempoh lagi pada masa hadapan (tetapi sebelum 16384 sekejap), ia ditambahkan pada salah satu daripada 64 tatasusunan ini berkaitan dengan 8-13 bit tamat tempoh Bit menentukan tatasusunan yang digunakan .

Teknik serupa digunakan untuk tamat tempoh bit 14-19, 20-25 dan 26-31.

Jika pemasa tamat tempoh kemudian

Atas ialah kandungan terperinci Melihat lebih dekat pemasa kernel Linux: mekanisme tak segerak berasaskan gangguan dan prinsip konteks bukan proses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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