λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

OS

πŸ’» KOCW-OS-4: Process

πŸ—£ μ„œλ‘ 

KOCW 반효경 κ΅μˆ˜λ‹˜μ˜ 운영체제 μˆ˜μ—…μ„ λ“€μœΌλ©΄μ„œ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€.

[Process 1]
ν”„λ‘œμ„ΈμŠ€μ˜ κ°œλ…, ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ(Process State), ν”„λ‘œμ„ΈμŠ€μ˜ κ°œλ…, ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ„, Process Control Block(PCB), λ¬Έλ§₯ κ΅ν™˜(Context Switch), ν”„λ‘œμ„ΈμŠ€λ₯Ό μŠ€μΌ€μ€„λ§ν•˜κΈ° μœ„ν•œ 큐, Ready Queue와 λ‹€μ–‘ν•œ Device Queue, μŠ€μΌ€μ€„λŸ¬(Scheduler)

[Process 2, 3]
Thread, Single and Multithreaded Processes, Benefits of Threads, Implemetation of Threads


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

"Process is a program in execution"

ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯(context)

ν”„λ‘œκ·Έλž¨μ΄ νƒœμ–΄λ‚˜μ„œ μ‹€ν–‰λ˜λ‹€κ°€ μ’…λ£Œλ˜λŠ”λ° λ¬Έλ§₯μ΄λΌλŠ” 것은 쀑간 μ‹œμ μ„ κΈ°μ€€μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ΄ 무엇을, μ–΄λ–»κ²Œ μ‹€ν–‰ν–ˆλŠ”μ§€ ν˜„μž¬ μ‹œμ μ΄ μ–΄λ–€ μƒνƒœμΈμ§€ λ‚˜νƒ€λ‚΄λŠ” 것을 λ¬Έλ§₯이라고 ν•œλ‹€. 즉, ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ° ν•„μš”ν•œ λͺ¨λ“  μš”μ†Œλ₯Ό ν”„λ‘œμ„ΈμŠ€ λ¬Έλ§₯이라고 λΆ€λ₯Έλ‹€.

[CPU μˆ˜ν–‰ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•˜λ“œμ›¨μ–΄ λ¬Έλ§₯]
ν˜„μž¬ μ‹œμ μ— ν”„λ‘œμ„ΈμŠ€κ°€ μΈμŠ€νŠΈλŸ­μ…˜μ„ μ–΄λ””κΉŒμ§€ μˆ˜ν–‰ν–ˆλŠ”κ°€

  • PC (Program Counter)κ°€ μ–΄λ””λ₯Ό 가리킀고 μžˆλŠ”κ°€?
  • 각쒅 register에 μ–΄λ–€ 값을 가지고 μžˆλŠ”κ°€?

[ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμ†Œ 곡간] λ©”λͺ¨λ¦¬ κ΄€λ ¨

  • code, data, stack에 μ–΄λ–€ λ‚΄μš©μ΄ λ“€μ–΄μžˆλŠ”κ°€?

[ν”„λ‘œμ„ΈμŠ€ κ΄€λ ¨ 컀널 자료 ꡬ쑰]

  • PCB (Process Control Block)
    μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ CPUλ‚˜ λ©”λͺ¨λ¦¬λ₯Ό μ–Όλ§ˆλ‚˜ μ€˜μ•Ό ν•˜λŠ”μ§€, λ‚˜μœ 짓(?)을 ν•˜κ³  μžˆμ§€λŠ” μ•Šμ€μ§€ λ“± κ΄€λ¦¬ν•˜λŠ” 역할을 ν•˜λŠ”λ°
    μ΄λ•Œ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ PCBλ₯Ό 두고 μžˆλ‹€.
  • Kernel stack
    μ‹œμŠ€ν…œ μ½œμ„ ν•˜λ©΄ PCκ°€ μ»€λ„μ˜ codeλ₯Ό 가리킀며 μˆ˜ν–‰λ˜λŠ”λ° 호좜 정보λ₯Ό kernel stack에 ν”„λ‘œμ„ΈμŠ€ λ³„λ‘œ μŠ€νƒμ„ λ‘μ–΄μ„œ μ €μž₯ν•œλ‹€.

[질문] ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯은 μ™œ ν•„μš”ν•œκ°€?
ν”„λ‘œμ„ΈμŠ€ 혼자 μ‹€ν–‰λœλ‹€λ©΄ ꡳ이 μ•Œ ν•„μš”κ°€ 없을 것 κ°™λ‹€. ν•˜μ§€λ§Œ ν˜„μž¬ 컴퓨터 μ‹œμŠ€ν…œμ€ νƒ€μž„ 쉐어링, λ©€ν‹°νƒœμŠ€ν‚ΉμœΌλ‘œ 인해 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μ‹€ν–‰λœλ‹€. 즉, ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό 작고 μ‹€ν–‰ν•˜λ‹€κ°€ CPUλ₯Ό 놓고 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜μ–΄κ°€λŠ” ν˜•νƒœμ΄λ‹€. κ·ΈλŸ¬λ‚˜ ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯을 λͺ¨λ₯Έλ‹€λ©΄ μ•žλΆ€λΆ„λΆ€ν„° μ‹€ν–‰ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λŠ μ‹œμ κΉŒμ§€ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ μ΄λŸ¬ν•œ 정보듀을 가지고 μžˆμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯은 ν•„μš”ν•˜λ‹€.


πŸ“Œ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ (Process State)

ν”„λ‘œμ„ΈμŠ€λŠ” μƒνƒœκ°€ λ³€κ²½λ˜λ©° μˆ˜ν–‰λœλ‹€.

μƒνƒœ μ„€λͺ… 기타
Running CPUλ₯Ό 작고 μΈμŠ€νŠΈλŸ­μ…˜μ„ μˆ˜ν–‰μ€‘μΈ μƒνƒœ μ£Όμš” μƒνƒœ
Ready CPUλ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
Blocked (wait, sleep) CPUλ₯Ό μ€˜λ„ λ‹Ήμž₯ μΈμŠ€νŠΈλŸ­μ…˜μ„ μˆ˜ν–‰ν•  수 μ—†λŠ” μƒνƒœ
ν”„λ‘œμ„ΈμŠ€ μžμ‹ μ΄ μš”μ²­ν•œ 이벀트(예: I/O)κ°€ μ¦‰μ‹œ λ§Œμ‘±λ˜μ§€ μ•Šμ•„ 이λ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
ex) λ””μŠ€ν¬μ—μ„œ νŒŒμΌμ„ 읽어와야 ν•˜λŠ” 경우
New ν”„λ‘œμ„ΈμŠ€κ°€ 생성쀑인 μƒνƒœ κ²½μš°μ— 따라
ν•΄λ‹Ή μƒνƒœλ„
μΆ”κ°€ν•˜κΈ°λ„ ν•œλ‹€.


Terminated

μˆ˜ν–‰μ΄ λλ‚œ μƒνƒœ
μ •λ¦¬ν•˜λŠ” μž‘μ—…μ΄ 남아 있기 λ•Œλ¬Έμ— μƒνƒœμ— ν¬ν•¨ν•˜κΈ°λ„ ν•œλ‹€.

μŠ€μΌ€μ€„λŸ¬λ‘œ 인해 μΆ”κ°€λœ Suspended μƒνƒœκ°€ μžˆλ‹€. (μ—¬κΈ°μ„œλŠ” μ–ΈκΈ‰ν•˜μ§€ μ•Šκ³ , μŠ€μΌ€μ€„λŸ¬ μ–˜κΈ°λ₯Ό ν•  λ•Œ μ–ΈκΈ‰ν•  μ˜ˆμ •)


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

μ•„λž˜ μŠ€μΌ€μ€„λŸ¬λ‘œ 인해 ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ„λŠ” 변경될 μ˜ˆμ • (μœ„ 그림을 κ°€λ³κ²Œ 보고, 맨 μ•„λž˜ μ΅œμ’… ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ„ μ°Έκ³ )

  1. ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λ©΄ new μƒνƒœμ—μ„œ ready μƒνƒœκ°€ λœλ‹€.
  2. ready μƒνƒœμ—μ„œ CPUλ₯Ό μ–»μœΌλ©΄ running μƒνƒœκ°€ λœλ‹€.
  3. CPU 얻은 μƒνƒœμ—μ„œ λ‚΄λ €λ†“λŠ” 경우
    1. running -> terminated
      본인의 역할을 λ‹€ν–ˆμœΌλ©΄ μ’…λ£Œλœλ‹€.
    2. running -> waiting
      I/O 같은 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ ν•˜λ©΄, CPUλ₯Ό 가지고 μžˆμ–΄ 봐야 μΈμŠ€νŠΈλŸ­μ…˜μ΄ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— waiting μƒνƒœκ°€ λœλ‹€.
    3. running -> ready
      CPUλŠ” μ‹œκ°„μ„ λ‚˜λˆ μ„œ 써야 ν•˜λŠ”λ° ν• λ‹Ήλœ μ‹œκ°„μ΄ λλ‚œ κ²½μš°μ— ready μƒνƒœκ°€ λœλ‹€.

 

[μ˜ˆμ‹œ]
running μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©μžλ‘œλΆ€ν„° ν‚€λ³΄λ“œ μž…λ ₯을 λ°›μ•„μ„œ κ²°κ³Όλ₯Ό 보고 μ‹€ν–‰ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

그러면 keyboard I/O queue에 쀄을 μ„œκ²Œ λœλ‹€. 즉, running μƒνƒœμ—μ„œ blocked μƒνƒœλ‘œ λ³€κ²½λœλ‹€.

ν‚€λ³΄λ“œ μž…λ ₯을 λ°›μœΌλ©΄ keyboard controllerκ°€ CPUμ—κ²Œ μΈν„°λŸ½νŠΈλ₯Ό κ±Έμ–΄μ„œ μ•Œλ €μ€€λ‹€.
CPUλŠ” ν•˜λ˜ 일을 λ©ˆμΆ”κ³  μš΄μ˜μ²΄μ œμ—κ²Œ λ„˜μ–΄κ°€μ„œ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό ready둜 λ°”κΎΌλ‹€.
즉, ν‚€λ³΄λ“œ μž…λ ₯이 λ“€μ–΄μ™”κΈ° λ•Œλ¬Έμ— CPUλ₯Ό μ–»λŠ” 자격이 주어진닀.

ν”„λ‘œμ„ΈμŠ€λŠ” 곡유 데이터에 μ ‘κ·Όν•˜λ˜κ°€, λ””μŠ€ν¬, ν‚€λ³΄λ“œ λ“± μ–΄λ–€ μ’…λ₯˜μ— 따라 그에 λ§žλŠ” queue에 쀄을 μ„œκ²Œ λœλ‹€. μ΄λŸ¬ν•œ 과정을 보면 μΌμ’…μ˜ 놀이동산에 쀄을 μ„œλŠ” 것과 λΉ„μŠ·ν•˜λ‹€.

[질문] ν”„λ‘œμ„ΈμŠ€κ°€ blocked μƒνƒœκ°€ λœλ‹€λŠ” 것은 ν•˜λ“œμ›¨μ–΄λΏμΈκ°€?
μ•„λ‹ˆλ‹€. ν•˜λ“œμ›¨μ–΄ 말고 μžμ› 쀑에 μ†Œν”„νŠΈμ›¨μ–΄ μžμ›λ„ μžˆλ‹€. 그림을 보면 곡유 λ°μ΄ν„°λΌλŠ” 게 μžˆλ‹€. ν•˜μ§€λ§Œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ ‘κ·Όν•˜λ©΄ 일관성이 κΉ¨μ§€λŠ” λ¬Έμ œκ°€ 생길 수 μžˆλ‹€. κ·Έλž˜μ„œ keyboard I/O ququec처럼 곡유 데이터도 Resource queue에 쀄을 μ„œμ•Ό ν•œλ‹€. (blocked μƒνƒœκ°€ λœλ‹€)

[질문] 그림처럼 queue에 λ¨Όμ € λ“€μ–΄μ˜¨ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ CPUλ₯Ό ν• λ‹Ήν•˜λ‚˜?
μ•„λ‹ˆλ‹€. λ¨Όμ € 온 μˆœμ„œλŒ€λ‘œ 일정 μ‹œκ°„μ„ 두고 μ²˜λ¦¬ν•˜λŠ” 것을 λΌμš΄λ“œ 둜빈이라고 ν•˜λ©°, μ΄λ ‡κ²Œ ν• λ‹Ήν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ CPU μŠ€μΌ€μ€„λ§μ€ μš°μ„ μˆœμœ„κ°€ 높은 μˆœμ„œλŒ€λ‘œ ν• λ‹Ήν•œλ‹€λ˜μ§€ λ“±, CPU μŠ€μΌ€μ€„λ§ 방식에 따라 ν• λ‹Ήν•œλ‹€κ³  보면 될 것 κ°™λ‹€. (μŠ€μΌ€μ€„λ§ κ΄€λ ¨ν•΄μ„œ λ‚˜μ€‘μ— μžμ„Ένžˆ λ‹€λ£° μ˜ˆμ •)

ν”„λ‘œμ„ΈμŠ€λ₯Ό μŠ€μΌ€μ€„λ§ν•˜κΈ° μœ„ν•œ 큐

ν”„λ‘œμ„ΈμŠ€λ“€μ€ 각 큐듀을 μ˜€κ°€λ©° μˆ˜ν–‰λœλ‹€.

[Job queue]
ν˜„μž¬ μ‹œμŠ€ν…œ 내에 μžˆλŠ” λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ˜ 집합 (Ready, Device queue도 포함)

[Ready queue]
ν˜„μž¬ λ©”λͺ¨λ¦¬ 내에 μžˆμœΌλ©΄μ„œ CPUλ₯Ό μž‘μ•„μ„œ μ‹€ν–‰λ˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 집합

[Device queues]
I/O device의 처리λ₯Ό κΈ°λ‹€λ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 집합

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§ 큐의 λͺ¨μŠ΅


πŸ“Œ PCB

μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€λ“€μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€μ˜ 정보듀을 λ‹΄κ³  μžˆλ‹€.

[ꡬ성 μš”μ†Œ]

1 OSκ°€ μ‚¬μš©ν•˜λŠ” 정보 Process state, Process ID
scheduling information, priority
2 CPU μˆ˜ν–‰ κ΄€λ ¨ ν•˜λ“œμ›¨μ–΄ κ°’ Program counter, registers
3 λ©”λͺ¨λ¦¬ κ΄€λ ¨ Code, data, stack의 μœ„μΉ˜ 정보
4 파일 κ΄€λ ¨ Open file descriptors λ“±

πŸ“Œ λ¬Έλ§₯ κ΅ν™˜(Context Switch)

CPUλ₯Ό ν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ λ„˜κ²¨μ£ΌλŠ” 과정을 μ˜λ―Έν•œλ‹€.

[κ³Όμ •]
CPUκ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜μ–΄κ°ˆ λ•Œ μš΄μ˜μ²΄μ œλŠ” μ•„λž˜ 2가지 과정을 μˆ˜ν–‰ν•œλ‹€.

  1. CPUλ₯Ό λ‚΄μ–΄μ£ΌλŠ” ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ PCB에 μ €μž₯ν•œλ‹€.
  2. CPUλ₯Ό μƒˆλ‘­κ²Œ μ–»λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ PCBμ—μ„œ μ½μ–΄μ˜¨λ‹€.

λ¬Έλ§₯ κ΅ν™˜(context switch)이 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ” κ²½μš°μ™€ μΌμ–΄λ‚˜λŠ” 경우

  • μ‹œμŠ€ν…œ μ½œμ΄λ‚˜ μΈν„°λŸ½νŠΈ λ°œμƒ μ‹œ λ°˜λ“œμ‹œ context switchκ°€ μΌμ–΄λ‚˜λŠ” 것은 μ•„λ‹ˆλ‹€.
    (μœ„ κ·Έλ¦Όμ—μ„œ 첫 번째)
  • μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ‘œλΆ€ν„° 또 λ‹€λ₯Έ μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€λ‘œ λ„˜μ–΄κ°€λŠ” 것을 context switch라고 ν•œλ‹€.
  • μ‹œμŠ€ν…œ μ½œμ΄λ‚˜ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•œ 후에 μš΄μ˜μ²΄μ œκ°€ CPUλ₯Ό λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜κ²¨μ£ΌλŠ” 것도 context switch라고 ν•œλ‹€.
    (μœ„ κ·Έλ¦Όμ—μ„œ 2번째)

πŸ“Œ μŠ€μΌ€μ€„λŸ¬(Scheduler)

Long-term scheduler(μž₯κΈ° μŠ€μΌ€μ€„λŸ¬ λ˜λŠ” job scheduler)

μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€μ— memory(및 각쒅 μžμ›)λ₯Ό μ£ΌλŠ” 문제

  • μ‹œμž‘ ν”„λ‘œμ„ΈμŠ€ 쀑 μ–΄λ–€ 것을 ready queue둜 보낼지 κ²°μ •ν•œλ‹€.
  • degree of Multiprogramming μ œμ–΄ 즉, λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 수λ₯Ό μ œμ–΄ν•œλ‹€.
  • time sharing systemμ—λŠ” 보톡 μž₯κΈ° μŠ€μΌ€μ€„λŸ¬κ°€ μ—†λ‹€. (무쑰건 ready 즉, ν”„λ‘œκ·Έλž¨ 100개λ₯Ό μ‹€ν–‰ν•˜λ©΄ λͺ¨λ‘ ready μƒνƒœ)

Short-term scheduler(단기 μŠ€μΌ€μ€„λŸ¬ λ˜λŠ” CPU scheduler)

μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€μ— CPUλ₯Ό μ£ΌλŠ” 문제

  • λ‹€μŒλ²ˆμ— μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό running μ‹œν‚¬μ§€ κ²°μ •ν•œλ‹€.
  • μΆ©λΆ„νžˆ 빨라야 ν•œλ‹€. (millisecond λ‹¨μœ„)

Medium-term scheduler(쀑기 μŠ€μΌ€μ€„λŸ¬ λ˜λŠ” Swapper)

ν”„λ‘œμ„ΈμŠ€μ—κ²Œμ„œ memoryλ₯Ό λΊλŠ” 문제

  • μ—¬μœ  곡간 λ§ˆλ ¨μ„ μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό ν†΅μ§Έλ‘œ λ©”λͺ¨λ¦¬μ—μ„œ λ””μŠ€ν¬λ‘œ μ«“μ•„λ‚Έλ‹€.
  • degree of Multiprogramming μ œμ–΄ 즉, λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 수λ₯Ό μ œμ–΄ν•œλ‹€.

"μ§€κΈˆμ˜ μ‹œμŠ€ν…œμ€ μž₯κΈ° μŠ€μΌ€μ€„λŸ¬κ°€ μ—†κ³ , 쀑기 μŠ€μΌ€μ€„λŸ¬κ°€ degree of Multiprogramming μ œμ–΄λ₯Ό ν•œλ‹€."

쀑기 μŠ€μΌ€μ€„λŸ¬λ‘œ 인해 ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 쀑에 μΆ”κ°€λœ 것이 μžˆλ‹€. (μœ„μ—μ„œ 언급을 ν•˜μ§€ μ•ŠμŒ)
Suspended(stopped) μƒνƒœμ΄λ‹€. Suspended μƒνƒœμ— λŒ€ν•œ νŠΉμ§•μ€ μ•„λž˜μ™€ κ°™λ‹€.

μƒνƒœ μ„€λͺ… 기타
Running CPUλ₯Ό 작고 μΈμŠ€νŠΈλŸ­μ…˜μ„ μˆ˜ν–‰μ€‘μΈ μƒνƒœ μ£Όμš” μƒνƒœ


Ready CPUλ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
Blocked (wait, sleep) CPUλ₯Ό μ€˜λ„ λ‹Ήμž₯ μΈμŠ€νŠΈλŸ­μ…˜μ„ μˆ˜ν–‰ν•  수 μ—†λŠ” μƒνƒœ
ν”„λ‘œμ„ΈμŠ€ μžμ‹ μ΄ μš”μ²­ν•œ 이벀트(예: I/O)κ°€ μ¦‰μ‹œ λ§Œμ‘±λ˜μ§€ μ•Šμ•„ 이λ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
ex) λ””μŠ€ν¬μ—μ„œ νŒŒμΌμ„ 읽어와야 ν•˜λŠ” 경우
Suspended (stopped)

외뢀적인 이유둜 ν”„λ‘œμ„ΈμŠ€μ˜ μˆ˜ν–‰μ΄ μ •μ§€λœ μƒνƒœ
ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬μ—μ„œ ν†΅μ§Έλ‘œ λ””μŠ€ν¬λ‘œ swap out λœλ‹€.
ex) μ‚¬μš©μžκ°€ ν”„λ‘œκ·Έλž¨μ„ μΌμ‹œ μ •μ§€μ‹œν‚¨ 경우 (break key 예: ctrl + z)
μ‹œμŠ€ν…œμ΄ μ—¬λŸ¬ 이유둜 ν”„λ‘œμ„ΈμŠ€λ₯Ό μž μ‹œ 쀑단
(λ©”λͺ¨λ¦¬μ— λ„ˆλ¬΄ λ§Žμ€ ν”„λ‘œμ„ΈμŠ€κ°€ μ˜¬λΌμ™€ μžˆλŠ” 경우)
New ν”„λ‘œμ„ΈμŠ€κ°€ 생성쀑인 μƒνƒœ κ²½μš°μ— 따라
ν•΄λ‹Ή μƒνƒœλ„
μΆ”κ°€ν•˜κΈ°λ„ ν•œλ‹€.


Terminated

μˆ˜ν–‰μ΄ λλ‚œ μƒνƒœ
μ •λ¦¬ν•˜λŠ” μž‘μ—…μ΄ 남아 있기 λ•Œλ¬Έμ— μƒνƒœμ— ν¬ν•¨ν•˜κΈ°λ„ ν•œλ‹€.

[질문] μ™œ 쀑기 μŠ€μΌ€μ€„λŸ¬λ‘œ 인해 Suspended μƒνƒœκ°€ μΆ”κ°€λλ‚˜? 기쑴의 Running, Ready, Blocked둜 ν‘œν˜„ν•  수 μ—†λ‚˜?
λ©”λͺ¨λ¦¬λ₯Ό ν†΅μ§Έλ‘œ λΉΌμ•—κΈ΄ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό Running, Ready, Blocked둜 ν‘œν˜„ ν•  수 μ—†λ‹€.
λ©”λͺ¨λ¦¬λ₯Ό ν†΅μ§Έλ‘œ λΉΌμ•—κ²ΌμœΌλ©΄ CPUλ₯Ό 얻어도 아무 일도 λͺ»ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

[질문] Blocked μƒνƒœλ‘œ ν‘œν˜„ν•  수 μžˆμ„ 것 같은데 Blocked μƒνƒœμ™€ Suspended(stopped) μƒνƒœμ˜ μ°¨μ΄λŠ” 무엇인가?
Blocked μƒνƒœ
μžμ‹ μ΄ μš”μ²­ν•œ μž‘μ—…μ„ ν•˜λ©΄μ„œ 였래 기닀리고 μžˆλŠ” μƒνƒœμ΄λ‹€. 즉, μžμ‹ μ΄ μš”μ²­ν•œ μž‘μ—…μ΄ λλ‚˜λ©΄ λ‹€μ‹œ Ready μƒνƒœλ‘œ λŒμ•„κ°ˆ 수 μžˆλ‹€.
Suspened(stopped) μƒνƒœ
μ™ΈλΆ€μ—μ„œ μ •μ§€μ‹œν‚¨ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€. 즉, μ™ΈλΆ€μ—μ„œ resume ν•΄μ•Ό Active μƒνƒœλ‘œ λ„˜μ–΄κ°ˆ 수 μžˆλ‹€.
*Active μƒνƒœ: Running, Ready, Blocked μƒνƒœ


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

μ΄ˆλ°˜μ— 그렸던 ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ„μ™€ λ‹€λ₯Έ 점은 Running μƒνƒœκ°€ 2κ°€μ§€λ‘œ λ‚˜λˆ΄λ‹€λŠ” 것과 Suspended의 쑴재 μ—¬λΆ€ 차이이닀.

2κ°€μ§€μ˜ Running μƒνƒœ

[Runnning(user mode)]
ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό 가지고 μžˆμœΌλ©΄μ„œ 본인의 μ½”λ“œλ₯Ό μ‹€ν–‰ 쀑인 μƒνƒœκ°€ Running(user mode)이닀.

[Running(kernel mode)]
system callμ΄λ‚˜ interrupt λ˜λŠ” trap으둜 인해 운영체제의 μ½”λ“œκ°€ μ‹€ν–‰ 쀑인 μƒνƒœκ°€ Running(kernel mode)이닀.

[질문] μš΄μ˜μ²΄μ œκ°€ Running μƒνƒœμ— μžˆλ‹€κ³  ν‘œν˜„ν•΄λ„ λ˜λ‚˜?
μ•ˆλœλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ‹€κ°€ system call둜 인해 운영체제의 μ½”λ“œλ₯Ό μ‹€ν–‰ 쀑인 μƒνƒœλΌκ³  κ°€μ •ν•˜κ² λ‹€.
μ΄λ•Œ μœ μ € λͺ¨λ“œμ—μ„œ 컀널 λͺ¨λ“œλ‘œ λ„˜μ–΄κ°”λ‹€λ˜κ°€, ν”„λ‘œμ„ΈμŠ€κ°€ 컀널 λͺ¨λ“œμ—μ„œ Running μƒνƒœλΌκ³  ν‘œν˜„ν•˜λŠ” 게 λ§žλ‹€.

μš΄μ˜μ²΄μ œκ°€ Running μƒνƒœμ— μžˆλ‹€κ³  ν‘œν˜„ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
μ™œλƒν•˜λ©΄ system call을 λ°œμƒμ‹œν‚¨ ν”„λ‘œμ„ΈμŠ€κ°€ 아직 Running μ€‘μ΄λž€ 것을 μ „μ œλ‘œ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 이 점을 κΌ­ μœ μ˜ν•΄μ•Ό ν•œλ‹€.

Suspended

Suspended도 Blocked μƒνƒœμ—μ„œ Suspended λ˜μ—ˆλŠ”μ§€, Ready μƒνƒœμ—μ„œ Suspended λ˜μ—ˆλŠ”μ§€μ— 따라
Suspended Blocked와 Suspended Ready μ„œλ‘œ λ‹€λ₯Έ 두 가지 μƒνƒœλ‘œ λ‚˜λ‰œλ‹€.

[질문] active와 inactiveλ₯Ό λ‚˜λˆˆ 기쀀이 무엇인가? (μ μ„ μœΌλ‘œ λ‚˜λˆˆ 이유)
inactiveλŠ” 외뢀적인 이유둜 ν”„λ‘œμ„ΈμŠ€κ°€ 얼어뢙은 μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€. 즉, λ©”λͺ¨λ¦¬λ₯Ό μ™„μ „νžˆ μžƒμ–΄λ²„λ¦° μƒνƒœμ΄λ‹€.
μ™ΈλΆ€μ—μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ •μ§€μ‹œμΌ°κΈ° λ•Œλ¬Έμ— active둜 λ„˜μ–΄κ°€λ €λ©΄ λ‹€μ‹œ μ™ΈλΆ€μ—μ„œ 재개λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€.


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

"A thread (or lightweight process) is a basic unit of CPU utilization"
ν”„λ‘œμ„ΈμŠ€ 내뢀에 CPU μˆ˜ν–‰ λ‹¨μœ„κ°€ μ—¬λŸ¬ 개 μžˆλŠ” 것을 μŠ€λ ˆλ“œ(Thread)라고 λΆ€λ₯Έλ‹€.

μŠ€λ ˆλ“œμ˜ ꡬ성

ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμ†Œκ³΅κ°„κ³Ό μš΄μ˜μ²΄μ œμ—μ„œ κ΄€λ¦¬ν•˜λŠ” PCB λͺ¨μŠ΅

  • program counter
  • register set
  • stack space

ν”„λ‘œμ„ΈμŠ€λŠ” PCBλŠ” ν•˜λ‚˜λ§Œ λ§Œλ“€μ–΄μ§„λ‹€. μŠ€λ ˆλ“œκ°€ μ—¬λŸ¬ 개 있으면 CPU κ΄€λ ¨ 정보듀을 각 μŠ€λ ˆλ“œλ§ˆλ‹€ 가지고 μžˆλ‹€.

μŠ€λ ˆλ“œκ°€ λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ κ³΅μœ ν•˜λŠ” λΆ€λΆ„(=task)

  • code section
  • data section
  • OS resources

"전톡적인 κ°œλ…μ˜ heavyweight processλŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό 가지고 μžˆλŠ” task둜 λ³Ό 수 μžˆλ‹€."

μž₯점

[Responsiveness(응닡성)]

  • μ‚¬μš©μž μž…μž₯μ—μ„œ λΉ λ₯΄λ‹€.
  • 닀쀑 μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±λœ task κ΅¬μ‘°μ—λŠ” ν•˜λ‚˜μ˜ μ„œλ²„ μŠ€λ ˆλ“œκ°€ blocked(waiting) μƒνƒœμΈ λ™μ•ˆμ—λ„
    λ™μΌν•œ task λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰(running)λ˜μ–΄ λΉ λ₯Έ 처리λ₯Ό ν•  수 μžˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ›Ή νŽ˜μ΄μ§€λ₯Ό μ½μ–΄μ˜€λŠ” λ™μ•ˆ λΈŒλΌμš°μ €λŠ” blocked μƒνƒœκ°€ λœλ‹€.
    λ§Œμ•½ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€λ©΄ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλŠ” 그림을 뢈러였고
    또 λ‹€λ₯Έ μŠ€λ ˆλ“œλŠ” 뢈러온 ν…μŠ€νŠΈλ₯Ό 뿌렀주게 되면 μ‚¬μš©μž μž…μž₯μ—μ„œ 닡닡함이 λœν•˜λ‹€.
    (이미 μ½μ–΄μ˜¨ 뢀뢄은 λ¨Όμ € 보여주기 λ•Œλ¬Έμ—)

[Resource Sharing(μžμ› 곡유)]

  • λ˜‘κ°™μ€ 일을 ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬κ°œ λ‘λŠ” 것보닀 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“€κ³ 
    n개의 μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μžμ›μ„ 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.
    binary code, data, resource of the process 곡유

[Economy(κ²½μ œμ„±)]

  • 응닡성과 λ‹€λ₯Έ 의미둜 ν”„λ‘œμ„ΈμŠ€λ₯Ό ν•˜λ‚˜ λ§Œλ“œλŠ” 것은 μ˜€λ²„ν—€λ“œκ°€ 큰데 μŠ€λ ˆλ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 μ˜€λ²„ν—€λ“œκ°€ 크지 μ•Šλ‹€.
  • ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ Context switching은 μ˜€λ²„ν—€λ“œκ°€ 크닀. ν•˜μ§€λ§Œ μŠ€λ ˆλ“œκ°€ Context switching은 μ˜€λ²„ν—€λ“œκ°€ 적닀.
    (Solaris 경우 두 가지 μ˜€λ²„ν—€λ“œκ°€ 각각 30λ°°, 5λ°°)

[Utilization of MP Architectures(λ©€ν‹° ν”„λ‘œμ„Έμ„œ μ•„ν‚€ν…μ²˜μ˜ ν™œμš©)]

  • μŠ€λ ˆλ“œκ°€ μ—¬λŸ¬κ°œ 있으면 각각의 μŠ€λ ˆλ“œκ°€ μ„œλ‘œ λ‹€λ₯Έ CPUμ—μ„œ λ³‘λ ¬μ μœΌλ‘œ 일을 ν•  수 μžˆλ‹€.

Implementation of Threads

  • [kernel threads] - 컀널이 μŠ€λ ˆλ“œμ˜ 쑴재λ₯Ό μ•Œμ•„μ„œ μ»€λ„μ˜ 지원을 λ°›λŠ” μŠ€λ ˆλ“œλ“€μ„ μ˜λ―Έν•œλ‹€.
  • [user threads] - μ»€λ„μ˜ 지원을 받지 μ•Šκ³ , μ‚¬μš©μž μˆ˜μ€€μ—μ„œ μŠ€λ ˆλ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” μŠ€λ ˆλ“œλ“€μ„ μ˜λ―Έν•œλ‹€.
  • [real-time threads]

 

반효경 [운영체제] 5. Process1

μ„€λͺ…이 μ—†μŠ΅λ‹ˆλ‹€.

core.ewha.ac.kr

 

반효경 [운영체제] 6. Process2

μ„€λͺ…이 μ—†μŠ΅λ‹ˆλ‹€.

core.ewha.ac.kr

 

반효경 [운영체제] 7. Process3

μ„€λͺ…이 μ—†μŠ΅λ‹ˆλ‹€.

core.ewha.ac.kr

 

운영체제

μš΄μ˜μ²΄μ œλŠ” 컴퓨터 ν•˜λ“œμ›¨μ–΄ λ°”λ‘œ μœ„μ— μ„€μΉ˜λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ³„μΈ΅μœΌλ‘œμ„œ λͺ¨λ“  컴퓨터 μ‹œμŠ€ν…œμ˜ ν•„μˆ˜μ μΈ 뢀뢄이닀. λ³Έ κ°•μ’Œμ—μ„œλŠ” 이와 같은 운영체제의 κ°œλ…κ³Ό μ—­ν• , 운영체제λ₯Ό κ΅¬μ„±ν•˜λŠ” 각

www.kocw.net

'OS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸ’» KOCW-OS-4: Process  (0) 2020.10.26
πŸ’» KOCW-OS-3: System Structure & Program Execution 2  (0) 2020.10.05
πŸ’» KOCW-OS-2: System Structure & Program Execution 1  (0) 2020.10.04
πŸ’» KOCW-OS-1: Introduction to Operating Systems  (0) 2020.10.03