๐ง ์ ์ดํ๋ฆ
CPU์ ์ ์์ ์ฒ์ ๊ณต๊ธํ๋ ์์ ๋ถํฐ, ์ ์์ด ๊บผ์ง๋ ์์ ๊น์ง ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC)๋ ์ฐ์๋ (์ธ์คํธ๋ญ์ ์) ์ฃผ์๊ฐ๋ค์ ์คํํฉ๋๋ค.
<์์>
๋ช ๋ น์ด 1
๋ช ๋ น์ด 2
๋ช ๋ น์ด 3
...
๋ช ๋ น์ด n
<์ข ๋ฃ>
๋ช ๋ น์ด 1์์ ๋ช ๋ น์ด 2๋ก์ ์ ํ์ ์ ์ด์ด๋์ด๋ผ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ ์ ์ด์ด๋์ ๋ฐฐ์ด์ (ํ๋ก์ธ์์) ์ ์ดํ๋ฆ์ด๋ผ ๋ถ๋ฆ ๋๋ค.
๐ง ์์ธ์ ์ธ ์ ์ด ํ๋ฆ, ECF
๊ฐ์ฅ ๊ฐ๋จํ ์ ํ์ ์ ์ดํ๋ฆ์ ๋ช ๋ น์ด 1๊ณผ ๋ช ๋ น์ด 2๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ๋๋ํ ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ ์ดํ๋ฆ ์์์ jump, branches, call, return ๋ฑ์ ๋ช ๋ ์ด๊ฐ ์คํ๋๋ฉด ์์ ๊ฐ์ ์ ์ง์ ์ธ ์ ์ดํ๋ฆ์ด ๋ณ๊ฒฝ๋๊ณ , ์๋ก ๋๋ํ ์กด์ฌํ์ง ์๋ ๋ช ๋ น์ด๊ฐ ์คํ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์์คํ ์ ์์ฒ๋ผ ๋ช ๋ น์ด๋ก ์ธํ ์ํ ๋ณํ๊ฐ ์๋, ํ๋ก๊ทธ๋จ์ ์คํ๊ณผ๋ ๊ด๊ณ์๋ ์์คํ ์์ฒด์ ์ํ ๋ณํ์๋ ๋ฐ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ๋์จ์ด ํ์ด๋จธ๋ ๊ท์น์ ์ธ ๊ฐ๊ฒฉ์ผ๋ก ๊บผ์ง๋ฉฐ, ์์คํ ์ ์ด๊ฒ์ ๋ฐ๋์ ์ฒ๋ฆฌํด ์ฃผ์ด์ผ ํฉ๋๋ค.
ํจํท๋ค์ ๋คํธ์ํฌ ์ด๋ํฐ์ ๋์ฐฉํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค.
ํ๋์ ์์คํ ๋ค์ ์ ์ดํ๋ฆ์ ๊ฐ์์ค๋ฐ ๋ณํ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฌํ ์ํฉ์ ๋ฐ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด์ ๊ฐ์ ๊ธ๊ฒฉํ ๋ณํ๋ฅผ ์์ธ์ ์ธ ์ ์ดํ๋ฆ(exceptional control flow, ECF)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
ECF๋ ์ปดํจํฐ ์์คํ ์ ๋ชจ๋ ์์ค์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๋์จ์ด์ ์ํด ๊ฒ์ถ๋๋ ์ด๋ฒคํธ๋ค์ ์์ธ ํธ๋ค๋ฌ๋ก ๊ฐ์์ค๋ฐ ์ ์ด์ด๋์ ๋ฐ์์ํต๋๋ค.
(ํ๋์จ์ด ์์ค, ํ๋์จ์ด์ ์ด์์ฒด์ ์ ์ํด ๊ตฌํ)
์ด์์ฒด์ ์ ๋ฌธ๋งฅ์ ํ์ ํตํด ํ๋ก์ธ์ค ๊ฐ ์ ์ด๊ฐ ์ด๋ํฉ๋๋ค.
(์ด์์ฒด์ ์ปค๋ ์์ค, ํ๋์จ์ด ํ์ด๋จธ์ ์ด์์ฒด์ ์ ์ํด ๊ตฌํ)
ํ๋ก์ธ์ค๋ ์๊ทธ๋์ ํตํด ์ปค๋์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๋๋ก ํฉ๋๋ค.
(์ ํ๋ฆฌ์ผ์ด์ ์์ค, ์ด์์ฒด์ ๋ก ๊ตฌํ)
๊ฐ๋ณ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ์คํ ์ด์์ ํํผํ๊ณ ๋ค๋ฅธ ํจ์ ๋ด ์์์ ์์น๋ก ๋น์ง์ญ์ฑ ์ ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฌ์ ๋์ํ ์ ์์ต๋๋ค.
(ํ๋ก๊ทธ๋จ ์์ค, C์ธ์ด ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํ)
์ฐ์ ํ๋์จ์ด์ ์ด์์ฒด์ ์ ๊ต์ฐจ์ ์ ๋์ธ ์์ธ๋ค(์์ธ์ํฉ)๋ก ์์ํ์ฌ, ์ด๊ณณ์์ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์์ฒด์ ๋ด๋ถ(์ปค๋)๋ก ์ํธ๋ฆฌ ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋ ์์ธ์ธ ์์คํ ์ฝ์ ๋ํด์๋ ์์๋ณด๊ฒ ์ต๋๋ค.
์ดํ ์กฐ๊ธ ๋ ์์ ์์ค์์ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ด์์ฒด์ ์ ๊ต์ฐจ์ ์ ์์นํ ํ๋ก์ธ์ค์ ์๊ทธ๋์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ง ์์ธ ์ํฉ(Exception)
์ด๋ค ํ๋ก์ธ์ ์ํ์ ๋ณํ์ ๋ํ ๋์์ผ๋ก, ์ ์ดํ๋ฆ์ ๊ฐ์์ค๋ฐ ๋ณํ์ ๋๋ค.
์์ธ์ํฉ์ ๋ถ๋ถ์ ์ผ๋ก ํ๋์จ์ด์ ์ด์์ฒด์ ์ ์ํด์ ๊ตฌํ๋ ์์ธ์ ์ธ ์ ์ดํ๋ฆ์ ํ๊ฐ์ง ํํ๋ก์จ,
ํน์ ์ด๋ฒคํธ์ ๋ํ ๋ฐ์์ผ๋ก OS ์ปค๋๋ก ์ ์ด๊ฐ ์ ํ๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
ํน์ ์ด๋ฒคํธ์ ์์๋ก๋ 0์ผ๋ก ๋๋๊ธฐ, ์ฐ์ ์ฐ์ฐ ์ค๋ฒํ๋ก์ฐ, page fault, ctrl + c ๋ฑ์ด ์์ต๋๋ค.
์๋๋ ์์ธ์ฌํญ์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ์ ๋๋ค.
ํ๋ก์ธ์๋ ์ด๋ค ๊ฒฝ์ฐ์ด๋ ์ง ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๊ฐ์งํ๋ฉด ์์ธ ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ ์ ํ ํ ์ด๋ธ์ ํตํด์ ๋ฐ์ํ ํน์ ์ข ๋ฅ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํน๋ณํ ์ค๊ณ๋ ์ด์์ฒด์ ์ ์๋ธ๋ฃจํด(์์ธ์ฒ๋ฆฌ ํธ๋ค๋ฌ)์ผ๋ก ๊ฐ์ ํ๋ก์์ ์ฝ์ ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ํ์ฌ ์คํ์ค์ธ ์ธ์คํธ๋ญ์ ๋์ค ์์ธ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋, ํ์ฌ ์ธ์คํธ๋ญ์ ์ ๋๋ง์น ํ์ ํธ์ถํฉ๋๋ค.
์์ธ์ฒ๋ฆฌ ํธ๋ค๋ฌ์์ ์ฒ๋ฆฌ๋ฅผ ๋๋ง์น๋ฉด, ์์ธ์ํฉ์ ๋ฐ์์ํจ ์ด๋ฒคํธ์ ์ข ๋ฅ์ ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ค์ ํ๊ฐ์ง ์ผ์ด ๋ฐ์ํฉ๋๋ค.
ํธ๋ค๋ฌ๋ ์ ์ด๋ฅผ ํ์ฌ ์ธ์คํธ๋ญ์ $I_{current}$ ๋ก ๋๋ ค์ค๋๋ค.
์ด ์ธ์คํธ๋ญ์ ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋๊ณ ์๋ ์ธ์คํธ๋ญ์ ์ ์๋ฏธํฉ๋๋ค.
ํธ๋ค๋ฌ๋ ์ ์ด๋ฅผ $I_{next}$ ๋ก ๋๋ ค์ฃผ๋๋ฐ, ์ด๋ ์์ธ์ํฉ์ด ๋ฐ์ํ์ง ์์๋๋ผ๋ฉด ๋ค์์ ์คํ๋์์ ์ธ์คํธ๋ญ์ ์ ๋๋ค.
ํธ๋ค๋ฌ๋ ์ค๋จ๋ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํฉ๋๋ค. (Abort)
๐ง ์์ธ ์ฒ๋ฆฌ
ํ ์์คํ ๋ด์ ์กด์ฌํ๋ ๋ชจ๋ ์์ธ์ํฉ๋ค์ ์๋ก ์ค๋ณต๋์ง ์๋ ์์ ์ ์๋ฅผ ์์ธ๋ฒํธ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด ๋ฒํธ๋ค์ ํ๋ก์ธ์ ์ค๊ณ์์ ์ด์์ฒด์ ์ ์ปค๋(์ด์์ฒด์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ฃผํ๋ ๋ถ๋ถ) ์ค๊ณ์๊ฐ ๋ถ์ฌํฉ๋๋ค.
์ ์, ์ฆ ํ๋ก์ธ์ ์ค๊ณ์๊ฐ ๋ถ์ฌํ ์ค๋ฅ์ ์ข ๋ฅ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
0์ผ๋ก ๋๋๊ธฐ, page fault, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋ฐ, breakpoin, ์ฐ์ ์ฐ์ฐ ์ค๋ฒํ๋ก์ฐ๊ฐ ํฌํจ๋ฉ๋๋ค.
ํ์, ์ฆ ์ปค๋ ์ค๊ณ์๊ฐ ๋ถ์ฌํ ์ค๋ฅ์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์คํ ์ฝ, ์ธ๋ถ I/O ์ฅ์น๋ก๋ถํฐ์ ์๊ทธ๋์ด ํฌํจ๋ฉ๋๋ค.
์์คํ ๋ถํ ์(์ปดํจํฐ๊ฐ ๋ฆฌ์ ๋๊ฑฐ๋ ์ ์์ด ๊ณต๊ธ๋๋ ๊ฒฝ์ฐ) ์ด์์ฒด์ ๋ ์์ธ ํ ์ด๋ธ์ ํ ๋นํ๊ณ ์ด๊ธฐํํฉ๋๋ค.
๋ฐํ์ ์ ํ๋ก์ธ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๊ฐ์งํ๊ณ ๋์๋๋ ์์ธ๋ฒํธ n๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
ํ๋ก์ธ์๋ ๊ทธ ํ์ ์์ธ ํ ์ด๋ธ์ ์ธ๋ฑ์ค n๋ฅผ ํตํด์ ๊ฐ์ ์ ์ผ๋ก ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ธ์ํฉ์ ๋ฐ์์ํต๋๋ค.
๐ง ์์ธ ํ ์ด๋ธ(Exception Tables)
์์ธ ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๋๋ค.
๊ฐ ์ด๋ฒคํธ ํ์ ์ ์์ธ ๋ฒํธ n์ ๊ฐ์ง๋๋ค.
n์ ์์ธ ํ ์ด๋ธ์ ์ธ๋ฑ์ค์ด๋ฉฐ, ์ด๋ฅผ ์ธํฐ๋ฝํธ ๋ฒกํฐ(interrupt vector)๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
ํธ๋ค๋ฌ n์ ์์ธ์ํฉ n์ด ๋ฐ์ํ ๋ ํธ์ถ๋ฉ๋๋ค.
๐ง ์์ธ ์ํฉ๊ณผ ํ๋ก์์ ์ฝ์ ์ฐจ์ด
์์ธ ์ํฉ์ ํ๋ก์์ ์ฝ๊ณผ ์ ์ฌํ์ง๋ง, ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
ํ๋ก์ธ์๋ ํ๋ก์์ ์ฝ์ ์ฌ์ฉํด์ ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐํ๊ธฐ ์ ์ ์คํ์ ๋ฆฌํด์ฃผ์๋ฅผ ํธ์ฌํฉ๋๋ค.
์ด๋ ์ ์ฅ๋๋ ๋ฆฌํด์ฃผ์๋ ์์ธ์ ์ข ๋ฅ์ ๋ฐ๋ผ ํ์ฌ ์ธ์คํธ๋ญ์ ์ด๊ฑฐ๋, ๋ค์ ์ธ์คํธ๋ญ์ ์ ๋๋ค.
ํ๋ก์ธ์๋ ํธ๋ค๋ฌ๊ฐ ๋ฆฌํดํ ๋ ์ค๋จ๋ ํ๋ก๊ทธ๋จ์ ๋ค์ ์์ํ๊ธฐ ์ํด ํ์ํ๊ฒ ๋ ์ถ๊ฐ์ ์ธ ํ๋ก์ธ์ ์ํ๋ฅผ ์คํ ์์ ํธ์ฌํฉ๋๋ค.
์ ์ด๊ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์์ ์ปค๋๋ก ์ ํํ๊ณ ์์ ๋, ์ด ๋ชจ๋ ์์ดํ ๋ค์ ์ฌ์ฉ์ ์คํ ์๊ฐ ์๋๋ผ ์ปค๋ ์คํ ์์ ํธ์ฌ๋ฉ๋๋ค.
์์ธ ํธ๋ค๋ฌ๋ ์ปค๋ ๋ชจ๋์์ ๋์๊ฐ๋๋ค.
์ด๋ ์ด๋ค์ด ๋ชจ๋ ์์คํ ์์์ ์์ ํ ์ ๊ทผํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๐ง ECF(์์ธ)์ ์ข ๋ฅ
ECF๋ 4๊ฐ์ง ์ข ๋ฅ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
์ฐ์ ํฌ๊ฒ ๋ณด์๋ฉด ๋๊ธฐํ(Synchronous)๊ณผ ๋น๋๊ธฐํ(Asynchronous)์ผ๋ก ๊ตฌ๋ถ๋ ์ ์๋๋ฐ, ๊ฐ๊ฐ์ ํฌํจ๋๋ ECF๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋น๋๊ธฐํ:
Interrupt(์ธํฐ๋ฝํธ)
๋๊ธฐํ:
Trap(ํธ๋ฉ), Fault(์ค๋ฅ), Abort(์ค๋จ)
(์ด๋ ์ค๋ฅ(Fault)๋ ์์ธ(Error)์ ๋ค๋ฆ ๋๋ค.)
๋๊ธฐํ ECF๋ ์ธ์คํธ๋ญ์ ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํ๋๋ฐ,
์ด๋ ์ด๋ฌํ ์ธ์คํธ๋ญ์ ๋ค์ ์ค๋ฅ ์ธ์คํธ๋ญ์ (faulting instruction)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๐ง ๋น๋๊ธฐํ ์์ธ - Interruput(์ธํฐ๋ฝํธ)
์ธํฐ๋ฝํธ๋ ํ๋ก์ธ์ ์ธ๋ถ์ ์๋ ์ ์ถ๋ ฅ ๋๋ฐ์ด์ค๋ก๋ถํฐ์ ์๊ทธ๋์ ๊ฒฐ๊ณผ๋ก์จ, ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๋ค๋ ๊ฒ์ ํน์ ์ธ์คํธ๋ญ์ ์ ์คํํด์ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ๋ ์๋ฏธ์ ๋๋ค.
ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์ธ ํธ๋ค๋ฌ๋ ์ข ์ข ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ(Interrupt hander)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๋ฐ์ํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ธํฐ๋ฝํธ:
ํค๋ณด๋์์ ctrl + c ๋ฅผ ๋๋ฅธ๋ค.
๋คํธ์ํฌ์์ ํจํท์ด ๋ค์ด์๋ค.
๋์คํฌ์์ ํ ๊ฐ์ ์นํฐ๊ฐ ์ฝํ ๋ค์ด์๋ค.
ํ๋ ๋ฆฌ์ ์ธํฐ๋ฝํธ:
์ปดํจํฐ์ ๋ฆฌ์ ๋ฒํผ์ ๋๋ ๋ค.
์ํํธ ๋ฆฌ์ ์ธํฐ๋ฝํธ:
์ปดํจํฐ์์ crtl+alt+delete๋ฅผ ๋๋ ๋ค
๐ ์ธํฐ๋ฝํธ์ ์ฒ๋ฆฌ
๋คํธ์ํฌ ์ด๋ํฐ, ๋์คํฌ ์ปจํธ๋กค๋ฌ, ํ์ด๋จธ ์นฉ ๊ฐ์ ์ ์ถ๋ ฅ ๋๋ฐ์ด์ค๋ค์ ํ๋ก์ธ์์ ์ธํฐ๋ฝํธ ํ์ ์ ํธ๋ฅผ ๋ณด๋ด์ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์(์ธํ )์ํค๊ณ , ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํจ ๋๋ฐ์ด์ค๋ฅผ ์๋ณํ๋ ์์ธ๋ฒํธ๋ฅผ ์์คํ ๋ฒ์ค์ ๋ณด๋ ๋๋ค.
ํ์ฌ์ ์ธ์คํธ๋ญ์ ์ด ์คํ์ ์๋ฃํ ํ์, ํ๋ก์ธ์๋ ์ธํฐ๋ฝํธ ํ์ด high๋ก ์ฌ๋ผ๊ฐ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํฉ๋๋ค.
์ดํ ์์คํ ๋ฒ์ค์์ ์์ธ๋ฒํธ๋ฅผ ์ฝ๊ณ , ์ ์ ํ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํฉ๋๋ค.
ํธ๋ค๋ฌ๋ฅผ ๋ฆฌํดํ ๋, ์ ์ด๋ฅผ ๋ค์ ์ธ์คํธ๋ญ์ ์ผ๋ก ๋๋ ค์ค๋๋ค.
(ํ์ฌ ์ธ์คํธ๋ญ์ ์ด ์๋ ๋ค์ ์ธ์คํธ๋ญ์ ์ผ๋ก ๋๋ ค์ฃผ๋ ๊ฒ์ ๋๋ค.)
์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ด ๋ง์น ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ง ์์๋ ๊ฒ์ฒ๋ผ ๊ณ์ํด์ ์คํ๋๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๐ง ๋๊ธฐํ ์์ธ - Trap(ํธ๋ฉ)
ํธ๋ฉ์ ์๋์ ์ธ ์์ธ์ํฉ์ผ๋ก, ์ด๋ค ์ธ์คํธ๋ญ์ ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํฉ๋๋ค.
์ธํฐ๋ฝํธ ํธ๋ค๋ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํธ๋ฉ ํธ๋ค๋ฌ๋ ์ ์ด๋ฅผ ๋ค์ ์ธ์คํธ๋ญ์ ์ผ๋ก ๋ฆฌํดํฉ๋๋ค.
ํธ๋ฉ์ ๊ฐ์ฅ ์ค์ํ ์ฌ์ฉ์ ์์คํ ์ฝ(System call)์ด๋ผ๊ณ ์๋ ค์ง ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ๊ณผ ์ปค๋ ์ฌ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ ๊ด์ ์์ ์์คํ ์ฝ์ ๋ณดํต์ ํจ์ ํธ์ถ๊ณผ ๋์ผํฉ๋๋ค.
๊ทธ๋ ์ง๋ง ์ค์ ๊ตฌํ์ ๋งค์ฐ ๋ค๋ฆ ๋๋ค.
๋ณดํต์ ํจ์๋ ์ฌ์ฉ์ ๋ชจ๋์์ ๋์๊ฐ๋ฉฐ, ์ด ๋๋ฌธ์ ์คํํ ์ ์๋ ์ธ์คํธ๋ญ์ ๋ค์ด ์ ํ์ ์ ๋๋ค.
์ด์ ๋ฐํด ์์คํ ์ฝ์ ์ปค๋ ๋ชจ๋์์ ์๋ํ๋ฏ๋ก, ์ด๋ก ์ธํด ์ปค๋ ๋ด์์ ์ ์๋ ์คํ์ ์ ๊ทผํ๋ฉฐ ํน๊ถ์ ๊ฐ์ง ์ธ์คํธ๋ญ์ ๋ค์ ์คํํ ์ ์๊ฒ ํด์ค๋๋ค.
ํธ๋ฉ์ ์ข ๋ฅ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- system calls
- breakpoint traps
- special instructions
๐ง ๋๊ธฐํ ์์ธ - Fault(์ค๋ฅ)
์ค๋ฅ๋ ํธ๋ค๋ฌ๊ฐ ์ ์ ํ ์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ ์๋ฌ์ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํฉ๋๋ค.
์ค๋ฅ(Fault)๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก์ธ์๋ ์ ์ด๋ฅผ ์ค๋ฅ ํธ๋ค๋ฌ๋ก ์ด๋ํด์ค๋๋ค.
๋ง์ผ ํธ๋ค๋ฌ๊ฐ ์๋ฌ ์กฐ๊ฑด์ ์ ์ ํ ์ ์๋ค๋ฉด, ์ ์ด๋ฅผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ์ธ์คํธ๋ญ์ ์ผ๋ก ๋๋ ค์ฃผ์ด์ ๊ฑฐ๊ธฐ์๋ถํฐ ์ฌ์คํํฉ๋๋ค.
๋ง์ผ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ํธ๋ค๋ฌ๋ ์ปค๋ ๋ด๋ถ์ abort ๋ฃจํด์ผ๋ก ๋ฆฌํดํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํฉ๋๋ค.
Fault์ ์ข ๋ฅ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- page fault
- protection fault
- floating point exceptions
โญ๏ธ Page fault
Fault ์ ๊ณ ์ ์ ์ธ ์์๋ Page fault๋ก, ์ด๋ ์ธ์คํฐ๋ญ์ ์ด ๊ฐ์๋ฉ๋ชจ๋ฆฌ ํ ์ด๋ธ์ ์ฐธ์กฐํ์ ๋ ๋์๋๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ page๊ฐ ์กด์ฌํ์ง ์๋ ์ํฉ์ด๋ฉฐ, ๋ฐ๋ผ์ ๋์คํฌ์์ ๊ฐ์ ธ์์ผ ํ ๋ ๋ฐ์ํฉ๋๋ค.
ํ์ด์ง ์ค๋ฅ ํธ๋ค๋ฌ๋ ๋์คํฌ์์ ์ ์ ํ ํ์ด์ง๋ฅผ ๋ก๋ํด์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ์ธ์คํธ๋ญ์ ์ผ๋ก ์ ์ด๋ฅผ ๋๊ฒจ์ค๋๋ค.
์ด ์ธ์คํธ๋ญ์ ์ด ๋ค์ ์คํ๋ ๋์๋ ์ ์ ํ ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๊ฒ ๋๋ฏ๋ก ์ธ์คํธ๋ญ์ ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ๋์ํ ์ ์์ต๋๋ค.
๐ง ๋๊ธฐํ ์์ธ - Abort(์ค๋จ)
์ค๋จ์ ๋๋ถ๋ถ ํ๋์จ์ด ์ค๋ฅ์ ๊ฐ์ด ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์น๋ช ์ ์ธ ์๋ฌ์์ ๋ฐ์ํฉ๋๋ค.
์ค๋จ(Abort) ํธ๋ค๋ฌ๋ ์ ๋๋ก ์์ฉํ๋ก๊ทธ๋จ์ผ๋ก ์ ์ด๋ฅผ ๋ฆฌํดํ์ง ์๊ณ , ์ข ๋ฃํ๋ ์ค๋จ ๋ฃจํด์ผ๋ก ๋ฐํํฉ๋๋ค.
๐ง ์์คํ ์ฝ (x86-64)
์์คํ ์ฝ(system call), ๊ฐ๋จํ ์์ค์ฝ(syscall)์ ์ด์์ฒด์ ์ ์ปค๋์ด ์ ๊ณตํ๋ ์๋น์ค์ ๋ํ์ฌ,
์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฒญ์ ๋ฐ๋ผ ์ปค๋์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ๋๋ค.
๋ฆฌ๋ ์ค๋ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ธ ๋, ๋๋ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ์ ์๋ ์๋ฐฑ ๊ฐ์ ์์คํ ์ฝ์ ์ ๊ณตํฉ๋๋ค.
๊ฐ ์์คํ ์ฝ์ ์ปค๋ ์ ํ ํ ์ด๋ธ์ ์คํ์ ์ ๋์๋๋ ์ ์ผํ ์ ์๋ฅผ ๊ฐ์ง๋๋ค.
๋ค์์ ๋ง์ด ์ฌ์ฉํ๋ ์ฃผ์ ์์คํ ์ฝ์ ๋๋ค.
C ํ๋ก๊ทธ๋จ์ syscall ํจ์๋ฅผ ์ฌ์ฉํด์ ์ง์ ์์คํ ์ฝ์ ํธ์ถํ ์ ์์ต๋๋ค.
๊ทธ๋ ์ง๋ง ์ด๊ฒ์ ์ค์ ๋ก๋ ๊ฑฐ์ ๋ถํ์ํฉ๋๋ค.
ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๋ถ๋ถ์ ์์คํ ์ฝ์ ๋ํ์ฌ ํธ๋ฆฌํ ๋ํผ ํจ์๋ค์ ์ ๊ณตํฉ๋๋ค.
๋ํผ ํจ์๋ค์ ์ธ์๋ค์ ํจํค์งํ๊ณ , ์ปค๋์ ์ ์ ํ ์์คํ ์ฝ ์ธ์คํธ๋ญ์ ์ผ๋ก ํธ๋ฉ์ ๊ฑธ๊ณ , ํธ์ถํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์์คํ ์ฝ์ ๋ฆฌํด ์ํ๋ฅผ ์ ๋ฌํฉ๋๋ค.
๋ฆฌ๋ ์ค ์์คํ ์ฝ์ ์ ๋ฌ๋๋ ๋ชจ๋ ์ธ์๋ค์ ์คํ๋ณด๋ค๋ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ฅผ ํตํด์ ์ด๋ค์ง๋๋ค.
๊ด์ต์ ์ผ๋ก ๋ ์ง์คํฐ %rax๋ ์์คํ ์ฝ ๋ฒํธ๋ฅผ ๋ณด๊ดํ๋ฉฐ,
%rdi, %rsi, %rdx, %r10, %r8, %r9์ ์ต๋ ์ฌ์ฏ๊ฐ์ ์ธ์๋ค์ ๋ณด๊ดํ ์ ์์ต๋๋ค.
๋ํ ๋ฆฌํด ๊ฐ์ %rax์ ๋ณด๊ด๋๋ฉฐ, -4095์์ -1 ์ฌ์ด์ ์์ ๋ฆฌํด ๊ฐ์ ์์์ errno์ ๋์ํ๋ ์๋ฌ๋ฅผ ๋ํ๋ ๋๋ค.
'๐ฅ Computer Science > ์์คํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ํ๋ก์ธ์ค [2] - ํ๋ก์ธ์ค์ ์ ์ด (0) | 2022.11.07 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ํ๋ก์ธ์ค [1] - ํ๋ก์ธ์ค (0) | 2022.11.07 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ๋ฒํผ ์ค๋ฒํ๋ก์ฐ (0) | 2022.10.25 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] 2022 BombLab(๋ฐค๋ฉ) ์์ธ๋ถ์ (0) | 2022.10.24 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด[4] - ํ๋ก์์ (0) | 2022.10.24 |