Teknik klasik untuk komunikasi antara proses Linux

WBOY
Lepaskan: 2022-02-09 17:38:57
ke hadapan
1898 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang komunikasi antara proses Linux, termasuk paip, paip tanpa nama, memori dikongsi dan isu berkaitan yang lain, saya harap ia akan membantu semua orang.

Teknik klasik untuk komunikasi antara proses Linux

·Komunikasi antara proses: Kaedah yang disediakan oleh sistem pengendalian untuk sistem melaksanakan komunikasi antara proses

Adalah mustahil untuk berkomunikasi secara langsung antara proses kerana setiap proses mempunyai ruang alamat maya yang bebas dan mengakses alamat mayanya sendiri Oleh itu, proses tersebut adalah bebas dan tidak boleh berkomunikasi secara langsung

Mengikut senario komunikasi. adalah berbeza, jadi pelbagai kaedah komunikasi disediakan

Jenis kaedah komunikasi antara proses: paip, memori dikongsi, baris gilir mesej, semafor

·Saluran paip

Ciri-ciri: Komunikasi separuh dupleks - komunikasi sehala dengan arah yang anda boleh pilih

Intipati: Buka penimbal dalam kernel (sekeping memori dalam kernel ruang)

Prinsip: Pelbagai proses berkomunikasi dengan mengakses penimbal dalam kernel yang sama (menyalin pemegang operasi penimbal)

Kategori: Paip tanpa nama: Penampan tidak mempunyai pengecam dan hanya boleh digunakan dengan komunikasi antara proses pertalian

Paip bernama: Penampan mempunyai pengecam dan boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama

Semua di bawah Linux ialah fail - semuanya dianggap sebagai fail Lakukan operasi yang sama (termasuk paip), dan lengkapkan akses kepada paip melalui operasi IO

·Paip tanpa nama

Nilai pulangan: 0 pada kejayaan; -1 pada kegagalan

Ciri: Hanya boleh digunakan untuk komunikasi antara proses dengan pertalian

Paip tanpa nama tidak mempunyai pengecam , tidak boleh ditemui oleh proses lain, dan hanya boleh mendapatkan pemegang operasi untuk mencapai komunikasi dengan menyalin proses induk melalui proses anak

Ciri baca dan tulis: Jika tiada data dalam paip, baca akan menyekat

Jika data dalam paip penuh, tulis akan menyekat

Hujung bacaan semua saluran paip ditutup, dan Tulis yang berterusan akan mencetuskan keabnormalan, menyebabkan ranap proses menarik diri daripada

Hujung tulisan semua paip ditutup, dan terus membaca akan membaca dan membacanya akan membaca Kembali 0 selepas melengkapkan data dan tidak lagi menyekat

Nota: Saluran paip adalah komunikasi separuh dupleks, sekali arah dipilih, hujung yang tidak digunakan hendaklah ditutup.

· Paip bernama: pada asasnya ialah penimbal dalam kernel, dengan pengecam, Boleh didapati oleh proses lain, jadi ia boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama Pengecam paip bernama ialah fail jenis paip yang boleh dilihat dalam sistem fail

Pelbagai proses membuka fail paip yang sama, mengakses penimbal dalam kernel yang sama untuk mencapai komunikasi

Operasi arahan: nama fail mkfifo Cipta fail paip bernama

Operasi fungsi: int mkfifo(const char *nama laluan, mod_t ) ;

nama laluan: nama fail; mod: kebenaran penciptaan

Nilai pulangan: 0 dikembalikan apabila berjaya; -1 dikembalikan apabila gagal

·Ringkasan: Intipati paip: penimbal dalam ruang kernel Prinsip: Pelbagai proses mencapai penghantaran data dengan mengakses penimbal yang sama

Kategori: paip tanpa nama, paip bernama

Paip tanpa nama: hanya boleh digunakan untuk komunikasi antara proses dengan pertalian

Paip bernama: boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama

Ciri: ① Komunikasi separuh dupleks --Komunikasi sehala dengan arah boleh dipilih

Menyediakan perkhidmatan penghantaran strim bait: penstriman berasaskan sambungan yang teratur, boleh dipercayai

Berasaskan sambungan: semua pembaca ditutup maka tulis adalah tidak normal; jika semua hujung tulis ditutup, baca pulangan 0

② Datang dengan penyegerakan dan pengecualian bersama:

Penyegerakan: Keselamatan operasi akses dicapai melalui akses unik sumber kritikal oleh proses pada masa yang sama

Saling eksklusif: Jadikan akses proses kepada sumber kritikal lebih munasabah dan teratur melalui beberapa pertimbangan bersyarat

kemudian tulis blok

③ Kitaran hidup bergantung pada proses: tanpa campur tangan manusia, setelah semua proses yang membuka keluar paip, penampan paip dikeluarkan

·Memori dikongsi: Digunakan untuk merealisasikan perkongsian data antara proses Intipati: sekeping memori fizikal

Prinsip: membuka sekeping ruang memori fizikal dan pelbagai proses akan memetakan blok yang sama ke memori maya mereka sendiri Ruang alamat diakses terus melalui alamat maya untuk mencapai perkongsian data

Ciri-ciri: Kaedah komunikasi antara proses terpantas, kitaran hayat mengikuti kernel

Memori dikongsi secara langsung mengakses memori fizikal melalui alamat maya untuk mencapai perkongsian data Berbanding dengan kaedah lain, data perlu dipindahkan Salin ke kernel dan salin ke mod pengguna apabila digunakan, menghapuskan dua operasi penyalinan data

Nota: Isu keselamatan perlu diberi perhatian apabila mengendalikan memori kongsi Proses operasi:

①Buat atau buka memori kongsi

②Petakan memori yang dikongsi ke ruang alamat maya proses

③Lakukan pelbagai operasi memori melalui alamat maya yang dipetakan

④Nyahpetakan hubungan pemetaan

⑤Padamkan memori yang dikongsi

int shmget(key_t key, size_t size, int shmflg);

key: pengecam (berbilang proses membuka memori kongsi yang sama melalui pengecam yang sama) ​​

saiz : Saiz ruang yang dibuka semasa penciptaan (dalam halaman memori)

shmflg: Kaedah pembukaan Kebenaran penciptaan--IPC_CREAT|IPC_EXCL|0664

Nilai pulangan: Berjaya mengembalikan integer bukan negatif - -Pengendalian operasi; kegagalan kembali -1

void *shmat(int shmid, const void *shmaddr, int shmflg);

shmid: pemegang operasi dikembalikan oleh shmget

shmaddr: alamat pemetaan, biasanya ditetapkan kepada NULL

shmflg: Mod akses selepas pemetaan berjaya; SHM_RDONLY-baca-sahaja; 1 jika gagal

int shmdt(const void *shmaddr);

shmaddr: alamat pertama dipetakan Nilai pulangan: 0 pada kejayaan; -1 pada kegagalan

int shmctl (int shmid, int cmd, struct shmid_ds *buf); Dimusnahkan

buf: Untuk IPC_RMID, 0 dikembalikan apabila berjaya, -1 dikembalikan apabila gagal

·Baris Gilir Mesej

Intipati: Baris gilir keutamaan dalam kernel Berbilang proses mengakses baris gilir yang sama dan menambah atau mendapatkan nod pada baris gilir untuk merealisasikan penghantaran blok data antara proses

Ciri-ciri: Penyegerakan terbina dalam dan pengecualian bersama, hayat Kitaran berubah dengan kernel

·Semaphore

Intipati: baris gilir menunggu pcb kaunter dalam kernel

Fungsi: digunakan Realisasikan penyegerakan dan pengecualian bersama antara proses, dan selaraskan akses kepada sumber kritikal melalui proses

Operasi P: Kaunter -1, tentukan sama ada kiraan kurang daripada 0, sekat proses Operasi V: Kaunter 1, bangunkan Proses yang disekat

mengira sumber melalui kaunternya sendiri dan menggunakan pengiraan untuk menentukan sama ada proses perolehan sumber adalah munasabah. Jika ia tidak munasabah, ia akan disekat. Selepas menunggu sumber dijana, bangunkan proses yang disekat

Pelaksanaan segerak: Kira sumber melalui pembilang, dan lakukan operasi P sebelum memperoleh sumber

Pelaksanaan saling eksklusif: Pembilang ialah 1, yang bermaksud Terdapat hanya satu sumber Proses menjalankan operasi P sebelum mengakses sumber dan operasi V selepas capaian selesai

Cadangan berkaitan: "Tutorial Video Linux"

Atas ialah kandungan terperinci Teknik klasik untuk komunikasi antara proses Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.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