CS

OS | ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ 차이

Yunny52 2023. 7. 3. 00:24

πŸ“Œ ν”„λ‘œκ·Έλž¨(Program) μ΄λž€

  • 사전적 의미: μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일

 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€(Process) λž€

  • 사전적 의미: μ»΄ν“¨ν„°μ—μ„œ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨
    • λ©”λͺ¨λ¦¬μ— μ˜¬λΌμ™€ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€(독립적인 개체)
    • μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…μ˜ λ‹¨μœ„
    • 즉, 동적인 κ°œλ…μœΌλ‘œλŠ” μ‹€ν–‰λœ ν”„λ‘œκ·Έλž¨μ„ μ˜λ―Έν•œλ‹€.
  • ν• λ‹Ήλ°›λŠ” μ‹œμŠ€ν…œ μžμ›μ˜ 예
    • CPU μ‹œκ°„
    • 운영되기 μœ„ν•΄ ν•„μš”ν•œ μ£Όμ†Œ 곡간
    • Code, Data, Stack, Heap의 ꡬ쑰둜 λ˜μ–΄ μžˆλŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­
  • νŠΉμ§•
    • ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap의 ꡬ쑰)을 ν• λ‹Ήλ°›λŠ”λ‹€.
    • 기본적으둜 ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œ(메인 μŠ€λ ˆλ“œ)λ₯Ό κ°€μ§€κ³  μžˆλ‹€.
    • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λ©°, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ 자료ꡬ쑰의 μ ‘κ·Όν•  수 μ—†λ‹€.
    • ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신(IPC, inter-process communication)을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. (EX | νŒŒμ΄ν”„, 파일, μ†ŒμΌ“ 등을 μ΄μš©ν•œ 톡신 방법 이용)

 

πŸ“Œ μŠ€λ ˆλ“œ(Thread) λž€

  • 사전적 의미: ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νλ¦„μ˜ λ‹¨μœ„
    • ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ •ν•œ μˆ˜ν–‰ 경둜
    • ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰μ˜ λ‹¨μœ„
  • νŠΉμ§•
    • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 각각 Stack만 λ”°λ‘œ ν• λ‹Ήλ°›κ³  Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•œλ‹€.
    • μŠ€λ ˆλ“œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” μ—¬λŸ¬ μ‹€ν–‰μ˜ νλ¦„μœΌλ‘œ, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›λ“€ (νž™ 곡간 λ“±)을 같은 ν”„λ‘œμ„ΈμŠ€ 내에 μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•˜λ©΄μ„œ μ‹€ν–‰λœλ‹€.
    • 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μžˆλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ“€μ€ 같은 νž™ 곡간을 κ³΅μœ ν•œλ‹€. λ°˜λ©΄μ— ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
    • 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ λ ˆμ§€μŠ€ν„°μ™€ μŠ€νƒμ„ κ°–κ³  μžˆμ§€λ§Œ, νž™ λ©”λͺ¨λ¦¬λŠ” μ„œλ‘œ 읽고 μ“Έ 수 μžˆλ‹€.
    • ν•œ μŠ€λ ˆλ“œκ°€ ν”„λ‘œμ„ΈμŠ€ μžμ›μ„ λ³€κ²½ν•˜λ©΄, λ‹€λ₯Έ 이웃 μŠ€λ ˆλ“œ(sibling thread)도 κ·Έ λ³€κ²½ κ²°κ³Όλ₯Ό μ¦‰μ‹œ λ³Ό 수 μžˆλ‹€.

 

πŸ“Œ μžλ°” μŠ€λ ˆλ“œ(Java Thread) λž€

  • 일반 μŠ€λ ˆλ“œμ™€ 거의 차이가 μ—†μœΌλ©°, JVM이 운영체제의 역할을 ν•œλ‹€.
  • μžλ°”μ—λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 거의 μ‘΄μž¬ν•˜μ§€ μ•Šκ³  μŠ€λ ˆλ“œλ§Œ μ‘΄μž¬ν•˜λ©°, μžλ°” μŠ€λ ˆλ“œλŠ” JVM에 μ˜ν•΄ μŠ€μΌ€μ€„λ˜λŠ” μ‹€ν–‰ λ‹¨μœ„ μ½”λ“œ 블둝이닀.
  • μžλ°”μ—μ„œ μŠ€λ ˆλ“œ μŠ€μΌ€μ€„λ§μ€ μ „μ μœΌλ‘œ JVM에 μ˜ν•΄ 이루어진닀.
  • μ•„λž˜μ™€ 같은 μŠ€λ ˆλ“œμ™€ κ΄€λ ¨λœ λ§Žμ€ 정보듀도 JVM이 κ΄€λ¦¬ν•œλ‹€.
    • μŠ€λ ˆλ“œκ°€ λͺ‡ 개 μ‘΄μž¬ν•˜λŠ”μ§€
    • μŠ€λ ˆλ“œλ‘œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œμ˜ λ©”λͺ¨λ¦¬ μœ„μΉ˜λŠ” 어디인지
    • μŠ€λ ˆλ“œμ˜ μƒνƒœλŠ” 무엇인지
    • μŠ€λ ˆλ“œ μš°μ„ μˆœμœ„λŠ” μ–Όλ§ˆμΈμ§€
  • 즉, κ°œλ°œμžλŠ” μžλ°” μŠ€λ ˆλ“œλ‘œ μž‘λ™ν•  μŠ€λ ˆλ“œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³ , μŠ€λ ˆλ“œ μ½”λ“œκ°€ 생λͺ…을 κ°€μ§€κ³  싀행을 μ‹œμž‘ν•˜λ„λ‘ JVM에 μš”μ²­ν•˜λŠ” 일 뿐이닀.