Search
moon
sun
πŸ“Ά

IPC : inter process communication

νƒœκ·Έ
OS
CS

IPCλž€?

πŸ“Œ
ν”„λ‘œμ„ΈμŠ€ 간에 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ 톡틀어 λ§ν•œλ‹€.

μ™œ ν•„μš”ν•œκ°€?

πŸ“Œ
ν”„λ‘œμ„ΈμŠ€λŠ” 독립적인 μžμ‹ λ§Œμ˜ 곡간을 κ°–λŠ”λ‹€. λ§Œμ•½ 독립적인 곡간을 κ³΅μœ ν•΄μ•Ό ν•  일이 생긴닀면 μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? λ°”λ‘œ 톡신을 ν•΄μ•Ό ν•œλ‹€. κ·Έλž˜μ„œ IPCλ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€κ°„ μžμ›μ„ κ³΅μœ ν•  수 있게 ν•˜λŠ” 것이닀.

κ°œλ…μ  λΆ„λ₯˜

πŸ“Œ
크게 두 κ°€μ§€μ˜ λͺ¨λΈμ΄ μ‘΄μž¬ν•œλ‹€. λͺ¨λΈμΈ 것이닀. 즉, κΈ°λ²•μ˜ 세뢀적인 κ΅¬ν˜„μ΄ μ•„λ‹ˆλΌ, λ‹¨μˆœνžˆ κ°œλ…μ„ 도식화 μ‹œν‚¨ 것이닀. κ·Έλž˜μ„œ μ΄λ ‡κ²Œ μƒκ°ν•˜κ³  μ°¨ν›„ 기법에 λŒ€ν•΄μ„œ 생각을 μ’€ 더 깊게 해보면 μ’‹λ‹€. μ•„λž˜λŠ” gptλ₯Ό μ΄μš©ν•˜μ—¬ 쑰금 μ„ΈλΆ„ν™”ν•΄μ„œ λΆ„λ₯˜ν–ˆλ‹€. 근데 μƒκ°ν•΄λ³΄λ‹ˆ λͺ¨λΈλ§Œ μ•Œκ³  μžˆμ–΄λ„ μƒκ΄€μ—†λŠ” 것 κ°™λ‹€.
GPTλ₯Ό μ΄μš©ν•΄μ„œ κ°œλ…μ  μ„ΈλΆ„ν™”

곡유 λ©”λͺ¨λ¦¬

πŸ€”
λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•œλ‹€. 즉, λ‹€λ₯Έ 각각의 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ κ³΅λ™μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ°Έμ‘°ν•˜μ—¬ μ‚¬μš©ν•œλ‹€. λ˜ν•œ ν™•μž₯ν•΄μ„œ 생각해보면, λ°μ΄ν„°μ˜ 일관성이 λ¬΄λ„ˆμ§€κ±°λ‚˜, κ²½μŸν•  수 μžˆλ‹€. 즉, 동기화 기술이 ν•„μš”ν•˜λ‹€.

λ©”μ‹œμ§€ νŒ¨μ‹±

πŸ€”
컀널이 ν•˜λ‚˜μ˜ μ„€λΉ„λ₯Ό λ§Œλ“€μ–΄μ„œ 이λ₯Ό λ©”μ‹œμ§€λΌλŠ” ν˜•νƒœλ‘œ μ£Όκ³  λ°›κ²Œ ν•΄μ£ΌλŠ” μ„€λΉ„λ‹€. λ‹Ήμ—°νžˆ 운영체제의 κ°œμž…μœΌλ‘œ μΈν•˜μ—¬ 곡유 λ©”λͺ¨λ¦¬ λͺ¨λΈ 보닀 μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€.

기법

direct(직접 톡신)
πŸ€”
κ°„λ‹¨ν•˜κ²Œ p1이 p2의 정보λ₯Ό μ•Œκ³  μ „μ†‘ν•˜λŠ” 것이닀. p2도 λ§ˆμ°¬κ°€μ§€κ³  p1의 정보λ₯Ό μ•Œκ³  μˆ˜μ‹ ν•˜λŠ” 것이닀.
indirect(κ°„μ ‘ 톡신)
πŸ€”
κ°„λ‹¨ν•˜κ²Œ p1, p2 λ‘˜ λ‹€ mailBox만 바라보고 μžˆλ‹€.
πŸ€”
μ—¬κΈ°μ„œ μž¬λ―ΈμžˆλŠ” 사싀 κ°„μ ‘ 톡신이 λ­”κ°€ 되게 λΉ„μŠ·ν•˜κ²Œ 생긴 λͺ¨μ–‘을 μ–΄λ””μ„œ 봀을 μˆ˜λ„ μžˆλ‹€. Dependency Inversion Principle와 되게 λΉ„μŠ·ν•œ λͺ¨μ–‘이라고 μƒκ°ν•œλ‹€. p1, p2λŠ” μ„œλ‘œ λ­˜ν•˜λŠ”μ§€ λͺ¨λ₯Έλ‹€. 그리고 mailBox만 λ°”λΌλ³΄κ²Œ λœλ‹€. μ΄μ μ—μ„œ 직접 톡신보닀, κ°„μ ‘ 톡신이 ν˜„λŒ€μ— 많이 μ‚¬μš© λ˜κ² κ΅¬λ‚˜λ₯Ό μ•Œ 수 μžˆμ—ˆλ‹€. λ˜ν•œ μ΄λ ‡κ²Œ 간접적인 톡신을 ν•˜λŠ” 것듀이 생각보닀 λ§Žλ‹€. 객체지ν–₯ λ””μžμΈμ—μ„œλ„ λΉ„μŠ·ν•œ 사둀듀이 자주 λ‚˜μ˜¨λ‹€. μ΄λž˜μ„œ CS곡뢀λ₯Ό ν•˜κ΅¬λ‚˜.

μ‹€μ œ μ’…λ₯˜

곡유 λ©”λͺ¨λ¦¬

Shared Memory (곡유 λ©”λͺ¨λ¦¬)
πŸ“Œ
곡유 방법 - λ©”λͺ¨λ¦¬
톡신 λ‹¨μœ„ - ꡬ쑰체
톡신 λ°©ν–₯ - μ–‘λ°©ν–₯
톡신 λ²”μœ„ - 동일 μ‹œμŠ€ν…œ
Memory Mapping (λ©”λͺ¨λ¦¬ λ§€ν•‘)
πŸ“Œ
곡유 방법 - λ©”λͺ¨λ¦¬ + 파일
톡신 λ‹¨μœ„ - νŽ˜μ΄μ§€
톡신 λ°©ν–₯ - μ–‘λ°©ν–₯
톡신 λ²”μœ„ - 동일 μ‹œμŠ€ν…œ

λ©”μ‹œμ§€ νŒ¨μ‹±

Pipes (νŒŒμ΄ν”„), Named Pipe(λͺ…λͺ…λœ νŒŒμ΄ν”„)
πŸ“Œ
곡유 방법 - 파일
톡신 λ‹¨μœ„ - Stream
톡신 λ°©ν–₯ - 단방ν–₯
톡신 λ²”μœ„ - 동일 μ‹œμŠ€ν…œ
특이점 - λΆ€λͺ¨-μžμ‹ 관계가 있음, μ΄ˆκΈ°μ— pipeλŠ” λΆ€λͺ¨ μžμ‹ κ°„μ˜ 톡신, named pipe의 경우 λΆ€λͺ¨-μžμ‹ 관계가 μ•„λ‹ˆμ–΄λ„ 톡신 κ°€λŠ₯
Message Queue(λ©”μ‹œμ§€ 큐)
πŸ“Œ
곡유 방법 - λ©”λͺ¨λ¦¬
톡신 λ‹¨μœ„ - ꡬ쑰체
톡신 λ°©ν–₯ - 단방ν–₯
톡신 λ²”μœ„ - 동일 μ‹œμŠ€ν…œ
특이점 - key의 ν˜•νƒœλ‘œ 찾을 수 μžˆλ‹€. pipe와 μœ μ‚¬ν•˜μ§€λ§Œ λ‹€λ₯Έ 점은 파일이 μ•„λ‹Œ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•œλ‹€λŠ” 점이닀.
πŸ€”
이 뢀뢄은 사싀 λ§žλ‹€λΌκ³  μ΄μ•ΌκΈ°ν•˜κΈ° νž˜λ“€ 것 κ°™λ‹€. μ–΄λ–€ μ‚¬λžŒμ€ 단방ν–₯이라고 ν•œλ‹€. κ·Έλž˜μ„œ 확신은 μ—†μ§€λ§Œ λ‚΄ μƒκ°μ—λŠ” μ–‘λ°©ν–₯이닀. μ™œλƒν•˜λ©΄ pipe의 경우 ν•œμͺ½μœΌλ‘œ λ“€μ–΄κ°€λŠ” 건 λ˜‘κ°™μ§€λ§Œ μ›ν•˜λŠ” 데이터λ₯Ό κ°€μ Έμ˜€λ¦¬λž€ 보μž₯이 μ—†λ‹€. κ·Έλž˜μ„œ 두 개의 μž…λ ₯/좜λ ₯ νŒŒμ΄ν”„λ₯Ό λ§Œλ“€μ–΄μ•Ό ν–ˆλ‹€. ν•˜μ§€λ§Œ λ©”μ‹œμ§€ 큐의 경우 ν•œ λ°©ν–₯으둜 보내도 μ›ν•˜λŠ” λ°μ΄ν„°μ˜ ν‚€λ§Œ μ•Œκ³  μžˆλ‹€λ©΄ μ›ν•˜λŠ” 데이터λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.