πŸ‘©πŸ»‍πŸ’»/os

[OS] ν”„λ‘œμ„ΈμŠ€(Process)와 μŠ€λ ˆλ“œ(Thread)

바쿄리 2022. 7. 3. 21:11

운영체제의 기본이라고 말할 수 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ κ³΅λΆ€ν•˜κ³  정리해보렀 ν•œλ‹€.

ν”„λ‘œκ·Έλž¨, ν”„λ‘œμ„ΈμŠ€, μŠ€λ ˆλ“œμ˜ κ°œλ…κ³Ό μž‘λ™ 방식에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

 

βœ… Program

 · μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일(μ‹€ν–‰μ½”λ“œ)이며, μ €μž₯μž₯μΉ˜μ— μ €μž₯은 λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€ 정적인 μƒνƒœμ΄λ‹€.

 

πŸ‘©πŸ»‍πŸ’» μ €μž₯μž₯μΉ˜μ— μ €μž₯은 λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€?

아직 μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œκ·Έλž¨μ—κ²Œ 독립적인 λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄μ£Όμ§€ μ•Šμ•˜λ‹€λŠ” λœ»μ΄λ‹€. λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ μš΄μ˜μ²΄μ œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄μ€˜μ•Ό 싀행될 수 μžˆλ‹€. μ‰½κ²Œ 말해 κ·Έλƒ₯ μ½”λ“œ 덩어리닀.

 

ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” μˆœκ°„ 컴퓨터 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ²Œ 되고, μ‹€ν–‰λœ ν”„λ‘œκ·Έλž¨μ„ ν”„λ‘œμ„ΈμŠ€(Process)라고 ν•œλ‹€.

 

βœ… Process

 · μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ή λ°›λŠ” / μš΄μ˜μ²΄μ œκ°€ κ΄€λ¦¬ν•˜λŠ” λ‹¨μœ„

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

 · Processer(처리기, CPU)에 μ˜ν•΄ μ²˜λ¦¬λ˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ μž‘μ—…(Job), ν…ŒμŠ€ν¬(Task)라고도 λΆˆλ¦°λ‹€.

 · κΈ°λ³Έμ μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€ λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

 

βœ… Thread

 · ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νλ¦„μ˜ λ‹¨μœ„

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

 · μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 각각 Stack만 λ”°λ‘œ ν• λ‹Ήλ°›κ³  Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•œλ‹€.

 


πŸ” Process 와 Thread 의 μž‘λ™ 방식

ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ μ˜μ—­(Code, Data, Stack, Heap의 ꡬ쑰)λ₯Ό ν• λ‹Ήλ°›λŠ”λ‹€.

이미지 좜처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

1️⃣ Code

μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œ 및 맀크둜 μƒμˆ˜κ°€ 기계어 ν˜•νƒœλ‘œ μ €μž₯λ˜λŠ” 곡간.

CPUλŠ” μ½”λ“œμ˜μ—­μ— μ €μž₯된 λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© μ²˜λ¦¬ν•œλ‹€.

 

2️⃣ Data

μ½”λ“œμ—μ„œ μ„ μ–Έν•œ μ „μ—­λ³€μˆ˜, 정적(Static) λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” 곡간

 

3️⃣ Stack

μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴 κ°’ 등이 μ €μž₯되고 ν•¨μˆ˜ 호좜 μ‹œ κΈ°λ‘λ˜λŠ” 곡간

 

4️⃣ Heap

관리가 κ°€λŠ₯ν•œ 데이터 이외에 λ‹€λ₯Έ ν˜•νƒœμ˜ 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 곡간(Free Space)

이 곡간은 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή κ³΅κ°„μ΄λ―€λ‘œ μ‚¬μš©μ΄ λλ‚˜λ©΄ 운영체제둜 λ°˜λ‚©λœλ‹€.

 

πŸ‘©πŸ»‍πŸ’» ν”„λ‘œμ„ΈμŠ€κ°€ ν• λ‹Ή 받은 λ©”λͺ¨λ¦¬ μ˜μ—­ λ‚΄μ—μ„œ Stack ν˜•μ‹μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ˜μ—­μ€ λ”°λ‘œ ν• λ‹Ήλ°›κ³ , λ‚˜λ¨Έμ§€ Code/Data/Heap ν˜•μ‹μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ³΅μœ ν•œλ‹€. λ”°λΌμ„œ 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ Stack을 κ°€μ§€κ³  μžˆμ§€λ§Œ Heap λ©”λͺ¨λ¦¬λŠ” μ„œλ‘œ 읽고 μ“Έ 수 있게 λœλ‹€.

 

μ•„λž˜ μ΄λ―Έμ§€λŠ” μŠ€λ ˆλ“œλ“€μ΄ ν”„λ‘œμ„ΈμŠ€μ˜ Code/Data/Heap λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ³΅μœ ν•˜λŠ” λͺ¨μŠ΅μ΄λ‹€

이미지 좜처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

 

 

πŸ“Œ κ²°λ‘ 

 · ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ν•˜κ³ , μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€λ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ν•œλ‹€.

 · ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μ—¬λŸ¬ μŠ€λ ˆλ“œ 생성이 κ°€λŠ₯ν•˜λ©°, 각 μŠ€λ ˆλ“œλŠ” κ°œλ³„ μŠ€νƒμ„ κ°€μ§€κ³  ν”„λ‘œμ„ΈμŠ€μ˜ μ „μ—­ λ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•˜λ©° ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€.

 

 

 

References

 · https://www.jiniaslog.co.kr/article/view?articleId=152

 · https://velog.io/@raejoonee/ν”„λ‘œμ„ΈμŠ€μ™€-μŠ€λ ˆλ“œμ˜-차이

 · https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html