λͺ©λ‘λΆλ₯ μ 체보기 (1005)
π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?

β μΈν°λ·κ³Ό BSD μ λμ€ 1983λ UC λ²ν΄λ¦¬μμ μ¬μ©νλ BSD (Berkeley Software Distribution) μ TCP/IP λ€νΈμν¬μ ꡬνμ λ§‘κ²Όλλ°, μ λμ€μ TCP/IP μ€ν (stack) μ΄ μΆκ°λμμΌλ©° ν΅μ μ μν΄ μμΌμ μΆκ°ν¨ BSD μμΌμ λ€νΈμν¬ νλ‘κ·Έλλ°μ νμ€ μΈν°νμ΄μ€λ‘, μ격 νΈμ€νΈλ₯Ό μ°κ²°μμΌ μ£Όλ λ§€κ°μ²΄ μν μ μννλ€ λλΆλΆμ μ λμ€μ TCP/IP λ€νΈμν¬ μ€ν (stack) μ BSD κΈ°λ°μΌλ‘ νκ³ , μμΌ μμ€ν λ μ¬μ©νλ€ β BSD μμΌ μμΌμ νλ‘μΈμ€ κ°μ μνΈ μλ°©ν₯ ν΅μ λ°©μ μννΈμ¨μ΄λ‘ μμ±λ ν΅μ μ μμ μ λνμΊκ³ λ€νΈμν¬μμμ λ¨λ§λ€λΌλ¦¬μ μ°κ²°μ μν΄ μ¬μ©νλ€ λλ°μ΄μ€ νμΌκ³Ό λ§μ°¬κ°μ§λ‘ νμΌλ‘ λ€λ£° μ μλλ‘ νμΌ/μμΌ λμ€ν¬λ¦½ν°λ₯Ό μ 곡νλ©°, κ°..

β μΈν°λ· μ¬λ¬Ό κ°μ ν΅μ μ μν΄μλ λ€νΈμν¬λΌλ κΈ°μ μ μ¬μ©νλ€ μΈν°λ·μμλ TCP/IP νλ‘ν μ½μ΄ μ¬μ©λλλ° TCPμ UDP λ‘ λλλ€ TCPλ μΌμ μνμ μ νμ κ°μ΄ λ°μ΄ν°λ₯Ό μλ΄μμ΄λ μ ν κ΅νκΈ° ν΅ν΄μ λ¨Όμ μ°κ²°ν ν ν΅μ UDPλ μΌλ° μ°νΈκ³Ό κ°μ΄ λΆμ€ μ°λ €κ° μλ€ λ€νΈμν¬μμλ κ°κ°μ ν΄λΌμ΄μΈνΈλ€μ ꡬλΆνκΈ° μν΄μ IPμ£Όμμ λλ©μΈ μ£Όμ, MAC μ£Όμκ° μ¬μ©λκ³ μλΉμ€λ€μ ꡬλΆνκΈ° μν΄μ ν¬νΈ λ²νΈκ° μ¬μ©λλ€ μ λμ€μμλ λ€νΈμν¬ νλ‘κ·Έλλ°μ μν΄ BSD μμΌμ μ΄μ© μμΌμ μ΄μ©ν΄μ λ¨λ§λΌλ¦¬μ μ°κ²°μ μ립νκ³ λ€νΈμν¬ ν΅μ μ μννλ€ μμΌμ λ€νΈμν¬ νλ‘κ·Έλλ°μ μν κΈ°λ³Έ λ¨μ, μ λμ€μμλ λ€λ₯Έ λλ°μ΄μ€μ κ°μ΄ νμΌλ‘ μΈμλλ€ μΉ μλΉμ€λ HTTPμ HTML μ μ΄μ©νλ©° HTTPλ μμ²(..
β νλ‘μΈμ€ μΌμ μ²λ¦¬ λ¨μ νλ‘μΈμ€μ μ€λΉμμλΆν° μ’ λ£κΉμ§μ μ¬λ¬ μνλ€μ κ°μ§κ³ μλ€ νμ¬ μμ€ν μμ μ€νλλ νλ‘μΈμ€λ€μ μνλ₯Ό νμΈνκΈ° μν΄μλ ps λͺ λ Ήμ΄ μ¬μ©νλ€ aux μ΅μ μ μ¬μ©ν΄μ μμ€ν μ λͺ¨λ νλ‘μΈμ€μ λν μ 보λ₯Ό νμΈν μ μλ€ β μκ·Έλ νλ‘μΈμ€ μ¬μ΄μ λΉλκΈ°μ μΈ μ¬κ±΄μ μ λ¬νκΈ° μν΄ μ¬μ© 리λ μ€ μκ·Έλμ λν μμ μκ·Έλμ λ°μ, μ λ¬, μ²λ¦¬λ₯Ό μ§μνλ€ μκ·Έλ μ²λ¦¬μ μκ·Έλ λ§μ€ν¬λ₯Ό μ΄μ©ν΄μ λ³΄λ€ λ€μν μ²λ¦¬κ° κ°λ₯νλ€ sigprocmask() ν¨μλ₯Ό μ¬μ©νμ¬ μκ·Έλ λ§μ€ν¬μ ν΄λΉ μκ·Έλμ μ νμ μΌλ‘ λΈλ‘μν€κ³ ν΄μ ν λ² μκ·Έλ λ§μ€ν¬κ° μ€μ λλ©΄ λ€μ μ€μ λκΉμ§ νμ¬ μ€μ λ κ°μ κ·Έλλ μ¬μ©νλ€ μκ·Έλ λ§μ€ν¬κ° μ€νλλ λμμ μ λ¬λ μκ·Έλμ λΈλ‘λκ³ , μκ·Έλμ΄ λΈλ‘λμ΄ μλ..

β POSIX μ€λ λ μ¬λ¬κ°μ§ μΌμ λμμ μ²λ¦¬νκ³ μΆμ κ²½μ°μλ λ©ν° νλ‘μΈμ€λ₯Ό μ΄μ©νλ€ νλ‘μΈμ€λ μμ λ§μ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§κ³ μκ³ , μλ‘μ΄ νλ‘μΈμ€λ₯Ό λ§λ€ λλ§λ€ νλ‘μΈμ€λ₯Ό μν λ©λͺ¨λ¦¬ 곡κ°μ λ°λ‘ λ§λ€μ΄μ€μΌ νκΈ° λλ¬Έμ μμ±νλ μμ μ΄ λ³΅μ‘νλ€ λμΌν μμ μ μννλ κ²½μ°μλ 곡μ λλ λΆλΆ μμ΄ λ³λμ μμμ μ¬μ©νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ 곡κ°μ΄ λλΉλλ€λ λ¬Έμ κ° μλ€ μ€λ λ(Thread) λ νλ‘μΈμ€μμ λλμ΄μ§λ μΌμ λ¨μλ‘ μ»€λ λ 벨μ μ€λ λμ μ μ λ 벨μ μ€λ λλ‘ κ΅¬λΆλλ€ μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μμλ μ μ λ 벨μ μ€λ λλ₯Ό μ¬μ©νλλ°, μ μ λ 벨μ μ€λ λλ λ©λͺ¨λ¦¬λ₯Ό λ€λ₯Έ μ€λ λμ 곡μ ν μ μκΈ° λλ¬Έμ μμ±μ΄ λΉ λ₯΄λ©° λ©λͺ¨λ¦¬μ λλΉλ λ§μ μ μλ€ νμ§λ§ μ€λ λκ° λ©λͺ¨λ¦¬λ₯Ό μλͺ» 건λ리면 λ©λͺ¨λ¦¬λ₯Ό 곡..

β POSIX λ©μμ§ ν μμ€ν Vμ λ©μμ§ νμ λ§μ°¬κ°μ§λ‘ POSIX λ©μμ§ νλ₯Ό μ¬μ©νλ©΄ νλ‘μΈμ€ κ°μ λ©μμ§μ ννλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν μ μλ€ μμ€ν Vμ ν¨μλ€μ΄ μμ€ν μ½μΈ κ²μ λΉν΄μ POSIX ν¨μλ λΌμ΄λΈλ¬λ¦¬ ννλ‘ μ 곡λλ€ POSIX μ λ©μμ§ νλ mqd_t νμ μ΄μ©νλ€ λ©μμ§ νμ μμ±κ³Ό νλμ μν΄ mq_open() ν¨μλ₯Ό μ¬μ©νλ€ mq_open() ν¨μλ₯Ό μ¬μ©νλ©΄ mqd_t νμ λ°νλ°μ ν μ΄μ©ν μ μλ€ λ©μμ§ νμ μ‘μμ μ μν΄ mq_send() μ mq_receive() ν¨μλ₯Ό μ¬μ©νλ€ νλ‘μΈμ€κ° νμ μ¬μ©μ λλΌ λ mq_close() ν¨μλ‘ λ«λλ€ λ©μμ§ νκ° λ μ΄μ νμ μκ² λ κ²½μ° mq_unlink() ν¨μλ₯Ό μ¬μ©ν΄ νλ₯Ό μμ νλ€ λ©μμ§ νμ μμ±μ mq_get..

β μ λμ€ μμ€ν V AT&T 벨 μ°κ΅¬μμμ λ§λ€λ μ λμ€ κ³μ΄μ ν΅μΉν¨ νμ¬ λ¦¬λ μ€λ μ λμ€ μμ€ν V κ³μ΄μ μ λμ€μμ μ 곡νλ μμ€ν νΈμΆκ³Ό BSD κ³μ΄μ μ λμ€μμ μ 곡νλ μμ€ν νΈμΆμ λͺ¨λ μ 곡νλ€ μμ€ν Vμ IPC λ POSIX IPC κ° λ±μ₯ν μ΄νλ‘ XSI (X System Interface) λ‘ λΆλ¦¬μ°κ³ μλ€ κ΅¬λΆ λ΄μ© λ©μμ§ ν (Message Queue) λ©μμ§ λ¨μλ‘ I/O λ₯Ό μννλλ°, λ€λ₯Έ IPC μ λ¬λ¦¬ μλ²μ ν΄λΌμ΄μΈνΈκ° κ°μ μκ°μ μ‘΄μ¬ν νμκ° μλ€ μΈλ§ν¬μ΄ (Semaphore) λ°μ΄ν° μ μ‘μ λͺ©μ μΌλ‘ λ§λ€μ΄μ§ IPC κ° μλ νλ‘μΈμ€ λκΈ°νμ νμν 곡μ λ³μμ κ°μ 곡μ λ 리μμ€ μ νμ μν μΈλ§ν¬μ΄μ μ°Έμ‘°μ μ‘°μ§μ μν΄ λ§λ€μ΄μ§ IPC 곡μ λ©λͺ¨λ¦¬ (Shared..

β IPC (Inter-Process Communication) νλ‘μΈμ€ κ° ν΅μ μ μν κΈ°λ² βοΈ νμΌ μμ€ν νλ‘μΈμ€ κ°μ λ²νΌ μ©λμ μ¬μ©ν μ μλ νμΌμ μμ±νκ³ , λ€μμ νλ‘μΈμ€κ° ν νμΌμ κ²½μ νλ λ°©λ²μΌλ‘ νμΌμ μ μΆλ ₯ μμ μ μνν΄μ μλ‘ λ°μ΄ν°λ₯Ό 곡μ ν μ μλ€ μ΄μ체μ μ λ°λΌ μ°κΈ° μ©λλ‘λ νλμ νλ‘μΈμ€λ§ νμΌμ μ΄ μ μκΈ° λλ¬Έμ, μ΄λ€ νλ‘μΈμ€κ° νμΌμ μ΄μ©νκ³ μλμ§ νμΈνλ μ μ°¨κ° νμνλ€ νμΌ μμ€ν μ μ μΆλ ₯ λ€μ€ν μ λ¬Έμ ν΄κ²°μ΄ μ΄λ ΅λ€ νμΌ μ μΆλ ₯ μ λΉλ²ν μμ€ν νΈμΆμ΄ λ°μνλ€ κ΅¬λΆ λ΄μ© νμΌ λμ€ν¬λ¦½ν° κΈ°λ°μ IPC νμ΄νμ FIFO(λ¨λ°ν₯), μμΌ(μλ°©ν₯) μ λμ€ μμ€ν μ Vμ IPC λ©μμ§ ν, μΈλ§ν¬μ΄, 곡μ λ©λͺ¨λ¦¬ POSIXμ IPC λ©μμ§ ν, λ€μλ μΈλ§..

β νλ‘μΈμ€μ μ’ λ£ CμΈμ΄μ main() ν¨μλ int νμ λ°νκ° κ°λλ€ μ ν리μΌμ΄μ μ΄ μ’ λ£λλ©΄ μ€ν κ²°κ³Όλ₯Ό μ΄μ체μ μ λ°ννκ³ κ·Έ μ΄μ체μ λ κ·Έ νλ‘μΈμ€κ° μ΄μλ (open ν¨μ) νμΌ λμ€ν¬λ¦½ν°λ₯Ό λͺ¨λ λ«λλ€ (close ν¨μ) νλ‘μΈμ€κ° μ°¨μ§νκ³ μλ€ λ©λͺ¨λ¦¬λ₯Ό κ°μ© λ©λͺ¨λ¦¬ ν (pool) λ‘ λ°ννκ² λλ€ μ ν리μΌμ΄μ μ μ’ λ£ν λ main() ν¨μμμ return μΌλ‘ λ°ννλ κ²½μ° μλμ μΌλ‘ exit() ν¨μκ° νΈμΆλλ€ exit() ν¨μλ νμΌ μ€νΈλ¦Όμ λν΄μλ λμΌν μμ μ μν, μ΄λ € μλ νμΌμ μ€νΈλ¦Όμ λν΄μλ fclose() ν¨μλ₯Ό νΈμΆν΄μ λ²νΌμ λ¨μ λ°μ΄ν°λ₯Ό λͺ¨λ μΆλ ₯ (flush) νλ€ β νλ‘μΈμ€μ μμ± λ¦¬λ μ€κ° μ²μ λΆν λλ©΄, 리λ μ€ μ»€λμ΄ μ§μ μ²μ νλ‘μΈμ€λ₯Ό μμ±ν ν λ€μ..