컴퓨터 κ΄€λ ¨ 전곡학생듀이면 λ‹€λ“€ ν•œλ²ˆμ”©μ€ 듀어봀을거닀. μš°μ„  μ •μ˜λ₯Ό λ¨Όμ € ν•œλ²ˆ 보자.

ν”„λ‘œμ„ΈμŠ€(Process) : μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ 할당받은 μž‘μ—…μ˜ λ‹¨μœ„

μŠ€λ ˆλ“œ(Thread) : ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„


μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λΉ„μœ λ₯Ό λ“€μ–΄λ³΄μž.

ν”„λ‘œμ„ΈμŠ€λŠ” λ§₯λ„λ‚ λ“œ κ°€κ²Œ(λ…λ¦½λœ μž„λŒ€ 곡간)

μŠ€λ ˆλ“œλŠ” λ§₯λ„λ‚ λ“œμ˜ 직원듀(재고, κ³„μ‚°λŒ€, 곡간 곡유)

μ •μ˜μ™€ λΉ„μœ λŠ” 이 μ •λ„λ‘œ μ •λ¦¬ν•˜κ³ , 이제 μ‹€μ œλ‘œ 무엇이 λ‹€λ₯΄κ³  μ™œ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ”μ§€ ꡬ쑰적으둜 μ‚΄νŽ΄λ³΄μž.


ν”„λ‘œκ·Έλž¨


ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € ν”„λ‘œκ·Έλž¨μ— λŒ€ν•΄ μ•Œμ•„μ•Όν•œλ‹€.
ν”„λ‘œκ·Έλž¨μ„ λͺ¨λ₯΄λŠ” μ‚¬λžŒμ΄ 어딨어,,ν•  수 μžˆμ§€λ§Œ 막상 ν”„λ‘œκ·Έλž¨μ— λŒ€ν•΄ μ„€λͺ…해봐라 ν•˜λ©΄ μ œλŒ€λ‘œ λ‹΅ν•˜λŠ” μ‚¬λžŒμ΄ 거의 없을거닀.

μš°μ„  ν”„λ‘œκ·Έλž¨μ˜ μ •μ˜μ€ 파일이 μ €μž₯ μž₯μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€ 정적인 μƒνƒœλ₯Ό λ§ν•œλ‹€.

μš΄μ˜μ²΄μ œκ°€ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄ μ€˜μ•Ό ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ”λ°, 아직 λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄ μ£Όμ§€ μ•Šμ•„μ„œ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆμ§€ μ•Šλ‹€ ν•˜λŠ” κ±°λ‹€. 또 그렇기에 μ‹€ν–‰λ˜μ§€ μ•Šμ•„μ„œ 정적(static)인 μƒνƒœκ°€ λ˜λŠ” κ±°κ³ ..

벌써 μ–΄λ ΅λ‹€. μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄ μ•„κΉŒ ν”„λ‘œμ„ΈμŠ€κ°€ κ°€κ²ŒλΌκ³  ν•˜κ³  μŠ€λ ˆλ“œκ°€ 직원듀이라 ν–ˆμœΌλ©΄ ν”„λ‘œκ·Έλž¨μ€ κ·Έ κ°€κ²Œμ˜ 섀계도라고 μƒκ°ν•˜λ©΄ λœλ‹€.

결둠은 ν”„λ‘œκ·Έλž¨μ€ 아직 μ‹€ν–‰λ˜μ§€ μ•Šμ€ (μ„€κ³„λ„λ‹ˆκΉŒ 아직 λ§Œλ“€μ§€ μ•Šμ€) μƒνƒœμΈκ±°λ‹€. μš°λ¦¬κ°€ μ“°λŠ” μœˆλ„μš°μ˜ *.exe νŒŒμΌμ΄λ‚˜ λ§₯의 *.dmg 파일처럼 μ‚¬μš©μžκ°€ 눌러 μ‹€ν–‰ν•˜κΈ° μ „μ˜ νŒŒμΌμ„ λ§ν•œλ‹€. μ½”λ“œ 덩어리라고 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€.


ν”„λ‘œμ„ΈμŠ€


그럼 정적인 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœ 동적인 μƒνƒœ, 즉 μž‘μ—… 쀑인 μƒνƒœλ‘œ λ§Œλ“€λ©΄ λ­λΌν• κΉŒ? μ΄λŸ¬ν•œ μƒνƒœμ˜ ν”„λ‘œκ·Έλž¨μ„ λ°”λ‘œ ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•œλ‹€.

image

μœ„ μ‚¬μ§„μ²˜λŸΌ μž‘μ—… κ΄€λ¦¬μžλ₯Ό 열어보면 μ§€κΈˆ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€λ“€μ„ λ³Ό 수 μžˆλ‹€.

λͺ¨λ“  ν”„λ‘œκ·Έλž¨λ“€μ€ μš΄μ˜μ²΄μ œκ°€ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄μ•Ό 싀행될 수 μžˆλŠ”λ°, ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ν•˜κ²Œ 되면 νŒŒμΌμ€ 컴퓨터 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ²Œ 되고, μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›(CPU)을 ν• λ‹Ήλ°›μ•„ ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œμΌœ μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•  수 있게 λ˜λŠ”κ±°λ‹€.

μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ κ°€κ²Œμ˜ 섀계도인데, 싀행을 ν•˜λŠ” μˆœκ°„ μš΄μ˜μ²΄μ œκ°€ κ°€κ²Œλ₯Ό ν•˜λ‚˜ μ—΄μ–΄μ£ΌλŠ” κ±°λ‹€. λ©”λͺ¨λ¦¬ μ•ˆμ— 곡간을 λ‚΄μ–΄μ£Όκ³  μ½”λ“œ, λ³€μˆ˜, ν•¨μˆ˜λ“€μ„ κ·Έ 곡간에 λ°°μΉ˜ν•œλ‹€. 이게 λ°”λ‘œ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°„λ‹€λŠ” 말이닀.

λ˜‘κ°™μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€(동적), μ‹€ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ ν”„λ‘œκ·Έλž¨(정적)인거닀.


μŠ€λ ˆλ“œ


μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„λ‹€.

κ³Όκ±°μ—λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜μŒλΆ€ν„° λκΉŒμ§€ μ²˜λ¦¬ν•˜λŠ” 방식이 μΌλ°˜μ μ΄μ—ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œκ·Έλž¨μ΄ 점점 λ³΅μž‘ν•΄μ§€λ©΄μ„œ ν•œ λ²ˆμ— μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” 상황이 생겼닀.

예λ₯Ό λ“€μ–΄, 화면을 λ Œλ”λ§ν•˜λ©΄μ„œ μ‚¬μš©μž μž…λ ₯을 λ°›κ³  λ„€νŠΈμ›Œν¬ 톡신을 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€.

ν•˜λ‚˜μ˜ μ‹€ν–‰ νλ¦„μœΌλ‘œ 이 λͺ¨λ“  일을 μ²˜λ¦¬ν•˜λ©΄ 쀑간에 λŒ€κΈ° μ‹œκ°„μ΄ λ°œμƒν•˜κ³ , ν”„λ‘œκ·Έλž¨μ€ 멈좘 κ²ƒμ²˜λŸΌ 보이게 λœλ‹€.

μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 λΆ€μ—¬ν•˜λŠ”λ°, 이 덕뢄에 μ•ˆμ •μ„±μ€ ν™•λ³΄λ˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ 개 μƒμ„±ν•˜λ©΄ λ©”λͺ¨λ¦¬μ™€ μžμ› μ‚¬μš© λΉ„μš©μ΄ 컀진닀.

κ·Έλž˜μ„œ λ“±μž₯ν•œ κ°œλ…μ΄ λ°”λ‘œ μŠ€λ ˆλ“œλ‹€.

μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있게 ν•΄μ€€λ‹€.

예λ₯Ό λ“€μ–΄ λ§₯λ„λ‚ λ“œ κ°€κ²Œλ₯Ό μƒκ°ν•΄λ³΄μž.

μ†λ‹˜μ΄ λ“€μ–΄μ˜€λ©΄ 주문을 λ°›κ³ , 햄버거λ₯Ό λ§Œλ“€κ³ , 계산을 ν•˜κ³ , μŒμ‹μ„ 전달해야 ν•œλ‹€.

λ§Œμ•½ 직원이 ν•œ λͺ…뿐이라면 μ–΄λ–»κ²Œ 될까?

첫 번째 μ†λ‹˜μ˜ 주문을 λ°›κ³ 
햄버거λ₯Ό λ§Œλ“€κ³ 
κ°μžνŠ€κΉ€μ„ νŠ€κΈ°κ³ 
κ³„μ‚°κΉŒμ§€ 끝낸 λ‹€μŒμ—μ•Ό
λ‹€μŒ μ†λ‹˜μ˜ 주문을 받을 수 μžˆλ‹€.

μ΄λ ‡κ²Œ 되면 κ°€κ²ŒλŠ” 금방 쀄이 κΈΈμ–΄μ§€κ³  μ†λ‹˜λ“€μ€ κΈ°λ‹€λ¦¬κ²Œ λœλ‹€.

ν•˜μ§€λ§Œ 직원이 μ—¬λŸ¬ λͺ…이라면 상황이 달라진닀.
같은 κ°€κ²Œ μ•ˆμ—μ„œ μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— μ§„ν–‰λ˜κΈ° λ•Œλ¬Έμ— 훨씬 λΉ λ₯΄κ²Œ 일을 μ²˜λ¦¬ν•  수 μžˆκΈ°λ•Œλ¬Έμ΄λ‹€.

즉, ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ ν™˜κ²½μ΄λΌλ©΄ μŠ€λ ˆλ“œλŠ” κ·Έ μ•ˆμ—μ„œ μ‹€μ œλ‘œ 일을 μˆ˜ν–‰ν•˜λŠ” μ‹€ν–‰ 흐름이닀.


ν”„λ‘œμ„ΈμŠ€μ˜ μžμ› ꡬ쑰


μ§€κΈˆκΉŒμ§€ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ κ°œλ…μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

κ·Έλ ‡λ‹€λ©΄ μ—¬κΈ°μ„œ ν•œ κ°€μ§€ 질문이 생긴닀.

ν”„λ‘œμ„ΈμŠ€κ°€ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° ν• λ‹Ήλ°›λŠ” μžμ›μ€ ꡬ체적으둜 λ¬΄μ—‡μΌκΉŒ?

ν”„λ‘œμ„ΈμŠ€λŠ” λ‹¨μˆœνžˆ β€œμ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨β€μ΄λΌλŠ” κ°œλ…μ— κ·ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€. μ‹€μ œλ‘œλŠ” μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήλ°›μ•„ κ·Έ μ•ˆμ—μ„œ μ½”λ“œμ™€ 데이터λ₯Ό μ‹€ν–‰ν•œλ‹€.

즉, ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ λ§Œμ˜ λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°€μ§€κ³  λ™μž‘ν•œλ‹€.

μ•„λž˜μ˜ 사진은 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ©”λͺ¨λ¦¬λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€ λ³΄μ—¬μ£ΌλŠ” ꡬ쑰이닀.

image

  • μ½”λ“œ μ˜μ—­(Code / Text)
    • ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨ ν•¨μˆ˜λ“€μ˜ μ½”λ“œκ°€ CPUκ°€ 해석 κ°€λŠ₯ν•œ 기계어 ν˜•νƒœλ‘œ μ €μž₯
  • 데이터 μ˜μ—­(Data)
    • μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄μ„œ μ‚¬μš©ν•˜λŠ” μ „μ—­ λ³€μˆ˜λ‚˜ 각쒅 λ°μ΄ν„°λ“€μ˜ λͺ¨μž„
  • μŠ€νƒ μ˜μ—­(Stack)
    • μ§€μ—­ λ³€μˆ˜ 같은 ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ λŒμ•„μ˜¬ μž„μ‹œ 자료λ₯Ό μ €μž₯ν•˜λŠ” 독립적 곡간. ν•¨μˆ˜μ˜ 호좜과 ν•¨κ»˜ ν• λ‹Ήλ˜λ©°, 호좜이 μ™„λ£Œλ˜λ©΄ μ†Œλ©Έ
    • μŠ€νƒ μ˜μ—­ 초과 μ‹œ stack overflow λ°œμƒ
  • νž™ μ˜μ—­
    • μƒμ„±μž, μΈμŠ€ν„΄μŠ€μ™€ 같은 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” 데이터듀을 μœ„ν•΄ μ‘΄μž¬ν•˜λŠ” 곡간
    • μ‚¬μš©μžμ— μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간이 λ™μ μœΌλ‘œ ν• λ‹Ή, ν•΄μ œ


μœ„ μ‚¬μ§„μ—μ„œ μŠ€νƒκ³Ό νž™ μ˜μ—­μ˜ μœ„μ•„λž˜λ‘œ ν™”μ‚΄ν‘œλŠ” μŠ€νƒ μ˜μ—­κ³Ό νž™ μ˜μ—­μ€ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ 크기가 λŠ˜μ–΄λ‚¬λ‹€ 쀄어듀기도 ν•˜λŠ” 동적 μ˜μ—­μ„ ν‘œν˜„ν•œ 것이닀.

그럼 ν™”μ‚΄ν‘œκ°€ μ—†λŠ” μ½”λ“œμ™€ 데이터 μ˜μ—­μ€? μ„ μ–Έν•  λ•Œ κ·Έ 크기가 κ²°μ •λ˜λŠ” 정적 μ˜μ—­μ΄λ‹€.

즉 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” 이런 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°€μ§€λ©° μ‹€ν–‰λœλ‹€.

κ·Έλ ‡λ‹€λ©΄ μŠ€λ ˆλ“œλŠ” 이 λ©”λͺ¨λ¦¬ κ΅¬μ‘°μ—μ„œ μ–΄λ–€ μžμ›μ„ κ³΅μœ ν•˜κ³  μ–΄λ–€ μžμ›μ„ λ…λ¦½μ μœΌλ‘œ μ‚¬μš©ν• κΉŒ?


μŠ€λ ˆλ“œμ˜ μžμ› ꡬ쑰


ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλŠ” 이 μžμ›μ„ μ–΄λ–»κ²Œ μ‚¬μš©ν• κΉŒ?

image

μŠ€λ ˆλ“œλŠ” 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ μžμ›μ„ κ³΅μœ ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ 4κ°€μ§€ λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 Code, Data, Heap은 ν”„λ‘œμ„ΈμŠ€μ— μ†ν•œ λͺ¨λ“  μŠ€λ ˆλ“œκ°€ ν•¨κ»˜ μ‚¬μš©ν•œλ‹€.

이 μ˜μ—­λ“€μ€ ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„λ‘œ ν• λ‹Ήλ˜λŠ” μžμ›μ΄κΈ° λ•Œλ¬Έμ— μŠ€λ ˆλ“œλ§ˆλ‹€ λ”°λ‘œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ νž™ μ˜μ—­μ— μƒμ„±ν•œ κ°μ²΄λ‚˜ 데이터λ₯Ό λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ 가져와 μ½κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ μŠ€λ ˆλ“œλŠ” 각각 독립적인 μ‹€ν–‰ 흐름을 κ°€μ§€κΈ° λ•Œλ¬Έμ— Stack μ˜μ—­μ€ μŠ€λ ˆλ“œλ§ˆλ‹€ λ³„λ„λ‘œ ν• λ‹Ήλœλ‹€.

μŠ€νƒμ—λŠ” ν•¨μˆ˜ 호좜 정보, μ§€μ—­ λ³€μˆ˜, μ‹€ν–‰ 흐름 정보 등이 μ €μž₯λ˜λŠ”λ° λ§Œμ•½ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μ˜ μŠ€νƒμ„ κ³΅μœ ν•˜κ²Œ 되면 μ‹€ν–‰ 흐름이 μ„œλ‘œ μ„žμ—¬ ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•  수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ κ΅¬μ‘°λŠ” μž₯점만 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€.

μŠ€λ ˆλ“œκ°€ λŒ€λΆ€λΆ„μ˜ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•œλ‹€λŠ” 것은 μ„±λŠ₯ λ©΄μ—μ„œλŠ” μœ λ¦¬ν•˜μ§€λ§Œ μ•ˆμ •μ„± λ©΄μ—μ„œλŠ” μ·¨μ•½ν•  수 μžˆλ‹€.

μ—¬κΈ°μ„œ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ μ€‘μš”ν•œ 차이λ₯Ό ν•˜λ‚˜ 더 μ•Œ 수 μžˆλ‹€.

λ§Œμ•½ μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ κ°•μ œλ‘œ μ’…λ£Œλœλ‹€λ©΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—λŠ” μ–΄λ–€ 영ν–₯이 μžˆμ„κΉŒ?

κ³΅μœ ν•˜κ³  μžˆλŠ” νŒŒμΌμ„ μ†μƒμ‹œν‚€λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ 보톡 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

기본적으둜 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ μ£Όμ†Œ 곡간(Address Space)μ—μ„œ μ‹€ν–‰λœλ‹€. λ”°λΌμ„œ ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.

ν•˜μ§€λ§Œ μŠ€λ ˆλ“œλŠ” 상황이 λ‹€λ₯΄λ‹€.

μŠ€λ ˆλ“œλŠ” 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ Code, Data, Heap μ˜μ—­μ„ κ³΅μœ ν•œλ‹€. κ·Έλž˜μ„œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ 치λͺ…적인 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 같은 ν”„λ‘œμ„ΈμŠ€μ— μ†ν•œ λ‹€λ₯Έ μŠ€λ ˆλ“œλ“€ μ—­μ‹œ ν•¨κ»˜ μ’…λ£Œλœλ‹€.

코딩을 ν•˜λ‹€ 보면 Segmentation Fault 같은 였λ₯˜λ‘œ ν”„λ‘œκ·Έλž¨ 전체가 μ’…λ£Œλ˜λŠ” κ²½ν—˜μ„ ν•΄λ³Έ 적이 μžˆμ„ 것이닀. μ΄λŠ” ν•˜λ‚˜μ˜ μ‹€ν–‰ νλ¦„μ—μ„œ λ°œμƒν•œ 였λ₯˜κ°€ ν”„λ‘œμ„ΈμŠ€ 전체에 영ν–₯을 μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

ν”„λ‘œμ„ΈμŠ€λ₯Ό ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄λΌκ³  보면, μŠ€λ ˆλ“œλŠ” κ·Έ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” 각각의 ν•¨μˆ˜ 흐름과 λΉ„μŠ·ν•œ 역할을 ν•œλ‹€. λ”°λΌμ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰ νλ¦„μ—μ„œ 치λͺ…적인 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ λ™μž‘ν•˜λŠ” λͺ¨λ“  μ‹€ν–‰ 흐름이 ν•¨κ»˜ μ€‘λ‹¨λ˜λŠ” 것이닀.


ν”„λ‘œμ„ΈμŠ€μ˜ μžμ› 곡유


μ§€κΈˆκΉŒμ§€ μ„€λͺ…을 보면 ν•œ κ°€μ§€ 의문이 생길 수 μžˆλ‹€.

ν”„λ‘œμ„ΈμŠ€λŠ” μ„œλ‘œ λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•œλ‹€κ³  ν–ˆλŠ”λ° κ·Έλ ‡λ‹€λ©΄ ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” 정말 아무 μžμ›λ„ κ³΅μœ ν•  수 μ—†λŠ” κ²ƒμΌκΉŒ?

κΈ°λ³Έμ μœΌλ‘œλŠ” κ·Έλ ‡λ‹€. 각 ν”„λ‘œμ„ΈμŠ€λŠ” μ„œλ‘œ λ‹€λ₯Έ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

ν•˜μ§€λ§Œ μ‹€μ œ μš΄μ˜μ²΄μ œμ—μ„œλŠ” μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ΄ μ„œλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›μ•„μ•Ό ν•˜λŠ” 상황이 λ§Žλ‹€. 예λ₯Ό λ“€μ–΄ μ›Ή λΈŒλΌμš°μ €μ™€ λ‹€μš΄λ‘œλ“œ ν”„λ‘œκ·Έλž¨, λ˜λŠ” μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€ 같은 ν”„λ‘œκ·Έλž¨λ“€μ€ μ„œλ‘œ 데이터λ₯Ό κ΅ν™˜ν•΄μ•Ό ν•œλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μš΄μ˜μ²΄μ œμ—μ„œλŠ” ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신(IPC, Inter Process Communication) 방법을 μ œκ³΅ν•œλ‹€.

λŒ€ν‘œμ μΈ IPC λ°©μ‹μ—λŠ” Pipe, Message Queue, Shared Memory, Socket이 μžˆλ‹€.

μ΄λŸ¬ν•œ λ©”μ»€λ‹ˆμ¦˜μ„ 톡해 μ„œλ‘œ λ…λ¦½λœ ν”„λ‘œμ„ΈμŠ€λ“€λ„ 데이터λ₯Ό κ΅ν™˜ν•˜λ©° ν˜‘λ ₯ν•  수 μžˆλ‹€.


정리


μ§€κΈˆκΉŒμ§€ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ κ°œλ…κ³Ό λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μ•˜λ‹€.

ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ λ‹¨μœ„μ΄λ©° 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•œλ‹€.

반면 μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„λ‘œ Code, Data, Heap μ˜μ—­μ„ κ³΅μœ ν•˜λ©΄μ„œ λ™μž‘ν•œλ‹€.

μ΄λŸ¬ν•œ ꡬ쑰 덕뢄에 μŠ€λ ˆλ“œλŠ” λΉ λ₯΄κ³  효율적으둜 μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ•ˆμ •μ„± μΈ‘λ©΄μ—μ„œλŠ” μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

λ‹€μŒ κΈ€μ—μ„œλŠ” μ΄λŸ¬ν•œ νŠΉμ§•μ„ λ°”νƒ•μœΌλ‘œ λ©€ν‹° ν”„λ‘œμ„ΈμŠ€μ™€ λ©€ν‹° μŠ€λ ˆλ“œμ˜ 차이에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ: