Notice
Recent Posts
Link
Today
Total
10-06 00:17
관리 메뉴

dingdong coding

[ OS ] ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ Process, Thread λ³Έλ¬Έ

🌈Web & Network

[ OS ] ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ Process, Thread

🐢 개발개발 🐾 2022. 7. 12. 01:56

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

In computing, a process is the instance of a computer program that is being executed by one or many threads.

컴퓨터 λΆ„μ•Όμ—μ„œ ν”„λ‘œμ„ΈμŠ€λŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€λ‘œ, ν•˜λ‚˜ μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό 톡해 μ‹€ν–‰λœλ‹€.

- μœ„ν‚€ -

ν”„λ‘œμ„ΈμŠ€λ₯Ό ν•œλ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ (A program in execution) μž…λ‹ˆλ‹€.

 

즉, ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬μ— μ˜¬λΌμ™€ μ‹€ν–‰λ˜κ³  μžˆλŠ” λŠ₯동적인 μ‘΄μž¬μž…λ‹ˆλ‹€. μ΄λŠ” 정상적인 싀행을 μœ„ν•΄ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° CPU(μ‹œμŠ€ν…œ μžμ›)λ₯Ό ν• λ‹Ήλ°›μ•„ μ‹€ν–‰λ©λ‹ˆλ‹€.

 

  • ν”„λ‘œκ·Έλž¨: μ–΄λ–€ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일 λ˜λŠ” ν”„λ‘œκ·Έλž¨ (정적인 μƒνƒœ)
  • ν”„λ‘œμ„ΈμŠ€: λ©”λͺ¨λ¦¬μ— 적재되고 CPU μžμ›μ„ ν• λ‹Ήλ°›μ•„ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒνƒœ

1-1 ) ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ κ΅¬μ„±μš”μ†Œ

 

1 )  μ½”λ“œ(Code) μ˜μ—­

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

 

2 )  λ°μ΄ν„°(Data) μ˜μ—­

  :  ν”„λ‘œκ·Έλž¨μ˜ μ „μ—­ λ³€μˆ˜(global variable)λ‚˜ 정적 λ³€μˆ˜(static variable)의 할당을 μœ„ν•΄ μ‘΄μž¬ν•˜λŠ” κ³΅κ°„μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ ν• λ‹Ήλ˜μ–΄ μ’…λ£Œλ  λ•Œ μ†Œλ©Έλ©λ‹ˆλ‹€.

 

3 )  μŠ€νƒ(Stack) μ˜μ—­

  :  지역 λ³€μˆ˜(local variable) ν• λ‹Ήκ³Ό ν•¨μˆ˜ 호좜 μ‹œ μ „λ‹¬λ˜λŠ” 인수(argument) κ°’μœΌλ‘œ ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴 κ°’ 등이 μ €μž₯되고 ν•¨μˆ˜ 호좜 μ‹œ 기둝, μ’…λ£Œλ˜λ©΄ μ œκ±°λ©λ‹ˆλ‹€. ( μž„μ‹œ λ©”λͺ¨λ¦¬ )

 

4 )  νž™(Heap)μ˜μ—­

  :  동적 λ©”λͺ¨λ¦¬ μ˜μ—­μœΌλ‘œ 관리 κ°€λŠ₯ν•œ 데이터 μ™Έμ˜ λ‹€λ₯Έ ν˜•νƒœμ˜ 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ κ³΅κ°„μž…λ‹ˆλ‹€. ( new(), malloc() )

 

λ˜ν•œ OS둜 μ—¬λŸ¬ Processλ₯Ό μ‹€ν–‰, 관리할 수 μžˆλŠ”λ° 이λ₯Ό  λ©€ν‹°ν…ŒμŠ€ν‚Ή  μ΄λΌκ³  ν•©λ‹ˆλ‹€. 

* λ©€ν‹°ν…ŒμŠ€ν‚Ή *

OS둜 CPUκ°€ μž‘μ—…ν•˜λŠ”λ° ν•„μš”ν•œ μžμ›μ„ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” μŠ€λ ˆλ“œ κ°„ λ‚˜λˆ„λŠ” ν–‰μœ„μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ™μ‹œμ— μ—΄κ³  μž‘μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ CPUλŠ” ν•œ λ²ˆμ— ν•œκ°€μ§€ λͺ…λ Ήμ–΄λ§Œ μ²˜λ¦¬ν•  수 있기 λ•Œλ¬Έμ— μ΄λŠ” λ™μ‹œκ°€ μ•„λ‹Œ Context Switching 을 톡해 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ²ˆκ°ˆμ•„ μ‹€ν–‰ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

* Context Switching *

CPUκ°€ ν˜„μž¬ μž‘μ—… 쀑인 ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ λ„˜μ–΄κ°ˆ λ•Œ μ§€κΈˆκΉŒμ§€μ˜ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό μ €μž₯(PCB)ν•˜κ³ , μƒˆ ν”„λ‘œμ„ΈμŠ€μ˜ μ €μž₯된 μƒνƒœλ₯Ό λ‹€μ‹œ μ μž¬ν•˜λŠ” μž‘μ—…μ„ Context Switch라 ν•©λ‹ˆλ‹€. 이 λ•Œ Context Switching은 CPU μžμ›μ„ ν• λ‹Ήν•˜λŠ”  Scheuler에 μ˜ν•΄ λ°œμƒν•©λ‹ˆλ‹€. 

 

1-2 ) ν”„λ‘œμ„ΈμŠ€ νŠΉμ§•

 

  • ν”„λ‘œμ„ΈμŠ€λŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap의 ꡬ쑰), μ£Όμ†Œκ³΅κ°„, CPU μ‹œκ°„μ„ ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€.
  • ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” PCB(Process Control Block)κ°€ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.
  • 기본적으둜 ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜κ³  ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” μžμ›μ„ κ³΅μœ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신(IPC, inter-process communication)이 ν•„μš”ν•©λ‹ˆλ‹€.   ex ) 메일 슬둯, νŒŒμ΄ν”„, μ†ŒμΌ“, μ‹œκ·Έλ„, 곡유 λ©”λͺ¨λ¦¬

* PCB  (Process Control Block) *

ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μ •λ³΄λ‘œ ν”„λ‘œμ„ΈμŠ€ 생성 μ‹œμ— λ§Œλ“€μ–΄μ§€λŠ” κ²ƒμž…λ‹ˆλ‹€. 

* PCB의 ꡬ쑰 *

  1.  ν”„λ‘œμ„ΈμŠ€ 번호 (Process Identification Number, PID) : ν”„λ‘œμ„ΈμŠ€μ˜ 고유둜 ν•œ μ •μˆ˜ 번호이며 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€μ˜ ꡬ별을 μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. 
  2.  ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ (Status) : μ€€λΉ„μ‹€ν–‰λŒ€κΈ°λ³΄λ₯˜ λ“±μ˜ μƒνƒœ
  3.  ν”„λ‘œμ„ΈμŠ€ μš°μ„ μˆœμœ„ (Priority) : μŠ€μΌ€μ€„링을 ν•  λ•Œ μ‚¬μš©λ˜λŠ” μš°μ„ μˆœμœ„
  4.  ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(Program Counter,PC) : λ‹€μŒμ— 싀행될 λͺ…λ Ήμ–΄μ˜ μ£Όμ†Œ κ°’
  5.  λ©”λͺ¨λ¦¬ 포인터 : ν”„λ‘œκ·Έλž¨κ³Ό 데이터가 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ 블둝 μœ„μΉ˜μ™€, κ³΅μœ λ˜λŠ” λ©”λͺ¨λ¦¬ 블둝듀에 λŒ€ν•œ 포인터
  6.  λ¬Έλ§₯ 데이터 : λ¬Έλ§₯ κ΅ν™˜ μ‹œμ— CPU λ ˆμ§€μŠ€ν„° 값듀을 μ €μž₯ν•˜λŠ” μ˜μ—­
  7.  ν• λ‹Ήλ°›μ€ μžμ›λ“€μ— λŒ€ν•œ λͺ©λ‘ : κ°œλ°©(Open)ν•œ 파일 λ“± ν• λ‹Ήλ°›μ€ μžμ›λ“€μ˜ 정보 
  8.  κ³„μ • 정보 (Accounting Information) : CPUλ₯Ό μ‚¬μš©ν•œ μ‹œκ°„ λ“±μ˜ 정보
  9.  μž…μΆœλ ₯ 정보 :  μ§„ν–‰ 쀑인 μž…μΆœλ ₯ μš”κ΅¬ λ“±μ˜ 정보

1-3 ) ν”„λ‘œμ„ΈμŠ€ μƒνƒœ 

 

1. 생성(Created) 

 μ‚¬μš©μžκ°€ μš”μ²­ν•œ μž‘μ—…μ΄ μ»€λ„μ— λ“±λ‘λ˜κ³  PCBκ°€ λ§Œλ“€μ–΄μ Έ ν”„λ‘œμ„ΈμŠ€κ°€ λ§Œλ“€μ–΄μ§„ λ‹€μŒ μ€€λΉ„λ‚˜ 보λ₯˜ μ€€λΉ„ μƒνƒœλ‘œ 되기 μœ„ν•΄ μž μ‹œ κ±°μΉ˜λŠ” μƒνƒœ

 ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•œ ν›„ λ©”λͺ¨λ¦¬ 곡간을 κ²€μ‚¬ν•˜μ—¬ μΆ©λΆ„ν•œ 곡간이 있으면 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜λ©΄μ„œ μ€€λΉ„ μƒνƒœλ‘œ λ°”κΎΈμ–΄μ£Όκ³ , κ·Έλ ‡μ§€ λͺ»ν•  경우 보λ₯˜ μ€€λΉ„ μƒνƒœ

 

2. μ€€λΉ„(Ready) 

CPUλ₯Ό ν• λ‹Ήλ°›κΈ° μœ„ν•΄ 기닀리고 μžˆλŠ” μƒνƒœ

CPU만 주어지면 λ°”λ‘œ μ‹€ν–‰ν•  μ€€λΉ„κ°€ λ˜μ–΄ μžˆλŠ” μƒνƒœ

 

3. μ‹€ν–‰(Running) 

 CPUλ₯Ό ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ 쀑인 μƒνƒœ

: CPUλ₯Ό ν• λ‹Ήν•˜λŠ” 것을 λ””μŠ€νŒ¨μΉ˜(Dispatch)라고 함 

 

4. λŒ€κΈ°(Blocked)

 ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜λ‹€κ°€ μž…μΆœλ ₯ 처리λ₯Ό μš”μ²­ν•˜κ±°λ‚˜, λ°”λ‘œ 확보될 수 μ—†λŠ” μžμ›μ„ μš”μ²­ν•˜λ©΄ CPUλ₯Ό μ–‘λ„ν•˜κ³  μš”μ²­ν•œ 일이 μ™„λ£Œλ˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λ©΄μ„œ λŒ€κΈ°ν•˜λŠ” μƒνƒœ

 

5. μ’…λ£Œ(Terminated)

 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•Œ μ•„μ£Ό μž μ‹œ κ±°μΉ˜λŠ” μƒνƒœ

ν”„λ‘œμ„ΈμŠ€λŠ” ν• λ‹Ήλ˜μ—ˆλ˜ λͺ¨λ“  μžμ›λ“€μ΄ 회수되고 PCB만 컀널에 λ‚¨μ•„μžˆλŠ” μƒνƒœ

 

6. 보λ₯˜ μ€€λΉ„(Suspended Ready) 

 μƒμ„±λœ ν”„λ‘œμ„ΈμŠ€κ°€ λ°”λ‘œ λ©”λͺ¨λ¦¬λ₯Ό 받지 λͺ»ν•  λ•Œλ‚˜, μ€€λΉ„ λ˜λŠ” μ‹€ν–‰ μƒνƒœμ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό μžƒκ²Œ 될 λ•Œλ₯Ό μœ„ν•΄ ν•„μš”

μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό λ°˜λ‚©ν•˜λ©΄μ„œ μ€€λΉ„ μƒνƒœλ‘œ λ°”λ€” λ•Œ λ©”λͺ¨λ¦¬ κ³΅κ°„κΉŒμ§€ μžƒμ–΄μ•Ό ν•˜λŠ” 경우라면 보λ₯˜ μ€€λΉ„ μƒνƒœλ‘œ λ°”λ€Œκ²Œ(Suspended) λ¨

 

7. 보λ₯˜ λŒ€κΈ°(Suspended Blocked)

: λŒ€κΈ° μƒνƒœμΌ λ•Œ λ©”λͺ¨λ¦¬ 곡간을 μžƒμ€ μƒνƒœ


2 ) μŠ€λ ˆλ“œ Thread

In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system

컴퓨터 λΆ„μ•Όμ—μ„œ μ‹€ν–‰λ˜λŠ” μŠ€λ ˆλ“œλŠ” 일반적으둜 운영체제의 일뢀인 μŠ€μΌ€μ€„λŸ¬μ— μ˜ν•΄ λ…λ¦½μ μœΌλ‘œ 관리 될 수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° 된 λͺ…λ Ήμ–΄μ˜ κ°€μž₯ μž‘μ€ μ‹œν€€μŠ€

- μœ„ν‚€ -

μŠ€λ ˆλ“œλž€ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ 흐름 λ‹¨μœ„λ‘œ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€ μžμ›μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

 

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›λ“€ κ³΅μœ ν•©λ‹ˆλ‹€.
  • ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘ν•˜λŠ” μ—¬λŸ¬ μ‹€ν–‰μ˜ νλ¦„μž…λ‹ˆλ‹€.
  • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ Stack만 λ”°λ‘œ ν• λ‹Ήλ°›κ³  Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•©λ‹ˆλ‹€
  • 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μ—¬λŸ¬ μŠ€λ ˆλ“œλ“€μ€ μ„œλ‘œ κ³΅μœ κ°€λŠ₯ν•˜μ§€λ§Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ—λŠ” 직접 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

 

즉, μ„œλ‘œ 독립적인 일듀을 λΆˆν•„μš”ν•˜κ²Œ 순차적으둜 μˆ˜ν–‰ν•˜λŠ” 사싀을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ μž‘κ³  λ…λ¦½μ μœΌλ‘œ μŠ€μΌ€μ€„λ§μ΄ κ°€λŠ₯ν•œ μŠ€λ ˆλ“œλΌλŠ” κ°œλ…μ΄ λ„μž…λœ κ²ƒμž…λ‹ˆλ‹€.

 

  • ν”„λ‘œμ„ΈμŠ€ : 전체적인 ν•˜λ‚˜μ˜ 일  /  고유 곡간과 μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©
  • μŠ€λ ˆλ“œ : μ„ΈλΆ„λœ μž‘μ€ 일  /  λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 곡간, μžμ›μ„ κ³΅μœ ν•˜λ©° μ‚¬μš© 

 

 

 

ν•™μŠ΅μ— λ§Žμ€ 도움이 된 링크λ₯Ό  μ°Έμ‘°ν–ˆμŠ΅λ‹ˆλ‹€. πŸ™‚

 

참쑰 및 좜처

[OS] ν”„λ‘œμ„ΈμŠ€(Process)와 μŠ€λ ˆλ“œ(Thread) 차이 (λ©€ν‹° ν”„λ‘œμ„ΈμŠ€, λ©€ν‹° μŠ€λ ˆλ“œ)

Process와 Thread 이야기

Process vs Thread

'🌈Web & Network' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ Web, Network ] κ΄€λ ¨ μš©μ–΄ 정리 ( 개인 ν•™μŠ΅μš© )  (0) 2022.07.13
Monolithic Architecture, Micro Service Architecture  (0) 2022.06.27
RESTful API  (0) 2022.06.15
HTTP Method  (0) 2022.04.09
HTTP  (0) 2022.03.27
Comments