728x90
์์ธ์ฒ๋ฆฌ์ ๋ํ ์ฝ๋๋ ์ถ๊ฐํ ๊ฒ.
More about wait
Process Creation in win32
CreateProcess()๋ fork์ exec๋ฅผ ํฉ์ณ๋์ ํจ์๋ผ๊ณ ํ ์ ์๋ค.
WaitForSingleObject()๋ wait function๊ณผ ๋น์ทํ ์ญํ ์ ํ๋ค.
ZeroMemeory()๋ ๋ค์์ ์ค๋ช
Process Termination
exit() ์ ํ๊ณ ์ข ๋ฃ๋ฅผ ํ๊ฒ ๋ ๋ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ๊ฒ์ free ํ๊ณ ์ข ๋ฃํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด free ์ํด๋ ๋๋ ๊ฒ์ธ๊ฐ? ์๋๋ค. ๋ฌด์กฐ๊ฑด free๋ก deallocate๋ฅผ ํด์ค์ผ ํ๋ค. ํ์ค์ ์ผ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ loop๊ฐ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋น์ทํ ๋์์ ๋๋ฆฌ๊ฒ ๋๋๋ฐ Memory leak๊ฐ ์๊ธฐ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กฐ๊ธ์ฉ ๋ฒ๋ ค์ง๊ฒ ๋๋ค. ์ฒ์ ๋์ํ ๋๋ ์ ์ ๋์ํ์ง๋ง ๊ฒฐ๊ตญ ์ฃฝ๊ฒ ๋๋ค. ์ด๋ฐ ํจํด์ ๊ฒฝ์ฐ ๋๋ฒ๊น ํ๊ธฐ๊ฐ ํ๋ค๋ค. ์ฆ์์ ํ์ธํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋น ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ Leak๊ฐ ์๋์ง ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. Task Manager๋ฅผ ๋์ฐ๋ฉด ์๊ฐ์ ๋ฐ๋ฅธ ๊ทธ๋ํ๊ฐ ๋์จ๋ค. ์ ์ฒด์ ์ผ๋ก ์ํ์ธ ๊ทธ๋ํ๊ฐ ๋์ค๋๋ฐ ํ๋ก๊ทธ๋จ ํ๋๋ผ๋ Leak๊ฐ ๋ฐ์ํ๋ฉด ์กฐ๊ธ์ฉ ์ฆ๊ฐํ๊ฒ ๋๋ค.
Multiprocess Architecture Chrome Browser
Browser ๋ง๋ค ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๊ณ , Renderer, Plug-in ์ด๋ผ๋ ํ๋ก์ธ์ค๋ ์กด์ฌํ๋ค. ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ค์ด๊ณ ์นจ๋ฒํ์ง ๋ชปํ๋ค๊ณ ํ๋๋ฐ ์ด๋ป๊ฒ ๊ฐ๋ฅํ๊ฐ?
IPC
๋ชจ๋๋ค kernel์ด ์ ๊ณตํด์ฃผ๋ ํต์ ์ ์ด์ฉํด์ผ ํ๋ค. ํ๋ก์ธ์ค Communication ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ์์ Message passing model์ด๋ค. ์ด๊ฒ์ real world์ ์ฐ์ฒด๊ตญ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ค. A๊ฐ ์ด ๋ฉ์์ง๋ฅผ ๋๊ตฌํํ ์ ๋ฌํด๋ฌ๋ผ๊ณ ์์ฒญ์ ํ๋ค. Interrupt ํ์์ผ๋ก ์์ฒญ์ ํ๊ฒ ๋๋ค. B๋ ํด๋น ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ๋ฌ๋ผ๋ ์์ฒญ์ Interrupt๋ฅผ ํตํด์ ํ๊ฒ ๋๋ค. ๋ ๋ฒ์งธ ๋ฐฉ์์ Shared Memory์ด๋ค. malloc์ ํน์ ํ๋ก์ธ์ค์ ์ํ๊ฒ ๋์ง๋ง shared memory์ ๊ฒฝ์ฐ ๊ฐ์ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Communicationํ ์ ์๋ค.
Shared Memory Segment
๋น ๋ฅด๋ค. OSํํ ํด๋น shared memory block์ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ์์ฒญ์ ํด์ผ ํ๋ค. A์ B๋ฅผ ์ฐ๊ฒฐํ๋ Bridge ์ญํ ์ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๋ ์๋๊ฐ ๋์จ๋ค. ๋ ๋ฒ์งธ ์ฅ์ ์ Memory block์ ํฌ๊ฒ ์ก์ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ฉ๋์ผ๋ก ์ํตํ ์ ์๋ค. ํ์ง๋ง ๋จ์ ์ผ๋ก๋ ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ด๋ค. Sync๋ฅผ ๋ง์ถฐ์ผ ํ๊ณ ๊ทธ ์ฝ์์ ํ๋ก์ธ์๋ผ๋ฆฌ ํด์ผ ํ๋ค.
Producer Consumer Problem
ํ๋๋ Produce๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ์ ๋ณด๋ฅผ ๋ง๋ค์ด์ Shared Memeory์ ์ง์ด ๋ฃ๋ ์ญํ ์ ํ๊ณ Consumer๋ Shared Memory์์ Readํด ๊ฐ๋ ๊ฒ์ด๋ค. Producer Consumer Problem์ ์ ์์ Producer๋ ์ฐ๊ธฐ๋ง ํ๊ณ Consumer๋ ์ฝ๊ธฐ๋ง ํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ํ์ ์ธ ์๋ก comiler์ accessor๊ฐ ์๋ค.
Producer Consumer Problem
๋จผ์ Source๋ฅผ Assembly code๋ก ๋ฐ๊ฟ์ฃผ๊ณ ์ด๋ฅผ ๋ค์ Binary code๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ ์ ํ๊ฒ ๋๋ค. ์ฆ, ๋ ๋ฒ์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ค. Assembler๊ฐ source code๋ฅผ Assembler๋ก ๋ง๋ค์ด์ Shared Block์ ๋ฃ์ด์ฃผ๊ฒ ๋๊ณ , Assembler๊ฐ ๋ค์ Binary code๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋๋ค..
Producer Consumer Problem
๋๋ถ๋ถ์ ๊ฒฝ์ฐ Buffer ํฌ๊ธฐ์ ์ ํ์ด ์๋ค. ๊ทธ๋ผ Producer๊ฐ unbounded Buffer์์๋ ๊ณ์ํ ์ ์๋ค. Buffer์ ํฌ๊ธฐ๋ ๋์ด ์๋ค๋ ๊ฐ์ ์ผ๋ก ์งํ๋๋ค. ๋ฐ๋ฉด Bounded Buffer Problem์์๋ ๋ฌดํํ Buffer๊ฐ ๊ฝ ์ฐฐ ๋๊น์ง ์งํ์ ํ๊ฒ ๋๋ค. ๋น ๊ณต๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๋น ๊ณต๊ฐ์ Consumer๊ฐ ๋ง๋ค์ด์ฃผ๊ฒ ๋๋ค. Consumer์ ์ ์ฅ์์ Shared Memory๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ ์ ๊ทผํ๋ฉด ์๋๋ค. ๊ธฐ๋ค๋ ค์ผ ํ๋๋ฐ Producer๊ฐ ๋ฃ์ด์ค ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
Producer-Consumer Problem using Bounded Buffer
Circuler queue๋ฅผ ์ด์ฉํด์ ๊ตฌํํ๋ค. in๊ณผ out์ด ๊ฐ์ ๋ Buffer๊ฐ ๋น์ด์๋ค๊ณ ํ ์ ์๋ค.
Circular Queue
Producer-Consumer Problem using Bounded Buffer
Producer์ ๊ฒฝ์ฐ Buffer๊ฐ ๊ฝ ์ฐจ์์ผ๋ฉด ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ while ๋ฌธ์ state๋ฅผ ์คํ์ํค๊ฒ ๋๋ค. ๊ทธ ์ดํ์ ์ค์ Circuler Queue์ ์กด์ฌํ๋ ์ฝ๋์ด๋ค. Consumer์ ๊ฒฝ์ฐ๋ ๋ฉ์ถ์ง ์๊ธฐ ์ํด while(1)์ด ์กด์ฌํ๊ณ ๋น์ด ์์ผ๋ฉด ๊ธฐ๋ค๋ฆฌ๋ผ๋ ๋ฌธ์ฅ์ด ๋ฐ๋ณต๋๋ค. ๋ค์ ๋ ๊ฐ ๋ฌธ์ฅ์ CirculerQueue์์ Item์ ๊บผ๋ด๊ฒ ๋๋ค. Shared Memory์ ์ฌ๋ผ๊ฐ ๋ณ์์ ์ฌ๋ผ๊ฐ๋ฉด ์ ๋ ๋ณ์์ ๊ธฐ์ค์ ๋ฌด์์ธ๊ฐ. Producer์ Consumer๊ฐ ๋ ๋ค ์ฌ์ฉํ๋ ๋ณ์์ ๊ฒฝ์ฐ Shared Memory์ ์ฌ๋ผ๊ฐ์ผ ํ๋ค.
Message Passing Systems
์ข์ ์ ์ ์์ฒญ๋ง ํ๋ฉด ๋๋ค๋ ๊ฒ. ๋๋ถ๋ถ kernel์ด ์์์ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค. Shared Memory์ ๊ฒฝ์ฐ Conflict๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ Conflict๋ ์๋ค. ๋จ์ ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๊ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ์ Accesss ์๋๋ณด๋ค๋ ๋๋ฆฌ๋ค. MEssage Queue์ ์ฌ์ด์ฆ๊ฐ ์ ์ฝ์ด ์๋ค. ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ ์ฝ์ด ์กด์ฌํ๋ค. ์ฅ์ ์ ๋ค๋ฅธ ์ปดํจํฐ๋ก ๋ณด๋ผ ์ ๋ ์๋ค๋ ์ ์ด๋ค.
Message Passing System
kernelํํ ๋ถํํ๋ ๋ฐฉ๋ฒ์ System call ๋ฐฉ์์ด๋ค. 2 ๊ฐ์ System call์ด ํ์ํ๋ค. ์ฒซ ๋ฒ์งธ๋ก๋ Send()์ด๊ณ ๋ ๋ฒ์งธ๋ก receive() ์ด๋ค. ์ค์ ๊ตฌํํ๊ธฐ ์ํด์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค. Direct / Indirect, Sync / Async ๋ฑ๋ฑ ์กด์ฌํ๋ค.
Direct / Indirect Communication
๋๋ ๋ํํ๋ ์๋๋ฅผ ์ด๋ค ์์ผ๋ก ์ง์ ํ๋ ๊ฐ. Direct๋ ์ง์ ํ๋ก์ธ์ค๋ก ๋ณด๋ด๊ฒ ๋๊ณ Indirect๋ Mail Box๋ก ๋ณด๋ด๊ณ ๋ ๋ฐ๊ฒ ๋๋ค. Direct์ ๊ฒฝ์ฐ PID๋ฅผ ์์์ผ ๋ณด๋ผ ์ ์์ง๋ง Indirect์ ๊ฒฝ์ฐ PID๋ฅผ ์์ง ๋ชปํด๋ ๋ณด๋ผ ์ ์๋ค.
System 5
shared memory block์ ๋ง๋ค์ด์ผ ํ๋ค. ๋ง๋๋ ํจ์์ ์ด๋ฆ์ shmget์ด๋ค. ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด Process์์ด ์๋ ๊ณตํต ์์ญ์ ๋ง๋ค์ด์ง๊ฒ ๋๋ค. address๋ฅผ ๋ฆฌํดํ์ง ์๊ณ int ๊ฐ์ ๋ฆฌํดํ๋ค. Address๋ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋์ ์ฒด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. shared memory block์ ์ ๊ทผํ ๋๋ Address๋ฅผ ๊ฐ์ง๊ณ ์ ๊ทผํ์ง ๋ชปํ๊ณ OS๊ฐ unique ํ ๋ฒํธ ํ๋๋ฅผ ๋ฐํํ๊ฒ ๋๋ค. shmget์ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ size์ด๊ณ ์ด์ ํด๋นํ๋ ํฌ๊ธฐ๋งํผ Shared Block์ ๋ง๋ ๋ค. shmat ํจ์๋ฅผ ์ด์ฉํด์ mapping ๊ด๊ณ๋ฅผ ๋ง๋ค์ด์ Process ๋ด๋ถ์ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก์จ ๋๊ฐ์ด ํ ๋นํ ์ ์๊ฒ ๋ง๋ค์ด ์ค๋ค. shmat์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก Shared Memory์ Return ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค. ๊ทธ ๊ฐ์ด shmat์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ๊ฒ ๋๋ค. malloc์ด๋ ๋์ผํ๋ค.
System 5
๋ ๋ฒ์งธ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ shmget์ ํธ์ถํ๋ฉด ์๋๋ค. shmget์ ํธ์ถํ๊ณ fork๋ฅผ ํ๋ฉด ํด๋น seg_id๋ฅผ child process๋ ์ด์ฉํ ์ ์๋ค. shared memory๋ฅผ ์ฌ์ฉํ ๋ structure์ ํ์ดํ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
shmdt(), mapping์ ๋์ด์ฃผ๋ ์ญํ ์ ํ๋ค. deallocation์ ๋ค์ ํด์ค์ผ ํ๋ค
Shared Memory
shmctl() ์ deallocation์ ํด์ฃผ๋ ํจ์์ด๋ค. attatch ํ ๋๋ง๋ค increase ํด์ฃผ๊ณ detach ํ ๋๋ง๋ค decreaseํด์ฃผ๋ ๋ณ์๊ฐ ์กด์ฌํ๋ค. attach ํ๊ณ ์๋ ๋์์๋ ๋ง์๋๋ก ์ฌ์ฉํด๋ ๋๋ค.
Reading Assignment ๊ณผ์
POSIX Shared Memory
Memory-mapped file์ด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. POSIX์ shared memory๋ file์ ํตํด์ ์ด๋ฃจ์ด์ง๋ค. shm_open์ผ๋ก ์ด๋์ open์ ์ด๋์ ์ฐจ์ด์ . open์ ์ผ๋ฐ ํ์ผ์ ์ฌ๋ ๊ฒ์ด๊ณ shm_open์ ๊ฐ๋ ์ ์ผ๋ก file์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์์ ์กด์ฌํ๋ ๊ฒ์ ์ฌ๋ ๊ฒ์ด๊ณ , Access๋ฅผ ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์๋๋ฅผ ๋ผ ์ ์๋ค๋ ๊ฒ. ๊ทธ๋ฆฌ๊ณ ๊ณต์ ํ๊ธฐ ์ํด์ ๋ง๋ ํ์ผ์ด๋ผ๋ ์ ์ด open๊ณผ ๋ค๋ฅธ ์ ์ด ๋๋ค.
ftruncate() ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ด์ฆ๋ฅผ ์ง์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ํจ์์ด๋ค.
mmap() ์ ๊ฒฝ์ฐ ๋ฆฌํด ํ์ ์ ์ฃผ์๊ฐ ๋๋ค. ์ฃผ์๊ฐ ๋ฆฌํด ๊ฐ์ด๋ฉด ์ฝ๊ฑฐ๋ ์ธ ์ ์๋ค๋ ๊ฒ์ ๋ช ์ฌ.
shm_unlink() ํจ์๋ shm_open์ ๋ง๋ ๊ฒ์ ์์ ์ฃผ๋ ํจ์.