Berbagi teknologi

Komunikasi antar proses - pipa

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Masukkan deskripsi gambar di sini

1. Pengantar proses komunikasi

1.1 Mengapa diperlukan komunikasi antar proses

Diperlukan kolaborasi antar proses. Misalnya, seluruh tingkatan manajemen di suatu sekolah saling berhubungan dan tidak dapat dikelola secara vertikal. Justru karena proses perlu berkolaborasi. Prasyarat untuk kolaborasi adalah proses perlu berkomunikasi. Beberapa data siap untuk diberitahukan, beberapa data hanya berupa data yang dikirimkan, dan beberapa lagi adalah data yang terkait dengan kontrol.

Fakta: Proses bersifat independen, proses = struktur data kernel, kode dan data proses

Tujuan dari proses komunikasi:

  • Transfer data: Satu proses perlu mengirimkan datanya ke proses lain
  • Berbagi sumber daya: berbagi sumber daya yang sama antara beberapa proses.
  • Peristiwa pemberitahuan: Suatu proses perlu mengirimkan pesan ke proses lain atau sekelompok proses untuk memberitahukannya (mereka) bahwa peristiwa tertentu telah terjadi (seperti memberi tahu proses induk ketika proses berakhir).
  • Kontrol proses: Beberapa proses berharap untuk sepenuhnya mengontrol eksekusi proses lain (seperti proses Debug, proses kontrol berharap untuk mencegat semua jebakan dan pengecualian dari proses lain dan dapat mengetahui perubahan statusnya pada waktunya).

1.2 Bagaimana proses berkomunikasi

Biaya komunikasi antar proses mungkin sedikit lebih tinggi: proses bersifat independen, dan sumber daya apa pun yang dibuka oleh satu proses tidak terlihat oleh proses lain. Ketika kita berbicara tentang proses induk-anak sebelumnya, data dari proses induk diwarisi oleh proses anak. Ini bukan milik komunikasi. Ini bisa diwariskan tetapi tidak selalu diwariskan. Ada perbedaan antara kemampuan untuk mengirimkan informasi dan selalu mampu menyampaikan informasi.

Premis komunikasi antar-proses: pertama-tama biarkan proses yang berbeda melihat sumber daya (sistem operasi) yang sama ("sepotong memori"). Kedua proses tersebut bersifat independen. Untuk mencapai komunikasi diperlukan suatu alat yaitu sistem operasi yang memungkinkan kedua proses tersebut memiliki memori yang sama. Alasan mengapa sistem operasi melakukan hal ini ditentukan oleh pengguna.
Cara memberitahu sistem operasi untuk membuat sumber daya:

  1. Proses tertentu harus berkomunikasi terlebih dahulu dan membiarkan OS membuat sumber daya bersama.
  2. OS harus menyediakan banyak panggilan sistem untuk memungkinkan proses menerapkan sumber daya sistem melalui panggilan sistem.
    Sumber daya bersama yang berbeda yang dibuat oleh OS dan antarmuka panggilan sistem yang berbeda menentukan jenis komunikasi antar-proses yang berbeda.

Masukkan deskripsi gambar di sini

2. Saluran pipa

2.1 Saluran Pipa Anonim

2.1.1 Pipa pemahaman deskriptor file

Masukkan deskripsi gambar di sini

Pipeline pada dasarnya adalah file tingkat memori yang tidak perlu dipindahkan ke disk.
Pertama, proses induk membuka file dua kali dalam mode baca dan tulis. Alasan membuka file dua kali adalah untuk mendapatkan dua objek file struct, sehingga ada dua pointer baca dan tulis untuk suatu file, sehingga operasi baca dan tulis. gunakan petunjuk independen. Dengan cara ini, membaca dan menulis tidak akan saling mempengaruhi.Penunjuk baca-tulis mencatat posisi baca atau tulis file saat ini, astruct file Hanya ada satu penunjuk baca-tulis dalam file. Saat menulis (atau membaca) ke file, penunjuk baca-tulis akan bergerak, dan kemudian membaca (menulis) lagi pada posisi semula dan tidak dapat membaca konten yang baru saja ditulis, jadi Anda perlu membuka file yang sama dua kali dengan cara yang berbeda. Kemudian buat proses anak. Proses anak akan mewarisi file yang dibuka di proses induk, yaitu mewarisi tabel deskriptor file dari proses induk. Pada saat ini, proses induk dan anak akan berbagi sumber daya file yang sama Proses dapat meneruskan deskriptor file No. 4 ke file tersebut. Saat menulis ke file, proses induk dapat membaca dari file melalui deskriptor file No. 3. Pada saat ini, proses induk dan anak mewujudkan transmisi data, yaitu komunikasi. . Proses induk dan anak melihat buffer memori yang sama, yang kami sebut file pipa di sini. Pipa hanya memungkinkan komunikasi satu arah karena kesederhanaannya.

Mengapa proses orangtua-anak mencetak data ke terminal monitor yang sama?
Karena proses anak yang sesuai akan mewarisi tabel deskriptor file yang sesuai dengan proses induk, dan kemudian menunjuk ke file yang sama, yang berarti bahwa proses induk akan mengetikkan file, dan proses anak juga akan mengetikkan file, dan hal yang sama akan ditulis dalam buffer, sistem operasi akan dipindahkan ke monitor yang sama.


Prosesnya akan membuka tiga input standar dan output standar secara default: 0, 1, 2... Bagaimana cara membuka 0, 1, 2 secara default?
Semua perintahnya adalahbashproses anak, selamabashSaat diaktifkan, semua proses anak diaktifkan secara default.


Mengapa proses anak ditutup secara aktif (0/1/2) tanpa mempengaruhi kelanjutan penggunaan file monitor oleh proses induk?
penghitungan referensi tingkat memori--, ketika jumlah referensi tingkat memori berkurang menjadi 0, sumber daya file akan dilepaskan.


Proses induk-anak menutup deskriptor file yang tidak perlu, mengapa harus dibuka sebelumnya?
Untuk memungkinkan proses anak untuk mewarisi. Tidak perlu ditutup, namun disarankan ditutup untuk mencegah tulisan yang tidak disengaja.


Mengapa pipa berkomunikasi satu arah?
Metodenya sederhana, mengurangi biaya pengembangan, dan hanya memungkinkan komunikasi satu arah. File apa pun di-refresh ke dalam buffer, dan kemudian data di-refresh ke dalam file.
Pipa-pipa sederhana yang kita lihat dalam kehidupan semuanya bersifat satu arah, seperti pipa air, dengan satu pintu masuk dan satu pintu keluar, yang sesuai dengan karakteristik pipa.

2.1.2 Penggunaan antarmuka

bisa menggunakanpipeUntuk membuat pipa tanpa nama, parameternya tidak memerlukan jalur file dan nama file

int pipe(int pipefd[2]);