IPC

image.png

ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ μ˜μ—­μ— μ ‘κ·Όν•˜μ§€ λͺ»ν•œλ‹€. ν•˜μ§€λ§Œ, ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ 톡신이 ν•„μš”ν•˜λ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? 그리고 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ 톡신이 ν•„μš”ν•œ 상황은 μ–Έμ œμΌκΉŒ? κ·Έ 상황은 μ•„λž˜μ™€ κ°™λ‹€.

  • 정보 곡유 : μ—¬λŸ¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ λ™μΌν•œ 정보가 ν•„μš”ν•  수 μžˆλ‹€.
  • 계산 가속화 : νŠΉμ • μž‘μ—…μ„ 빨리 μ‹€ν–‰ν•˜κ³ μž ν•œλ‹€λ©΄, μ„œλΈŒ μž‘μ—…μœΌλ‘œ λ‚˜λˆ„μ–΄ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€.
  • λͺ¨λ“ˆμ„± : μ‹œμŠ€ν…œ κΈ°λŠ₯을 λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€λ“€ λ˜λŠ” μŠ€λ ˆλ“œλ“€λ‘œ λ‚˜λˆ„μ–΄ λͺ¨λ“ˆμ‹ ν˜•νƒœλ‘œ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신, 즉 IPC(Interprocess Communication) 기법은 곡유 λ©”λͺ¨λ¦¬μ™€ λ©”μ‹œμ§€ 전달 λͺ¨λΈμ΄ μžˆλ‹€.

곡유 λ©”λͺ¨λ¦¬

곡유 λ©”λͺ¨λ¦¬λŠ” λ©”λͺ¨λ¦¬ 곡간 상에 νŠΉμ • λ©”λͺ¨λ¦¬ 곡간을 두 κ°œμ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ ‘κ·Όν•˜μ—¬ 데이터λ₯Ό 읽고 μ“°κ³  정보λ₯Ό κ΅ν™˜ν•œλ‹€. μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 것 처럼, ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ μ˜μ—­μ„ μΉ¨λ²”ν•  수 μ—†λ‹€. 단, 곡유 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 이 μ œμ•½ 쑰건을 μ œκ±°ν•˜λŠ” 것에 λ™μ˜ν•œλ‹€λ©΄ μ‚¬μš©ν•  수 μžˆλ‹€.

곡유 λ©”λͺ¨λ¦¬ λͺ¨λΈμ„ μƒμ‚°μž-μ†ŒλΉ„μž μ‹œμ μœΌλ‘œ 바라본닀면, 곡유 λ©”λͺ¨λ¦¬μ— 데이터λ₯Ό μ μž¬ν•˜λŠ” μƒμ‚°μžμ™€ 적재된 데이터λ₯Ό μ†ŒλΉ„ν•˜λŠ” μ†ŒλΉ„μžκ°€ μ‘΄μž¬ν•  것이닀. μ΄λ•Œ, 데이터λ₯Ό μŒ“λŠ” 곡간 λ²„νΌλŠ” 두 κ°€μ§€ μœ ν˜•μ΄ μžˆλ‹€.

  • λ¬΄ν•œ 버퍼 : μƒμ‚°μžλŠ” 항상 데이터λ₯Ό μ μž¬ν•  수 μžˆλ‹€.
  • μœ ν•œ 버퍼 : 버퍼 크기가 꽉 μ°° 경우, λͺ¨λ‘ μ†ŒλΉ„λ  λ•ŒκΉŒμ§€ μƒμ‚°μžλŠ” λŒ€κΈ°ν•΄μ•Όν•œλ‹€.

두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μΌν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ—, 좩돌이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 신경써야 ν•œλ‹€.

λ©”μ‹œμ§€ 전달

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜κ³ , λ©”μ‹œμ§€λ₯Ό λ°›λŠ” ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜λ©΄ λ©”μ‹œμ§€κ°€ μ „λ‹¬λ˜λŠ” 방식이닀. ν•΄λ‹Ή κ³Όμ •μ—μ„œ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— 컀널을 찍고 μ˜¨λ‹€λŠ” 점이 μžˆμ–΄, 곡유 λ©”λͺ¨λ¦¬μ— λΉ„ν•΄ λŠλ¦¬λ‹€. λ‹€λ§Œ, μΆ©λŒμ„ νšŒν”Όν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 적은 μ–‘μ˜ 데이터λ₯Ό κ΅ν™˜ν•˜λŠ” 데 μœ μš©ν•˜λ‹€.

두 ν”„λ‘œμ„ΈμŠ€κ°€ 톡신을 μ›ν•œλ‹€λ©΄, 톡신 연결이 μ„€μ •λ˜μ–΄μ•Ό ν•œλ‹€.

  • 직접 톡신

    • 톡신을 μ›ν•˜λŠ” 각 ν”„λ‘œμ„ΈμŠ€λŠ” ν†΅μ‹ μ˜ μˆ˜μ‹ μž λ˜λŠ” μ†‘μ‹ μžμ˜ 이름을 λͺ…μ‹œν•œλ‹€.
      send(P, message) - ν”„λ‘œμ„ΈμŠ€ Pμ—κ²Œ λ©”μ‹œμ§€λ₯Ό 전솑
      receive(Q, message) - ν”„λ‘œμ„ΈμŠ€ Qλ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ 
    
    • λ³€ν˜•μœΌλ‘œ μ†‘μ‹ μžλ§Œ 이름을 λͺ…μ‹œν•  수 μžˆλ‹€.
      send(P, message) - λ©”μ‹œμ§€λ₯Ό ν”„λ‘œμ„ΈμŠ€ P에 μ „μ†‘ν•œλ‹€.
      receive(id, message) - μž„μ˜μ˜ ν”„λ‘œμ„ΈμŠ€λ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œλ‹€. λ³€μˆ˜ idλŠ” 톡신을 λ°œμƒμ‹œν‚¨ ν”„λ‘œμ„ΈμŠ€μ˜ μ΄λ¦„μœΌλ‘œ μ„€μ •λœλ‹€.
    
    • ν”„λ‘œμ„ΈμŠ€μ˜ 이름을 λ°”κΎΈλ©΄ λͺ¨λ“  뢀뢄에 μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€.
  • κ°„μ ‘ 톡신

    • λ©”μΌλ°•μŠ€ λ˜λŠ” 포트둜 λ©”μ‹œμ§€κ°€ μ†‘μ‹ λ˜κ³ , κ·Έκ²ƒμœΌλ‘œλΆ€ν„° μˆ˜μ‹ λœλ‹€.

      • λ©”μΌλ°•μŠ€λŠ” μΆ”μƒμ μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€λ“€μ— μ˜ν•΄ λ©”μ‹œμ§€κ°€ λ„£μ–΄μ§€κ³ , λ©”μ‹œμ§€λ“€μ΄ 제거될 수 μžˆλŠ” 객체이닀.
      • 각 λ©”μΌλ°•μŠ€λŠ” 고유의 idλ₯Ό κ°€μ§„λ‹€.
        send(A, message) - λ©”μ‹œμ§€λ₯Ό λ©”μΌλ°•μŠ€ A둜 μ†‘μ‹ ν•œλ‹€.
        receive(A, message) - λ©”μ‹œμ§€λ₯Ό λ©”μΌλ°•μŠ€ Aλ‘œλΆ€ν„° μˆ˜μ‹ ν•œλ‹€.
      

동기화

λ©”μ‹œμ§€ 전달은 λ™κΈ°ν˜•κ³Ό λΉ„λ™κΈ°ν˜• λ°©μ‹μœΌλ‘œ μ „λ‹¬λœλ‹€.

  • λ™κΈ°ν˜• 보내기 : μ†‘μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ©”μ‹œμ§€κ°€ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” λ©”μΌλ°•μŠ€μ— μ˜ν•΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ λΈ”λ‘œν‚Ήλœλ‹€.
  • λΉ„λ™κΈ°ν˜• 보내기 : μ†μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ λ©”μ‹œμ§€λ₯Ό 보내고 μž‘μ—…μ„ μž¬μ‹œμž‘ν•œλ‹€.
  • λ™κΈ°ν˜• λ°›κΈ° : λ©”μ‹œμ§€κ°€ 이용 κ°€λŠ₯ν•  λ•ŒκΉŒμ§€ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€κ°€ λ΄‰μ‡„λœλ‹€.
  • λΉ„λ™κΈ°ν˜• λ°›κΈ° : μ†‘μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μœ νš¨ν•œ λ©”μ‹œμ§€ λ˜λŠ” 널을 λ°›λŠ”λ‹€.

νŒŒμ΄ν”„

두 ν”„λ‘œμ„ΈμŠ€κ°€ 톡신할 수 있게 ν•˜λŠ” μ „λ‹¬μžλ‘œμ„œ λ™μž‘ν•œλ‹€. νŒŒμ΄ν”„λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒ 4κ°€μ§€ 문제λ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€.

  • νŒŒμ΄ν”„λŠ” 단방ν–₯ or μ–‘λ°©ν–₯
  • μ–‘λ°©ν–₯ 톡신이 λœλ‹€λ©΄ λ°˜μ΄μ€‘ 방식 or 전이쀑 방식
  • 두 ν”„λ‘œμ„ΈμŠ€ 간에 λΆ€λͺ¨-μžμ‹ 관계가 쑴재?
  • λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•˜μ—¬ 톡신이 κ°€λŠ₯ν•œκ°€

νŒŒμ΄ν”„μ—λŠ” 두 κ°€μ§€ μœ ν˜•μ΄ μ‘΄μž¬ν•œλ‹€.

  • 일반 νŒŒμ΄ν”„

    image.png

    • μƒμ‚°μž-μ†ŒλΉ„μž ν˜•νƒœλ‘œ 두 ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신을 ν—ˆμš©
    • μƒμ‚°μžλŠ” νŒŒμ΄ν”„μ˜ ν•œ μ’…λ‹¨μ—μ„œ μ“°κ³ , μ†ŒλΉ„μžλŠ” λ‹€λ₯Έ μ’…λ‹¨μ—μ„œ μ½λŠ”λ‹€.
    • 단방ν–₯ ν†΅μ‹ λ§Œ κ°€λŠ₯ν•˜λ©°, μ–‘λ°©ν–₯ 톡신을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” νŒŒμ΄ν”„λ₯Ό 두 개 μ‚¬μš©ν•΄μ•Όν•œλ‹€.
    • νŒŒμ΄ν”„λ₯Ό μƒμ„±ν•œ ν”„λ‘œμ„ΈμŠ€ μ΄μ™Έμ—λŠ” μ ‘κ·Όν•  수 μ—†λ‹€.
    • κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“€κ³  ν†΅μ‹ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
  • μ§€λͺ… νŒŒμ΄ν”„

    • 톡신은 μ–‘λ°©ν–₯으둜 κ°€λŠ₯ν•˜λ©° λΆ€λͺ¨-μžμ‹ 관계도 ν•„μš”ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 이λ₯Ό μ‚¬μš©ν•˜μ—¬ 톡신할 수 μžˆλ‹€.
    • λ°˜μ΄μ€‘ μ „μ†‘λ§Œ κ°€λŠ₯ν•˜λ‹€.

μ†ŒμΌ“

image.png

ν†΅μ‹ μ˜ 극점을 λœ»ν•˜λ©°, 두 ν”„λ‘œμ„ΈμŠ€κ°€ λ„€νŠΈμ›Œν¬μƒμ—μ„œ 톡신을 ν•˜λ €λ©΄ μ–‘ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ ν•˜λ‚˜μ”© 총 두 개의 μ†ŒμΌ“μ΄ ν•„μš”ν•˜λ‹€. 각 μ†ŒμΌ“μ€ IPμ£Όμ†Œμ™€ 포트 번호λ₯Ό μ ‘ν•©ν•΄μ„œ κ΅¬λ³„ν•œλ‹€.

RPC

λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ 두 μ‹œμŠ€ν…œ μ‚¬μ΄μ˜ 톡신에 μ‚¬μš©ν•˜κΈ° μœ„ν•˜μ—¬ ν”„λ‘œμ‹œμ € 호좜 기법을 μΆ”μƒν™”ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ„€κ³„λ˜μ—ˆλ‹€. ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ μœ„μ—μ„œ λŒμ•„κ°€κΈ° λ•Œλ¬Έμ— 원격 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”μ‹œμ§€ 기반 톡신을 ν•΄μ•Όν•œλ‹€.