Operating System/ thread/ CPU process
๐ฟ ์ปดํจํฐ์ ๊ณ ์ง์ ์ธ ๋ฌธ์
(1) ์ ์ฅ๊ณต๊ฐ ๋ฌธ์
- ์ธ์ : RAM, DISK ์ฉ๋ ๋ถ์กฑ
- ๋ฌธ์ : ์ฑ๋ฅ ์ ํ, ๋ฐ์ดํฐ ์ ์ค
(2) ์ค๋ฒ ํด๋ฝ
- ์ธ์ : CPU, RAM ๊ณผ๋ค ์ฌ์ฉ(์ฌ๋ฌ๊ฐ์ ๋ฌด๊ฑฐ์ด ํ๋ก๊ทธ๋จ์ ํ ๋ฒ์ ๋๋ฆฌ๋ฉด)
- ๋ฌธ์ : ์๋ช ๋จ์ถ, ์์คํ ์ถฉ๋
(3) ์ค๋ฒ ํํ
- ์ธ์ : CPU, RAM
- ๋ฌธ์ : CPU์ ์ด์ ๋ฐ์์ํด, ์ฟจ๋ง์ฅ์น ํ์
โ Operating System
1
2
3
4
5
6
7
8
9
//OS ๊ธฐ๋ณธ
------------------- ์ ์ ๐ -------------------
/ \
๐ฟ System Software ๐ฟ Application Software
(์ค์ ๋ด์ฅ๋ ํ๋ก๊ทธ๋จ, ๋์คํฌ ๊ด๋ฆฌ) (๋ด๊ฐ ์ค์นํ ํ๋ก๊ทธ๋จ, ํฌ๋กฌ, ์๋, ๊ฒ์...)
|
๐๐ปโโ๏ธ Operating System
|
๐พ HardWare(CPU, RAM, Input, Output)
โ๏ธ Functions of operating system
โ๏ธ ์์คํ ์์๊ด๋ฆฌ
์ด๋ค ํ๋ก๊ทธ๋จ์ ๋๋ฆด ๋ CPU์ ์ฝ์ด ๋ช ๊ฐ ์ธ์ง, RAM์ ๋ช ๊ธฐ๊ฐ ์ธ์ง ์์์ ๊ฒฐ์ ํด ์ค
์๋ค๋ฉด ๋ด๊ฐ pptํฌ ๋ CPU๋ 2์ฝ์ด ํ ๋น, RAM์ 4GB์จโฆ์ด๋ ๊ฒ ์ผ์ผํ ํต์ ํด์ผ ํจ.
์ฐ๋ฆฌ๊ฐ ์์ํ์ง ์๊ณ ๋ ์ปดํจํฐ์ ํ๋์จ์ด ์์์ ๊ด๋ฆฌํจ.
โ๏ธ ์์ฉ ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ
์ด๋ค ํ๋ก๊ทธ๋จ์ ํด๋ฆญํด ์คํํ ๋ ์คํ ๋ถ์คํฐ ํต์
์๋ก์ด ์ฑ์ ๊น์์ ๋ ์์น ์ ๋ณด๋ฅผ ํ์ฉํ ์ง/์ ํ ์ง ๊ถํ ํต์
๋ง์ฝ ์๋ค๋ฉด, ์๋ก ๊น ์ฑ์ด ์ฐ๋ฆฌ์ ๊ถํ์ ์นจ๋ฒํ ์ ์์!
โ๏ธ ์ปค๋ฎค๋์ผ์ด์ ์ง์ GIU
์์ด์ฝ, ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ์ ๋ ๊ทธ ์์์ ์ผ์ด๋๋ ์ผ๋ค ์ง์
๊ทธ๋์ ์ ์ ๋ ๋จ์ํ ํด๋ฆญํ์ ๋ฟ์ด์ง๋ง ๊ทธ ๋ท๋จ ์ธ์ธํ ๋ด์ฉ๋ค ์คํํ๋ OS
์ ์ ์๊ฒ๋ ํธ๋ฆฌํ๊ณ ๋ณด๊ธฐ์ข์ ๊ธฐ๋ฅ Graphic User Interface
โ Program? Process? Processor?
โ๏ธ Program
ํ๋ก๊ทธ๋จ์ด๋, ๋ช
๋ น์ผ๋ก ์ด๋ฃจ์ด์ง ์ด์ฒด
ํ์ ํ๋ก๊ทธ๋จ์ ์ ์ ์ผ๋ก ์ฃฝ์ ๋ฏ ๋์คํฌ์์ ์ง๋ด๋ค๊ฐ
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ค๊ณ ํด๋ฆญํ๋ฉด RAM์ ์
๋ก๋. ์คํ ์ค๋น
์ฐ๋ฆฌ๊ฐ ํ์๋ฅผ ์น๋ฉด CPU๊ฐ ๊ณ์ฐ์ ํ๋ฉฐ ์คํ
โ๏ธ Process
ํ๋ก๊ทธ๋จ์ด RAM์ ์ฌ๋ผ์ค๊ฒ ๋๋ฉด ํ๋ก์ธ์ค
์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ
โ๏ธ Processor?
ํ๋ก์ธ์: CPU
Program ์์ฑ
- ์ค๋น: ํ๋ก์ธ์ ํ ๋น์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ๋์คํจ์น: ์ค์ ๋ก CPU๋ ์ํธ์์ฉ์ ํ๋ฉฐ ๋์๊ฐ๊ณ ์๋ ์ํ,
- ์คํ: CPU๋ฅผ ์ ์ ํ๋ฉฐ ๋ช ๋ น์ด ์คํ
- ์ข ๋ฃ:
- ๋๊ธฐ: ์ด๋ฒคํธ, ์ค๋ฅ๊ฐ ๋ฌ์ ๋ ์ฌ๊ธฐ์ ํด๊ฒฐ์ด ๋๋ฉด ๋ค์ ์คํ, ๋ง์ฝ ํด๊ฒฐ์ด ์ ๋์ด ๊บผ๋ฒ๋ฆฌ๋ฉด ์ข ๋ฃ
๐ก dispatch
When the CPU becomes available
(either because the current process has finished its execution or due to a time-sharing mechanism),
the operating systemโs scheduler selects a process from the ready queue to be dispatched or assigned to the CPU.
Dispatching is a crucial aspect of multitasking operating systems,
where multiple processes share the CPU in a time-sliced manner.
The goal is to efficiently utilize the CPU and provide the illusion of concurrent execution to users and applications.
โ thread
ํ๋ก์ธ์ค ๋ด ๋์์ ์งํ๋๋ ์์
๊ฐ๋
ํ๋์ ํ๋ก์ธ์ค๋ ์ต์ 1๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๋ค. (main ์ค๋ ๋)
JAVA์ public static void main
์ด ๋ฐ๋ก main thread
์ด๊ธฐ์๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ๋ฒผ์์ ๋ฐ๋ก ์ค๋ ๋๊ฐ ์์ด๋ ํ๋ก์ธ์ค๊ฐ ์ง์ CPU๋ ์ํธ์์ฉํ๋ฉฐ ์คํ๋์๋๋ฐ,
์ด์ ๋ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ณ ๋ณต์กํด์ ธ์
ํ๋ก์ธ์ค๋ฅผ ์๊ฐ ์กฐ๊ฐ์ ๊ด๋ฆฌ => ์ค๋ ๋
single threaded process
- ํ๋ก์ธ์ค๋ 1๊ฐ, ๋ฐ๋ก main ์ค๋ ๋
- ํ์ด 2๊ฐ
multi threaded process
- main ์ค๋ ๋ + child thread
- ํ์ด 4๊ฐ! ํจ์จ์ด ๋ ์ข๋ค.
โ CPU์ process ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
๐ค ์๋ฆฌ์ฌ๊ฐ ์๋ฆฌ ์ฌ๋ฌ๊ฐ์ง ํ๋ ์ํฉ์ ๊ฐ์ ํด ๋ณด์.
CPU๊ฐ ์ผ์ ๋ชปํ๋ค๋ ๊ฒ: ์์ฐจ์ ํ๋ก๊ทธ๋จ
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ํ๊บผ๋ฒ์ ์คํํ๋ ค๊ณ ํ๋๋ฐ,
์ฒซ ๋ฒ์จฐ ํ๋ก๊ทธ๋จ์ด ๋๋ ๋๊น์ง ๋๋จธ์ง๋ ๊ธฐ๋ค๋ ค์ผโฆ
๋๋ฆฌ๊ณ ํ๊บผ๋ฒ์ ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋ ค๋ฉด ์ํฐ์ง!!CPU๊ฐ ์ผ์ ํจ์จ์ ์ผ๋ก ํ๋ค๋ ๊ฒ: ๋ณํ ์ฒ๋ฆฌ
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๊ณผ์ ์ ๋๋ฉฐ ์กฐ๊ธ์ฉ ์ฒ๋ฆฌ,
์ด๊ฒ ํ๋ค๊ฐ ์กฐ๊ธ ์งฌ๋ด์ ๋ค๋ฅธ ๊ฒ๋ ํ๊ณ ~
๐๐ป ๋ณํ ์ฒ๋ฆฌ concurrency
Context Switching: ์ฌ๋ฌ ๊ฐ์ง context๋ฅผ ์กฐ๊ธ ์กฐ๊ธ์ฉ ์ํํ๋ค.
CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ง ์ผ์ ์กฐ๊ธ์กฐ๊ธ์ฉ ์ฒ๋ฆฌ
โก๏ธ ๋ณด๋ ์ฌ๋ ์
์ฅ์์๋ ๋์์ ์ฌ๋ฌ ์ผ์ ์ฒ๋ฆฌํ๋ค๊ณ ์๊ฐ
ํ๋ก๊ทธ๋จ๋ค์ด โ์ค๋นโ ์ํ์๋ค๊ฐ CPU์ ์ ์ ํด โ์คํโ 0.1์ด ๋์ ํ ํ ๋ค์ ํ๋ก๊ทธ๋จ์๊ฒ CPU์ฃผ๊ณ โฆ
ํฌ๋กฌ 0.1์ด ์ด๊ณ , ๊ทธ ๋ค์ ๊ฒ์ 0.5์ด ์คํ, ๊ทธ ๋ค์ ์์
์ฑ 0.1์ด ์คํโฆ์ด๋ฐ์์ผ๋ก ๋ฐ๋ณตํด ๋น์ทํ ์๊ฐ๋์ ํฌ๋กฌ๋ ์ด๊ณ , ์์
์ฑ๋ ์ด๊ณ ๊ฒ์๋ ์คํํ๊ณ .
๐๐ป ๋ณ๋ ฌ ์ฒ๋ฆฌ Parallelism
๋์ ๋ ์จ์ ์๋ฆฌ์ฌ๋ฅผ ๋ ๋ง์ด ๊ณ ์ฉ โก๏ธ CPU ์ฝ์ด๊ฐ ์ฌ๋ฌ๊ฐ โก๏ธ multicore
๊ฐ ์ฝ์ด๊ฐ ์ญํ ์ ํ๋์ฉ ๋งก์์ ๋ด๋น.
Parallel Programming https://soheeparklee.github.io/posts/OS-parallel/
๐ก ์ค๋ ๋๋ฅผ ์ด์ฉํ ๋ฉํฐ ํ๋ก์ธ์ฑ + ๋น ์์ฐจ์ ๋ฐฉ์
๋ณ๋ ฌ ์ฒ๋ฆฌ ์ข์๋ฐ, ๊ทผ๋ฐ ์ผ ๋๋ด๊ณ ์ฌ๊ณ ์๋ ์ฝ์ด๋์? ๋นํจ์จ์ ์ด์ง ์๋์?
ํ๋์ ์ฝ์ด๊ฐ ๋ค๋ฅธ ์ผํ๋ ์ฝ์ด๋ณด๋ค ์ผ์ด ๋จผ์ ๋๋๋ฉด, ์ผํ๋ ์ฝ์ด์ ์ค๋ ๋๋ฅผ ๊ฐ์ ธ์์ ์คํ.
ํฌ๋กฌ ์ฑ ์ฌ๋ ์ฝ์ด ์ผ ๋๋๋ฉด, ์๋์ฐ ์
๋ฐ์ดํธ ํ๋ ์ฝ์ด์ ์ค๋ ๋ ๊ฐ์ ธ์์ ๊ฐ์ด ๋์์ค.
์ฝ์ด๊ฐ ์ค๋ ๋๋ฅผ ๋๋์ด ๊ฐ์ง๊ณ , ์ฝ์ด๊ฐ ์ ๋นํ ๋ณํ ์ฒ๋ฆฌ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ชจ๋ ํ๋ฉด์ ์ค๋ ๋ ๋จ์๋ก ์ผํ๋ค.
โ Shell, Terminal
terminal์ ํตํด shell์ ์ด์ด ์คํ์ํจ๋ค.
โ process ๊ด๋ จ linux ๋ช ๋ น์ด
ํ๋ก์ธ์ค๋ค์ ์ปค๋์ ์ํด ๊ตฌ์กฐํ ๋ ํํ๋ก ์ ์ง๋๊ธฐ ์ํด PID๋ผ๋ ํ๋ก์ธ์ค ID์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ps
์์คํ
์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค ์ถ๋ ฅ
ps aux
ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณด๊ธฐ ์ํด์
while true; do echo "hello; sleep3; done
์ง์ shell ๋ช
๋ น์ด ์คํํ๊ธฐ
CTRL C
ํ๋ก์ธ์ค ์ข
๋ฃ
CTRL Z
ํ๋ก์ธ์ค ์ผ์ ์ ์ง
fg %1
ํ๋ก์ธ์ค ๋ค์ ์คํ(์ฌ๊ธฐ์ 1์ ํ๋ก์ธ์ค ๋๋ฒ)
jobs
๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ์ถ๋ ฅํด์ค๋ค. ํ๋ง๋๋ก, ๋ด๊ฐ ๋ด๋ฆฐ ๋ช
๋ น์ด ์ถ๋ ฅํด ์ค.
โ terminal ๋ช ๋ น์ด
pwd
๋ ์ง๊ธ ์ด๋ ์์ด? ๋ด ์์น ๋งํด์ค
cd
๋ ์ด๋ํ ๋
cd cd /Users/sohmac/Documents
Documents ๋ก ์ด๋ํ ๋
ls
์ด ํด๋ ์์ ์๋ ํ์ผ ๋ค ๋งํด๋ด
javac HelloWorld.java
HelloWorld.java ์ปดํ์ผ ํด ์ค, ๊ทธ ๊ฒฐ๊ณผ HelloWorld.class ๋ง๋ค์ด์ง๋ค.
java HelloWorld
HelloWorld.class์ ์คํํด์ค.