๐Ÿ“š Computer Science/CS

[์ปดํ“จํ„ฐ ๋ฐ‘๋ฐ”๋‹ฅ์˜ ๋น„๋ฐ€] 2์žฅ. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰

ibelieveinme 2023. 11. 10. 15:08
728x90

2.1 ์šด์˜์ฒด์ œ, ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ์˜ ๊ทผ๋ณธ ์ดํ•ดํ•˜๊ธฐ



๋จผ์ € ์šด์˜์ฒด์ œ, ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด CPU ์™€ PC(Register), Memory ์˜ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ถ€ํ„ฐ ์•Œ์•„์•ผ ํ•œ๋‹ค.


 

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

 

PC(Register)์˜ ์ฃผ์†Œ๊ฐ’์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ if๋ฌธ๊ณผ ๊ฐ™์€ ๋ถ„๊ธฐ๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๋กœ ๋™์ ์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ์ตœ์ดˆ์˜ PC(Register) ๊ฐ€ ์ €์žฅํ•  ๊ฐ’์€ ๊ฐ ์–ธ์–ด๋ณ„ main ๋ฌธ์œผ๋กœ ์ง€์ •๋œ๋‹ค.

 

 

์ฆ‰, CPU ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด 1. ์‹คํ–‰ ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•œ ํ›„ 2. main ํ•จ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ธฐ๊ณ„ ๋ช…๋ น์–ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐพ๊ณ  3. ๊ทธ ์ฃผ์†Œ๋ฅผ PC ๋ ˆ์ง€์Šคํ„ฐ์— ์ ์žฌํ•˜๋ฉด ๋œ๋‹ค.

 

์ด ๋•Œ, ํ”„๋กœ๊ทธ๋žจ์„ ์ ์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ฐพ๊ณ , ํ•˜๋“œ์›จ์–ด์™€ ์—ฐ๊ฒฐํ•˜๊ณ , ์ถœ๋ ฅ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด ์—ญ์‹œ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์šด์˜์ฒด์ œ์ด๋‹ค.

 



์‹คํ–‰์ค‘์ธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์ƒํƒœ ์ •๋ณด(Context)๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ์šด์˜์ฒด์ œ๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ Process ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

Process ๋‚ด์˜ ์˜์—ญ์€ ์œ„์™€ ๊ฐ™์ด ๋‚˜๋‰˜์–ด ์žˆ๋‹ค. ์ฝ”๋“œ ์˜์—ญ, ๋ฐ์ดํ„ฐ ์˜์—ญ, ํž™ ์˜์—ญ, ์Šคํƒ ์˜์—ญ.

 

1. ์ฝ”๋“œ ์˜์—ญ: ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ

2. ๋ฐ์ดํ„ฐ ์˜์—ญ: ์ „์—ญ ๋ณ€์ˆ˜, ์ •์  ๋ณ€์ˆ˜

3. ํž™ ์˜์—ญ: ๋™์  ๋ณ€์ˆ˜(๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ • ๋จ)

4. ์Šคํƒ ์˜์—ญ: ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋“ฑ(์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ • ๋จ)

 

 

2.5 ์ฝœ๋ฐฑ ํ•จ์ˆ˜

 

1) ํ•จ์ˆ˜ ๋ณ€์ˆ˜(์ฝœ๋ฐฑ ํ•จ์ˆ˜): ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ.

 

void make_donut(func f){

       …

       f();

       …

}



2) ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ(asynchronous callback): ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ.

 

void real_make_donut(func f){

        …

        f();

        …

}

void make_donut(func f){

       thread t(real_make_donut, f);

}



3) ๋™๊ธฐ ํ˜ธ์ถœ vs ๋น„๋™๊ธฐ ํ˜ธ์ถœ

: ์ฝœ๋ฐฑ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์•ˆ๊ธฐ๋‹ค๋ฆฌ๊ณ ์˜ ์ฐจ์ด๋กœ ๋™๊ธฐํ˜ธ์ถœ๊ณผ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์ฃผ๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ ๋“ฑ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋กœ ์‹คํ–‰ํ•œ๋‹ค.



4) ๋™๊ธฐ ์ฝœ๋ฐฑ vs ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ

 

๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์—์„  ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ๋‹ค์Œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ ์ฝœ๋ฐฑ ์ง€์˜ฅ์— ์ฃผ์˜ํ•˜์ž.

 

 

 

 

2.7 ๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น



1) ๋ธ”๋กœํ‚น ํ˜ธ์ถœ vs ๋…ผ ๋ธ”๋กœํ‚น ํ˜ธ์ถœ

- ๋ธ”๋กœํ‚น ํ˜ธ์ถœ: ์Šค๋ ˆ๋“œ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์‹œ ์ค‘์ง€ ๋˜๋Š” ๊ฒƒ. ๋™๊ธฐ

- ๋…ผ๋ธ”๋กœํ‚น ํ˜ธ์ถœ: ์ค‘์ง€ X. ๋น„๋™๊ธฐ

 

728x90