Skip to content

Latest commit

Β 

History

History
108 lines (70 loc) Β· 6.02 KB

Process_Thread.md

File metadata and controls

108 lines (70 loc) Β· 6.02 KB

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

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

ν”„λ‘œμ„ΈμŠ€ (Process)

ν”„λ‘œκ·Έλž¨ : 파일이 μ €μž₯ μž₯μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€ 정적인 μƒνƒœ
ν”„λ‘œμ„ΈμŠ€ : λ©”λͺ¨λ¦¬ μƒμ—μ„œ 싀행쀑인 ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€(객체), μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…μ˜ λ‹¨μœ„

ν”„λ‘œκ·Έλž¨ -> ν”„λ‘œμ„ΈμŠ€ -> μŠ€λ ˆλ“œ

λ¨Όμ € ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— μ„€λͺ…ν•˜κΈ° 전에 ν”„λ‘œκ·Έλž¨μ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.
μ‰½κ²Œ 말해 ν”„λ‘œκ·Έλž¨μ€ μ–΄λ–€ μž‘μ—…μ„ μ‹€ν–‰ν•  수 μžˆλŠ” 파일이자 κ·Έλƒ₯ μ½”λ“œ λ©μ–΄λ¦¬μž…λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ν•˜κ²Œ 되면, ν•΄λ‹Ή νŒŒμΌμ€ 컴퓨터 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ²Œ 되고, 이 μƒνƒœλ₯Ό 동적인 μƒνƒœλΌκ³  ν•©λ‹ˆλ‹€.
이 μƒνƒœμ˜ ν”„λ‘œκ·Έλž¨μ„ ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•©λ‹ˆλ‹€.

μš”μ•½ : ν”„λ‘œκ·Έλž¨(μ½”λ“œ 덩어리 파일) -> (μ‹€ν–‰) -> ν”„λ‘œμ„ΈμŠ€

이 λ‚΄μš©μ„ μ‰½κ²Œ 그림으둜 ν‘œν˜„ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

image

  • μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° ν• λ‹Ή λ°›λŠ” μ‹œμŠ€ν…œ μžμ›μ˜ 예

    • CPU μ‹œκ°„
    • 운영되기 μœ„ν•΄ ν•„μš”ν•œ μ£Όμ†Œ 곡간
    • Code, Data, Stack, Heap의 ꡬ쑰둜 λ˜μ–΄ μžˆλŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­
  • νŠΉμ§•

image

- ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­ (Code, Data, Stack, Heap의 ꡬ쑰)λ₯Ό ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€.
- 기본적으둜 ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œ(메인 μŠ€λ ˆλ“œ)λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
- 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ 곡간에 μ‹€ν–‰λ˜λ©°, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— μ ‘κ·Ό λΆˆκ°€ν•©λ‹ˆλ‹€.
- ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€κ°„μ˜ 톡신(IPC, inter-process Communication)을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    - Ex) νŒŒμ΄ν”„, 파일, μ†ŒμΌ“ 등을 μ΄μš©ν•œ 톡신 방법 이용

μŠ€λ ˆλ“œ (Thread)

μŠ€λ ˆλ“œ : ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” 흐름 λ‹¨μœ„, ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ •ν•œ μˆ˜ν–‰ 경둜

ν”„λ‘œμ„ΈμŠ€ -> μŠ€λ ˆλ“œ

κ³Όκ±°μ—λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ—μ„œλΆ€ν„° μ’…λ£ŒκΉŒμ§€ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜μ—¬ μ§„ν–‰ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ‹œκ°„μ΄ 흐λ₯΄λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ΄ λ³΅μž‘ν•΄μ§€λ©΄μ„œ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ§Œμ„ μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° λ²…μ°¨κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 상황을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ "ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€λ©΄ λ˜μ§€ μ•Šμ„κΉŒ"λΌλŠ” 생각을 ν–ˆμ—ˆμ§€λ§Œ, μš΄μ˜μ²΄μ œλŠ” μ•ˆμ „μ„±μ„ μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μžμ‹ μ—κ²Œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ λ‚΄μ˜ μ •λ³΄λ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ œμ•½μ„ λ‘μ—ˆκΈ°μ— λΆˆκ°€λŠ₯ ν–ˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡κ²Œ ν”„λ‘œμ„ΈμŠ€μ™€ λ‹€λ₯Έ 더 μž‘μ€ μ‹€ν–‰ λ‹¨μœ„ κ°œλ…μ΄ ν•„μš”ν•˜κ²Œ λ˜μ—ˆκ³ , 이 κ°œλ…μ΄ μŠ€λ ˆλ“œμž…λ‹ˆλ‹€.

  • νŠΉμ§•

image

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

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€μ™€ λ©€ν‹° μŠ€λ ˆλ“œ

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€

ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬κ°œμ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬μ„±ν•˜μ—¬ 각 ν”„λ‘œμ„ΈμŠ€κ°€ λ³‘λ ¬μ μœΌλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것

μž₯점

  • μ•ˆμ „μ„± (λ©”λͺ¨λ¦¬ μΉ¨λ²” 문제λ₯Ό OS μ°¨μ›μ—μ„œ ν•΄κ²°)

단점

  • 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 가지고 μžˆμ–΄, μž‘μ—…λŸ‰μ΄ λ§Žμ„ 수둝 μ˜€λ²„ν—€λ“œ λ°œμƒ
  • Context Switching으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜

Context Switching

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜κ³  λ³΅μ›ν•˜λŠ” 일련의 κ³Όμ •

즉, λ™μž‘ 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ λŒ€κΈ°ν•˜λ©΄μ„œ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό λ³΄κ΄€ν•˜κ³ , λŒ€κΈ°ν•˜κ³  있던 λ‹€μŒ 순번의 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ©΄μ„œ 이전에 λ³΄κ΄€ν–ˆλ˜ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό λ³΅κ΅¬ν•˜λŠ” 과정을 λ§ν•©λ‹ˆλ‹€.

-> ν”„λ‘œμ„ΈμŠ€λŠ” 각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©λ˜λ―€λ‘œ, μΊμ‹œ λ©”λͺ¨λ¦¬ μ΄ˆκΈ°ν™”μ™€ 같은 무거운 μž‘μ—…μ΄ μ§„ν–‰λ˜μ—ˆμ„ λ•Œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  λ¬Έμ œκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

λ©€ν‹° μŠ€λ ˆλ“œ

ν•˜λ‚˜μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό ꡬ성해 각 μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것

μŠ€λ ˆλ“œλ“€μ΄ 곡유 λ©”λͺ¨λ¦¬λ₯Ό 톡해 λ‹€μˆ˜μ˜ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λ„λ‘ ν•΄μ€λ‹ˆλ‹€.

μž₯점

  • 독립적인 ν”„λ‘œμ„ΈμŠ€μ— λΉ„ν•΄ 곡유 λ©”λͺ¨λ¦¬λ§ŒνΌμ˜ μ‹œκ°„, μžμ› 손싀이 κ°μ†Œ
  • μ „μ—­ λ³€μˆ˜μ™€ 정적 λ³€μˆ˜μ— λŒ€ν•œ 자료 곡유 κ°€λŠ₯

단점

  • μ•ˆμ „μ„± 문제
  • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 데이터 곡간을 λ¬΄λ„ˆλ“œλ¦¬λ©΄, λͺ¨λ“  μŠ€λ ˆλ“œκ°€ μž‘λ™ 뢈λŠ₯ μƒνƒœμ— λΉ μ§‘λ‹ˆλ‹€.(곡유 λ©”λͺ¨λ¦¬λ₯Ό κ°–κΈ° λ•Œλ¬Έ)

-> λ©€ν‹° μŠ€λ ˆλ“œμ˜ μ•ˆμ „μ„±μ— λŒ€ν•œ 단점은 Critical Section 기법을 톡해 λŒ€λΉ„ν•©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유 데이터 값을 λ³€κ²½ν•˜λŠ” μ‹œμ μ— λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ κ·Έ 값을 μ½μœΌλ €ν•  λ•Œ λ°œμƒν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 동기화 κ³Όμ •

μƒν˜Έ 배제, 진행, ν•œμ •λœ λŒ€κΈ°λ₯Ό μΆ©μ‘±ν•΄μ•Όν•©λ‹ˆλ‹€.

Reference

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4