cari
RumahTutorial sistemLINUXBagaimana untuk berkongsi memori antara proses Linux

Bagaimana untuk berkongsi memori antara proses Linux

Jun 02, 2024 am 09:18 AM
linuxtutorial linuxTopi Merahsistem linuxarahan linuxpensijilan linuxlinux topi merahvideo linux

Prinsip IPC ingatan bersama

Mekanisme komunikasi antara proses memori dikongsi digunakan terutamanya untuk memindahkan sejumlah besar data antara proses Rajah berikut menunjukkan gambarajah skema menggunakan memori dikongsi untuk memindahkan sejumlah besar data antara proses:

Bagaimana untuk berkongsi memori antara proses Linux

Memori dikongsi ialah ruang memori yang dibuka secara berasingan dalam memori Ruang memori ini mempunyai struktur datanya yang tersendiri, termasuk kebenaran akses, saiz dan masa akses terkini. Struktur data ditakrifkan seperti berikut:

from /usr/include/linux/shm.h

struct shmid_ds {
struct ipc_perm shm_perm; /* operation perms 操作权限 */
int shm_segsz; /* size of segment (bytes) 段长度大小 */
__kernel_time_t shm_atime; /* last attach time 最近attach时间 */
__kernel_time_t shm_dtime; /* last detach time 最近detach时间 */
__kernel_time_t shm_ctime; /* last change time 最近change时间 */
__kernel_ipc_pid_t shm_cpid; /* pid of creator 创建者pid */
__kernel_ipc_pid_t shm_lpid; /* pid of last operator 最近操作pid */
unsigned short shm_nattch; /* no. of current attaches */
unsigned short shm_unused; /* compatibility */
void *shm_unused2; /* ditto - used by DIPC */
void *shm_unused3; /* unused */
};

Sebelum dua proses menggunakan ruang memori kongsi ini, mereka perlu mewujudkan sambungan antara ruang alamat proses dan ruang memori kongsi, iaitu, lekapkan ruang memori kongsi ke dalam proses.

Sistem ini mengenakan sekatan berikut pada memori yang dikongsi:

#define SHMMAX 0x2000000 /* max shared seg size (bytes) 最大共享段大小 */
#define SHMMIN 1 /* min shared seg size (bytes) 最小共享段大小 */
#define SHMMNI 4096 /* max num of segs system wide */
#define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16))
#define SHMSEG SHMMNI /* max shared segs per process */
Pengurusan memori dikongsi Linux
1 Cipta memori bersama
#include <sys> #include <sys></sys></sys>

/*
* Parameter pertama ialah nilai kunci, biasanya dijana oleh fungsi ftok()
* Parameter kedua ialah saiz segmen memori kongsi yang akan dibuat (dalam bait)
* Parameter ketiga digunakan untuk mengenal pasti pengecam penciptaan segmen memori kongsi
*/

int shmget(key_t key, size_t size, int shmflg);
2. Kawalan memori dikongsi
#include <sys> #include <sys></sys></sys>

/*
* Parameter pertama ialah pengecam memori kongsi yang akan dikendalikan
* Parameter kedua ialah operasi yang akan dilakukan
* Parameter ketiga ialah maklumat pembolehubah memori dikongsi sementara bagi struktur shmid_ds
*/

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
3. Memetakan objek memori yang dikongsi

Fungsi panggilan sistem shmat() memetakan segmen memori yang dikongsi ke segmen data proses panggilan dan mengembalikan alamat pertama ruang memori Fungsinya diisytiharkan seperti berikut:

#include <sys>
#include <sys>
</sys></sys>

/*
* Parameter pertama ialah pengecam memori kongsi yang akan dikendalikan
* Parameter kedua digunakan untuk menentukan alamat yang dipetakan bagi memori yang dikongsikan Jika ia bukan 0, parameter ini akan diperuntukkan oleh sistem
* Parameter ketiga digunakan untuk menentukan kebenaran akses dan keadaan pemetaan segmen memori kongsi
*/

void *shmat(int shmid, const void *shmaddr, int shmflg);
4. Tanggalkan objek memori yang dikongsi

Selepas menggunakan ruang memori yang dikongsi, anda perlu menggunakan panggilan fungsi shmdt() untuk memisahkannya daripada proses semasa. Pengisytiharan fungsi adalah seperti berikut:

#include <sys>
#include <sys>
</sys></sys>

/*
* Parameter ialah alamat pertama memori kongsi yang diperuntukkan
*/

int shmdt(const void *shmaddr);
Konvensyen diikuti dengan perkongsian memori antara proses ibu bapa dan anak

1. Selepas menggunakan fungsi fork() untuk mencipta proses anak, proses itu mewarisi memori kongsi yang dipasang oleh proses induk.

2 Jika exec() dipanggil untuk melaksanakan program baharu, semua memori kongsi yang dipasang akan dinyahlekap secara automatik.

3 Jika fungsi exit() dipanggil dalam proses, semua memori kongsi yang dipasang akan diputuskan sambungan daripada proses semasa.

Contoh Program

Mohon untuk memori yang dikongsi, proses induk menyimpan integer pada alamat pertama, dan proses anak membacanya.

#include
#include <sys>
#include <sys>
#include <sys>
#include
#include

#define SHM_SIZE 1024

int main()
{
int shm_id, pid;
int *ptr = NULL;
</sys></sys></sys>

/* Mohon untuk ingatan bersama */

shm_id = shmget((key_t)1004, SHM_SIZE, IPC_CREAT | 0600);

/* Petakan memori yang dikongsi untuk memproses ruang alamat */

ptr = (int*)shmat(shm_id, 0, 0);

printf("Attach addr is %p \n", ptr);

*ptr = 1004;

printf("The Value of Parent is : %d \n", *ptr);

if((pid=fork()) == -1){
perror("fork Err");
exit(0);
}
else if(!pid){
printf("The Value of Child is : %d \n", *ptr);
exit(0);
}else{
sleep(1);

/* Nyahpeta */

shmdt(ptr);

/* Padam memori kongsi */

shmctl(shm_id, IPC_RMID, 0);
}

return 0;
}

Hasil keluaran:

Bagaimana untuk berkongsi memori antara proses Linux

Atas ialah kandungan terperinci Bagaimana untuk berkongsi memori antara proses Linux. 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
Apakah tugas utama pentadbir sistem Linux?Apakah tugas utama pentadbir sistem Linux?Apr 19, 2025 am 12:23 AM

Tugas utama pentadbir sistem Linux termasuk pemantauan sistem dan penalaan prestasi, pengurusan pengguna, pengurusan pakej perisian, pengurusan keselamatan dan sandaran, penyelesaian masalah dan resolusi, pengoptimuman prestasi dan amalan terbaik. 1. Gunakan alat atas, HTOP dan lain -lain untuk memantau prestasi sistem dan menyesuaikannya. 2. Menguruskan akaun pengguna dan keizinan melalui arahan USERADD dan arahan lain. 3. Gunakan APT dan YUM untuk menguruskan pakej perisian untuk memastikan kemas kini sistem dan keselamatan. 4. Konfigurasi firewall, memantau log, dan lakukan sandaran data untuk memastikan keselamatan sistem. 5. menyelesaikan masalah dan menyelesaikan melalui analisis log dan penggunaan alat. 6. Mengoptimumkan parameter kernel dan konfigurasi aplikasi, dan ikuti amalan terbaik untuk meningkatkan prestasi sistem dan kestabilan.

Adakah sukar untuk belajar Linux?Adakah sukar untuk belajar Linux?Apr 18, 2025 am 12:23 AM

Pembelajaran Linux tidak sukar. 1.Linux adalah sistem operasi sumber terbuka berdasarkan UNIX dan digunakan secara meluas dalam pelayan, sistem tertanam dan komputer peribadi. 2. Memahami sistem fail dan pengurusan kebenaran adalah kunci. Sistem fail adalah hierarki, dan keizinan termasuk membaca, menulis dan melaksanakan. 3. Sistem pengurusan pakej seperti APT dan DNF menjadikan pengurusan perisian mudah. 4. Pengurusan proses dilaksanakan melalui PS dan arahan teratas. 5. Mula belajar dari arahan asas seperti MKDIR, CD, Touch dan Nano, dan kemudian cuba penggunaan lanjutan seperti skrip shell dan pemprosesan teks. 6. Kesilapan umum seperti masalah kebenaran dapat diselesaikan melalui sudo dan chmod. 7. Cadangan Pengoptimuman Prestasi termasuk menggunakan HTOP untuk memantau sumber, membersihkan fail yang tidak perlu, dan menggunakan SY

Apakah gaji Pentadbir Linux?Apakah gaji Pentadbir Linux?Apr 17, 2025 am 12:24 AM

Purata gaji tahunan pentadbir Linux ialah $ 75,000 hingga $ 95,000 di Amerika Syarikat dan € 40,000 hingga € 60,000 di Eropah. Untuk meningkatkan gaji, anda boleh: 1. Secara berterusan mempelajari teknologi baru, seperti pengkomputeran awan dan teknologi kontena; 2. Mengumpulkan pengalaman projek dan menubuhkan portfolio; 3. Mewujudkan rangkaian profesional dan mengembangkan rangkaian anda.

Apakah tujuan utama Linux?Apakah tujuan utama Linux?Apr 16, 2025 am 12:19 AM

Penggunaan utama Linux termasuk: 1. Sistem Operasi Pelayan, 2. Sistem Terbenam, 3. Linux cemerlang dalam bidang ini, menyediakan kestabilan, keselamatan dan alat pembangunan yang cekap.

Adakah Internet berjalan di Linux?Adakah Internet berjalan di Linux?Apr 14, 2025 am 12:03 AM

Internet tidak bergantung pada sistem operasi tunggal, tetapi Linux memainkan peranan penting di dalamnya. Linux digunakan secara meluas dalam pelayan dan peranti rangkaian dan popular untuk kestabilan, keselamatan dan skalabiliti.

Apakah operasi Linux?Apakah operasi Linux?Apr 13, 2025 am 12:20 AM

Inti sistem pengendalian Linux adalah antara muka baris arahannya, yang boleh melakukan pelbagai operasi melalui baris arahan. 1. Operasi Fail dan Direktori Gunakan LS, CD, MKDIR, RM dan arahan lain untuk menguruskan fail dan direktori. 2. Pengguna dan Pengurusan Kebenaran Memastikan keselamatan sistem dan peruntukan sumber melalui UserAdd, Passwd, CHMOD dan arahan lain. 3. Pengurusan proses menggunakan PS, membunuh dan arahan lain untuk memantau dan mengawal proses sistem. 4. Operasi rangkaian termasuk PING, IFCONFIG, SSH dan arahan lain untuk mengkonfigurasi dan menguruskan sambungan rangkaian. 5. Pemantauan sistem dan penyelenggaraan sistem seperti TOP, DF, DU untuk memahami status operasi sistem dan penggunaan sumber.

Meningkatkan Produktiviti dengan Pintasan Perintah Custom Menggunakan Linux AliasesMeningkatkan Produktiviti dengan Pintasan Perintah Custom Menggunakan Linux AliasesApr 12, 2025 am 11:43 AM

Pengenalan Linux adalah sistem operasi yang kuat yang disukai oleh pemaju, pentadbir sistem, dan pengguna kuasa kerana fleksibiliti dan kecekapannya. Walau bagaimanapun, kerap menggunakan arahan panjang dan kompleks boleh membosankan dan er

Apa yang sebenarnya Linux?Apa yang sebenarnya Linux?Apr 12, 2025 am 12:20 AM

Linux sesuai untuk pelayan, persekitaran pembangunan, dan sistem tertanam. 1. Sebagai sistem pengendalian pelayan, Linux stabil dan cekap, dan sering digunakan untuk menggunakan aplikasi konkurasi tinggi. 2. Sebagai persekitaran pembangunan, Linux menyediakan alat arahan dan sistem pengurusan pakej yang cekap untuk meningkatkan kecekapan pembangunan. 3. Dalam sistem tertanam, Linux ringan dan disesuaikan, sesuai untuk persekitaran dengan sumber yang terhad.

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.

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft