๐ ์ค์ผ์ค๋ฌ(Scheduler)
์ค์ผ์ค๋ฌ(Scheduler)
- Long Term Scheduler(์ฅ๊ธฐ ์ค์ผ์ค๋ฌ or job scheduler)
- ์์ ํ๋ก์ธ์ค ์ค ์ด๋ค ๊ฒ๋ค์ ready queue์ ๋ณด๋ผ์ง ๊ฒฐ์
- ํ๋ก์ธ์ค์ memory(๋ฐ ๊ฐ์ข ์์)์ ์ฃผ๋ ๋ฌธ์
- degree of multipramming์ ์ ์ด (๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ํ๋ก๊ทธ๋จ์ด ๋ช๊ฐ๋??!!)
- time sharing system์๋ ๋ณดํต ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ ์์ (๋ฌด์กฐ๊ฑด ready)
- Short Term Scheduler(๋จ๊ธฐ ์ค์ผ์ค๋ฌ or CPU Scheduler)
- ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋ค์๋ฒ์ running ํ ๊ฑด์ง ๊ฒฐ์
- ํ๋ก์ธ์ค์ CPU๋ฅผ ์ฃผ๋ ๋ฌธ์
- ์ถฉ๋ถํ ๋นจ๋ผ์ผ ํจ(millisecond ๋จ์)
-
Medium Term Scheduler(์ค๊ธฐ ์ค์ผ์ค๋ฌ or Swapper) ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ถ์กฑํ ๋ ์๊ฐ ์ผํจ. - ์ฌ์ ๊ณต๊ฐ์ ๋ง๋ จํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋ฅผ ํต์งธ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๋์คํฌ๋ก ์ซ์๋. (๋ชจ๋ ํ๋ก๋ ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ค๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ด๋ผ ์ผ๋ถ๋ฅผ ์ซ์๋ด๋๊ฒ ํจ๊ณผ์ ์.)
- ํ๋ก์ธ์ค์์ memory๋ฅผ ๋บ๋ ๋ฌธ์
- degree of multiprogramming์ ์ ์ด
ํ๋ก์ธ์ค์ ์ํ
- Running
- CPU๋ฅผ ์ก๊ณ instruction์ ์ํ์ค์ธ ์ํ
- Ready
- CPU๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ(๋ฉ๋ชจ๋ฆฌ ๋ฑ ๋ค๋ฅธ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํจ)
- Blocked (Wait, Sleep)
- I/O ๋ฑ์ ์ด๋ฒคํธ(event)๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- (์) ๋์คํฌ์์ ํ์ผ์ ๋ถ๋ฌ์์ผํ๋ ๊ฒฝ์ฐ
- Suspended
- ์ธ๋ถ์ ์ธ ์ด์ ๋ก ํ๋ก์ธ์ค์ ์ํ์ด ์ ์ง๋ ์ํ
- ํ๋ก์ธ์ค๋ฅผ ํต์งธ๋ก ์ธ๋ถ๋ก Swap out ๋๋ค.
- (์) ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ผ์ ์ ์ง ์ํจ ๊ฒฝ์ฐ (break key) ์์คํ ์ด ์ฌ๋ฌ ์ด์ ๋ก ํ๋ก์ธ์ค๋ฅผ ์ ์ ์ค๋จ ์ํด(๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์ ํ๋ก์ธ์ค์ฌ ์ฌ๋ผ์ ์์ ๋)
blocked: ์์ ์ด ์์ฒญํ event๊ฐ ๋ง์กฑ๋๋ฉด ready
Suspened: ์ธ๋ถ์์ resumeํด ์ฃผ์ด์ผ Active๋จ.
- suspended๋ ํ๋ก์ธ์ค๊ฐ blocked์ ready ์ํ์์ ๋ฐ๋๋ ๊ฒ์ ๋ฐ๋ผ 2๊ฐ์ง๋ก ๊ตฌ๋ถํจ.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ suspended ready์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํต์งธ๋ก ๋นผ์๊ฒผ๊ธฐ ๋๋ฌธ์ CPU ์์ ์ ์ผ์ ํ ์ ์์.
- ๊ทธ์น๋ง suspended blocked์ ๊ฒฝ์ฐ I/O ์์ ์ ํ๋ค๊ฐ suspended๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ํด๋น ์์ ์ ๊ณ์ํ ์ ์์.
- Swap out์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ชจ๋ ์ซ๊ฒจ๋๋ ๊ฒ, Swap in์ ๋ค์ ๋ค์ด์ค๋ ๊ฒ
- ํ๋ก์ธ์ค๊ฐ ์๊ธฐ ํ๋ก์ธ์ค ์ฝ๋๋ฅผ ์ํ์ค์ด๋ฉด user mode running์ด๋ผ๊ณ ํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด kernel, monitor(์ด์์ฒด์ ์ ๋์ ์์ฒญํด์ ํ๋ ๊ฒฝ์ฐ) mode runnig
Thread
๋์ผํ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค๊ณ ํ๋ฉด, ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๊ฐ๋ ์. ๊ทผ๋ฐ ๋นํจ์จ์ ์ด์ง ์์ ์๋ํ๋ฉด, ์ฝ๋์ ์ด๋๋ฅผ ์ํํ๊ณ ์๋์ง์ ๋ํด์ ๊ฐ๊ฐ์ ์ค๋ ๋๊ฐ ์ด๋ฅผ ๊ธฐ๋กํจ. ์ฆ CPU ์ํ๋จ์๋ฅผ ๋ฐ๋ก ๊ธฐ์ตํ๋ ํํ. ๊ทธ๋์ ์ด ๋ถ๋ถ์ ์ ์ธํ ๊ฒ์ ๋จ์ผ ํ๋ก๋ ์ค๋ก shareํ๊ณ ์์. ์ด๋์ ํจ์จ์ ์ธ ๊ฒ์.
์ ์: โA thread or (lightweight process) is a basic unit of CPU utilizationโ
- thread์ ๊ตฌ์ฑ
- program couter
- register set
- stack space
- Thread๊ฐ ๋๋ฃ Thread์ ๊ณต์ ํ๋ ๋ถ๋ถ(=Task)
- code section
- Data section
- OS rssource
- ์ ํต์ ์ธ ๊ฐ๋ ์ heavyweight process๋ ํ๋์ thread๋ฅผ ๊ฐ์ง๊ณ ์๋ Task๋ก ๋ณผ ์ ์๋ค.
์ฅ์
- ๋ค์ค ์ค๋ ๋๋ก ๊ตฌ์ฑ๋ ํ์คํฌ ๊ตฌ์กฐ์์๋ ํ๋์ ์๋ฒ ์ค๋ ๋๊ฐ blocked ์ํ์ธ ๋์์๋ ํ์คํฌ ๋ด์ ๋ค๋ฅธ ์ค๋๋๊ฐ ์คํ(running)๋์ด ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
- ๋์ผํ ์ผ์ ์ํํ๋ ๋ค์ค ์ค๋ ๋๊ฐ ํ๋ ฅํ์ฌ ๋์ ์ฒ๋ฆฌ์จ(throughtput)๊ณผ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์๋ค.
- ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋ ฌ์ฑ์ ๋์ผ ์ ์๋ค.
ํ๋ก์ธ์ค ์์ฑ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค ์์ฑ
- ํ๋ก์ธ์ค์ ํธ๋ฆฌํ์ฑ
- ํ๋ก์ธ์ค๋ ์์์ ํ์๋ก ํจ
- ์ด์์ฒด์ ๋ก ๋ฐ๋๋ค
- ๋ถ๋ชจ์ ๊ณต์ ํ๋ค.
- ์์์ ๊ณต์
- ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์์์ ๊ณต์ ํ๋ ๋ชจ๋ธ
- ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ ๋ชจ๋ธ
- ์ ํ ๊ณต์ ํ์ง ์๋ ๋ชจ๋ธ
- ์ํ
- ๋ถ๋ชจ์ ์์์ด ๊ณต์กดํ๋ฉฐ ์ํ๋๋ ๋ชจ๋ธ
- ์์์ด ์ข ๋ฃ(terminate)๋ ๋๊ฐ์ง ๋ถ๋ชจ๊ฐ ๊ธฐ๋ค๋ฆฌ๋(wait, blocked) ๋ชจ๋ธ
- ์ฃผ์ ๊ณต๊ฐ
- ์์์ ๋ถ๋ชจ์ ๊ณต๊ฐ์ ๋ณต์ฌํจ
- ์์์ ๊ทธ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์ฌ๋ฆผ
- ์ ๋์ค์ ์
- Fork() ์์คํ
์ฝ์ด ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑ
- ๋ถ๋ชจ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌ (OS data except PID + binery)
- ์ฃผ์ ํ ๋น
- Fork() ๋ค์์ ์ด๋ฌ์ง๋ exec() ์์คํ ์ฝ์ ํตํด ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
- Fork() ์์คํ
์ฝ์ด ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑ
ํ๋ก์ธ์ค ์ข ๋ฃ
- ํ๋ก์ธ์ค๊ฐ ๋ง์ง๋ง ๋ช
๋ น์ด๋ฅผ ์ํํ ํ ์ด๋ฅผ ์ด์์ฒด์ ์๊ฒ ์๋ ค์ค
- ์์์ด ๋ถ๋ชจ์๊ฒ outputData๋ฅผ ๋ณด๋ (via wait)
- ํ๋ก์ธ์ค์ ๊ฐ์ข ์์๋ค์ด ์ด์์ฒด์ ๊ฒ๊ฒ ๋ฐ๋ฉ๋จ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์์ ์ํ์ ์ข
๋ฃ์ํด (abort)
- ์์์ด ํ ๋น ์์์ ํ๊ณ์น๋ฅผ ๋๋ ๊ฒฝ์ฐ
- ์์์๊ฒ ํ ๋น๋ ํ์คํฌ๊ฐ ๋ ์ด์ ํ์ํ์ง ์๋ ๊ฒฝ์ฐ
- ๋ถ๋ชจ๊ฐ ์ข
๋ฃ๋ ๊ฒฝ์ฐ
- ์ด์์ฒด์ ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ ์์ ํ๋ก์ธ์ค๊ฐ ์ํ๋๋๋ก ๋์ง ์๋๋ค.
- ๋จ๊ณ์ ์ธ ์ข ๋ฃ(๋ถ๋ชจ ํ๋ก์ธ์ค๋ ๊ผญ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ค ์ฃฝ์ด๊ณ ์ฃฝ๋๋ค.)