Elasticsearch๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•˜๋‹ค ๋ณด๋ฉด ํ•ญ์ƒ ๋ณด๋Š” ์—๋Ÿฌ๋“ค์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

 1) root ๊ณ„์ •์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ

 2) openfiles, max process ๊ฐ’์„ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ณ 

 3) swappiness ๊ฐ’ ์„ค์ • ๋ณ€๊ฒฝ ์š”์ฒญ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•œ Max user processes Error

๊ทธ ์ค‘์— elasticsearch๋Š” openfiles์™€ max process๋Š” ์ตœ์†Œ 65535๋กœ ์„ค์ •ํ•˜๋ผ๋ฉฐ, ์ปค๋„์—์„œ ํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์„ค์ •๋ณด๋‹ค ํฐ ๊ฐ’์„ ์š”๊ตฌํ•˜๋Š”๋ฐ์š”,

์˜ค๋Š˜์€ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ๊ฐ€๋ฅดํ‚ค๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์„ค์ •๋œ ๊ฐ’ ์ด์ƒ์ด ๋˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. Max user processes

Max user processes์˜ ์˜๋ฏธ๋Š” ํ•˜๋‚˜์˜ ๊ณ„์ •์—์„œ ์ตœ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” process์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. OS์—์„œ์˜ ํ™•์ธ์€

# ulimit -a (sofe ulimit)

# ulimit -aH (hard ulimit)

์œ„ ๋ช…๋ น์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ์ œ ์„œ๋ฒ„์˜ ์„ค์ • ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

max user processes

๊ทธ๋Ÿผ ์•„๋ž˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์„ค์ •๋œ max user processes์˜ ๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4000๊ฐœ Thread ์ƒ์„ฑ ํ›„ ์œ ์ง€

๋Œ€๋žต์ ์ธ ์ฝ”๋“œ์˜ ๋‚ด์šฉ์€ HTTP ์š”์ฒญ์ด ์˜ค๋ฉด ๋น„๋™๊ธฐ๋กœ 4์ฒœ๊ฐœ์˜ Thread๋ฅผ ๋™์‹œ์— ์ƒ์„ฑํ•˜๊ณ  20๋ถ„๊ฐ„ ์œ ์ง€ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ Thread๋ฅผ ๋Š˜๋ ค๋ณด๋ฉด,

Thread ์ƒ์„ฑ ์ค‘ OOM ๋ฐœ์ƒ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ ulimit -a ๋ช…๋ น์˜ max user processes ๊ฒฐ๊ณผ์™€ ๊ฐ™์ด ec2-user ๊ณ„์ •์€ 1024๊ฐœ๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, OOM ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ ec2-user ๊ณ„์ •์—์„œ๋Š” ์‰˜ ๋ช…๋ น์–ด ์ž…๋ ฅ ๋“ฑ ์–ด๋–ค ์ž‘์—…๋„ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

<๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ด…๋‹ˆ๋‹ค.>

 

 

2. Open files

๋‹ค์Œ์€ Open files์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋‚˜ ์„ธ์…˜(์†Œ์ผ“)๋“ค์„ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฐ’์˜ ์„ค์ •์€ ์„œ๋ฒ„์—์„œ์˜ Connection์—ฐ๊ฒฐ ์ž‘์—…์— ๋งค์šฐ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด ๋ฉ๋‹ˆ๋‹ค.

(์„ค์ • ๊ฐ’์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๋ฆฌ๋ˆ…์Šค์—์„œ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์–ด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์ด๋‚˜ Connection ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ!)

๊ทธ๋Ÿผ ์†Œ์ผ“์„ open files ๊ฐ’ ๋ณด๋‹ค ๋งŽ์ด ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(1) Java ํ™˜๊ฒฝ TEST

 - RestTemplate๋กœ ์†Œ์ผ“ ์ƒ์„ฑ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„์—์„œ 20๋ถ„๊ฐ„ ์‘๋‹ต์„ ๋Œ€๊ธฐ ์‹œํ‚ต๋‹ˆ๋‹ค.

 - ์š”์ฒญ์„ ๋™์‹œ์— 1100๊ฐœ๋ฅผ ๋ณด๋‚ด open files๊ฐ€ 1024๋กœ ์ œํ•œ์ธ ์„œ๋ฒ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

   (๊ธฐ๋ณธ์ ์œผ๋กœ java, spring ๊ด€๋ จ file์ด ๋ช‡ ๊ฐœ ์˜คํ”ˆ๋ฉ๋‹ˆ๋‹ค.)

์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

connection ์†Œ์ผ“ ์ƒ์„ฑ ํ›„ ์‘๋‹ต ๋Œ€๊ธฐ Code

๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์š”์ฒญ์„ ๋ณด๋‚ผ API ์š”์ฒญ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

API ์š”์ฒญ ์‰˜

์‰˜์„ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด

openfiles ๊ฐœ์ˆ˜๊ฐ€ 1024 ๊ฐ’์„ ๋„˜์–ด 1516๊ฐœ ๊นŒ์ง€ ์—ด๋ฆผ!

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์†Œ์ผ“์ด 1024๊ฐœ๊ฐ€ ๋„˜์–ด๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ๋” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2048๊ฐœ ๊นŒ์ง€ ์ƒ์„ฑ๋œ ๋ชจ์Šต

์ด์ œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ๋”ฑ 2048๊ฐœ ๊นŒ์ง€๋งŒ ์—ด๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, openfiles์˜ ๊ฐ’์€ soft๋กœ ์„ค์ •๋œ ๊ฐ’์ด ์•„๋‹Œ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ Hard ์˜ต์…˜ ๊ฐ’๊นŒ์ง€ file์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ…! ์•Œ๊ณ  ๋ณด๋‹ˆ java ํ™˜๊ฒฝ์—์„œ๋Š” hard ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ๋งž์ง€๋งŒ Python์—์„œ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

 

(2) Python ํ™˜๊ฒฝ TEST

๋นจ๊ฐ„ ๋ฐ•์Šค : 1024๊ฐœ์˜ ์—ด๋ฆฐ ํŒŒ์ผ ์ƒ์„ฑ / ํŒŒ๋ž€ ๋ฐ•์Šค : 1024๊ฐœ ์ดํ›„ ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ์—ด์–ด๋ณธ๋‹ค

์œ„ ์ฒ˜๋Ÿผ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ file์„ ์ž„์˜๋กœ ์—ด์–ด๋ด…๋‹ˆ๋‹ค. 1021๊ฐœ ๊นŒ์ง€๋Š” ํŒŒ์ผ์ด ๋ฌธ์ œ์—†์ด ์—ด๋ฆฌ์ง€๋งŒ(stdin, stdout, stderr ํ‘œ์ค€ ์ž…/์ถœ๋ ฅ 3๊ฐœ ์ œ์™ธ)

์ดํ›„๋กœ ์—ฌ๋Š” ํŒŒ์ผ์—์„œ๋Š” Too many open files ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!

 

(3) Java์™€ Python ํ™˜๊ฒฝ์˜ ์ฐจ์ด?

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ Java๋Š” hard ์˜ต์…˜๊นŒ์ง€ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜๊ณ  Python์€ soft ๊ฐ’๊นŒ์ง€ ์˜คํ”ˆ๋จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด strace ๋ช…๋ น์„ ํ†ตํ•ด java ํ”„๋กœ์„ธ์Šค ๋™์ž‘์„ ์ถ”์ ํ•ด๋ณด๋ฉด

kernel 5.15ver์—์„œ ํ…Œ์ŠคํŠธ (์ด์ „ ๋ฒ„์ „์€ prlimit64 ํ•จ์ˆ˜ ๋Œ€์‹  getrlimit, setrlimt ํ•จ์ˆ˜ ์‚ฌ์šฉ)

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ java ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋จ๊ณผ ๋™์‹œ์— prlimit64๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ rlim_cur=1024๊ฐ’์„ rlim_max=2*1024(hard limit) ๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ฐํ˜€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

JDK์—์„œ MaxFDLimit ์˜ต์…˜ ํ™œ์„ฑํ™” (๊ธฐ๋ณธ๊ฐ’)

๊ทธ ์ด์œ ๋Š” ์„ค์น˜๋œ JVM์—์„œ MaxFDLimit ์˜ต์…˜์„ ํ†ตํ•ด limit์„ ์˜ฌ๋ ค์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! (๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ ์˜ต์…˜)

์ฆ‰, ๋ฆฌ๋ˆ…์Šค OS์—์„œ๋Š” JDK ์‹คํ–‰ ์‹œ ์ปค๋„์—์„œ prlimit64 ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ limit ์‚ฌ์ด์ฆˆ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

3. ์ •๋ฆฌ

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ๋™์‹œ์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ ์ˆ˜๋Š” Max user processes๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ์†Œ์ผ“ ํ†ต์‹ (API๋‚˜ ๋ชจ๋“  Connection)์€ open files ์˜ต์…˜์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.

  -> JAVA์—์„œ๋Š” JDK ์ฝ”๋“œ์—์„œ ์ž๋™์œผ๋กœ soft limit๊ฐ’์€ hard limit๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธ ๋จ

  -> Python์€ soft limit ๊ฐ’์—์„œ ์ œํ•œ์ด ๊ฑธ๋ฆผ

 

๋‚˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ, Max user processes์™€ open files์˜ ์ ์ ˆํ•œ ๊ฐ’์„ ์ฐพ์•„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

<๊ณต๋™์ €์ž>

https://giraffe-lee.tistory.com/7

 

<์ฐธ์กฐ>

https://techblog.woowahan.com/2569/

 

IPC๋ž€?

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
์ด์ฒ˜๋Ÿผ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด IPC ํ†ต์‹ ์ด๋‹ค.
ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ์„ค๋น„๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

  • IPC = Inter-Process Communication
  • ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„

  • ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ชจ๋‘ ์œ ์ €๊ณต๊ฐ„(user-space, user-mode)์—์„œ ๊ฐœ๋ณ„๋กœ OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰์ค‘์— ์žˆ๋‹ค
  • ๋งํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ์„œ๋กœ๊ฐ„์— ํ†ต์‹ ์ด ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ปค๋„ ์˜์—ญ(kernel-space, kernel-mode)์—์„œ IPC(Inter-Process Communication)๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์— ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค
  • ์ด์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ๊ธฐ์ˆ ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

 

 

 

IPC์˜ ์ข…๋ฅ˜


PIPE (ํŒŒ์ดํ”„)

  • ํŒŒ์ดํ”„๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค
  • ๋ถ€๋ชจ ์ž์‹ ๊ฐ„์— ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค
  • ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ PIPE์˜ ํŠน์ง• ๋•Œ๋ฌธ์— Half-Duplex(๋ฐ˜์ด์ค‘) ํ†ต์‹  ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค
  • PIPE๋Š” ๋ฐ˜์ด์ค‘ ํ†ต์‹ ์ด๊ธฐ์— ํ•˜๋‚˜์˜ ํ†ต์‹ ์„ ๋กœ๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋งŒ์•ฝ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ฆ‰ ์†ก/์ˆ˜์‹ ์„ ๋ชจ๋‘ ํ•˜๊ธฐ ์›ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค
  • read()์™€ write()๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ block mode๋กœ ์ž‘๋™๋˜๊ธฐ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ read ๋Œ€๊ธฐ์ค‘์ด๋ผ๋ฉด read๊ฐ€ ๋๋‚˜๊ธฐ์ „์—๋Š” write๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค

์žฅ์ 

  • PIPE๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•œ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์ฝ๊ธฐ๋งŒํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์“ฐ๊ธฐ๋งŒ ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์ ํ•ฉ

๋‹จ์ 

  • Full-Duplex(์ „์ด์ค‘) ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด PIPE๋ฅผ ๋‘๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์ด ๊ฝค๋‚˜ ๋ณต์žกํ•ด ์งˆ ์ˆ˜ ์žˆ๋‹ค (๊ตณ์ด ์ „์ด์ค‘์„ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด PIPE๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค)
  • buffer๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๊ธฐ๋•Œ๋ฌธ์— overflow ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค (read์ฒ˜๋ฆฌ๋ฅผ ๋นจ๋ฆฌ๋นจ๋ฆฌ ํ•ด์ค˜์•ผํ•œ๋‹ค)
  • ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ๊ฐ€๋Šฅ

 

 

 

Named PIPE (์ต๋ช… ํŒŒ์ดํ”„)

  • Linux๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์ผ(fd)๋กœ ํ†ตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฐœ๋…์„ ๊ธฐ์–ตํ•˜๊ณ  ๋ณด์ž
  • Named PIPE๋Š” ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ๋ณดํ†ต PIPE๋Š” ๋ถ€๋ชจ์ž์‹๊ฐ„์— ์‚ฌ์šฉํ•˜๊ณ  Named PIPE๋Š” ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • Named PIPE๋Š” ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
  • mkfifo๋ฅผ ํ†ตํ•ด Named PIPE๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, mkfifo๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ด๋ฆ„์ด ๋ช…๋ช…๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง

์žฅ์ 

  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท

๋‹จ์ 

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ, ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ , read-only or write-only
  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท
PIPE ์™€ Named PIPE

๊ณตํ†ต์ 
๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ „๋‹ฌ๋˜๋Š” ํ๋ฆ„์„ ๊ฐ€์ง„๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง„๋‹ค

์ฐจ์ด์ 
Named PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 
PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์—†๋‹ค
(๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— PIPE๋Š” ์ต๋ช… PIPE๋ผ ๋ถ€๋ฅธ๋‹ค)


์ถ”๊ฐ€ ์„ค๋ช…
์ต๋ช… ํŒŒ์ดํ”„(PIPE)๋Š” ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•Œ๊ณ , ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•„๋Š” ๊ฒฝ์šฐ
๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ํ”„๋กœ์„ธ์Šค๊ฐ„์— ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ํŒŒ์ดํ”„์— ์ด๋ฆ„์„ ์ค„ ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ์ด๋‹ค

๋ฐ˜๋ฉด, ์ž์‹๊ณผ ๋ถ€๋ชจ ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ pipe๋ฅผ ์ด์šฉํ•ด์„œ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒํŒ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๊ณผ ๋Œ€ํ™”๋ฅผ ํ•˜๋ ค๋ฉด ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•˜๋“ฏ pipe์— ์ด๋ฆ„์„ ์ฃผ์–ด์ ธ์•ผ ํ•œ๋‹ค, ๊ทธ๊ฒƒ์ด Named PIPE๋ฅผ ๋งŒ๋“  ์ด์œ ์ด๋‹ค

 

 

 

 

Message Queue (๋ฉ”์‹œ์ง€ ํ)

  • FIFO(First-In First-Out, ์„ ์ž…์„ ์ถœ) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ํ†ต์‹ ์„ค๋น„๋กœ ์ปค๋„์—์„œ ๊ด€๋ฆฌ
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์œผ๋กœ๋ณด๋ฉด ์œ„์— Named PIPE์™€ ๋™์ผํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ฐจ์ด์ ์ด๋ผ๋ฉด, Named PIPE๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด๋ผ๋ฉด Message Queue๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋ผ๋Š” ์ 
  • ์–ด๋””์„œ๋‚˜ ๋ฌผ๊ฑด์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์™€ ๊ฐ™๋‹ค ๋ณด๋ฉด ๋œ๋‹ค
  • Message Queue์— ์“ธ ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™ํž˜์œผ๋กœ์จ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™ใ…‡์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

์žฅ์ 

  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ์— ๋ฐฉ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ํ์— ๋„ฃ์€ ํ›„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค
  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๋ฐ ๊ฒฝ์Ÿ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • (๋น„๋™๊ธฐ, ๋น„๋™์กฐ, ํƒ„๋ ฅ์„ฑ, ๊ณผ์ž‰, ํ™•์žฅ์„ฑ์ด ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋‹ค๋ฅธ ํฌ์ŠคํŠธ ์ฐธ์กฐํ•ด๋„ ์ถฉ๋ถ„ํ•  ๊ฑฐ ๊ฐ™๋‹ค)

๋‹จ์ 

  • ๋ฉ”์‹œ์ง€๊ฐ€ ์ •๋ง ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค
  • ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋‚˜์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์ผ์ˆ˜๋ก ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ด ํ•„์š”ํ•˜๋‹ค

 

 

 

 

Shared Memory (๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ)

  • ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,
  1. ํ†ต์‹ ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ• (ex. PIPE, Named PIPE, Message Queue, ...)
  2. ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ , ์ฆ‰ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ (ex. Shared Memory, ...)
    • ์ฆ‰, ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ์„ค๋น„์ด๋‹ค
    • Shared Memory(๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ)๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด ์ฃผ๊ฒŒ๋˜๊ณ , ์ดํ›„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฑด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ค‘๊ฐœ์ž ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  IPC์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค
    • (๋‹ค์‹œ๋งํ•ด, ์ปค๋„๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    ๋‹จ์ 
    • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผํ•˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†๋‹ค
    • ์ปค๋„ ์„ค์ •์— ์ข…์†์ ์ด๊ธฐ์— ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ์ปค๋„์—์„œ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค

 

 

 

Semaphore (์„ธ๋งˆํฌ์–ด)

  • PIPE, Named PIPE, Message Queue์™€ ๊ฐ™์€ ๋‹ค๋ฅธ IPC ์„ค๋น„๋“ค์ด ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด,
  • Semaphore๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š”๋ฐ ๊ทธ ๋ชฉ์ ์ด ์žˆ๋‹ค
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๊ณต์œ ๋œ ์ž์›์— ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ ๋‹จ์ง€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”๊ฒƒ์ด ์„ธ๋งˆํฌ์–ด(Semaphore) ์ด๋‹ค
  • ์ฆ‰, ์šด์˜ ์ฒด๊ณ„ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ๋‚ด์—์„œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘์†์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์‹ ํ˜ธ
  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ์„ธ๋งˆํฌ์–ด๋ฅผ ์„ธ์›Œ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ค๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ํ•ด์ œ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ
๋ฎคํ…์Šค Mutex ์„ธ๋งˆํฌ์–ด Semaphore
๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ
์ƒํƒœ๊ฐ€ 0, 1 ๋‘๊ฐœ (์ด์ง„ ์„ธ๋งˆํฌ์–ด) ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
๋ฎคํ…์Šค ์†Œ์œ  ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฎคํ…์Šค๋ฅผ ํ•ด์ œ ์„ธ๋งˆํฌ์–ด๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์„ธ๋งˆํฌ์–ด ํ•ด์ œ
ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์ข…๋ฃŒ ๋  ๋•Œ, ์ž๋™ Clean ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌ
๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์ง ํ•˜๋‚˜์ผ ๋•Œ ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ
(ํ•œ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ํ™”์žฅ์‹ค์— ๊ฐ”์„๋•Œ ํ™”์žฅ์‹ค ์นธ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ํ™”์žฅ์‹ค ํ•œ ์นธ์— ๋Œ€ํ•ด ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด ๋ฎคํ…์Šค์ด๊ณ  ํ™”์žฅ์‹ค ์ž์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋œ๋‹ค)

์žฅ์ 

  • ๋งŽ์€ Thread๋“ค์€ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์„ ํ—ˆ๋ฝ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์—์„œ ์ถฉ๋Œ์ด ๋‚˜์ง€ ์•Š๋Š”๋‹ค

๋‹จ์ 

  • ๋งŽ์€ Thread๋“ค์€ block์„ ๋‹นํ•œ๋‹ค. ์ฆ‰, CPU๊ฐ€ ๊ฐ€๋งŒํžˆ waitingํ•˜๋Š” ์‹œ๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

Memory Map (๋ฉ”๋ชจ๋ฆฌ ๋งต)

๋ฉ”๋ชจ๋ฆฌ ๋งต๋„ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ธก๋ฉด์—์„œ๋Š” ๋น„์Šทํ•˜๋‹ค

    • ์ฐจ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๋งต์€ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ 
    • ํŒŒ์ผ(fd)๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์‹œ์Šคํ…œ์˜ ์ „์—ญ์ ์ธ ์ž์›์ด๋ฏ€๋กœ ์ฆ‰, ๋ชจ๋‘ ๊ณต์œ ํ• ์ˆ˜ ์žˆ๋Š” ์ž์›์ด๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ฏธ ์˜ฌ๋ผ์™€์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ IO์— ๋น„ํ•ด ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค
    • ๋น„๋™๊ธฐ IO๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ๋ฌธ์ œ๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค
    ๋‹จ์ 
    • ์ผ๋ฐ˜ ํŒŒ์ผ IO์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌ
    • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์˜ค๋žซ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘˜ ๊ฒƒ์ธ์ง€ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์—†๋‹ค

 

 

 

 

 

Socket (์†Œ์ผ“, UDS = Unix Domain Socket)

  • ๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค
  • ์„œ๋ฒ„๋‹จ์—์„œ๋Š” bind, listen, accept ์ง„ํ–‰ํ•ด ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค
  • ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ๋Š” connect์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ ๋œ ํ›„์—์„œ๋Š” socket์— send ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.
  • ์—ฐ๊ฒฐ์ด ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ close()๋กœ clear ํ•œ๋‹ค
  • ์ฆ‰, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์ง„ํ–‰ํ•œ๋‹ค

์žฅ์ 

  • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค
  • Internet Socket์ธ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Unix Domain์†Œ์ผ“์€ PIPE์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฐ™์€ ์‹œ์Šคํ…œ์—์„œ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ํŒจํ‚ท์ด ์œ ์‹ค๋˜๊ฑฐ๋‚˜, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊ฑฐ๋ผ ์žฅ๋‹ด ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฒ”์šฉ์ ์ธ IPC๋กœ์จ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ํŒจํ‚ท ๋‹จ์œ„๋กœ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

๋‹จ์ 

  • Internet UDP์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค (๋‹ค์ค‘์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค)

 

 

 

 

 

 

 


References.

 

link1 link2

 

 

 

์‹œ์Šคํ…œ ์ฝœ์ด๋ž€?

์šด์˜ ์ฒด์ œ์˜ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด,
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ปค๋„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๋ณดํ†ต C๋‚˜ C++๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ๋“ค์€
์ง์ ‘ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
๊ณ ๊ธ‰ API๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.



โœ” ์‹œ์Šคํ…œ ์ฝœ์€ ์™œ ํ•„์š”ํ• ๊นŒ?


์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ '์‘์šฉํ”„๋กœ๊ทธ๋žจ'์ด๋‹ค.

 

์œ ์ €๋ ˆ๋ฒจ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์œ ์ €๋ ˆ๋ฒจ์˜ ํ•จ์ˆ˜๋“ค ๋งŒ์œผ๋กœ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ์ปค๋„(kernel)์˜ ๋„์›€์„ ๋ฐ˜๋“œ์‹œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ€ํ‘œ๋˜๋Š” ์œ ์ € ํ”„๋กœ์„ธ์Šค(User Process)์—์„œ ์œ ์ €๋ชจ๋“œ์—์„œ๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

๋ฐ˜๋“œ์‹œ kernel์— ๊ด€๋ จ๋œ ๊ฒƒ์€ ์ปค๋„๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•œ ํ›„์—์•ผ, ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ถŒํ•œ์ด ์ƒ๊ธด๋‹ค. ์ปค๋„ ๋ชจ๋“œ๋ฅผ ํ†ตํ•œ ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

โœ” ์‹œ์Šคํ…œ ์ฝœ์˜ ์ปค๋„ ๋ชจ๋“œ์™€ ์‚ฌ์šฉ์ž ๋ชจ๋“œ


1. ์ปค๋„ ๋ชจ๋“œ
ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ์šด์˜์ฒด์ œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด, ํ˜„์žฌ ์šด์˜์ฒด์ œ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ CPU๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ผ๊ณ  ํ•œ๋‹ค.
2. ์‚ฌ์šฉ์ž ๋ชจ๋“œ
ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์กด์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ CPU๊ฐ€ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ผ๋ฐ˜ ๋ช…๋ น : ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋ฃŒ๋ฅผ ์ฝ์–ด์™€์„œ CPU์—์„œ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์“ฐ๋Š” ์ผ๋ จ์˜ ๋ช…๋ น๋“ค. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. (์‚ฌ์šฉ์ž ๋ชจ๋“œ)
  • ํŠน๊ถŒ ๋ช…๋ น : ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ช…๋ น์œผ๋กœ ์ž…์ถœ๋ ฅ ์žฅ์น˜, ํƒ€์ด๋จธ ๋“ฑ ๊ฐ์ข… ์žฅ์น˜๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ช…๋ น.(์ปค๋„ ๋ชจ๋“œ)
  • CPU ๋‚ด์— ๋ชจ๋“œ ๋น„ํŠธ๋ฅผ ๋‘์–ด ๋‘ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ๋””์Šคํฌ์˜ ํŒŒ์ผ์„ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, ํ™”๋ฉด์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ํŠน๊ถŒ ๋ช…๋ น์˜ ์ˆ˜ํ–‰์„ ํ•„์š”๋กœ ํ•œ๋‹ค.
  • ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์Šค์Šค๋กœ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์šด์˜์ฒด์ œ์—๊ฒŒ ํŠน๊ถŒ ๋ช…๋ น์˜ ๋Œ€ํ–‰์„ ์š”์ฒญํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ์š”์ฒญ์€ ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (์ฆ‰, ํŠน๊ถŒ ๋ช…๋ น์˜ ๋Œ€ํ–‰์„ ์š”์ฒญํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ ์˜์—ญ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.)

 

 

 

 

โœ” ๋””์Šคํฌ์—์„œ ์ž๋ฃŒ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ๊ฐ€์ •!


  1. ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์Šคํ…œ ์ฝœ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์šด์˜์ฒด์ œ๋Š” ์ž์‹ ์˜ ์ปค๋„ ์˜์—ญ์— ์ •์˜๋œ ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  2. CPU๊ฐ€ ์ปจํŠธ๋กค ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์„ธํŒ…ํ•ด ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋ผ๊ณ  ๋ช…๋ นํ•œ๋‹ค.
  3. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ์ž์‹ ์˜ ๋กœ์ปฌ ๋ฒ„ํผ์— ์ €์žฅํ•œ๋‹ค.
  4. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CPU์—๊ฒŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ํ†ต์ง€ํ•œ๋‹ค.

ํ†ต์ƒ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ฝœ์€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์‹œ์Šคํ…œ ์ฝœ์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ open() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, ์šด์˜์ฒด์ œ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ ์ฝœ์ด ๋ฐœ์ƒํ•  ๋•Œ, ์ข€ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์šด์˜์ฒด์ œ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€๋žต 3๊ฐ€์ง€ ์ •๋„์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ CPU ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด์— ์ „๋‹ฌํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ CPU ๋‚ด์˜ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐฏ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์ „๋‹ฌ๋œ๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )
  3. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์Šคํƒ์œผ๋กœ ์ „๋‹ฌ๋  ์ˆ˜๋„ ์žˆ๋‹ค.\

* 2,3๋ฒˆ์€ ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋‚˜ ๊ธธ์ด์— ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡๋ช‡ ์šด์˜์ฒด์ œ์—์„œ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

 

 

 

โœ” ์‹œ์Šคํ…œ ์ฝœ์˜ ์œ ํ˜•


5๊ฐ€์ง€์˜ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  1. ํ”„๋กœ์„ธ์Šค ์ œ์–ด : ํ”„๋กœ์„ธ์Šค ํŠน๊ถŒ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ง์ ‘์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅ
  2. ํŒŒ์ผ ์กฐ์ž‘ : ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ๊ด€๋ฆฌ ๋“ฑ
  3. ์žฅ์น˜ ๊ด€๋ฆฌ : ์žฅ์น˜ ์š”๊ตฌ ๋ฐ ์žฅ์น˜ ํ•ด์ œ, ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์žฌ๋ฐฐ์น˜ ๋“ฑ
  4. ์ •๋ณด ์œ ์ง€ : ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ์˜ ์„ค์ •๊ณผ ํš๋“, ์‹œ์Šคํ…œ ์ž๋ฃŒ์˜ ์„ค์ •๊ณผ ํš๋“
  5. ํ†ต์‹  : ํ†ต์‹  ์—ฐ๊ฒฐ์˜ ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐ, ๋ฉ”์‹œ์ง€์˜ ์†ก์ˆ˜์‹ , ์ƒํƒœ ์ •๋ณด ์ „๋‹ฌ ๋“ฑ

 

 


Reference.

link1 link2 

์ฃผ๋ณ€์žฅ์น˜์™€ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋Š” CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ๋ŸฝํŠธ๋ผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š”???
๊ทธ ์ด์œ ๋Š” ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ์ด CPU ๋ช…๋ น ์ˆ˜ํ–‰์†๋„๋ณด๋‹ค ํ˜„์ €ํžˆ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
CPU๋Š” ๋น„์‹ผ๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ CPU๊ฐ€ ์‰ฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ
์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋ผ๊ณ  ์‹œํ‚ค๋Š” ๊ฒƒ์ธ๋ฐ,
์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ CPU๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํ•ด๋‹น ์ž‘์—…์„ ์ด์–ด๊ฐ€๊ฒŒ ํ•œ๋‹ค.

์ด๋•Œ CPU์—๊ฒŒ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์ธํ„ฐ๋ŸฝํŠธ์ด๋‹ค.

 

- ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๊ฐ€ CPU์—๊ฒŒ ์–ด๋–ค ์‚ฌ์‹ค์„ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ CPU์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, CPU ๋‚ด์— ์žˆ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ์„ธํŒ…ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. (ํ”„๋กœ๊ทธ๋žจ์ด ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„์•ผ ํ•จ)

- CPU๋Š” ๋งค๋ฒˆ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌ๊ณ  ์žˆ๋Š” ๊ณณ์˜ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๋’ค, ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ง์ „์— ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์ด ์„ธํŒ…๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.

- ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉด CPU๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  ์šด์˜ ์ฒด์ œ์˜ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ธํ„ฐ๋ŸฝํŠธ๋Š” ํฌ๊ฒŒ ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ์™€ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. 

 

 

 

 

 

 

ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ


  • ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐ๋ŸฝํŠธ
  • ํ•˜๋“œ์›จ์–ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CPU์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ธํ„ฐ๋ŸฝํŠธ

 

ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ

1. ๊ธฐ๊ณ„๊ฒ€์‚ฌ ์ธํ„ฐ๋ŸฝํŠธ

      - ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘ ๊ฐ‘์ž‘์Šค๋Ÿฐ ์ •์ „์ด๋‚˜ ์ปดํ“จํ„ฐ ์ž์ฒด ๋‚ด์—์„œ ๊ธฐ๊ณ„์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

2. ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ

      - ์˜คํผ๋ ˆ์ดํ„ฐ๋‚˜ ํƒ€์ด๋จธ์— ์˜ํ•ด ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ

3. ์ž…์ถœ๋ ฅ ์ธํ„ฐ๋ŸฝํŠธ 

      - ์ž…์ถœ๋ ฅ์˜ ์ข…๋ฃŒ๋‚˜ ์ž…์ถœ๋ ฅ์˜ ์˜ค๋ฅ˜์— ์˜ํ•ด CPU์˜ ๊ธฐ๋Šฅ์ด ์š”์ฒญ๋˜๋Š” ๊ฒฝ์šฐ

4. ํ”„๋กœ๊ทธ๋žจ๊ฒ€์‚ฌ ์ธํ„ฐ๋ŸฝํŠธ 

      - ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ณดํ˜ธ๋œ ๊ธฐ์–ต๊ณต๊ฐ„ ๋‚ด์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋ฒ•์ ์ธ ๋ช…๋ น ์ˆ˜ํ–‰๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

 

 

 

 

์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ


  • ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์™ธ๋ถ€๊ฐ€ ์•„๋‹Œ CPU ๋‚ด๋ถ€์—์„œ ์ž์‹ ์ด ์‹คํ–‰ํ•œ ๋ช…๋ น์ด๋‚˜ CPU์˜ ๋ช…๋ น ์‹คํ–‰์— ๊ด€๋ จ๋œ ๋ชจ๋“ˆ์ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ํ”„๋กœ๊ทธ๋žจ ์ƒ์˜ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํŠธ๋žฉ ๋˜๋Š” ์˜ˆ์™ธ๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ํŠน๋ณ„ํ•œ ์„œ๋น„์Šค๋ฅผ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜
  • ๊ฐ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ, ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐœ์ƒ์‹œํ‚จ ํŠน๋ณ„ํ•œ ๋ช…๋ น์–ด์— ์˜ํ•ด ๋ฐœ์ƒ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

1. ์˜ˆ์™ธ ์ƒํ™ฉ(Exception)

  • ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ž๋™์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, CPU์˜ ์ œ์–ด๊ถŒ์„ ํš๋“ํ•ด ์ด ์ƒํ™ฉ์— ๋Œ€ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•œ๋‹ค.
  • ex) 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ, ์ž์‹ ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋„˜์–ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๋“ฑ
  • ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ ์ž์‹ ์˜ ์ฝ”๋“œ ์˜์—ญ์— ๊ฐ€์ง€๊ณ  ์žˆ์Œ

2. ์‹œ์Šคํ…œ ์ฝœ(System Call)

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋ ค ํ•  ๋•Œ, ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์˜ˆ์™ธ ์ƒํ™ฉ์€ ๋ชจ๋‘ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ CPU์˜ ์ œ์–ด๊ถŒ์ด ์šด์˜ ์ฒด์ œ์—๊ฒŒ ์ด์–‘๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š”๋ฐ ์ด ๊ณผ์ •์— ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ์„ธํŒ…ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํ›„ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฏ€๋กœ ์ด๋“ค๋„ ๋„“์€ ์˜๋ฏธ์—์„œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ์˜ ๋ฒ”์ฃผ์— ํฌํ•จ์‹œํ‚จ๋‹ค. 
๋‹จ์ง€ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฃผ์ฒด๊ฐ€ ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๊ฐ€ ์•„๋‹Œ ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฏ€๋กœ ์ด๋“ค์„ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

 

 

์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ฒ˜๋ฆฌ ๊ณผ์ •


A ํ”„๋กœ๊ทธ๋žจ์ด CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด A๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ๋ช…๋ น์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด๋†“๋Š”๋‹ค. ๊ทธ ํ›„, ์šด์˜ ์ฒด์ œ ๋‚ด๋ถ€ ์ฝ”๋“œ์ธ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‹ค์‹œ ๋Œ์•„์™€ A์˜ ์ด์ „ ์ž‘์—… ์ง€์ ๋ถ€ํ„ฐ ์ˆ˜ํ–‰์„ ๊ณ„์† ์ด์–ด๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋Š” ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?

 

-> ์ง„ํ–‰ ์ค‘์ด๋˜ A ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋Š” ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB: Process Control Block)์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋งˆ์น˜๋ฉด ํ”„๋กœ๊ทธ๋žจ A์˜ PCB์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ๋ณต์›์‹œ์ผœ ์›๋ž˜ ์ˆ˜ํ–‰ํ•˜๋˜ ์ผ์„ ์žฌ๊ฐœํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ 

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธํ„ฐ๋ŸฝํŠธ์— ๋Œ€ํ•ด ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฃจํ‹ด์˜ ์ฃผ์†Œ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”.
  • ์ผ์ข…์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

 

์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ

  • ์‹ค์ œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฃจํ‹ด์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ์šด์˜์ฒด์ œ ์ฝ”๋“œ ๋ถ€๋ถ„์—๋Š” ๊ฐ์ข… ์ธํ„ฐ๋ŸฝํŠธ ๋ณ„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ์ด๋ฏธ ํ”„๋กœ๊ทธ๋žจ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๋ถ€๋ถ„์„ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.

 

PCB

  • ์ปค๋„์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ณ ์œ ์˜ PCB๊ฐ€ ์žˆ๋‹ค.
  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ์ˆ˜ํ–‰์ค‘์ด์—ˆ๋Š”์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
    (์ˆ˜ํ–‰์ค‘์ด๋˜ memory ์ฃผ์†Œ, ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’, ํ•˜๋“œ์›จ์–ด ์ƒํƒœ ...)

 

 

 


Reference.

link1 link2 link3 

Process Address Space
ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋Š” ๊ฒƒ

 

 

ํ”„๋กœ์„ธ์Šค๋Š” CPU์— ์˜ํ•ด์„œ ์‹คํ–‰์ด ๋˜๊ณ  memory์— ์ €์žฅ์ด ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์ด memory์— ํ• ๋‹น(์ƒ์„ฑ)๋˜๋Š”๋ฐ, ํ• ๋‹น ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์€ CPU๊ฐ€ ํ•œ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ

Address Space์•ˆ์€ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Code, Data, Stack ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

1) Code(Text)

  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ๊ฐ€๋Š” ๋ถ€๋ถ„. ์ฆ‰, ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ(code)์˜์—ญ ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
  • ์ฝ”๋“œ์˜์—ญ์€ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ์ด ์—ฌ๊ธฐ์— ์ง€์ •๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ณ  ์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ Read-Only ๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.

2) Data

  • ํ”„๋กœ๊ทธ๋žจ์˜ **์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ**์ด๋‹ค.์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ๊ตฌ๋™๋˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • ์ „์—ญ๋ณ€์ˆ˜, static ๊ฐ’์„ ์ฐธ์กฐํ•œ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ํ•˜๊ณ  ๋‚˜๋ฉด Data ์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ๋ฐ”๋€๋‹ค.
  • ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
  • ์‹คํ–‰ ์ค‘๋„์— ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ด ์˜์—ญ์€ Read-Write๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.

(์ƒ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ํ‘œํ˜„๋˜์–ด์žˆ์ง€ ์•Š์ง€๋งŒ,) ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” Data ์˜์—ญ์— ์ €์žฅ๋˜๊ณ ,์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS(Block Stated Symbol)์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.

Q.data์˜์—ญ๊ณผ bss ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์˜์—ญ๋งŒ ์žก์•„์ฃผ๋ฉด ๋˜๊ณ  ๊ทธ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์œผ๋‚˜ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๊ทธ ๊ฐ’๋„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ bss ์˜์—ญ ๋ณ€์ˆ˜๋“ค์ด ๋งŽ์•„์ ธ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ฝ”๋“œ ์‚ฌ์ด์ฆˆ๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

 

3) Stack

  • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • Stack์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
  • ์›์‹œํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋œ๋‹ค.
  • Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œํžˆ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด stack ์˜์—ญ์„ ์ดˆ๊ณผํ•˜๋ฉด stack overflow ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.



Q. ์™œ Code ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‘์—ˆ๋‚˜?
Program์˜ Code๋Š” Program์ด ๋งŒ๋“ค์–ด์ง€๊ณ (์ปดํŒŒ์ผ๋˜๊ณ ) ๋‚˜์„œ๋Š” ๋ฐ”๋€” ์ผ์ด ์ „ํ˜€ ์—†๋‹ค. (๋”ฐ๋ผ์„œ Read Only)
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ ๋ช‡ ๊ฐœ์˜ Prcess๊ฐ€ ์‹คํ–‰๋˜๋”๋ผ๋„ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด Code ๋ถ€๋ถ„์€ ๋‹ค ๋˜‘๊ฐ™์€ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฐ™์€ Program์˜ Process์ผ ๊ฒฝ์šฐ Code ๋ถ€๋ถ„์„ ๊ณต์œ (Share)ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
Q. ์™œ Stack ๋ถ€๋ถ„๊ณผ Data ๋ถ€๋ถ„์„ ๋‚˜๋ˆ„์—ˆ๋‚˜? 
Stack ๊ตฌ์กฐ๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (ํ•˜๋‹จ ๋ถ€๊ฐ€ ๋ง‰ํ˜€์žˆ๊ณ  ์ƒ๋‹จ ๋ถ€๊ฐ€ ๋šซ๋ ค์žˆ๋Š” ๊ตฌ์กฐ)
๋”ฐ๋ผ์„œ ํ•œ ์ชฝ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ  ๊บผ๋‚ผ ๋•Œ๋Š” ์ตœ๊ทผ์— ์ง‘์–ด๋„ฃ์—ˆ๋˜ ๊ฒƒ ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ C์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด stack ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ „์—ญ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

 

<stack ๊ตฌ์กฐ>

main ํ•จ์ˆ˜๋ถ€ํ„ฐ ์‹คํ–‰๋˜๋ฉฐ 

์ฒ˜์Œ printf๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค ํ•จ์ˆ˜ func1 ์‹คํ–‰

ํ•จ์ˆ˜ func1 ์‹คํ–‰ ํ›„ main ์—์„œ ๋‹ค์‹œ printf๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•จ์ˆ˜ func2 ์‹คํ–‰

tunc2์—์„œ printf๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  func3์‹คํ–‰

 

์ด๋Ÿฌํ•œ stack ๊ตฌ์กฐ๋กœ ์ธํ•ด data ๋ถ€๋ถ„๊ณผ stack ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„์–ด ๋‘” ๊ฒƒ์ด๋‹ค.
์ „์—ญ ๋ณ€์ˆ˜(global variables)๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ

 

 


Reference.

link1 link2 link3

Program : ์–ด๋–ค ์ž‘์—…์„ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ
Process : ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ž‘์—…์˜ ๋‹จ์œ„
Thread : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰ ํ๋ฆ„์˜ ๋‹จ์œ„

 

ํ”„๋กœ๊ทธ๋žจ์ด๋ž€ ํŒŒ์ผ์ด ์ €์žฅ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์˜ฌ๋ผ๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ •์ ์ธ ์ƒํƒœ

 

 

ํ”„๋กœ์„ธ์Šค Process

  • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค ( ๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด )
  • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š” ์ž‘์—…์˜ ๋‹จ์œ„
  • ์ฆ‰, ๋™์ ์ธ ๊ฐœ๋…์œผ๋กœ๋Š” ์‹คํ–‰๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค

 

 

  • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Stack, Heap์˜ ๊ตฌ์กฐ)์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ(๋ฉ”์ธ ์Šค๋ ˆ๋“œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ (IPC, inter-process communication)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ( Ex. ํŒŒ์ดํ”„, ํŒŒ์ผ, ์†Œ์ผ“ ๋“ฑ์„ ์ด์šฉํ•œ ํ†ต์‹  ๋ฐฉ๋ฒ• ์ด์šฉ )

 

 

 

์Šค๋ ˆ๋“œ Thread

ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์ง€๊ณ  ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ๋ฒ…์ฐจ๋‹ค. 
ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ์ •๋ณด๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” ์ œ์•ฝ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„์˜ ๊ฐœ๋…์ด ๋“ฑ์žฅํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„
  • ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ •ํ•œ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„

 

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๊ฐ๊ฐ Stack๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  Code, Data, Heap ์˜์—ญ์€ ๊ณต์œ ํ•œ๋‹ค.
  • ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์ž‘๋˜๋Š” ์—ฌ๋Ÿฌ ์‹คํ–‰์˜ ํ๋ฆ„์œผ๋กœ, ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋‚˜ ์ž์›๋“ค(ํž™ ๊ณต๊ฐ„ ๋“ฑ)์„ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ ํ•˜๋ฉด์„œ ์‹คํ–‰๋œ๋‹ค.
  • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋“ค์€ ๊ฐ™์€ ํž™ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์Šคํƒ์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ, ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„œ๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ž์›์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ๋‹ค๋ฅธ ์ด์›ƒ ์Šค๋ ˆ๋“œ(sibling thread)๋„ ๊ทธ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 


ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ž‘๋™๋ฐฉ์‹ ์ฐจ์ด

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์—ˆ๋‹ค. ์ด ๋•Œ ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„, Code/Data/Stack/Heap์˜ ํ˜•์‹์œผ๋กœ ํ• ๋‹นํ•ด ์ค€๋‹ค. ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹นํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

์ด์™€ ๋‹ค๋ฅด๊ฒŒ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์—ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋‚ด์—์„œ Stack ํ˜•์‹์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ , ๋‚˜๋จธ์ง€ Code/Data/Heap ํ˜•์‹์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ ์Šคํƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„œ๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ค‘์š”ํ•œ ์ฐจ์ด๋ฅผ ํ•˜๋‚˜ ๋” ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋œ๋‹ค๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ์„๊นŒ? ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ์„ ์†์ƒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” Code/Data/Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์Šค๋ ˆ๋“œ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๋ชจ๋‘๊ฐ€ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋œ๋‹ค.

 

 

์™œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ• ๊นŒ?

์Šค๋ ˆ๋“œ๋Š” "ํ๋ฆ„์˜ ๋‹จ์œ„"๋ผ๊ณ  ๋งํ–ˆ๋Š”๋ฐ, ์ •ํ™•ํžˆ๋Š” CPU ์ž…์žฅ์—์„œ์˜ ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค. CPU๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์Šค๋ ˆ๋“œ๋ฅผ ์ตœ์†Œ ๋‹จ์œ„๋กœ ์‚ผ๊ณ  ์ž‘์—…์„ ํ•œ๋‹ค. ๋ฐ˜๋ฉด ์šด์˜์ฒด์ œ๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์€ ๋‹จ์œ„๊นŒ์ง€ ์ง์ ‘ ์ž‘์—…ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ ๊ด€์ ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ ๊ด€์ ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„์ธ๋ฐ, ์ด ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์†Œ์†์˜ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†๋‹ค.

 


Reference.

์ฐธ๊ณ 

์ฐธ๊ณ 2

CPU ์Šค์ผ€์ค„๋ง

๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ• ์ง€ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ
Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘์— ๋ˆ„๊ตฌ์—๊ฒŒ CPU๋ฅผ ํ• ๋‹นํ•ด ์ค„ ๊ฒƒ์ธ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ

 

 

์™œ ํ•„์š”ํ•œ๊ฐ€?

CPU๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. --> ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ I/O ์š”์ฒญ์œผ๋กœ ๋Œ€๊ธฐํ•  ๊ฒฝ์šฐ, CPU๋Š” ๋†€๊ฒŒ๋จ

์‹œ๊ฐ„์„ ์ƒ์‚ฐ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ณ ์ž CPU๋ฅผ ๊ทธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ํšŒ์ˆ˜ํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•œ๋‹ค.

CPU ์ด์šฉ๋ฅ  ๊ทน๋Œ€ํ™”

 

 

 

 


์„ ์  ๋ฐ ๋น„์„ ์  ์Šค์ผ€์ค„๋ง

CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ž‘๋™๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ

์ƒํ™ฉ 1 : ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ƒํƒœ์—์„œ ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. I/O ์š”์ฒญ์— ์˜ํ•œ ๋Œ€๊ธฐ
์ƒํ™ฉ 2 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ƒํƒœ์—์„œ ์ค€๋น„์™„๋ฃŒ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ๋‹ค ๋๋‚ฌ์„ ๋•Œ ( timer interrupt๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ)
์ƒํ™ฉ 3 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ์ƒํƒœ์—์„œ ์ค€๋น„์™„๋ฃŒ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. I/O ์ข…๋ฃŒ ์‹œ
์ƒํ™ฉ 4 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ

 

๋น„์„ ์  nonpreemptive

: ์ƒํ™ฉ 1,4์™€ ๊ฐ™์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๋ฐœ์ ์œผ๋กœ CPU๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒฝ์šฐ

CPU๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋“ ์ง€, ๋˜๋Š” ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜ํ•ด CPU๋ฅผ ๋ฐฉ์ถœํ•  ๋•Œ๊นŒ์ง€ ์ ์œ ํ•œ๋‹ค.

 

 

์„ ์  preemptive

: ์ƒํ™ฉ 2,3๊ณผ ๊ฐ™์ด ๊ฐ•์ œ์ ์œผ๋กœ CPU๋ฅผ ๋นผ์•—๊ธฐ๋Š” ๊ฒฝ์šฐ

Windows, macOS, Linux๋ฅผ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์ตœ์‹  ์šด์˜์ฒด์ œ๋“ค์€ ์„ ์  ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 


 

์Šค์ผ€์ค„๋ง ๊ธฐ์ค€

CPU ์ด์šฉ๋ฅ 

์ „์ฒด ์‹œ์Šคํ…œ ์‚ฌ์šฉ ์‹œ๊ฐ„ ์ค‘ CPU๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์˜ ๋น„์œจ 

 

์ฒ˜๋ฆฌ๋Ÿ‰

๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์™„๋ฃŒ๋œ ํ”„๋กœ์…‹์˜ ๊ฐœ์ˆ˜

 

์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘ํ•ด์„œ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ( ์ค€๋น„ ํ์—์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„ + CPU ์‹คํ–‰ ์‹œ๊ฐ„ + I/O ์‹œ๊ฐ„ )

 

๋Œ€๊ธฐ ์‹œ๊ฐ„

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค€๋น„ ํ์—์„œ ๋Œ€๊ธฐํ•˜๋ฉฐ ๋ณด๋‚ธ ์‹œ๊ฐ„์˜ ํ•ฉ

 

์‘๋‹ต ์‹œ๊ฐ„

ํ•˜๋‚˜์˜ ์š”๊ตฌ๋ฅผ ์ œ์ถœํ•œ ํ›„ ์ฒซ๋ฒˆ์งธ ์‘๋‹ต์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„ ( ์‘๋‹ต์ด ์ถœ๋ ฅ๋˜๋Š” ์‹œ๊ฐ„์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค )

 

CPU ์ด์šฉ๋ฅ ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ตœ๋Œ€ํ™”ํ•˜๊ณ  ์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„, ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ํ•˜๋Š” ๊ฒƒ์œผ๋กœ~!

 

 

 


 

์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

์„ ์ž… ์„ ์ฒ˜๋ฆฌ FCFS (First Come First Served)

ํŠน์ง•

  • ๋จผ์ € ์˜จ ๊ณ ๊ฐ์„ ๋จผ์ € ์„œ๋น„์Šคํ•ด์ฃผ๋Š” ๋ฐฉ์‹, ์ฆ‰ ๋จผ์ € ์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ.
  • ๋น„์„ ์ ํ˜•(Non-Preemptive) ์Šค์ผ€์ค„๋ง
    ์ผ๋‹จ CPU ๋ฅผ ์žก์œผ๋ฉด CPU burst ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ CPU ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ• ๋‹น๋˜์—ˆ๋˜ CPU ๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ๋งŒ ์Šค์ผ€์ค„๋ง์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๋ฌธ์ œ์ 

  • convoy effect
    ์†Œ์š”์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„๋‹ฌํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋‚ฎ์ถ”๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

SJF(Shortest - Job - First)

ํŠน์ง•

  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„์ฐฉํ–ˆ์–ด๋„ CPU burst time ์ด ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์„  ํ• ๋‹น
  • ๋น„์„ ์ ํ˜•(Non-Preemptive) ์Šค์ผ€์ค„๋ง

๋ฌธ์ œ์ 

  • starvation
    ํšจ์œจ์„ฑ์„ ์ถ”๊ตฌํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•˜์ง€๋งŒ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์ฐจ๋ณ„๋ฐ›์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์Šค์ผ€์ค„๋ง์€ ๊ทน๋‹จ์ ์œผ๋กœ CPU ์‚ฌ์šฉ์ด ์งง์€ job ์„ ์„ ํ˜ธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ๊ฑฐ์˜ ์˜์›ํžˆ CPU ๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

 

SRTF(Shortest Remaining Time First)

ํŠน์ง•

  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค์ผ€์ค„๋ง์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ์„ ์ ํ˜• (Preemptive) ์Šค์ผ€์ค„๋ง
    ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ burst time ๋ณด๋‹ค ๋” ์งง์€ CPU burst time ์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด CPU ๋ฅผ ๋บ๊ธด๋‹ค.

๋ฌธ์ œ์ 

  • starvation
  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„๋‹ฌํ•  ๋•Œ๋งˆ๋‹ค ์Šค์ผ€์ค„๋ง์„ ๋‹ค์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU burst time(CPU ์‚ฌ์šฉ์‹œ๊ฐ„)์„ ์ธก์ •ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

Priority Scheduling

ํŠน์ง•

  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์Šค์ผ€์ค„๋ง์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ž€ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋˜๊ณ  ์ž‘์€ ์ˆซ์ž๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
  • ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง(Preemptive) ๋ฐฉ์‹
    ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  CPU ๋ฅผ ์„ ์ ํ•œ๋‹ค.
  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง(Non-Preemptive) ๋ฐฉ์‹
    ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด Ready Queue ์˜ Head ์— ๋„ฃ๋Š”๋‹ค.

๋ฌธ์ œ์ 

  • starvation
  • ๋ฌด๊ธฐํ•œ ๋ด‰์‡„(Indefinite blocking)
    ์‹คํ–‰ ์ค€๋น„๋Š” ๋˜์–ด์žˆ์œผ๋‚˜ CPU ๋ฅผ ์‚ฌ์šฉ๋ชปํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ CPU ๊ฐ€ ๋ฌด๊ธฐํ•œ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ

ํ•ด๊ฒฐ์ฑ…

  • aging
    ์•„๋ฌด๋ฆฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ผ๋„ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์—ฌ์ฃผ์ž.

 

Round Robin

ํŠน์ง•

  • ํ˜„๋Œ€์ ์ธ CPU ์Šค์ผ€์ค„๋ง
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ• ๋‹น ์‹œ๊ฐ„(time quantum)์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
  • ํ• ๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์„ ์ ๋‹นํ•˜๊ณ  ready queue ์˜ ์ œ์ผ ๋’ค์— ๊ฐ€์„œ ๋‹ค์‹œ ์ค„์„ ์„ ๋‹ค.
  • RR์€ CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ๋žœ๋คํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„ž์—ฌ์žˆ์„ ๊ฒฝ์šฐ์— ํšจ์œจ์ 
  • RR์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค์˜ context ๋ฅผ save ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์žฅ์ 

  • Response time์ด ๋นจ๋ผ์ง„๋‹ค.
    n ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue ์— ์žˆ๊ณ  ํ• ๋‹น์‹œ๊ฐ„์ด q(time quantum)์ธ ๊ฒฝ์šฐ ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” q ๋‹จ์œ„๋กœ CPU ์‹œ๊ฐ„์˜ 1/n ์„ ์–ป๋Š”๋‹ค. ์ฆ‰, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ (n-1)q time unit ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด CPU ๋ฅผ ์‚ฌ์šฉํ•  ๋งŒํผ ์ฆ๊ฐ€ํ•œ๋‹ค.
    ๊ณต์ •ํ•œ ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

์„ค์ •ํ•œ time quantum์ด ๋„ˆ๋ฌด ์ปค์ง€๋ฉด FCFS์™€ ๊ฐ™์•„์ง„๋‹ค. ๋˜ ๋„ˆ๋ฌด ์ž‘์•„์ง€๋ฉด ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ชฉ์ ์—๋Š” ์ด์ƒ์ ์ด์ง€๋งŒ ์žฆ์€ context switch ๋กœ overhead ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ ๋‹นํ•œ time quantum์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

 

 

 


< ์ฐธ๊ณ  >

https://velog.io/@mu1616/CPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81

์Šค์ผ€์ค„๋Ÿฌ

Ready Queue์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„
ํŠน์ •ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ฒŒ ํ•˜๋Š” ์—ญํ• ๋กœ
์žฅ๊ธฐ, ์ค‘๊ธฐ, ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์žˆ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ธฐ ์œ„ํ•œ queue์˜ ์ข…๋ฅ˜
1. Job Queue : ํ˜„์žฌ ์‹œ์Šคํ…œ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
2. Ready Queue : ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์žˆ์œผ๋ฉด์„œ CPU๋ฅผ ํ• ๋‹น ๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
3. Device Queue : Device I/O ์ž‘์—…์„ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ

 

 

 


์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ Long - Term Scheduler

์ˆ˜ํ–‰ํ•  job์ด 10๊ฐœ, ๋ฉ”๋ชจ๋ฆฌ์—๋Š” 6๊ฐœ ๋ฐ–์— ์˜ฌ๋ฆด ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ
job 10๊ฐœ ์ค‘ 6๊ฐœ๋ฅผ ๊ณจ๋ผ์„œ ์˜ฌ๋ ค์•ผ ํ•˜๋Š”๋ฐ ์ด๋•Œ job์„ ๊ณ ๋ฅด๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ
๋”ฐ๋ผ์„œ ์žก ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

 

ready queue์— ์ ์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ ์‚ฌ์ด์˜ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹นํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ์ธ๋ฐ,  I/O bound ์ค‘์‹ฌ์˜ ํ”„๋กœ์„ธ์Šค๋“ค๊ณผ CPU bound ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ ์ ˆํ•œ ๋น„์œจ์„ ์กฐ์ ˆํ•ด ์˜ฌ๋ฆฐ๋‹ค.

 

* I/O bound process : ์ž…์ถœ๋ ฅ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค (์ด ๋น„์œจ์ด ๋†’์œผ๋ฉด ๋†€๊ณ  ์žˆ๋Š” cpu ๋งŽ์•„์ง)

CPU bound process : CPU๊ฐ€ ๊ณ„์‚ฐ์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋น„์ค‘์ด ํฐ ํ”„๋กœ์„ธ์Šค (์ด ๋น„์œจ์ด ๋†’์œผ๋ฉด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ ์ด์ง€ ๋ชปํ•ด์„œ ์‹ค์‹œ๊ฐ„์ ์ธ ์˜๋ฏธ ์—†์–ด์ง)

 

1. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ Ready Queue์— ์‚ฝ์ž…ํ• ์ง€ ๊ฒฐ์ •

2. ๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ ์‚ฌ์ด์˜ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹น

3. ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น 

4. ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆ 

5. ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ[new -> ready(inmemory)]

 

 

 

 

๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ Short - Term Scheduler

์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ job์„ 6๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ƒํƒœ
CPU์—์„œ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰์™„๋ฃŒํ•˜๊ณ  ๋‚˜๋จธ์ง€ job์ค‘ ์—์„œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์•ผํ•˜๋Š”๋ฐ ์ด๊ฑธ ๊ณจ๋ผ์ฃผ๋Š” ์Šค์ผ€์ค„๋Ÿฌ
๋”ฐ๋ผ์„œ CPU ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

CPU๊ฐ€ ๋‚ญ๋น„๋˜์ง€ ์•Š๊ฒŒ A๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰๋˜๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด cpu๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ์ด ๋˜๋ฉด ๋ฐ”๋กœ B ํ”„๋กœ์„ธ์Šค๋กœ ๊ต์ฒดํ•ด์„œ ์ˆ˜ํ–‰์‹œํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์‚ฌ์šฉ์ž์˜ I/O๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ Aํ”„๋กœ์„ธ์Šค๋ฅผ cpu๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

 

์ตœ์†Œ 100๋ฐ€๋ฆฌ ์„ธ์ปจ์ฆˆ๋งˆ๋‹ค ์ˆ˜ํ–‰๋˜์–ด ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๋ผ ๋ถˆ๋ฆฐ๋‹ค.

 

์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์™€ ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ -> CPU ์Šค์ผ€์ค„๋Ÿฌ

์š”์ฆ˜์—” virtual memory management๊ฐ€ ๋ฐœ๋‹ฌํ•ด์„œ job์ด 10๊ฐœ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋กœ 10๊ฐœ๊ฐ€ ๋‹ค ์˜ฌ๋ผ์˜จ๋‹ค. 

์ฆ‰, ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, long term์ด ์—†๋‹ค๋ฉด short term์˜ ์˜๋ฏธ๊ฐ€ ๋ฌด์ƒ‰ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ CPU ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. 

 

1. CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์˜ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹นํ•˜๋ฉฐ CPU ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ ๋„ํ•จ

2. Ready Queue์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ CPU๋ฅผ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค ์„ ํƒ

3. ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ[ready -> running -> waiting -> ready]

 

 

 

 

 

์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ Medium - Term Scheduler

์žฅ๊ธฐ/๋‹จ๊ธฐ ์ดํ›„์— ๋‚˜์™”๋‹ค. ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ํ˜„์žฌ ๊ฐœ๋…์€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ ๋˜ํ•œ ์ด์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด 10๊ฐœ ์ค‘ 6๊ฐœ์˜ job์„ ์˜ฌ๋ ค์„œ ์ˆ˜ํ–‰์ค‘์ธ ์ƒํƒœ
CPU๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ๊ฐ๋‹นํ•˜๊ธฐ์—” ๋„ˆ๋ฌด ๋งŽ์•„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ 6๊ฐœ ์ค‘ 2๊ฐœ๋ฅผ ๋‚ด๋ ค๋ณด๋‚ด๋ฉด ์ƒํ™ฉ์ด ํ•ด๊ฒฐ๋  ๊ฒƒ
6๊ฐœ ์ค‘ ๋ญ˜ ๋‚ด๋ ค๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์—ญํ•  
Swapper๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

 

 

ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚ด๋ฆด ๋•Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋‚˜ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜๋˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋‚ด๋ฆฐ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚ด๋ฆฌ๊ณ  (swapping out) ๋‹ค์‹œ ์˜ฌ๋ ค์ง€๋Š” (swapping in) swapping๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— swapper๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

 

 

 1. ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆ

2. ๋ฉ”๋ชจ๋ฆฌ์ ์žฌ๋œ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ต์งธ๋กœ ๋””์Šคํฌ์˜ ์Šค์™‘ ์˜์—ญ์— ์ €์žฅ(Swap Out)

3. ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ[ready -> suspended]

 

 

 

 

 


<์ฐธ๊ณ >

https://kmseop.tistory.com/119 https://jhnyang.tistory.com/372

Process Management 
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋•Œ, CPU๊ฐ€ CPU ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ
( ์ด๋•Œ CPU๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ˆ„๊ตฐ์ง€ ์•Œ์•„์•ผ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด Process Metadata์ด๋‹ค. )

 

[ Process Metadata ]

  • Process ID : PID(Process Identification Number)๋ผ๊ณ ๋„ ํ•œ๋‹ค. // ํ”„๋กœ์„ธ์Šค ๊ณ ์œ  ์‹๋ณ„๋ฒˆํ˜ธ
  • Process State : ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ(์ค€๋น„, ์‹คํ–‰, ๋Œ€๊ธฐ)๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค. //ํ”„๋กœ์„ธ์Šค ์ƒํƒœ
  • Process Priority : ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ๋“ฑ๊ณผ ๊ฐ™์€ ์Šค์ผ€์ค„๋ง ๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค. //์Šค์ผ€์ค„๋ง ์ •๋ณด
  • CPU Registers : ํ”„๋กœ์„ธ์Šค์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ CPU ๋‚ด ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ, ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ, ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ ๋“ฑ์ด ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๊ธฐ์–ต์‹œํ‚จ๋‹ค.
  • Owner : CPU ์‚ฌ์šฉ์‹œ๊ฐ„์˜ ์ •๋ณด(Quantum)๊ณผ ๊ฐ์ข… ์Šค์ผ€์ค„๋Ÿฌ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค. //๊ณ„์ • ์ •๋ณด
  • ๊ธฐ์–ต์žฅ์น˜ ๊ด€๋ฆฌ ์ •๋ณด : ํ”„๋กœ๊ทธ๋žจ์ด ์ ์žฌ๋  ๊ธฐ์–ต ์žฅ์น˜์˜ ์ƒํ•œ์น˜, ํ•˜ํ•œ์น˜, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค.
  • ์ž…์ถœ๋ ฅ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰ ์‹œ ํ•„์š”ํ•œ ์ฃผ๋ณ€ ์žฅ์น˜, ํŒŒ์ผ๋“ค์˜ ์ •๋ณด๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ : ๋‹ค์Œ์— ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ต์‹œํ‚จ๋‹ค. //๊ณ„์ˆ˜๊ธฐ

์ด๋Ÿฌํ•œ ์ •๋ณด๋“ค์ด ๋‹ด๊ธด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด PCB๋ผ๋Š” ๊ณณ์— ์ €์žฅ๋œ๋‹ค!

 


PCB (Process Controll Block)

ํ”„๋กœ์„ธ์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•ด ๋†“๋Š” ๊ณณ
ํ•˜๋‚˜์˜ PCB ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ -> ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ -> ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ) ์ƒ์„ฑ -> ์ด ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์ด PCB์— ์ €์žฅ

 

 

PCB ์ƒ์„ธ ๊ตฌ์กฐ ->

 

 

 

 

 

 

 

PCB๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  

CPU์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ต์ฒด ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์ด๋•Œ ์•ž์œผ๋กœ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•  Block ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๊ฐ’์„ PCB์— ์ €์žฅํ•ด๋‘”๋‹ค. 

 

 

 

PCB์˜ ๊ด€๋ฆฌ ๋ฐฉ์‹

Linked List ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. PCB list head์— PCB ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๋ถ™๊ฒŒ ๋œ๋‹ค. ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์‚ฝ์ž…, ์‚ญ์ œ ์šฉ์ด

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น PCB๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ์‹œ ์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ Context Switching์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 


 

Context Switching

CPU๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” task(process, thread)์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ 
๋‹ค์Œ ์ง„ํ–‰ํ•  task์˜ ์ƒํƒœ ๋ฐ register ๊ฐ’๋“ค์— ๋Œ€ํ•œ
์ •๋ณด(context)๋ฅผ ์ฝ์–ด ์ƒˆ๋กœ์šด task์˜ context ์ •๋ณด๋กœ ๊ต์ฒดํ•˜๋Š” ๊ณผ์ •

 

* context๋ž€ : CPU๊ฐ€ ๋‹ค๋ฃจ๋Š” Task(Process / Thread)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋งํ•˜๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์ •๋ณด๋Š” Register์— ์ €์žฅ๋˜๊ณ  pcb๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. 

 

 

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์‹คํ–‰ ์ค‘์ธ CPU ์‚ฌ์šฉ ํ—ˆ๊ฐ€ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ๋ชจํ•˜๊ฑฐ๋‚˜, 

์ž…์ถœ๋ ฅ์„ ์œ„ํ•ด ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Context Switching์ด ๋ฐœ์ƒ

ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready -> Running , Running -> Ready , Running -> Block ์ฒ˜๋Ÿผ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ์— ๋ฐœ์ƒ

 

 

 

Context Switching ์ˆ˜ํ–‰ ๊ณผ์ •

1. Task์˜ ๋Œ€๋ถ€๋ถ„ ์ •๋ณด๋Š” Register์— ์ €์žฅ๋˜๊ณ  PCB(Process Control Block)๋กœ ๊ด€๋ฆฌ

2. ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” Task์˜ PCB ์ •๋ณด๋ฅผ ์ €์žฅ (Process Stack, Ready Queue)

3. ๋‹ค์Œ ์‹คํ–‰ํ•  Task์˜ PCB ์ •๋ณด๋ฅผ ์ฝ์–ด Register์— ์ ์žฌํ•˜๊ณ  CPU๊ฐ€ ์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ ๊ณผ์ •์„ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰

 

 

Context Switching Cost

1. Cashe ์ดˆ๊ธฐํ™”

2. Memory Mapping ์ดˆ๊ธฐํ™”

3. ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ‘๊ทผ์„ ์œ„ํ•ด์„œ ํ•ญ์ƒ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” kernel

์œ„์™€ ๊ฐ™์€ Cost๊ฐ€ ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์žฆ์€ context switching์€ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

* Process๊ฐ€ Thread๋ณด๋‹ค ๋งŽ์ด ๋“ ๋‹ค. ( Thread๋Š” stack์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— context switching ๋ฐœ์ƒ์‹œ stack ์˜์—ญ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ)

 

 

 

Context Switching๊ณผ Interrupt

CPU๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋งŒ์„ ๊ธฐ์–ตํ•œ๋‹ค.

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ๋Š” CPU๊ฐ€ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ๋ณต๊ท€ํ•˜๊ณ  ๋‹ค์‹œ ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ๋ณต๊ท€ํ•˜๋Š” ์ผ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ค‘๋‹จ๊ณผ ์‹คํ–‰์‹œ interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ context switching์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์€ interrupt๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

Context Switching๊ณผ ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰

์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์ด ์ ์–ด์ง€๋ฉด :

๋ฌธ๋งฅ ๊ตํ™˜ ์ˆ˜, ์ธํ„ฐ๋ŸฝํŠธ ํšŸ์ˆ˜, ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๋Š๋‚Œ์„ ๊ฐ–๋Š”๋‹ค.

 

์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์ด ์ปค์ง€๋ฉด :

๋ฌธ๋งฅ ๊ตํ™˜ ์ˆ˜, ์ธํ„ฐ๋ŸฝํŠธ ํšŸ์ˆ˜, ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฐ์†Œํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๋Š๋‚Œ์„ ๊ฐ–์ง€ ๋ชปํ•œ๋‹ค.

 

 

 


<์ฐธ๊ณ >

https://m.blog.naver.com/adamdoha/222019884898 https://jhnyang.tistory.com/33

+ Recent posts