Paylaşılan Hafıza
Paylaşılan hafıza, iki veya daha fazla işlem arasında paylaşılan bir hafızadır. Bununla birlikte, neden hafızayı veya diğer bazı iletişim araçlarını paylaşmamız gerekiyor?
Tekrarlamak gerekirse, her işlemin kendi adres alanı vardır, herhangi bir işlem kendi adres alanından diğer işlemlere bazı bilgilerle iletişim kurmak isterse, bu sadece IPC (süreçler arası iletişim) teknikleriyle mümkündür. Halihazırda bildiğimiz gibi, iletişim ilişkili veya alakasız süreçler arasında olabilir.
Genellikle, birbiriyle ilişkili süreç iletişimi Borular veya Adlandırılmış Borular kullanılarak gerçekleştirilir. İlişkili olmayan süreçler (bir terminalde çalışan bir işlem ve başka bir terminalde başka bir işlem) iletişim, Veri Bağlantısı kullanılarak veya Paylaşılan Bellek ve Mesaj Kuyruklarının popüler IPC teknikleri aracılığıyla gerçekleştirilebilir.
Borular ve Adlandırılmış boruların IPC tekniklerini gördük ve şimdi kalan IPC tekniklerini, yani Paylaşılan Bellek, Mesaj Kuyrukları, Semaforlar, Sinyaller ve Bellek Eşleme'yi bilmenin zamanı geldi.
Bu bölümde, paylaşılan hafıza hakkında her şeyi bileceğiz.
İki veya daha fazla süreç arasında iletişim kurmak için paylaşılan hafızayı kullandığımızı biliyoruz, ancak paylaşılan hafızayı kullanmadan önce sistem çağrılarında yapılması gerekenler, şunu görelim -
Paylaşılan bellek bölümünü oluşturun veya önceden oluşturulmuş bir paylaşılan bellek bölümünü kullanın (shmget ())
İşlemi önceden oluşturulmuş paylaşılan bellek segmentine (shmat ()) ekleyin
İşlemi önceden eklenmiş paylaşılan bellek bölümünden ayırın (shmdt ())
Paylaşılan bellek segmentindeki kontrol işlemleri (shmctl ())
Paylaşılan hafıza ile ilgili sistem çağrılarının birkaç detayına bakalım.
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg)
Yukarıdaki sistem çağrısı, bir System V paylaşılan bellek bölümü oluşturur veya tahsis eder. Geçilmesi gereken argümanlar aşağıdaki gibidir -
first argument, key,paylaşılan hafıza bölümünü tanır. Anahtar, keyfi bir değer veya ftok () kitaplık işlevinden türetilebilen bir değer olabilir. Anahtar aynı zamanda IPC_PRIVATE olabilir, yani süreçleri sunucu ve istemci olarak çalıştırma (ana ve çocuk ilişkisi), yani birbiriyle ilişkili süreç iletişimidir. İstemci bu anahtarla paylaşılan belleği kullanmak istiyorsa, bu, sunucunun alt işlemi olmalıdır. Ayrıca, çocuk sürecin, ebeveyn paylaşılan bir bellek elde ettikten sonra oluşturulması gerekir.
second argument, size, PAGE_SIZE katlarına yuvarlanan paylaşılan bellek bölümünün boyutudur.
third argument, shmflg,IPC_CREAT (yeni bölüm oluşturma) veya IPC_EXCL (yeni bölüm oluşturmak için IPC_CREAT ile kullanılır ve bölüm zaten mevcutsa çağrı başarısız olur) gibi gerekli paylaşılan bellek işaretlerini / bayraklarını belirtir. İzinleri de geçmeniz gerekiyor.
Note - İzinlerle ilgili ayrıntılar için önceki bölümlere bakın.
Bu çağrı, başarılı olduğunda geçerli bir paylaşılan hafıza tanımlayıcısı (paylaşılan hafızanın sonraki çağrıları için kullanılır) ve başarısızlık durumunda -1 döndürecektir. Başarısızlığın nedenini öğrenmek için, errno değişkeni veya perror () işlevi ile kontrol edin.
#include <sys/types.h>
#include <sys/shm.h>
void * shmat(int shmid, const void *shmaddr, int shmflg)
Yukarıdaki sistem çağrısı, System V paylaşılan bellek bölümü için paylaşılan bellek işlemini gerçekleştirir, yani çağrı işleminin adres alanına bir paylaşılan bellek bölümü ekleyerek. Geçilmesi gereken argümanlar aşağıdaki gibidir -
The first argument, shmid,paylaşılan bellek bölümünün tanımlayıcısıdır. Bu id, shmget () sistem çağrısının dönüş değeri olan paylaşılan hafıza tanımlayıcısıdır.
The second argument, shmaddr,ekli adresi belirtmektir. Shmaddr NULL ise, sistem varsayılan olarak segmenti eklemek için uygun adresi seçer. Shmaddr NULL değilse ve SHM_RND shmflg'de belirtilmişse, ek, SHMLBA'nın (Alt Sınır Adresi) en yakın katının adresine eşittir. Aksi takdirde, shmaddr, paylaşılan bellek ekinin oluştuğu / başladığı sayfa hizalı bir adres olmalıdır.
The third argument, shmflg, SHM_RND (adresi SHMLBA'ya yuvarlayarak) veya SHM_EXEC (segment içeriklerinin yürütülmesine izin verir) veya SHM_RDONLY (segmenti salt okunur amaç için ekler, varsayılan olarak okuma-yazmadır) gibi gerekli paylaşılan bellek işaretlerini belirtir veya SHM_REMAP (shmaddr tarafından belirtilen aralıktaki mevcut eşlemeyi değiştirir ve segmentin sonuna kadar devam eder).
Bu çağrı, başarı durumunda ekli paylaşılan bellek segmentinin adresini ve başarısızlık durumunda -1'i döndürecektir. Başarısızlığın nedenini öğrenmek için, errno değişkeni veya perror () işlevi ile kontrol edin.
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr)
Yukarıdaki sistem çağrısı, paylaşılan bellek bölümünü çağırma işleminin adres alanından ayırmak için System V paylaşılan bellek bölümü için paylaşılan bellek işlemini gerçekleştirir. Geçilmesi gereken argüman şudur:
Shmaddr argümanı, ayrılacak paylaşılan bellek bölümünün adresidir. Ayrılacak bölüm, shmat () sistem çağrısı tarafından döndürülen adres olmalıdır.
Bu çağrı, başarı durumunda 0 ve başarısızlık durumunda -1 döndürür. Başarısızlığın nedenini öğrenmek için, errno değişkeni veya perror () işlevi ile kontrol edin.
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf)
Yukarıdaki sistem çağrısı, bir System V paylaşılan bellek bölümü için kontrol işlemi gerçekleştirir. Aşağıdaki argümanların iletilmesi gerekiyor -
İlk argüman olan shmid, paylaşılan hafıza segmentinin tanımlayıcısıdır. Bu id, shmget () sistem çağrısının dönüş değeri olan paylaşılan hafıza tanımlayıcısıdır.
İkinci argüman olan cmd, paylaşılan bellek kesimi üzerinde gerekli kontrol işlemini gerçekleştirme komutudur.
Cmd için geçerli değerler -
IPC_STAT- struct shmid_ds'in her bir üyesinin mevcut değerlerinin bilgilerini tampon tarafından işaret edilen geçirilen yapıya kopyalar. Bu komut, paylaşılan bellek bölümü için okuma izni gerektirir.
IPC_SET - Buf yapısı tarafından gösterilen kullanıcı kimliğini, sahibin grup kimliğini, izinleri vb. Ayarlar.
IPC_RMID- İmha edilecek segmenti işaretler. Segment, yalnızca son işlem onu ayırdıktan sonra yok edilir.
IPC_INFO - tampon ile gösterilen yapıdaki paylaşılan bellek sınırları ve parametreleri hakkındaki bilgileri döndürür.
SHM_INFO - Paylaşılan bellek tarafından tüketilen sistem kaynakları hakkında bilgi içeren bir shm_info yapısı döndürür.
Üçüncü argüman olan buf, struct shmid_ds adlı paylaşılan bellek yapısına bir göstericidir. Bu yapının değerleri, cmd'ye göre set veya get için kullanılır.
Bu çağrı, geçirilen komuta bağlı olarak değeri döndürür. IPC_INFO ve SHM_INFO veya SHM_STAT'ın başarılı olması üzerine, paylaşılan bellek segmentinin indeksini veya tanımlayıcısını veya diğer işlemler için 0'ı ve başarısızlık durumunda -1'i döndürür. Başarısızlığın nedenini öğrenmek için, errno değişkeni veya perror () işlevi ile kontrol edin.
Aşağıdaki örnek programı ele alalım.
Biri paylaşılan hafızaya (shm_write.c) yazmak ve diğeri paylaşılan hafızadan okumak için (shm_read.c) olmak üzere iki işlem oluşturun
Program, yazma işlemi (shm_write.c) ile paylaşılan belleğe yazma ve okuma işlemi (shm_read.c) ile paylaşılan bellekten okuma gerçekleştirir.
Paylaşılan bellekte, yazma işlemi 1K boyutunda paylaşılan bir bellek (ve bayraklar) oluşturur ve paylaşılan belleği ekler
Yazma işlemi, paylaşılan belleğe her biri 1023 bayttan "A" dan "E" ye Alfabelerin 5 katı yazar. Son bayt, arabelleğin sonunu belirtir
Okuma işlemi paylaşılan bellekten okur ve standart çıktıya yazar
Okuma ve yazma süreci eylemleri aynı anda gerçekleştirilir
Yazma tamamlandıktan sonra, yazma işlemi paylaşılan belleğe yazmanın tamamlandığını belirtmek için güncellenir (struct shmseg yapısında tam değişken ile)
Okuma işlemi, paylaşılan bellekten okuma gerçekleştirir ve yazma işleminin tamamlandığına dair gösterge alana kadar çıktıda görüntülenir (struct shmseg'de tam değişken)
Basitleştirmek ve ayrıca sonsuz döngüleri önlemek ve programı karmaşıklaştırmak için birkaç kez okuma ve yazma işlemini gerçekleştirir
Yazma işlemi için kod aşağıdadır (Paylaşılan Belleğe Yazma - Dosya: shm_write.c)
/* Filename: shm_write.c */
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#define BUF_SIZE 1024
#define SHM_KEY 0x1234
struct shmseg {
int cnt;
int complete;
char buf[BUF_SIZE];
};
int fill_buffer(char * bufptr, int size);
int main(int argc, char *argv[]) {
int shmid, numtimes;
struct shmseg *shmp;
char *bufptr;
int spaceavailable;
shmid = shmget(SHM_KEY, sizeof(struct shmseg), 0644|IPC_CREAT);
if (shmid == -1) {
perror("Shared memory");
return 1;
}
// Attach to the segment to get a pointer to it.
shmp = shmat(shmid, NULL, 0);
if (shmp == (void *) -1) {
perror("Shared memory attach");
return 1;
}
/* Transfer blocks of data from buffer to shared memory */
bufptr = shmp->buf;
spaceavailable = BUF_SIZE;
for (numtimes = 0; numtimes < 5; numtimes++) {
shmp->cnt = fill_buffer(bufptr, spaceavailable);
shmp->complete = 0;
printf("Writing Process: Shared Memory Write: Wrote %d bytes\n", shmp->cnt);
bufptr = shmp->buf;
spaceavailable = BUF_SIZE;
sleep(3);
}
printf("Writing Process: Wrote %d times\n", numtimes);
shmp->complete = 1;
if (shmdt(shmp) == -1) {
perror("shmdt");
return 1;
}
if (shmctl(shmid, IPC_RMID, 0) == -1) {
perror("shmctl");
return 1;
}
printf("Writing Process: Complete\n");
return 0;
}
int fill_buffer(char * bufptr, int size) {
static char ch = 'A';
int filled_count;
//printf("size is %d\n", size);
memset(bufptr, ch, size - 1);
bufptr[size-1] = '\0';
if (ch > 122)
ch = 65;
if ( (ch >= 65) && (ch <= 122) ) {
if ( (ch >= 91) && (ch <= 96) ) {
ch = 65;
}
}
filled_count = strlen(bufptr);
//printf("buffer count is: %d\n", filled_count);
//printf("buffer filled is:%s\n", bufptr);
ch++;
return filled_count;
}
Derleme ve Yürütme Adımları
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Wrote 5 times
Writing Process: Complete
Okuma işlemi için kod aşağıdadır (Paylaşılan Bellekten okuma ve standart çıktıya yazma - Dosya: shm_read.c)
/* Filename: shm_read.c */
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#define BUF_SIZE 1024
#define SHM_KEY 0x1234
struct shmseg {
int cnt;
int complete;
char buf[BUF_SIZE];
};
int main(int argc, char *argv[]) {
int shmid;
struct shmseg *shmp;
shmid = shmget(SHM_KEY, sizeof(struct shmseg), 0644|IPC_CREAT);
if (shmid == -1) {
perror("Shared memory");
return 1;
}
// Attach to the segment to get a pointer to it.
shmp = shmat(shmid, NULL, 0);
if (shmp == (void *) -1) {
perror("Shared memory attach");
return 1;
}
/* Transfer blocks of data from shared memory to stdout*/
while (shmp->complete != 1) {
printf("segment contains : \n\"%s\"\n", shmp->buf);
if (shmp->cnt == -1) {
perror("read");
return 1;
}
printf("Reading Process: Shared Memory: Read %d bytes\n", shmp->cnt);
sleep(3);
}
printf("Reading Process: Reading Done, Detaching Shared Memory\n");
if (shmdt(shmp) == -1) {
perror("shmdt");
return 1;
}
printf("Reading Process: Complete\n");
return 0;
}
Derleme ve Yürütme Adımları
segment contains :
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
Reading Process: Shared Memory: Read 1023 bytes
Reading Process: Reading Done, Detaching Shared Memory
Reading Process: Complete