Odds and Ends

운영체제 κ΅μ•ˆ : Chap 04 Process λ³Έλ¬Έ

운영체제

운영체제 κ΅μ•ˆ : Chap 04 Process

Squidward 2022. 10. 22. 11:24

CHAP 04 Process

 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ κ°œλ…

* Processλž€? 메인 λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜μ–΄ 싀행쀑인 ν”„λ‘œκ·Έλž¨

 

[ν”„λ‘œμ„ΈμŠ€ μš”μ†Œ 5가지]

πŸ’‘μ½”λ“œ μ„Ήμ…˜ (ν…μŠ€νŠΈ μ„Ήμ…˜) : 기계어 μ½”λ“œ, μ‹€ν–‰ μ½”λ“œ

πŸ’‘λ°μ΄ν„° μ„Ήμ…˜ : μ „μ—­ λ³€μˆ˜ (ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 ν•„μš”ν•œ data)

πŸ’‘μŠ€νƒ : ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μž„μ‹œ 데이터 μ €μž₯μž₯μ†Œ, 둜컬 λ³€μˆ˜ 

πŸ’‘ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°

  : 마이크둜 ν”„λ‘œμ„Έμ„œμ— μžˆλŠ” λ ˆμ§€μŠ€ν„°, λ‹€μŒ 싀행될 λͺ…λ Ήμ–΄ μ£Όμ†Œλ₯Ό κ°€μ§€κ³ μžˆμ–΄ μ‹€ν–‰ν•  기계어 μ½”λ“œμ˜ μœ„μΉ˜ 지정

πŸ’‘νž™: 싀행쀑에 λ©”λͺ¨λ¦¬ μš”μ²­ν•˜λ©΄ νž™ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•΄μ€Œ

 

[ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬ 배치] 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ μƒνƒœ

: ν”„λ‘œμ„ΈμŠ€λŠ” μ‹€ν–‰λ˜λ©° μƒνƒœκ°€ λ³€ν•œλ‹€. μƒνƒœλŠ” κ·Έ ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ ν™œλ™μ— 따라 μ •μ˜λœλ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒμƒνƒœ 쀑 ν•˜λ‚˜μ— 있게 λœλ‹€.

1. new : ν”„λ‘œμ„ΈμŠ€ 생성 쀑

2. running : λͺ…λ Ήμ–΄λ“€ μ‹€ν–‰ 쀑, CPUλ₯Ό 가지고 μžˆλŠ” μƒνƒœ

3. wating : ν”„λ‘œμ„ΈμŠ€κ°€ μ–΄λ–€ 이벀트 (μž…μΆœλ ₯ μ™„λ£Œ or μ‹ ν˜Έ μˆ˜μ‹  같은)κ°€ μΌμ–΄λ‚˜κΈΈ κΈ°λ‹€λ¦Ό

4. ready : . CPUκ°€ 주어지기λ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ, ν”„λ‘œμ„Έμ„œκ°€ μ²˜λ¦¬κΈ°μ— ν• λ‹Ήλ˜κΈ°λ₯Ό κΈ°λ‹€λ¦°λ‹€

5. terminated : ν”„λ‘œμ„ΈμŠ€μ˜ 싀행이 μ’…λ£Œλ˜μ—ˆλ‹€.

 

πŸ’‘ready vs wating 차이점

- ready : λ‹€ μ€€λΉ„ 됨. CPU ν•˜λ‚˜λ§Œ 있으면 됨 

- waiting : CPU외에도 μ€€λΉ„ μ•ˆλ¨. μž…μΆœλ ₯같은 ν–‰μœ„ 기닀리고 있음

 

[ν”„λ‘œμ„ΈμŠ€ μƒνƒœ λ‹€μ΄μ–΄κ·Έλž¨]

: 각 ν™”μ‚΄ν‘œ 및 μƒνƒœ μ•”κΈ°

πŸ’‘scheduler dispatch (ready > running)

: μ œμ–΄κΆŒμ„ μ£ΌλŠ” 것. CPU 가짐

 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝 (PCB)

:  μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ 정보λ₯Ό μ €μž₯ν•΄ λ†“λŠ” 곳으둜, ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰

  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œμ—μ„œ ν”„λ‘œμ„ΈμŠ€ μ œμ–΄λΈ”λ‘μ— μ˜ν•΄ ν‘œν˜„λœλ‹€.
  • ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝은 νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ™€ μ—°κ΄€λœ μ—¬λŸ¬ 정보λ₯Ό μˆ˜λ‘ν•œλ‹€. (ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°, μƒνƒœ λ“±)
  • PCB ꡬ성 μš”μ†Œ : ν”„λ‘œμ„ΈμŠ€ μƒνƒœ, ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°, CPU λ ˆμ§€μŠ€ν„°, CPU Scheduling 정보, λ©”λͺ¨λ¦¬ 관리 정보, Accounting 정보, μž…μΆœλ ₯ μƒνƒœ 정보 

πŸ’‘PCB에 μŠ€νƒμ΄ ν¬ν•¨λ κΉŒ?

: X, λ©”λͺ¨λ¦¬ 자체λ₯Ό ν¬ν•¨ν•˜μ§€λŠ” μ•Šκ³  λ©”λͺ¨λ¦¬μ— λŒ€ν•œ 정보λ₯Ό 가진닀!!

 

πŸ“Œ Context Switch  (μ œμ–΄κΆŒ 쀄 λ•Œ λ°œμƒ, 상황 정보가 λ°”λ€λ‹€κ³ ν•΄μ„œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜)

: p0κ°€ νƒ€μž„μ•„μ›ƒ μΈν„°λŸ½νŠΈκ°€ κ±Έλ Έλ‹€κ³  κ°€μ •ν–ˆμ„ λ•Œ, CPU μ œμ–΄κΆŒμ΄ μš΄μ˜μ²΄μ œμ— λ„˜μ–΄κ°€μ„œ, 이 μ œμ–΄κΆŒμ„ P1μ—κ²Œ μ£Όλ €κ³  함. p0의 μž‘μ—…μ€ μ €μž₯ν•˜κ³ , 후에 μ‹€ν–‰ν•  λ•Œ λ‹€μ‹œ 볡ꡬ해야함. 이 과정을 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜λΌκ³  ν•œλ‹€. 

> 이전 μž‘μ—… μ €μž₯, μƒˆλ‘œ μ‹œμž‘ν•  μž‘μ—… 볡원.

  • μΈν„°λŸ½νŠΈλŠ” μš΄μ˜μ²΄μ œκ°€ cpuμ½”μ–΄λ₯Ό ν˜„μž¬ μž‘μ—…μ—μ„œ 뺏어 컀널 루틴을 μ‹€ν–‰ν•  수 있게 함
  • μΈν„°λŸ½νŠΈ λ°œμƒ μ‹œ, μ‹œμŠ€ν…œμ€ μΈν„°λŸ½νŠΈ μ²˜λ¦¬κ°€ λλ‚œ ν›„ λ¬Έλ§₯을 λ³΅κ΅¬ν•˜λ„λ‘ ν˜„μž¬ 싀행쀑이 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ €μž₯ (μ΄λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘λ‹¨ν–ˆλ‹€κ°€ μž¬κ°œν•˜λŠ” μž‘μ—…μ΄λ‹€.)
  • λ¬Έλ§₯은 PCB에 ν‘œν˜„λœλ‹€. λ¬Έλ§₯은 CPU의 λ ˆμ§€μŠ€ν„° κ°’, ν”„λ‘œμ„ΈμŠ€ μƒνƒœ, λ©”λͺ¨λ¦¬ κ΄€λ ¨ 정보 등을 ν¬ν•¨ν•œλ‹€.
  • CPU μ½”μ–΄λ₯Ό λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅ν™˜ν•˜λ €λ©΄ 이전 ν”„λ‘œμ„ΈμŠ€ μƒνƒœ 보관, μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€ μƒνƒœ 볡ꡬ μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€. >> 이 μž‘μ—…μ΄ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜μ΄λ‹€.
  • λ¬Έλ§₯κ΅ν™˜μ΄ 진행될 λ™μ•ˆ μ‹œμŠ€ν…œμ€ μ•„λ¬΄λŸ° 일을 λͺ»ν•˜κΈ° λ•Œλ¬Έμ—, λ¬Έλ§₯κ΅ν™˜ μ‹œκ°„μ€ μˆœμˆ˜ν•œ μ˜€λ²„ν—€λ“œμ΄λ‹€. (μ†λ„λŠ” κΈ°κ³„λ§ˆλ‹€ 닀름)
  • λ¬Έλ§₯ κ΅ν™˜ μ‹œκ°„μ€ ν•˜λ“œμ›¨μ–΄ 지원에 크게 쒌우됨

 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§

- 닀쀑 ν”„λ‘œκ·Έλž˜λ°μ˜ λͺ©μ μ€ CPU의 μ΄μš©μ„ μ΅œλŒ€ν™” ν•˜κΈ° μœ„ν•΄, 항상 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜λ„λ‘ ν•˜λŠ” 데 μžˆλ‹€. 

  > CPU λ†€μ§€λ§ˆ!

- ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬ : μ½”μ–΄μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€ 쀑 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό 선택 (μ‹œλΆ„ν• μ„ 톡해 μ‹€ν–‰ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό 주기적으둜 κ΅μ²΄ν•œλ‹€. - 병행성)

- 닀쀑 ν”„λ‘œκ·Έλž˜λ° 정도 : ν˜„μž¬ λ©”λͺ¨λ¦¬μ— μžˆλŠ” ν”„λ‘œμ„ΈμŠ€ 수

- I/O bound process : 계산보닀 I/O μž‘μ—…μ— 더 λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€  (ex. ν•˜λ“œλ””μŠ€ν¬ 포맷 μž‘μ—…)

  • CPU bound process : 계산에 더 λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•˜μ—¬ I/O μž‘μ—…μ— μš”μ²­μ„ 자주 μƒμ„±ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œμ„ΈμŠ€ (ex. 파이 κ°’ κ΅¬ν•˜κΈ° ν”„λ‘œκ·Έλž¨)

❓A,B,C λͺ¨λ‘ CPU-bound process라면, μ–΄λ–€ queueκ°€ 많이 찰까? 

= Ready Queue. I/O queue에 μš”μ²­μ„ μƒμ„±ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ

 

πŸ“Œ CPU μŠ€μΌ€μ€„λ§

- CPU μŠ€μΌ€μ€„λŸ¬(short term μŠ€μΌ€μ€„λŸ¬)의 역할은 ready 큐에 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€ 쀑 μ„ νƒλœ ν”„λ‘œμ„ΈμŠ€μ— cpu ν• λ‹Ήν•˜λŠ” 것이닀.

> CPU μŠ€μΌ€μ€„λŸ¬λŠ” CPUλ₯Ό ν• λ‹Ήν•˜κΈ° μœ„ν•œ μƒˆ ν”„λ‘œμ„ΈμŠ€λ₯Ό 자주 μ„ νƒν•΄μ•Όν•œλ‹€.

- job μŠ€μΌ€μ€„λŸ¬(long term μŠ€μΌ€μ€„λŸ¬)의 역할은 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό ready 큐에 넣을 지 ν• λ‹Ήν•˜λŠ” λ†ˆμ΄λ‹€.

> λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°μ„ μ œμ–΄ν•˜λŠ” 컨트둀러둜 job λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•΄μ„œ μŠ€μΌ€μ€„μ„ μ§ λ‹€. (λ“œλ¬Όκ²Œ, 느리게 선택)

- Mid-term scheduler : Long-term + Short-term

πŸ’‘Job Queue (Long-term scheduler): λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ₯Ό ν¬ν•¨ν•˜λŠ” 큐

πŸ’‘Ready Queue(CPU Scheduler(Short-term scheduler)) : ready μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό ν¬ν•¨ν•˜λŠ” 큐

πŸ’‘Device queues : I/Oλ₯Ό κΈ°λ‹€λ¦¬λŠ” 큐

 

 πŸ“Œ Scheduling Queues 

: ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμŠ€ν…œμ— λ“€μ–΄μ˜€λ©΄ job queue에 놓여진닀. 이 νλŠ” μ‹œμŠ€ν…œ μ•ˆμ˜ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ“€λ‘œ κ΅¬μ„±λœλ‹€. μ£Ό λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λ©° process stateκ°€ ready인 ν”„λ‘œμ„ΈμŠ€λ“€μ€ ready queue라 λΆˆλ¦¬λŠ” 리슀트 상에 μœ μ§€λœλ‹€. 이 νλŠ” 보톡 μ—°κ²° 리슀트둜 μ €μž₯λœλ‹€. ready queue의 ν—€λ”λŠ” 리슀트의 첫 λ²ˆμ§Έμ™€ λ§ˆμ§€λ§‰ PCBλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό ν¬ν•¨ν•œλ‹€. 각 PCBλŠ” ready queue에 μžˆλŠ” λ‹€μŒ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터 ν•„λ“œλ₯Ό 가진닀. job queue와 ready queue말고도 μ—¬λŸ¬ 큐가 μ‹œμŠ€ν…œμ— μ‘΄μž¬ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ λ””μŠ€ν¬ 같은 μž…μΆœλ ₯ μž₯μΉ˜μ— μš”μ²­μ„ ν–ˆλ‹€ κ°€μ •ν•˜μž. λ§Œμ•½ 이 λ””μŠ€ν¬κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μš”μ²­μœΌλ‘œ λ°”μ˜λ‹€λ©΄, ν”„λ‘œμ„ΈμŠ€λŠ” λ””μŠ€ν¬λ₯Ό κΈ°λ‹€λ €μ•Ό ν•  μˆ˜λ„ μžˆλ‹€. νŠΉμ • μž…μΆœλ ₯ μž₯치λ₯Ό λŒ€κΈ°ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 리슀트λ₯Ό device queue라고 ν•œλ‹€. 각 μž₯μΉ˜λŠ” μœ„ 그림처럼 μžμ‹ μ˜ device queueλ₯Ό 가진닀.

 

πŸ“Œ queueing diagram

 

: ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§μ˜ 곡톡적인 ν‘œν˜„ 방식은 μ•„λž˜ κ·Έλ¦Ό 2와 같은 queueing diagram이닀. 각 μ‚¬κ°ν˜•μ€ ν•˜λ‚˜μ˜ queueλ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 두 가지 νƒ€μž…μ˜ 큐(ready queue, device queues)κ°€ μ‘΄μž¬ν•œλ‹€. 원은 queueλ₯Ό μ„œλΉ„μŠ€ν•˜λŠ” μžμ›μ΄λ©°, ν™”μ‚΄ν‘œλŠ” μ‹œμŠ€ν…œμ—μ„œ ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 흐름을 ν‘œν˜„ν•œλ‹€. 

 

 

μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λŠ” μ²˜μŒμ— ready queue에 놓인닀. ν”„λ‘œμ„ΈμŠ€λŠ” CPUλ₯Ό 할당받을 λ•Œ(dispatch)κΉŒμ§€ ready queueμ—μ„œ λŒ€κΈ°ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€μ— CPUκ°€ ν• λ‹Ήλ˜μ–΄ μ‹€ν–‰λ˜λ©΄ μ•„λž˜ 사건듀 쀑 ν•˜λ‚˜κ°€ λ°œμƒν•  μˆ˜ μžˆλ‹€.

 

  • ν”„λ‘œμ„ΈμŠ€κ°€ I/O(μž…μΆœλ ₯)을 μš”μ²­ν•˜μ—¬ I/O queue에 λ„£μ–΄μ§ˆ 수 μžˆλ‹€.
  • ν”„λ‘œμ„ΈμŠ€κ°€ child processλ₯Ό μƒμ„±ν•˜κ³  κ·Έ ν”„λ‘œμ„ΈμŠ€μ˜ μ’…λ£Œλ₯Ό 기닀릴 수 μžˆλ‹€.
  • ν”„λ‘œμ„ΈμŠ€κ°€ interrupt의 결과에 따라 κ°•μ œλ‘œ CPUλ‘œλΆ€ν„° μ œκ±°λ˜μ–΄ ready queue에 λ‹€μ‹œ 놓일 수 μžˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λŠ” κ²°κ΅­ waiting stateμ—μ„œ ready state둜 μ „ν™˜λ˜κ³  λ‹€μ‹œ ready queue에 넣어진닀. ν”„λ‘œμ„ΈμŠ€λŠ” μ’…λ£Œλ  λ•ŒκΉŒμ§€ 이 μ£ΌκΈ°λ₯Ό κ³„μ†ν•˜λ©°, μ’…λ£Œλ˜λ©΄ λͺ¨λ“  queueμ—μ„œ μ‚­μ œλ˜κ³  ν”„λ‘œμ„ΈμŠ€μ˜ PCB와 μžμ›μ„ λ°˜λ‚©(deallocate)ν•œλ‹€.

 

πŸ“Œ ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μ—°μ‚°

[ν”„λ‘œμ„ΈμŠ€ 생성]

  • μ‹€ν–‰λ˜λŠ” λ™μ•ˆ ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ 개의 μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ“€μ„ 생성할 수 μžˆλ‹€.
  • μƒμ„±ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€, μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μžμ‹ ν”„λ‘œμ„ΈμŠ€λΌκ³  λΆ€λ₯Έλ‹€.
  • μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λŠ” fork() μ‹œμŠ€ν…œ 콜둜 생성 in UNIX
  • exec() μ‹œμŠ€ν…œ 콜둜 μžμ‹ μ˜ λ©”λͺ¨λ¦¬ 곡간을 μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μ„ κ΅μ²΄ν•˜μ—¬ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œμž‘ in UNIX
  • μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ“€μ€ 각각 λ‹€μ‹œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ 생성이 κ°€λŠ₯ν•˜λ©°, κ·Έ κ²°κ³Ό ν”„λ‘œμ„ΈμŠ€ 트리λ₯Ό ν˜•μ„±ν•œλ‹€.
  • λŒ€λΆ€λΆ„μ˜ ν˜„λŒ€ μš΄μ˜μ²΄μ œλ“€μ€ μœ μΌν•œ ν”„λ‘œμ„ΈμŠ€ μ‹λ³„μž(pid)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬λΆ„ν•œλ‹€.
  • pidλŠ” μ‹œμŠ€ν…œμ˜ 각 ν”„λ‘œμ„ΈμŠ€μ— κ³ μœ ν•œ 값을 가지도둝 ν• λ‹Ήλœλ‹€.

πŸ’‘ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ™€ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ‹ 곡유 μ˜΅μ…˜

   1) λΆ€λͺ¨ μžμ‹κ°„ λͺ¨λ“  μžμ› 곡유(κΈ°λ³Έ κ°’) 
   2) μžμ‹μ΄ λΆ€λͺ¨μ˜ 일뢀 μžμ›λ§Œ 곡유
   3) λΆ€λͺ¨ μžμ‹κ°„ μ–΄λ– ν•œ μžμ›λ„ κ³΅μœ ν•˜μ§€ μ•ŠμŒ

 

πŸ’‘ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ μ˜΅μ…˜

   1) λΆ€λͺ¨ μžμ‹ ν”„λ‘œμ„ΈμŠ€ λ™μ‹œ μ‹€ν–‰(λ©€ν‹° νƒœμŠ€ν‚Ή)
   2) λΆ€λͺ¨κ°€ μžμ‹μ˜ μ’…λ£ŒκΉŒμ§€ κΈ°λ‹€λ¦Ό (wait)

 

[fork() μ‹œμŠ€ν…œ μ½œμ„ μ‚¬μš©ν•˜μ—¬ λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€ 생성 - μ½”λ“œ] 

>> μƒˆλ‘œλ§Œλ“€μ–΄μ§„ ν”„λ‘œμ„ΈμŠ€μ˜ pid = 0, return 0μΌλ•Œ child processμž„μ„ μ•Œμˆ˜ μžˆλ‹€.

 

[ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ]

: ν”„λ‘œμ„Έμ„œκ°€ λ§ˆμ§€λ§‰ λ¬Έμž₯의 싀행을 끝내고, exit μ‹œμŠ€ν…œ μ½œμ„ μ‚¬μš©ν•˜μ—¬ μš΄μ˜μ²΄μ œμ— μžμ‹ μ˜ μ‚­μ œλ₯Ό μš”μ²­ν•˜λ©΄ μ’…λ£Œν•œλ‹€. 이 μ‹œμ μ—μ„œ ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ μ„ 기닀리고 μžˆλŠ” λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ—(wait μ‹œμŠ€ν…œ μ½œμ„ 톡해) μƒνƒœ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€. λ°˜ν™˜ μ‹œμ—λŠ” 물리 λ©”λͺ¨λ¦¬μ™€, 가상메λͺ¨λ¦¬, μ—΄λ¦° 파일, μž…μΆœλ ₯ 버퍼λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  μžμ›μ΄ ν• λ‹Ή ν•΄μ œλ˜κ³  운영체제둜 λ°˜λ‚©λœλ‹€.

 

πŸ’‘λΆ€λͺ¨λŠ” λ‹€μŒμ˜ 경우 abort() μ‹œμŠ€ν…œ μ½œμ„ μ΄μš©ν•˜μ—¬ μžμ‹ 쀑 ν•˜λ‚˜μ˜ 싀행을 μ’…λ£Œν•  수 μžˆλ‹€.

   1) μžμ‹μ΄ ν• λ‹Ήλœ μžμ›μ„ μ΄ˆκ³Όν–ˆμ„ λ•Œ
   2) μžμ‹μ—κ²Œ ν• λ‹Ήλœ 업무가 더 이상 ν•„μš” 없을 λ•Œ
   3) λΆ€λͺ¨κ°€ exitν•˜λŠ”λ° μš΄μ˜μ²΄μ œλŠ” λΆ€λͺ¨κ°€ exitν•œ 후에 μžμ‹μ΄ 싀행을 κ³„μ†ν•˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 경우

 

πŸ’‘ λͺ‡λͺ‡ μ‹œμŠ€ν…œμ—μ„œλŠ” λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ ν›„ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ‘΄μž¬ν•  수 μ—†λ‹€.

  • cascading(연쇄) μ’…λ£Œ: ν”„λ‘œμ„ΈμŠ€κ°€ 정상적/비정상적이든 μ’…λ£Œλ˜λ©΄ λΉ„λ‘―λœ λͺ¨λ“  μžμ‹ν”„λ‘œμ„ΈμŠ€λ„ μ’…λ£Œλ˜μ•Όν•¨
  • ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ μ‹œ μ‚¬μš©ν•˜λ˜ μžμ›μ€ μš΄μ˜μ²΄μ œκ°€ λ˜μ°Ύμ•„κ°
  • μ’€λΉ„ ν”„λ‘œμ„ΈμŠ€: μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” μ’…λ£Œλ˜μ—ˆμ§€λ§Œ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ wait을 ν˜ΈμΆœν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 호좜 μ‹œκΉŒμ§€ μ’…λ£Œ μƒνƒœκ°€ ν”„λ‘œμ„ΈμŠ€ ν…Œμ΄λΈ”μ— λ‚¨μ•„μžˆκ²Œ 된 μƒνƒœλ₯Ό 말함
  • κ³ μ•„ ν”„λ‘œμ„ΈμŠ€: 브λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ wait() 호좜 λŒ€μ‹  μ’…λ£Œλ₯Ό ν•œ μƒνƒœ > μ˜μ›νžˆ μžμ‹μ€ ν…Œμ΄λΈ”μ— μ’…λ£Œμƒνƒœλ‘œ λ‚¨μ•„μžˆμ–΄μ•Όν•¨

 

ν”„λ‘œμ„ΈμŠ€κ°„ ν˜‘μ—…

: 정보 & μ‹œκ·Έλ„ μ£Όκ³  λ°›μ•„ ν˜‘λ ₯

 

πŸ’‘νŠΉμ§•

  1. λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 λ―ΈμΉ˜κ±°λ‚˜ 영ν–₯을 받을 수 μžˆλ‹€.
  2. 정보 곡유
  3. 계산 속도가 빨라짐
  4. λͺ¨λ“ˆν™”
  5. νŽΈλ¦¬ν•¨

  • 2개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ data share, in out ν•¨κ»˜ μ ‘κ·Όν•  μ‹œ , 같은 데이터 λ™μ‹œμ— μ ‘κ·Όν•˜λ©΄ 문제 λ°œμƒν•¨ ! (레이슀 μ»¨λ””μ…˜ 이라고 함, κ²½μŸμƒν™© 의미)

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신 (IPC: Inter process Communication)

: 운영체제 λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” 병행 ν”„λ‘œμ„ΈμŠ€λ“€μ€ λ…λ¦½μ μ΄κ±°λ‚˜ ν˜‘λ ₯적인 ν”„λ‘œμ„ΈμŠ€λ“€ 일 수 μžˆλ‹€. μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰ 쀑인 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€κ³Ό 데이터λ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 독립적이닀. ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰ 쀑인 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ—κ²Œ 영ν–₯을 μ£Όκ±°λ‚˜ λ°›λŠ”λ‹€λ©΄ ν˜‘λ ₯적인 ν”„λ‘œμ„ΈμŠ€μ΄λ‹€.

 

πŸ’‘ν”„λ‘œμ„ΈμŠ€ ν˜‘λ ₯을 ν—ˆμš©ν•˜λŠ” ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” 이유

- 정보 곡유
- 계산 가속화 (볡수 개의 처리 μ½”μ–΄λ₯Ό 가진 κ²½μš°μ—λ§Œ κ°€λŠ₯함을 유의!)
- λͺ¨λ“ˆμ„±

 

πŸ’‘ ν˜‘λ ₯적인 ν”„λ‘œμ„ΈμŠ€λ“€μ€ μ €λ‘œ 데이터λ₯Ό κ΅ν™˜ν•  수 μžˆλŠ” 톡신(IPC) 기법이 ν•„μš”ν•˜λ‹€.

  • 곡유 λ©”λͺ¨λ¦¬(shared memory): ν˜‘λ ₯ ν”„λ‘œμ„ΈμŠ€λ“€μ— μ˜ν•΄ 곡유 λ©”λͺ¨λ¦¬ μ˜μ—­ κ΅¬μΆ•λœλ‹€. κ·Έ μ˜μ—­μ˜ 데이터λ₯Ό 읽고 μ“°κ³  ν•¨μœΌλ‘œμ¨ 정보λ₯Ό κ΅ν™˜ν•  수 μžˆλ‹€.
  • λ©”μ‹œμ§€ 전달(msg passing) : ν˜‘λ ₯ ν”„λ‘œμ„ΈμŠ€λ“€ 사이에 κ΅ν™˜(send-receive)λ˜λŠ” λ©”μ‹œμ§€λ₯Ό ν†΅ν•˜μ—¬ μ •λ³΄κ΅ν™˜μ΄ 이루어진닀. μΆ©λŒμ„ νšŒν”Όν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 적은 μ–‘μ˜ 데이터 κ΅ν™˜μ— 유리

πŸ’‘producer-consumer problem in ν˜‘λ ₯ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ κ°„

: ν˜‘λ ₯ ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ„ν•œ νŒ¨λŸ¬λ‹€μž„μΈ μƒμ‚°μž ν”„λ‘œμ„ΈμŠ€λŠ” μ†ŒλΉ„μž ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ μ†ŒλΉ„λ˜λŠ” 정보λ₯Ό 생산

  • λ¬΄ν•œμ • 버퍼인 경우(unbounded-buffer) : λ²„νΌμ˜ μ‚¬μ΄μ¦ˆμ— μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— κ³„μ†ν•΄μ„œ 버퍼에 μ±„μšΈ 수 μžˆλ‹€.
  • ν•œμ •λœ 버퍼인 경우(bounded-buffer) : κ³ μ •λœ μ‚¬μ΄μ¦ˆμ˜ 버퍼인 경우 버퍼가 λ‹€ μ°Όλ‹€λ©΄ 더이상 μƒμ‚°μžλŠ” μžλ¦¬κ°€ λ‚˜κΈ° μ „κΉŒμ§€ 더이상 μƒμ‚°ν•˜λ©΄ μ•ˆλ˜κ³ , 버퍼가 ν…… λΉ„μ–΄μžˆλ‹€λ©΄ μ†ŒλΉ„μžλŠ” μ†ŒλΉ„ν•  게 μ—†μŒμ„ μ•Œλ €μ•Όν•œλ‹€. (연동 ν•„μš”)
  • ν”„λ‘œλ“€μ„œκ°€ enter() 호좜
  • μ†ŒλΉ„μžκ°€ remove() 호좜

πŸ“Œ 곡유 λ©”λͺ¨λ¦¬(shared memory) μ‹œμŠ€ν…œμ—μ„œμ˜ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신

  • 곡유 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신엔 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ κ³΅μœ ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ΅¬μΆ•ν•΄μ•Όν•œλ‹€.
  • 톡신은 μœ μ € ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ κ²°μ •λ˜λ©° 운영체제 μ†Œκ΄€μ΄ μ•„λ‹˜!
  • λ™μΌν•œ λ©”λͺ¨λ¦¬μ— λ™μ‹œμ— wirte μž‘μ—… μ‹œ λ¬Έμ œκ°€ λ°œμƒ >> ν•œ ν”„λ‘œμ„ΈμŠ€λ§Œ μ“°κΈ° κ°€λŠ₯ν•˜λ„λ‘ 동기화 해야함

]πŸ“Œ λ©”μ‹œμ§€ 전달 (msg passing) μ‹œμŠ€ν…œμ—μ„œμ˜ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신

  • λ©”μ‹œμ§€ 전달 방식은 λ™μΌν•œ μ£Όμ†Œκ³΅κ°„μ„ κ³΅μœ ν•˜μ§€ μ•Šκ³ λ„ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ ν†΅μ‹ ν•˜κ³ , κ·Έλ“€μ˜ λ™μž‘μ„ 동기화 ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•˜λŠ” 기법을 μ œκ³΅ν•œλ‹€. λ©”μ‹œμ§€ 전달 방식은 ν†΅μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ„€νŠΈμ›Œν¬μ— μ˜ν•΄ μ—°κ²°λœ λ‹€λ₯Έ 컴퓨터듀에 μ‘΄μž¬ν•  수 μžˆλŠ” λΆ„μ‚° ν™˜κ²½μ—μ„œ 특히 μœ μš©ν•˜λ‹€.

* 두 가지 μ£Όμ—°μ‚°

  1. send(message)
  2. receive(message)

: ν”„λ‘œμ„ΈμŠ€κ°€ 보낸 λ©”μ‹œμ§€λŠ” 고정길이(μ‹œμŠ€ν…œ κ΅¬ν˜„ easy, ν”„λ‘œκ·Έλž˜λ° μž‘μ—… difficult)일 μˆ˜λ„ 있고, κ°€λ³€ 길이(μ‹œμŠ€ν…œ κ΅¬ν˜„ difficult, ν”„λ‘œκ·Έλž˜λ° μž‘μ—… easy)일 μˆ˜λ„ μžˆλ‹€.

 

πŸ’‘λ§Œμ•½ ν”„λ‘œμ„ΈμŠ€ P와 Qκ°€ 톡신을 μ›ν•œλ‹€λ©΄, 톡신연결(link)κ°€ λ§Œλ“€μ–΄μ Έμ•Όν•œλ‹€. ν•˜λ‚˜μ˜ 링크와 send()/receive() 연산을 λ…Όλ¦¬μ μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” λ‹€μˆ˜μ˜ 방법

  1. 직접 톡신 or 간접톡신
  2. 동기식 or 비동기식 톡신
  3. μžλ™ or λͺ…μ‹œμ  λ²„퍼링

πŸ“Œ 직접 톡신

  • ν†΅μ‹ μ‹œ μ†‘μˆ˜μ‹ μž 이름이 λͺ…ν™•ν•˜λ‹€.
  • μž₯점: ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜ λŠ˜μ–΄λ‚  λ•Œλ§ˆλ‹€ ν•„μš”ν•œ 링크 μˆ˜κ°€ λŠ˜μ–΄μ„œ νš¨μœ¨μ€ λ–¨μ–΄μ§€λ‚˜, μ—°κ²°λ§Œ 되면 ν™•μž₯μ„± good
  • 단점: ν”„λ‘œμ„ΈμŠ€ 이름 νŠΉμ •ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 이름 λ³€κ²½ μ‹œ μ—°κ΄€λœ λͺ¨λ“  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ λΆ€λΆ„ 검사 ν•„μš”(λͺ¨λ“ˆμ„± μ €ν•˜)
  • send(p, message) - ν”„λ‘œμ„ΈμŠ€ p에 λ©”μ‹œμ§€ 전솑
  • receive(Q, messsage) - ν”„λ‘œμ„ΈμŠ€ Qλ‘œλΆ€ν„° λ©”μ‹œμ§€ μˆ˜μ§„

* 직접 톡신 μ—°κ²° νŠΉμ„±

  1. 톡신을 μ›ν•˜λŠ” 각 ν”„λ‘œμ„ΈμŠ€ μŒλ“€ 사이에 연결이 μžλ™μœΌλ‘œ κ΅¬μΆ•λœλ‹€.
  2. 연결은 μ •ν™•νžˆ 두 ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ—λ§Œ μ—°κ΄€λœλ‹€.
  3. ν†΅μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 각 쌍 μ‚¬μ΄μ—λŠ” μ •ν™•ν•˜κ²Œ ν•˜λ‚˜μ˜ 연결이 μ‘΄μž¬ν•΄μ•Όν•œλ‹€.
  4. μ†‘μ‹ μžλ§Œ μˆ˜μ‹ μž 이름을 지λͺ…ν•˜λŠ” 것도 κ°€λŠ₯함(μ£Όμ†Œμ§€μ • λΉ„λŒ€μΉ­)

πŸ“Œ κ°„μ ‘ 톡신

  • λ©”μ‹œμ§€λ“€μ΄ λ©”μΌλ°•μŠ€ λ˜λŠ” 포트둜 μ†‘μ‹ λ˜κ³  κ·Έκ²ƒμœΌλ‘œλΆ€ν„° μˆ˜μ‹ λœλ‹€.
  • λ©”μΌλ°•μŠ€λŠ” 고유의 idλ₯Ό 가진닀. 
  • λ‹€μˆ˜μ˜ μƒμ΄ν•œ λ©”μΌλ°•μŠ€λ₯Ό 톡해 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€κ³Ό 톡신할 수 μžˆλ‹€.
  • 두 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 곡유 λ©”μΌλ°•μŠ€λ₯Ό κ°€μ§ˆ λ•Œλ§Œ 이듀 ν”„λ‘œμ„ΈμŠ€κ°€ 톡신할 수 μžˆλ‹€.
  • send(A, message) : λ©”μ‹œμ§€λ₯Ό λ©”μΌλ°•μŠ€ A둜 솑신
  • revecive(A, message) : λ©”μ‹œμ§€λ₯Ό λ©”μΌλ°•μŠ€ Aλ‘œλΆ€ν„° μˆ˜μ‹ 

* κ°„μ ‘ 톡신 μ—°κ²° νŠΉμ„±

  1. ν•œμŒμ˜ ν”„λ‘œμ„ΈμŠ€λ“€ μ‚¬μ΄μ˜ 연결은 이듀 ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 λ©”μΌλ°•μŠ€λ₯Ό κ°€μ§ˆ λ•Œλ§Œ κ΅¬μΆ•λœλ‹€.
  2. 연결은 두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€λ“€κ³Ό 연관될 수 μžˆλ‹€.
  3. ν†΅μ‹ ν•˜λŠ” 각 ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ—λŠ” λ‹€μˆ˜μ˜ μ„œλ‘œ λ‹€λ₯Έ 연결이 μ‘΄μž¬ν•  수 있고, 각 연결은 ν•˜λ‚˜μ˜ λ©”μΌλ°•μŠ€μ— λŒ€μ‘

* 간접톡신 문제 λ°œμƒ μ˜ˆμ‹œ

: 메일 λ°•μŠ€ Aλ₯Ό ν”„λ‘œμ„ΈμŠ€ p1,p2,p3κ°€ κ³΅μœ ν•  λ•Œ ν”„λ‘œμ„ΈμŠ€ p1 λ©”μ‹œμ§€λ₯Ό A에 μ†‘μ‹ ν•˜κ³ (send(p1, A)) p2,p3λŠ” 각각 receive()λ₯Ό μ‹€ν–‰ν•œλ‹€. κ·Έλ ‡λ‹€λ©΄ p2,p3 쀑 λˆ„κ°€ 이 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λŠ” κ°€?

 

>> ν•΄κ²°μ±…

  • ν•˜λ‚˜μ˜ λ§ν¬λŠ” μ΅œλŒ€ 2개의 ν”„λ‘œμ„ΈμŠ€μ™€ μ—°κ΄€λ˜λ„λ‘ ν—ˆμš©
  • ν•œμˆœκ°„μ˜ μ΅œλŒ€λ‘œ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ receive() 연산을 μ‹€ν–‰ν•˜λ„λ‘ ν—ˆμš©
  • μ–΄λŠ ν”„λ‘œμ„ΈμŠ€κ°€ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  것인지 μ‹œμŠ€ν…œμ΄ μž„μ˜λ‘œ μ„ νƒν•˜λ„λ‘ ν•œλ‹€. μ‹œμŠ€ν…œμ€ μ†‘μ‹ μžμ—κ²Œ μˆ˜μ‹ μžλ₯Ό μ•Œλ €μ€˜μ•Όν•œλ‹€.

* OSλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€μ— λ‹€μŒμ„ ν—ˆμš©ν•˜λŠ” (μ—°μ‚°)기법 제곡

  1. μƒˆλ‘œμš΄ 메일 λ°•μŠ€ 생성
  2. λ©”μΌλ°•μŠ€λ₯Ό 톡해 μ†‘μˆ˜μ‹ 
  3. λ©”μΌλ°•μŠ€ μ‚­μ œ

πŸ“Œ 동기화 (Synchronization)

: λ©”μ‹œμ§€ 전달은 blocking(λ΄‰μ‡„ν˜•)μ΄κ±°λ‚˜, no-blocking(λΉ„λ΄‰μ‡„ν˜•) 방식 이닀. 각각 동기식/λΉ„λ™κΈ°μ‹μœΌλ‘œλ„ 뢀름

  • blocking send(synchronous) : μ†‘μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ©”μ‹œμ§€κ°€ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” λ©”μΌλ°•μŠ€μ— μ˜ν•΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ λ΄‰μ‡„λœλ‹€.
  • blocking receive(asynchronous) : λ©”μ‹œμ§€κ°€ 이용 κ°€λŠ₯ν•  λ•ŒκΉŒμ§€ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€κ°€ λ΄‰μ‡„λœλ‹€.
  • non-blocking send : μ†‘μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ λ©”μ‹œμ§€λ₯Ό 보내고 μž‘μ—…μ„ μž¬μ‹œμž‘ν•œλ‹€. (λ‹€μŒ λ©”μ‹œμ§€ 보내기 > λ°›μ•˜λ“  말든 상관 μ•ˆν•˜λŠ” 싹바가지)
  • non-blocking receive : μ†‘μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μœ νš¨ν•œ λ©”μ‹œμ§€ λ˜λŠ” 널을 λ°›λŠ”λ‹€.

>> send와 receive 각 λ‹€λ₯Έ 쑰합도 κ°€λŠ₯ν•˜λ‹€. 만일 send와 receiveκ°€ λͺ¨λ‘ λ΄‰μ‡„ν˜•μΌ λ•Œ, μ†‘μˆ˜μ‹ μžκ°„ λž‘λ°λΆ€(약속)λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

 

πŸ“Œ μ†ŒμΌ“

: μ†ŒμΌ“μ€ ν†΅μ‹ μ˜ 극점을 λœ»ν•œλ‹€. 두 ν”„λ‘œμ„ΈμŠ€κ°€ λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 톡신을 ν•˜λ €λ©΄ μ–‘ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ 총 두 개의 μ†ŒμΌ“μ΄ ν•„μš”ν•΄μ§„λ‹€.

  • μ†ŒμΌ“μ€ IP μ£Όμ†Œ + 포트번호 두 가지λ₯Ό μ ‘ν•©ν•œ ν˜•μ‹μ΄λ‹€.
  • 일반적으둜 μ†ŒμΌ“μ€ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ꡬ쑰λ₯Ό μ‚¬μš©ν•œλ‹€.
  • μ„œλ²„λŠ” μ§€μ •λœ ν¬νŠΈμ— ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ λ©”μ‹œμ§€κ°€ λ„μ°©ν•˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬κ²Œ λœλ‹€. μš”μ²­μ΄ μˆ˜μ‹ λ˜λ©΄ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“μœΌλ‘œλΆ€ν„° μš”μ²­μ„ μˆ˜λ½ν•¨μœΌλ‘œμ¨ 연결이 μ™„μ„±λœλ‹€.
  • 정보 λ°›λŠ” μͺ½/λ³΄λ‚΄λŠ” μͺ½ λ‘˜λ‹€ μ†ŒμΌ“ 생성 κ°€λŠ₯ (κΈ‰ν•œμͺ½μ΄ λ¨Όμ € λ§Œλ“œλŠ” λ“―)

>> μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œμ˜ 두 ν”„λ‘œμ„ΈμŠ€κ°€ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ©”μ‹œμ§€ 전달 κ°€λŠ₯

 

 

πŸ“Œ UDP & TCP

* UDPλž€?

: 속도 빠름, μΈν„°λ„·μœΌλ‘œ μŒμ„± μ±„νŒ…

* TCPλž€?

: λ³΄λ‚΄λŠ” κ³Όμ •μ—μ„œ TCP 이용 μ‹œ, 보낸 λ¬Έμ„œμ™€ λ°›λŠ” μˆœμ„œκ°€ κ·ΈλŒ€λ‘œ μœ μ§€. μ—λŸ¬ μ²˜λ¦¬λ„ ν•΄μ€Œ. (μ „ν™” 라인 처럼, μ„œλ‘œ μ—°κ²°ν•΄λ‘” κ²ƒμ²˜λŸΌ 데이터 전솑됨. λŒ€λΆ€λΆ„μ˜ μ„œλΉ„μŠ€κ°€ TCPμž„)

 

πŸ“Œ 원격 ν”„λ‘œμ‹œμ € 호좜 (RPCs) >> μ‹œμŠ€ν…œ μ—°κ²°λ˜μ–΄μžˆμ–΄ 원격 호좜 κ°€λŠ₯!!

: μ†ŒμΌ“λ³΄λ‹€ μˆ˜μ€€ 높은 톡신이 κ°€λŠ₯ν•˜λ‹€. λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ 두 μ‹œμŠ€ν…œ μ‚¬μ΄μ˜ 톡신에 μ‚¬μš©ν•˜κΈ° μœ„ν•˜μ—¬ ν”„λ‘œμ‹œμ € 호좜 기법을 좔상화 ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ„€κ³„λ˜μ—ˆλ‹€. ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ μœ„μ—μ„œ λŒμ•„κ°€κΈ° λ•Œλ¬Έμ— λ©”μ‹œμ§€ 기반 톡신을 ν•΄μ•Όν•œλ‹€.

 

* μŠ€ν… : μ„œλ²„μ˜ μ‹€μ œ μ ˆμ°¨μ— λŒ€ν•œ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ ν”„λ‘μ‹œ(μ€‘κ³„μ„œλ²„)이닀.

 

πŸ“Œ Remote Method Invocation (RMI)

: λΆ„μ‚°λ˜μ–΄ μ‘΄μž¬ν•˜λŠ” 객체 κ°„μ˜ λ©”μ‹œμ§€ 전솑(λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것 포함)을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” ν”„λ‘œν† μ½œ.

  • RPC와 μœ μ‚¬ν•œ Java λ§€μ»€λ‹ˆμ¦˜
  • RMIλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•œ μ»΄ν“¨ν„°μ˜ Java ν”„λ‘œκ·Έλž¨μ΄ 원격 κ°œμ²΄μ—μ„œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 있음

+ πŸ“Œ νŒŒμ΄ν”„

[ νŒŒμ΄ν”„ κ΅¬ν˜„ μ‹œ κ³ λ €ν•  4가지 문제 ]

1) νŒŒμ΄ν”„κ°€ 단뱑항 톡신인가 μ–‘λ°©ν–₯ 톡신인가?

2) μ–‘λ°©ν–₯ 톡신이 ν—ˆμš©λœλ‹€λ©΄ λ°˜μ΄μ€‘ 방식인가, 전이쀑 방식인가?

  1. λ°˜μ΄μ€‘ 방식 : ν•œλ²ˆμ— ν•œλ°©ν–₯ μ „μ†‘λ§Œ (ex.무전기)
  2. 전이쀑 λ°©μ‹ : λ™μ‹œμ— μ–‘λ°©ν–₯ λ°μ΄ν„° μ „솑 κ°€λŠ₯ (ex.전화톡화)

3) ν†΅μ‹ ν•˜λŠ” 두 ν”„λ‘œμ„ΈμŠ€ κ°„ λΆ€λͺ¨ - μžμ‹ 같은 νŠΉμ • 관계가 μ‘΄μž¬ν•˜λŠ”κ°€?

4) νŒŒμ΄ν”„λΌλ¦¬ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 톡신이 κ°€λŠ₯ν•œκ°€? μ•„λ‹ˆλ©΄ 동일 기계 μ•ˆ μ‘΄μž¬ν•˜λŠ” 두 ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λ§Œ 톡신 κ°€λŠ₯ν•œκ°€?

 

일반 νŒŒμ΄ν”„ (ordinary pipe)

: ν•œμͺ½μœΌλ‘œλ§Œ 데이터λ₯Ό 전솑할 수 있으며, 였직 단방ν–₯ ν†΅μ‹ λ§Œ κ°€λŠ₯ν•˜λ‹€. 만일 μ–‘λ°©ν–₯ 톡신이 ν•„μš”ν•˜λ‹€λ©΄, 각각 λ‹€λ₯Έ λ°©ν–₯의 총 2개의 νŒŒμ΄ν”„κ°€ ν•„μš” >> 일반 νŒŒμ΄ν”„λŠ” νŒŒμ΄ν”„λ₯Ό μƒμ„±ν•œ ν”„λ‘œμ„ΈμŠ€ μ΄μ™Έμ—λŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 주둜 λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ νŒŒμ΄ν”„λ₯Ό μƒμ„±ν•˜κ³  fork()둜 μƒμ„±ν•œ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ™€ ν†΅μ‹ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

 

지λͺ… νŒŒμ΄ν”„ (named pipe)

: 일반 νŒŒμ΄ν”„λŠ” ν•œμŒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 톡신할 수 μžˆλŠ” 방법을 μ œκ³΅ν•œλ‹€. κ·ΈλŸ¬λ‚˜ 일반 νŒŒμ΄ν”„λŠ” μ˜€λ‘œμ§€ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μ„œλ‘œ ν†΅μ‹ ν•˜λŠ” λ™μ•ˆμ—λ§Œ μ‘΄μž¬ν•œλ‹€. 지λͺ… νŒŒμ΄ν”„λŠ” μ–‘λ°©ν–₯ 톡신이 κ°€λŠ₯ν•˜λ©°, λΆ€λͺ¨-μžμ‹ 관계가 μ•„λ‹ˆμ–΄λ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€ 듀이 이λ₯Ό μ‚¬μš©ν•˜μ—¬ 톡신이 κ°€λŠ₯ν•˜λ‹€. μΆ”κ°€λ‘œ 톡신 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ”λΌλ„ 지λͺ… νŒŒμ΄ν”„λŠ” 계속 μ‘΄μž¬ν•œλ‹€. > μœ λ‹‰μŠ€, μœˆλ„μš° λ‘˜λ‹€ 지λͺ… νŒŒμ΄ν”„ 제곡

 

 

728x90