الخميس، 1 أكتوبر 2020

الذاكرة المشتركة

 


الذاكرة المشتركة


Ad by Valueimpression

الذاكرة المشتركة هي ذاكرة مشتركة بين عمليتين أو أكثر. ومع ذلك ، لماذا نحتاج إلى مشاركة الذاكرة أو بعض وسائل الاتصال الأخرى؟

للتكرار ، لكل عملية مساحة عنوان خاصة بها ، إذا أرادت أي عملية التواصل مع بعض المعلومات من مساحة العنوان الخاصة بها إلى العمليات الأخرى ، فعندئذٍ يكون ذلك ممكنًا فقط باستخدام تقنيات IPC (الاتصال بين العمليات). كما نعلم بالفعل ، يمكن أن يكون الاتصال بين العمليات ذات الصلة أو غير ذات الصلة.

عادةً ما يتم إجراء اتصالات العمليات المترابطة باستخدام الأنابيب أو الأنابيب المسماة. يمكن إجراء الاتصالات غير ذات الصلة (على سبيل المثال عملية واحدة تعمل في محطة واحدة وعملية أخرى في محطة أخرى) باستخدام أنابيب محددة أو من خلال تقنيات IPC الشائعة للذاكرة المشتركة وقوائم انتظار الرسائل.

لقد رأينا تقنيات IPC للأنابيب والأنابيب المسماة والآن حان الوقت لمعرفة تقنيات IPC المتبقية ، أي الذاكرة المشتركة وقوائم انتظار الرسائل والإشارات والإشارات ورسم خرائط الذاكرة.

في هذا الفصل ، سوف نعرف كل شيء عن الذاكرة المشتركة.

ذكريات مشتركه

نحن نعلم أنه للتواصل بين عمليتين أو أكثر ، نستخدم الذاكرة المشتركة ولكن قبل استخدام الذاكرة المشتركة ، ما يجب القيام به مع مكالمات النظام ، دعنا نرى هذا -

  • أنشئ شريحة الذاكرة المشتركة أو استخدم شريحة ذاكرة مشتركة تم إنشاؤها بالفعل (shmget ())

  • إرفاق العملية بمقطع الذاكرة المشتركة الذي تم إنشاؤه بالفعل (shmat ())

  • افصل العملية عن مقطع الذاكرة المشتركة المرفق بالفعل (shmdt ())

  • عمليات التحكم في مقطع الذاكرة المشتركة (shmctl ())

دعونا نلقي نظرة على بعض التفاصيل الخاصة بمكالمات النظام المتعلقة بالذاكرة المشتركة.

#include <sys/ipc.h>
#include <sys/shm.h>

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

يقوم استدعاء النظام أعلاه بإنشاء أو تخصيص مقطع ذاكرة مشتركة للنظام الخامس. الحجج التي يجب تمريرها هي كما يلي -

و الحجة الأولى، مفتاح، يعترف مقطع الذاكرة المشتركة. يمكن أن يكون المفتاح إما قيمة عشوائية أو قيمة يمكن اشتقاقها من وظيفة المكتبة ftok (). يمكن أن يكون المفتاح أيضًا IPC_PRIVATE ، يعني ، تشغيل العمليات كخادم وعميل (علاقة الوالدين والطفل) ، أي التواصل بين العمليات المترابطة. إذا أراد العميل استخدام الذاكرة المشتركة مع هذا المفتاح ، فيجب أن تكون عملية تابعة للخادم. أيضًا ، يجب إنشاء عملية الطفل بعد حصول الوالدين على ذاكرة مشتركة.

و الحجة الثانية، حجم، هو حجم مقطع الذاكرة المشتركة تقريب إلى مضاعفات PAGE_SIZE.

و الحجة الثالثة، shmflg، يحدد المطلوبة العلم الذاكرة المشتركة / ق مثل IPC_CREAT (خلق شريحة جديدة) أو IPC_EXCL (تستخدم مع IPC_CREAT لخلق شريحة جديدة وفشل المكالمة، إذا كان هذا الجزء موجودا بالفعل). تحتاج إلى تمرير الأذونات كذلك.

ملاحظة - راجع الأقسام السابقة للحصول على تفاصيل حول الأذونات.

ستعيد هذه المكالمة معرّف ذاكرة مشتركة صالحًا (يستخدم لمزيد من المكالمات للذاكرة المشتركة) عند النجاح و -1 في حالة الفشل. لمعرفة سبب الفشل ، تحقق من متغير errno أو وظيفة perror ().

#include <sys/types.h>
#include <sys/shm.h>

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

يؤدي استدعاء النظام أعلاه عملية الذاكرة المشتركة لقطاع الذاكرة المشتركة للنظام V ، أي إرفاق مقطع ذاكرة مشتركة بمساحة العنوان لعملية الاستدعاء. الحجج التي يجب تمريرها هي كما يلي -

الوسيطة الأولى ، shmid ، هي معرف مقطع الذاكرة المشتركة. هذا المعرف هو معرف الذاكرة المشتركة ، وهو القيمة المرجعة لاستدعاء نظام shmget ().

الحجة الثانية ، shmaddr ، هي تحديد عنوان المرفق . إذا كان shmaddr فارغًا ، يختار النظام افتراضيًا العنوان المناسب لإرفاق المقطع. إذا لم يكن shmaddr فارغًا وتم تحديد SHM_RND في shmflg ، فسيكون المرفق مساويًا لعنوان أقرب مضاعف لـ SHMLBA (عنوان الحد السفلي). خلاف ذلك ، يجب أن يكون shmaddr عنوانًا محاذيًا للصفحة يحدث / يبدأ عنده مرفق الذاكرة المشتركة.

تحدد الوسيطة الثالثة ، shmflg ، علامة / إشارات الذاكرة المشتركة المطلوبة مثل SHM_RND (تقريب العنوان إلى SHMLBA) أو SHM_EXEC (يسمح بتنفيذ محتويات المقطع) أو SHM_RDONLY (إرفاق المقطع لغرض القراءة فقط ، افتراضيًا هو للقراءة والكتابة) أو SHM_REMAP (يستبدل التعيين الحالي في النطاق المحدد بواسطة shmaddr ويستمر حتى نهاية المقطع).

ستعيد هذه المكالمة عنوان مقطع الذاكرة المشتركة المرفق عند النجاح و -1 في حالة الفشل. لمعرفة سبب الفشل ، تحقق من متغير errno أو وظيفة perror ().

#include <sys/types.h>
#include <sys/shm.h>

int shmdt(const void *shmaddr)

يؤدي استدعاء النظام أعلاه عملية الذاكرة المشتركة لمقطع الذاكرة المشتركة للنظام V لفصل مقطع الذاكرة المشتركة عن مساحة العنوان لعملية الاستدعاء. الحجة التي يجب تمريرها هي -

الحجة ، shmaddr ، هي عنوان مقطع الذاكرة المشتركة الذي سيتم فصله. يجب أن يكون الجزء الذي سيتم فصله هو العنوان الذي يتم إرجاعه بواسطة استدعاء نظام shmat ().

ستعيد هذه المكالمة 0 عند النجاح و -1 في حالة الفشل. لمعرفة سبب الفشل ، تحقق من متغير errno أو وظيفة perror ().

#include <sys/ipc.h>
#include <sys/shm.h>

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

يؤدي استدعاء النظام أعلاه عملية تحكم لقطاع الذاكرة المشتركة للنظام الخامس. يجب تمرير الحجج التالية -

الوسيطة الأولى ، shmid ، هي معرف مقطع الذاكرة المشتركة. هذا المعرف هو معرف الذاكرة المشتركة ، وهو القيمة المرجعة لاستدعاء نظام shmget ().

الوسيطة الثانية ، cmd ، هي الأمر لتنفيذ عملية التحكم المطلوبة على مقطع الذاكرة المشتركة.

القيم الصالحة لـ cmd هي -

  • IPC_STAT - ينسخ معلومات القيم الحالية لكل عضو من عناصر البنية shmid_ds إلى الهيكل الذي تم تمريره والذي يشير إليه buf. يتطلب هذا الأمر إذن قراءة لقطاع الذاكرة المشتركة.

  • IPC_SET - يضبط معرف المستخدم ومعرف المجموعة للمالك والأذونات وما إلى ذلك التي يشير إليها هيكل buf.

  • IPC_RMID - وضع علامة على المقطع الذي سيتم إتلافه. يتم إتلاف المقطع فقط بعد أن فصلته العملية الأخيرة.

  • IPC_INFO - إرجاع المعلومات حول حدود الذاكرة المشتركة والمعلمات في الهيكل المشار إليه بواسطة buf.

  • SHM_INFO - إرجاع بنية shm_info التي تحتوي على معلومات حول موارد النظام المستهلكة بواسطة الذاكرة المشتركة.

الحجة الثالثة ، buf ، هي مؤشر إلى بنية الذاكرة المشتركة المسماة Struct shmid_ds. سيتم استخدام قيم هذا الهيكل لأي مجموعة أو الحصول عليها حسب cmd.

ترجع هذه المكالمة القيمة بناءً على الأمر الذي تم تمريره. عند نجاح IPC_INFO و SHM_INFO أو SHM_STAT تُرجع الفهرس أو المعرف الخاص بجزء الذاكرة المشتركة أو 0 لعمليات أخرى و -1 في حالة الفشل. لمعرفة سبب الفشل ، تحقق من متغير errno أو وظيفة perror ().

دعونا ننظر في نموذج البرنامج التالي.

  • قم بإنشاء عمليتين ، إحداهما للكتابة في الذاكرة المشتركة (shm_write.c) والأخرى للقراءة من الذاكرة المشتركة (shm_read.c)

  • يقوم البرنامج بالكتابة في الذاكرة المشتركة عن طريق عملية الكتابة (shm_write.c) والقراءة من الذاكرة المشتركة عن طريق عملية القراءة (shm_read.c)

  • في الذاكرة المشتركة ، تُنشئ عملية الكتابة ذاكرة مشتركة بحجم 1K (وأعلام) وتربط الذاكرة المشتركة

  • عملية الكتابة تكتب 5 أضعاف الحروف الهجائية من "A" إلى "E" لكل 1023 بايت في الذاكرة المشتركة. البايت الأخير يشير إلى نهاية المخزن المؤقت

  • قراءة عملية القراءة من الذاكرة المشتركة والكتابة إلى الإخراج القياسي

  • يتم تنفيذ إجراءات عملية القراءة والكتابة في وقت واحد

  • بعد الانتهاء من الكتابة ، يتم تحديث عملية الكتابة للإشارة إلى اكتمال الكتابة في الذاكرة المشتركة (مع متغير كامل في البنية shmseg)

  • تقوم عملية القراءة بالقراءة من الذاكرة المشتركة وتعرض على الإخراج حتى تحصل على إشارة إلى اكتمال عملية الكتابة (متغير كامل في بنية shmseg)

  • يقوم بعملية القراءة والكتابة لعدة مرات من أجل التبسيط وأيضًا لتجنب الحلقات اللانهائية وتعقيد البرنامج

فيما يلي رمز عملية الكتابة (الكتابة في الذاكرة المشتركة - ملف: 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;
}

خطوات التجميع والتنفيذ

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

فيما يلي رمز عملية القراءة (القراءة من الذاكرة المشتركة والكتابة إلى الإخراج القياسي - ملف: 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;
}

خطوات التجميع والتنفيذ

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

التسميات: