ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти. 
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΡΠ»ΡƒΡ‡Π°Π΅ успСха 0 ΠΈ -1 — Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки. БнятиС привязки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ систСмный Π²Ρ‹Π·ΠΎΠ² shmdt (): БистСмный Π²Ρ‹Π·ΠΎΠ² shmat () ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис: Shmdt () — отсоСдинСниС сСгмСнта ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ°; Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ shmget (): Shmat () — связываниС сСгмСнта с ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠΌ; Π’Ρ‹Π·ΠΎΠ² систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ shmctlf) ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄: Int shmctl (int shmid, int and, struct shmid_ds *buff… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΡ€ΠΎΠΌΠ΅ сообщСний ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² процСссы ΠΌΠΎΠ³ΡƒΡ‚ нСпосрСдствСнно Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· совмСстноС использованиС ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² памяти. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ срСдства IPC. По Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Ρƒ установлСния связи Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ функциям, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сообщСний:

  • β€’ shmgetQ — ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ раздСляСмого ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° памяти ΠΈΠ»ΠΈ возвращСния адрСса ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ области;
  • β€’ shmat () — связываниС сСгмСнта с ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠΌ;
  • β€’ shmdt () — отсоСдинСниС сСгмСнта ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ°;
  • β€’ shmctl () — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти.

Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ происходит Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ раздСляСмой памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого Ρ‚Π΅ ΠΆΠ΅ ΡΠ°ΠΌΡ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ПослС присоСдинСния ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсному пространству процСсса ΠΎΠ±Π»Π°ΡΡ‚ΡŒ раздСляСмой памяти становится доступна Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ участку Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти. Для доступа ΠΊ Π½Π°Ρ…одящимся Π² Π½Π΅ΠΉ Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ обращСния ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ систСмным функциям.

Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ shmget ():

shmid = shmget (key, size, flag);

Π³Π΄Π΅ size — объСм области Π² Π±Π°ΠΉΡ‚Π°Ρ…. Π―Π΄Ρ€ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ key для вСдСния поиска Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ раздСляСмой памяти: Ссли подходящая запись ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ΠΈ Π΅ΡΠ»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡƒΠΏ имССтся, Ρ‚ΠΎ ΡΠ΄Ρ€ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ процСссу ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π·Π°ΠΏΠΈΡΠΈ дСскриптор.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ элСмСнтарной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для обнаруТСния ΠΈΠ»ΠΈ создания раздСляСмого сСгмСнта памяти ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

int open segment^ keyt keyval, int segsize)

{

int shmid;

if ((shmid = shmget (keyval, segsize,

IPC CREAT I 0660)) = -1)

{.

retum (-1);

}.

retum (shmid) ;

}.

БистСмный Π²Ρ‹Π·ΠΎΠ² shmat () ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

int shmctl (int shmid, int and, struct shmid_ds *buff);

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ успСха ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ сСгмСнт Π±Ρ‹Π» привязан ΠΊ ΠΏΡ€ΠΎΡ†Π΅ΡΡΡƒ, ΠΈ -1 — Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки.

Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ², ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ прост Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс привязки сСгмСнта ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ:

Π’Ρ‹Π·ΠΎΠ² систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ shmctlf) ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

intshmat (int shmid, char *shmaddr, int shmflg);

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΡΠ»ΡƒΡ‡Π°Π΅ успСха 0 ΠΈ -1 — Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки.

Π’Ρ‹Π·ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° msgctl (), Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний.

БнятиС привязки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ систСмный Π²Ρ‹Π·ΠΎΠ² shmdt():

int shmdt (char *shmaddr);

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ -1 Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ раздСляСмый сСгмСнт памяти большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½ процСссу, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ отсоСдинСн Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ shmdt ().

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ