cari
RumahTutorial sistemLINUXArtifak dalam Linux: Prinsip dan Aplikasi eventfd

Artifak dalam Linux: Prinsip dan Aplikasi eventfd

Feb 13, 2024 pm 08:30 PM
KemahiranPesananoverflow

Linux ialah sistem pengendalian berkuasa yang menyediakan banyak mekanisme komunikasi antara proses yang cekap, seperti paip, isyarat, baris gilir mesej, memori dikongsi, dsb. Tetapi adakah cara yang lebih mudah, lebih fleksibel dan lebih cekap untuk berkomunikasi? Jawapannya ya, itulah eventfd. eventfd ialah panggilan sistem yang diperkenalkan dalam Linux versi 2.6 Ia boleh digunakan untuk melaksanakan pemberitahuan acara, iaitu, untuk menyampaikan acara melalui deskriptor fail. eventfd mengandungi pembilang integer tidak bertanda 64-bit yang diselenggara oleh kernel Proses ini boleh membaca/menukar nilai pembilang dengan membaca/menulis deskriptor fail ini untuk mencapai komunikasi antara proses. Apakah kelebihan eventfd? Ia mempunyai ciri-ciri berikut:

Artifak dalam Linux: Prinsip dan Aplikasi eventfd

  • eventfd tidak perlu mencipta sebarang fail atau ruang memori tambahan, ia hanya memerlukan deskriptor fail
  • eventfd boleh digunakan bersama dengan mekanisme pemultipleksan seperti pilih, tinjauan pendapat dan epoll untuk mencapai pengaturcaraan dipacu acara yang cekap
  • eventfd boleh ditetapkan kepada mod bukan sekatan atau semaphore, memberikan semantik komunikasi yang berbeza
  • eventfd boleh merentas proses atau sempadan benang untuk mencapai tahap komunikasi yang berbeza.

Jadi, bagaimana eventfd berfungsi? Apakah senario aplikasi yang ada padanya? Artikel ini akan memperkenalkan eventfd artifak dari dua aspek: prinsip dan aplikasi.

Secara umumnya: Terdapat lima penyelesaian utama untuk komunikasi antara proses Linux: paip, baris gilir mesej, semafor, memori dikongsi dan soket.
Saya tidak begitu biasa dengan paip. Saya hanya tahu tentang batasan paip umum dan hubungan antara proses ibu bapa dan anak. Saya menolaknya pada mulanya kerana apa yang saya mahu lakukan adalah komunikasi antara proses yang bebas terhad kepada proses ibu bapa dan anak, tetapi dalam keadaan kernel Tidak pasti cara menggunakannya.
Saya tidak faham Baris Mesej langsung.
Inti semaphore ialah operasi atom pembolehubah kernel, tetapi antara muka hanya dicerminkan dalam keadaan pengguna, dan operasi PV semaphore nampaknya lebih kepada pengecualian bersama, dan bukannya mekanisme bangun pemberitahuan yang saya mahukan. .
Memori yang dikongsi lebih menyusahkan Antara muka hanya dalam mod pengguna Jika anda ingin berkongsi memori antara mod kernel dan mod pengguna, anda perlu menulis fail itu sendiri dan kemudian menyediakan antara muka mmap.
Soket hanya digunakan dengan tcp/udp af_inet dan dgram af_unix sebelum ini. Kernel tidak menyediakan antara muka yang jelas Walaupun anda boleh memanggilnya sendiri menggunakan fungsi seperti sock->ops->recvmsg Lagipun, anda perlu membina sendiri parameter input, yang masih terasa tidak selamat.

Satu-satunya perkara yang tinggal nampaknya ialah netlink Soket ini dengan jelas menyediakan fungsi penghantaran paket kernel, kerana ia mengeksport dengan jelas fungsi netlink_kernel_create, jadi fungsi keadaan kernel boleh menggunakan sock ini untuk menghantar paket. Tetapi satu ialah mod pengguna perlu mendaftarkan fungsi menerima paket, dan satu lagi ialah mod kernel masih perlu memasang skb untuk menghantar paket Ia masih terlalu rumit bagi saya yang hanya mahu bangun dengan pemberitahuan.

Jadi saya mencari lagi dan menemui artifak eventfd Antara komunikasi antara KVM dan Qemu, eventfd digunakan dengan hebat oleh Daniel Selepas menganalisis kod sumber dengan teliti, saya mendapati bahawa perkara ini adalah seperti namanya, semata-mata untuk pemberitahuan .
Sebagai fail (ada apa-apa dalam Linux yang bukan fail~~), struktur data_peribadi eventfd_ctx hanya mempunyai empat pembolehubah yang menyedihkan.

struct eventfd_ctx {
  struct kref kref;  /* 这个就不多说了,file计数用的,用于get/put */
  wait_queue_head_t wqh; /* 这个用来存放用户态的进程wait项,有了它通知机制才成为可能 */
/*
\* Every time that a write(2) is performed on an eventfd, the
\* value of the __u64 being written is added to "count" and a
\* wakeup is performed on "wqh". A read(2) will return the "count"
\* value to userspace, and will reset "count" to zero. The kernel
\* side eventfd_signal() also, adds to the "count" counter and
\* issue a wakeup.
*/
  __u64 count;  /* 这个就是一个技术器,应用程序可以自己看着办,read就是取出然后清空,write就是把value加上 */
  unsigned int flags;  /* 所有的file都有的吧,用来存放阻塞/非阻塞标识或是O_CLOEXEC之类的东西 */
};
  我之所以选用它是因为它有 eventfd_signal 这个特地为内核态提供的接口,下面的是注释。
 \* This function is supposed to be called by the kernel in paths that do not
 \* allow sleeping. In this function we allow the counter to reach the ULLONG_MAX
 \* value, and we signal this as overflow condition by returining a POLLERR to poll(2).

Malah, akan lebih jelas jika anda melihat kod tersebut

int eventfd_signal(struct eventfd_ctx *ctx, int n)
{
  unsigned long flags;

  if (n return -EINVAL;
  spin_lock_irqsave(&ctx->wqh.lock, flags);
  if (ULLONG_MAX - ctx->count count);
  ctx->count += n;
  if (waitqueue_active(&ctx->wqh))
    wake_up_locked_poll(&ctx->wqh, POLLIN);
  spin_unlock_irqrestore(&ctx->wqh.lock, flags);

  return n;
}  

Intinya bangun sekali, tanpa membaca atau menulis Bezanya eventfd_write ialah tiada blocking

Ini penggunaan khusus saya:
Keadaan kernel ialah modul yang mendaftarkan peranti misc dan mencipta benang kernel untuk berfungsi (parameternya ialah fail modul->private_data). Sediakan antara muka ioctl untuk proses mod pengguna untuk menyampaikan fd yang dicipta oleh eventfdnya sendiri, dan simpan dalam fail->data_pribadi yang boleh diakses oleh utas kernel.
Apabila keadaan kernel ingin memberitahu keadaan pengguna, eventfd_signal digunakan secara langsung Pada masa ini, urutan keadaan pengguna perlu meletakkan dirinya pada eventfd_ctx->wqh Terdapat dua penyelesaian, satu ialah memanggil baca untuk memanggil tinjauan pendapat. Jika ia adalah bacaan, eventfd_ctx->count akan dikosongkan kemudian dan boleh disekat kali seterusnya. Walau bagaimanapun, jika tinjauan pendapat digunakan, kiraan tidak dibersihkan selepas itu, menyebabkan tinjauan pendapat kembali serta-merta walaupun tiada eventfd_signal dalam keadaan kernel semasa mengundi lagi.
Memaklumkan keadaan kernel dari keadaan pengguna adalah sedikit lebih menyusahkan Pertama, anda perlu membuat eventfd dan kemudian menghantarnya ke file->private_data (operasi di sini adalah sama seperti di atas). iotcl dalam modul, yang bertanggungjawab untuk keadaan pengguna untuk memberitahu keadaan kernel , eventfd_signal dilakukan dalam fungsi Benang keadaan kernel perlu diletakkan pada eventfd_ctx->wqh terlebih dahulu dalam keadaan kernel sendiri (nampaknya menyusahkan lagi).

Artikel ini memperkenalkan eventfd, artifak dalam Linux Ia adalah mekanisme komunikasi antara proses yang mudah, fleksibel dan cekap. Kami menganalisis penciptaan, membaca dan menulis, dan membenderakan bit eventfd dari aspek prinsip, dan memberikan contoh kod yang sepadan. Kami juga memperkenalkan penggunaan eventfd dalam senario seperti mod pengguna dan komunikasi mod kernel, pemasa dan pencetus peristiwa dari perspektif aplikasi, dan memberikan contoh kod yang sepadan. Melalui kajian artikel ini, kita boleh menguasai penggunaan asas eventfd, dan boleh menggunakan eventfd secara fleksibel dalam pembangunan sebenar untuk mencapai keperluan komunikasi yang berbeza. Semoga artikel ini dapat membantu anda!

Atas ialah kandungan terperinci Artifak dalam Linux: Prinsip dan Aplikasi eventfd. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:良许Linux教程网. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Alat dan kerangka penting untuk menguasai penggodaman etika di LinuxAlat dan kerangka penting untuk menguasai penggodaman etika di LinuxApr 11, 2025 am 09:11 AM

Pengenalan: Mengamankan sempadan digital dengan penggodaman etika berasaskan Linux Di dunia yang semakin saling berkaitan, keselamatan siber adalah yang paling penting. Ujian penggodaman dan penembusan etika adalah penting untuk mengenal pasti dan mengurangkan keruntuhan secara proaktif

Bagaimana untuk belajar asas Linux?Bagaimana untuk belajar asas Linux?Apr 10, 2025 am 09:32 AM

Kaedah untuk pembelajaran asas Linux dari awal termasuk: 1. Memahami sistem fail dan antara muka baris perintah, 2. Master arahan asas seperti LS, CD, MKDIR, 3.

Apakah yang paling banyak digunakan Linux?Apakah yang paling banyak digunakan Linux?Apr 09, 2025 am 12:02 AM

Linux digunakan secara meluas dalam pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam bidang pelayan, Linux telah menjadi pilihan yang ideal untuk menganjurkan laman web, pangkalan data dan aplikasi kerana kestabilan dan keselamatannya. 2) Dalam sistem tertanam, Linux popular untuk penyesuaian dan kecekapan yang tinggi. 3) Di persekitaran desktop, Linux menyediakan pelbagai persekitaran desktop untuk memenuhi keperluan pengguna yang berbeza.

Apakah kelemahan Linux?Apakah kelemahan Linux?Apr 08, 2025 am 12:01 AM

Kelemahan Linux termasuk pengalaman pengguna, keserasian perisian, sokongan perkakasan, dan keluk pembelajaran. 1. Pengalaman pengguna tidak mesra seperti Windows atau MacOS, dan ia bergantung pada antara muka baris arahan. 2. Keserasian perisian tidak sebaik sistem lain dan tidak mempunyai versi asli banyak perisian komersial. 3. Sokongan perkakasan tidak begitu komprehensif seperti Windows, dan pemandu boleh dikumpulkan secara manual. 4. Keluk pembelajaran adalah curam, dan menguasai operasi baris arahan memerlukan masa dan kesabaran.

Adakah Linux sukar belajar?Adakah Linux sukar belajar?Apr 07, 2025 am 12:01 AM

Linuxisnothardtolearn, butthedifficultydependsonyourbackgroals.forthosewithosexperience, shewhand-linefamiliarity, linuxisaneasytransition.beginnersmayfaceasterlepercurveButcananageWithPropenuSourcesources

Apakah 5 komponen asas Linux?Apakah 5 komponen asas Linux?Apr 06, 2025 am 12:05 AM

Lima komponen asas Linux adalah: 1. Kernel, menguruskan sumber perkakasan; 2. Perpustakaan sistem, menyediakan fungsi dan perkhidmatan; 3. Shell, antara muka pengguna untuk berinteraksi dengan sistem; 4. Sistem fail, menyimpan dan menganjurkan data; 5. Aplikasi, menggunakan sumber sistem untuk melaksanakan fungsi.

Automasi Rumah Ubuntu: Membina Ruang Hidup Pintar dengan Alat Sumber TerbukaAutomasi Rumah Ubuntu: Membina Ruang Hidup Pintar dengan Alat Sumber TerbukaApr 05, 2025 am 09:19 AM

Membuka Bab Baru di Rumah Pintar: Sistem Automasi Rumah Terbuka Sumber Berdasarkan Ubuntu Teknologi rumah pintar telah merevolusikan cara kita berinteraksi dengan ruang tamu kita, membawa kemudahan, keselamatan dan kecekapan tenaga kepada kehidupan seharian kita. Dari kawalan jauh lampu dan peralatan, untuk memantau kamera keselamatan dan kawalan iklim automatik, teknologi rumah pintar menjadi semakin popular. Walau bagaimanapun, banyak sistem rumah pintar perniagaan mempunyai batasan: kos yang tinggi, isu privasi, dan keserasian terhad. Mujurlah, penyelesaian perisian sumber terbuka menggabungkan kuasa Ubuntu untuk menyediakan alternatif-membolehkan pengguna membuat ekosistem rumah pintar yang disesuaikan, kos efektif dan selamat. Panduan ini akan meneroka cara menyediakan sistem automasi rumah menggunakan Ubuntu dan alat sumber terbuka.

Linux vs Windows: Apa ' s Perbezaan pada tahun 2025?Linux vs Windows: Apa ' s Perbezaan pada tahun 2025?Apr 05, 2025 am 09:05 AM

Linux vs Windows: Perbandingan 2025 Berfikir tentang beralih dari macOS atau Windows? Linux mungkin jawapannya. Walaupun pengguna MACOS akan mendapati peralihan yang agak lancar (kerana teras UNIX MacOS), pengguna Windows perlu menyesuaikan diri. Panduan ini

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod