๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ ๋ณด๋Š” I/O ๋ณธ๋ฌธ

Operating System (์šด์˜์ฒด์ œ)

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ ๋ณด๋Š” I/O

9taetae9 2025. 9. 12. 13:21
728x90

ํ‰์ƒ์‹œ ์‚ฌ์šฉํ•˜๋Š” printf, System.out.println, Scanner ๊ฐ™์€ ๊ฐ„๋‹จํ•œ API ํ˜ธ์ถœ์ด ์‹ค์ œ๋กœ ์šด์˜์ฒด์ œ์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์•Œ์•„๋ณด์ž.


1. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ vs ์ปค๋„ ๊ณต๊ฐ„

1-1. ๊ฒฝ๊ณ„์˜ ์ •์˜

ํ˜„๋Œ€ OS๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„๊ณผ ์ปค๋„ ๊ณต๊ฐ„์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ปค๋„ ๊ณต๊ฐ„์€ ํŠน๊ถŒ(privilege) ๋ชจ๋“œ(Ring 0)์—์„œ ์‹คํ–‰๋˜๋ฉฐ ํ•˜๋“œ์›จ์–ด์™€ ๋ฏผ๊ฐํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋น„ํŠน๊ถŒ ๋ชจ๋“œ๋‹ค. ์ด๋Š” ์•ˆ์ •์„ฑ, ๋ณด์•ˆ์˜ ํ•ต์‹ฌ์ด ๋œ๋‹ค.

 

1-2. ์™œ ์ค‘์š”ํ•œ๊ฐ€

์‚ฌ์šฉ์ž ์ฝ”๋“œ๊ฐ€ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ I/O ๊ฐ™์€ ํŠน๊ถŒ ์ž‘์—…์€ ์‚ฌ์šฉ์ž → ์ปค๋„๋กœ ํ†ต์ œ๋œ ์š”์ฒญ(์‹œ์Šคํ…œ ์ฝœ) ํ˜•ํƒœ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด ์ „ํ™˜์€ ์ปจํ…์ŠคํŠธ/๋ชจ๋“œ ์Šค์œ„์น˜ ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ ๊ณ ์„ฑ๋Šฅ ์„ค๊ณ„์—์„œ๋Š” ํ•ด๋‹น ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.


2. ํ†ต์ผ๋œ ์ถ”์ƒํ™”: Everything is a file

2-1. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ VFS

UNIX ๊ณ„์—ด์˜ ํ•ต์‹ฌ ์ฒ ํ•™์€ “๋ชจ๋“  ๊ฒƒ์€ ํŒŒ์ผ”์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋””์Šคํฌ ํŒŒ์ผ, ์†Œ์ผ“, ํ„ฐ๋ฏธ๋„, ํŒŒ์ดํ”„, ๊ฐ€์ƒ ํŒŒ์ผ์‹œ์Šคํ…œ(/proc, /sys) ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์ž์›์ด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ(fd)๋กœ ํ‘œํ˜„๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ fd๋ผ๋Š” ์ •์ˆ˜๋งŒ ์•Œ๋ฉด ์–ด๋–ค ์ž์›์—๋„ ๋™์ผํ•œ read/write API๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2-2. ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ(0,1,2)

ํ”„๋กœ์„ธ์Šค๋Š” ์‹œ์ž‘ ์‹œ fd=0(stdin), fd=1(stdout), fd=2(stderr)๋ฅผ ๊ฐ€์ง„๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•˜๋ฉด 0์€ ํ‚ค๋ณด๋“œ, 1, 2๋Š” ํ™”๋ฉด์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. Shell์€ ์ด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰์…˜, ํŒŒ์ดํ”„ ๋“ฑ์œผ๋กœ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


3. ์‹œ์Šคํ…œ ์ฝœ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(read/write/open)

3-1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ž˜ํผ(Wrapper) → ํŠธ๋žฉ → ์ปค๋„ ํ•ธ๋“ค๋Ÿฌ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ž˜ํผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋ž˜ํผ๋Š” syscall ๋ฒˆํ˜ธ์™€ ์ธ์ž๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ฐฐ์น˜ํ•˜๊ณ  syscall(๋˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ณ„ ํŠธ๋žฉ)์„ ์‹คํ–‰ํ•œ๋‹ค. CPU๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๊ณ  ์ปค๋„์€ sys_call_table์—์„œ ๋Œ€์‘ํ•˜๋Š” sys_read/sys_write๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ž‘์—…์ด ๋๋‚˜๋ฉด ์ปค๋„์€ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ์— ๋„ฃ๊ณ  ๋‹ค์‹œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋ณต๊ท€์‹œํ‚จ๋‹ค.

3-2. open์˜ ๊ธฐ๋Šฅ

open()์€ ํŒŒ์ผ์„ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ํ•ธ๋“ค๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด๋‹ค. ์„ฑ๊ณตํ•˜๋ฉด ์†Œ์ˆ˜์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜(fd)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. fd๋Š” ์ดํ›„ read/write/close ๋“ฑ์—์„œ ํ•ด๋‹น ์ž์›์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์ด๋‹ค. ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์€ ๋ณ„๋„ open() ์—†์ด๋„ 0, 1, 2๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3-3. read/write์˜ ๋™์ž‘

read(fd, buf, n)์€ ์ปค๋„ ๊ณต๊ฐ„์˜ ์ž์›์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ buf๋กœ ๋ณต์‚ฌํ•œ๋‹ค. write(fd, buf, n)์€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋„ ๋ฒ„ํผ๋กœ ๋ณต์‚ฌํ•˜๊ณ  ์ดํ›„ ์žฅ์น˜/ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ํ•ต์‹ฌ์€ ๋ฒ„ํผ ๊ฐ„์˜ ์•ˆ์ „ํ•œ ๋ณต์‚ฌ(copy_to_user / copy_from_user)๊ณ , ์ด์ค‘ ๋ณต์‚ฌ๋Š” ํ”ํ•œ ๊ตฌ์กฐ๋‹ค(์žฅ์น˜ → ์ปค๋„ ๋ฒ„ํผ(DMA) → ์‚ฌ์šฉ์ž ๋ฒ„ํผ).


4. ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ๋ฆ„: Hello World์™€ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ์˜ˆ์‹œ

4-1. Hello World ์ถœ๋ ฅ ํ๋ฆ„

    1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด printf/System.out.println์„ ํ˜ธ์ถœํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‚ด๋ถ€ ๋ฒ„ํผ์— ๋ฌธ์ž์—ด์„ ์“ด๋‹ค.
    2. ์ถœ๋ ฅ ํƒ€์ด๋ฐ(๊ฐœํ–‰, ๋ฒ„ํผ๊ฐ€๊ฐ€๋“์ฐฌ ๊ฒฝ์šฐ ๋“ฑ)์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” write(fd=1, ptr, len) ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•œ๋‹ค.
    3. sys_write๋Š” ์‚ฌ์šฉ์ž ๋ฒ„ํผ์˜ ๋‚ด์šฉ์„ ์ปค๋„ ๋ฒ„ํผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์‚ฌํ•œ๋‹ค.
    4. ํ„ฐ๋ฏธ๋„ ๋“œ๋ผ์ด๋ฒ„/๊ทธ๋ž˜ํ”ฝ ์„œ๋ธŒ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๋””๋ฐ”์ด์Šค์— ์ „๋‹ฌํ•ด ํ™”๋ฉด์— ๋ Œ๋”๋งํ•œ๋‹ค.
    5. ํ˜ธ์ถœ์ž๋Š” ์“ฐ์—ฌ์ง„ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค. 

4-2. ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ํ๋ฆ„

    1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด read(fd=0, buf, n)์„ ํ˜ธ์ถœํ•˜๋ฉด ์ปค๋„์€ ์ปค๋„ ๋‚ด๋ถ€ ๋ฒ„ํผ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ๋‹ค.
    2. ๋งŒ์•ฝ ์ปค๋„ ๋ฒ„ํผ์— ์ž…๋ ฅ์ด ์—†๋‹ค๋ฉด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ(task)๋ฅผ ํ•ด๋‹น ์ž์›์˜ wait queue์— ๋“ฑ๋กํ•˜๊ณ  ์ž ๋“ค๊ฒŒ(sleep)ํ•œ๋‹ค. 
    3. ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ‚ค๋ณด๋“œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด ์ž…๋ ฅ์ด ์ปค๋„ ๋ฒ„ํผ์— ์ฑ„์›Œ์ง„๋‹ค.
    4. ์ปค๋„์€ wait queue์— ๋“ฑ๋ก๋œ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค(๋‹ค์‹œ ์‹คํ–‰).
    5. ์ดํ›„ ์ปค๋„์ด copy_to_user()๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž ๋ฒ„ํผ๋กœ ๋ณต์‚ฌํ•˜๋ฉด read() ํ˜ธ์ถœ์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

5. (์„ฑ๋Šฅ ๊ด€์ ) ๋ณต์‚ฌ ๋น„์šฉ๊ณผ ์ œ๋กœ-์นดํ”ผ(zero-copy) ์˜ต์…˜

5-1. ์™œ ๋‘ ๋ฒˆ ๋ณต์‚ฌ๋˜๋Š”๊ฐ€

์žฅ์น˜๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉ์ž ๋ฒ„ํผ์— ์“ฐ๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด ๋ณด์•ˆ, ๋™๊ธฐํ™”, ํŽ˜์ด์ง€ ๋ถ€์žฌ(page-fault) ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์ธ I/O๋Š” ์žฅ์น˜→์ปค๋„(DMA) → ์ปค๋„→์‚ฌ์šฉ์ž(copy_to_user) ์‹์œผ๋กœ ์ตœ์†Œ ๋‘ ๋‹จ๊ณ„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด์ค‘ ๋ณต์‚ฌ๊ฐ€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์ด ๋˜๋ฏ€๋กœ ๊ณ ์„ฑ๋Šฅ ๊ฒฝ๋กœ์—์„œ๋Š” ๋ณต์‚ฌ๋ฅผ ์ค„์ด๋Š” ๊ธฐ์ˆ ์ด ์š”๊ตฌ๋œ๋‹ค.

 

5-2. ์ œ๋กœ-์นดํ”ผ(์˜ˆ: sendfile, mmap)

sendfile()์€ ์ปค๋„ ๋‚ด๋ถ€์—์„œ "ํŒŒ์ผ(๋””์Šคํฌ)์—์„œ ์†Œ์ผ“์œผ๋กœ ์ง์ ‘ ์ „์†ก"ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ํ•œ ๋ฒˆ ๋” ๋ณต์‚ฌํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. mmap()์€ ํŒŒ์ผ์„ ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘ํ•ด ํŒŒ์ผ ๋‚ด์šฉ์„ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜์—ฌ ๋ณต์‚ฌ ๋น„์šฉ์„ ๋‚ฎ์ถ˜๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•์€ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์š”๊ตฌํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์—์„œ ์ค‘์š”ํ•˜๋‹ค.


6. I/O ๋ชจ๋ธ ๋น„๊ต: ๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น, ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ

6-1. ๋ธ”๋กœํ‚น I/O

read()/write()๊ฐ€ ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋˜๋Š” ๊ณต๊ฐ„ ํ™•๋ณด๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐํ•œ๋‹ค.

๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋‹ค์ˆ˜์˜ ๋™์‹œ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋Š˜์–ด๋‚˜๊ณ  ์ปจํ…์ŠคํŠธ ์ „ํ™˜ ๋น„์šฉ์ด ์ปค์ง„๋‹ค.

 

6-2. ๋…ผ๋ธ”๋กœํ‚น I/O

fd๋ฅผ ๋…ผ๋ธ”๋กœํ‚น ๋ชจ๋“œ๋กœ ์„ค์ •ํ•˜๋ฉด read()๋Š” ์ค€๋น„๋˜์ง€ ์•Š์•˜์„ ๋•Œ EAGAIN/EWOULDBLOCK์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํด๋ง์œผ๋กœ ์ค€๋น„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐ˜๋ณต ํด๋ง์€ CPU ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค.

 

6-3. ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ(I/O ์ด๋ฒคํŠธ ๋ชจ๋ธ)

select → poll → epoll๋กœ ๋ฐœ์ „ํ•ด์™”๋‹ค.

    • select๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ ๋ฐฉ์‹์œผ๋กœ FD ์ˆ˜ ์ œํ•œ๊ณผ O(n) ์Šค์บ” ๋น„์šฉ์ด ์žˆ๋‹ค.
    • poll์€ ๊ตฌ์กฐ์ฒด ๋ฐฐ์—ด๋กœ FD ์ˆ˜ ์ œํ•œ์„ ์—†์•ด์ง€๋งŒ ์—ฌ์ „ํžˆ O(n)์ด๋‹ค.
    • epoll์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์œผ๋กœ ์ปค๋„์ด ์ค€๋น„๋œ FD ๋ชฉ๋ก์„ ์œ ์ง€ํ•ด ์ค€๋น„๋œ ๊ฒƒ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ์šฐ์ˆ˜ํ•˜๋‹ค(๋Œ€๊ทœ๋ชจ ๋™์‹œ์„ฑ ํ™˜๊ฒฝ์—์„œ ์ค‘์š”). ์ด ๋ชจ๋ธ์€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

7. ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ ค ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

7-1. ์‹œ์Šคํ…œ ์ฝœ ํšŸ์ˆ˜๋ฅผ ์ค„์ด์ž

์ž‘์€ ์กฐ๊ฐ์„ ์ž์ฃผ ์ฝ๋Š” ๋Œ€์‹  ๋ฒ„ํผ๋ฅผ ํฌ๊ฒŒ ์žก์•„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋ฉด syscall ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆ˜์ค€์˜ ๋ฒ„ํผ๋ง(์˜ˆ: stdio, BufferedInputStream)์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์ž.

 

7-2. ๋ฌธ์ œ๊ฐ€ ๋„คํŠธ์›Œํฌ์ธ์ง€ ๋””์Šคํฌ์ธ์ง€ ํ™•์ธํ•˜์ž

I/O ๋ณ‘๋ชฉ ์ง„๋‹จ์€ ํŒจํ‚ท ์บก์ฒ˜, iostat, strace ๊ฐ™์€ ํˆด๋กœ ์‹œ์Šคํ…œ ์ฝœ ๋นˆ๋„์™€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. syscall ๋นˆ๋„, ๋ธ”๋ก ์‹œ๊ฐ„, ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๋น„์šฉ์„ ํ•จ๊ป˜ ๋ณด๋ฉด ์›์ธ์„ ๋น ๋ฅด๊ฒŒ ์ขํž ์ˆ˜ ์žˆ๋‹ค.

 

7-3. ๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์„ ๊ธฐ๋ณธ์œผ๋กœ ์„ค๊ณ„ํ•˜์ž

๋„คํŠธ์›Œํฌ ์„œ๋ฒ„๋ผ๋ฉด epoll ๋˜๋Š” ๋น„๋™๊ธฐ I/O(AIO), ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: Netty)์˜ ์ถ”์ƒํ™”๋ฅผ ๊ณ ๋ คํ•˜์ž. ๋˜ํ•œ zero-copy ๊ฐ€๋Šฅ ๊ฒฝ๋กœ(sendfile, splice, mmap)๋ฅผ ์ฐพ์•„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์ž.


 

 

์ฐธ๊ณ ์ž๋ฃŒ:

http://www.jidum.com/jidums/view.do?jidumId=470#:~:text=DMA%EC%9D%98%20%ED%8A%B9%EC%A7%95%20*%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EC%88%98%ED%96%89%20%EC%A4%91%20%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8%EC%9D%98,%EC%9E%85%EC%B6%9C%EB%A0%A5%EC%9E%A5%EC%B9%98%EC%99%80%20%EC%A3%BC%20%EA%B8%B0%EC%96%B5%20%EC%9E%A5%EC%B9%98%EC%99%80%EC%9D%98%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%A7%81%EC%A0%91%20%EC%A0%84%EC%86%A1

 

์ง€์‹๋คํ”„

I. CPU์˜ ๋„์›€์—†์ด I/O ์žฅ์น˜๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹, DMA์˜ ๊ฐœ์š”     ๊ฐ€. Direct Memory Access์˜ ์ •์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ, ํฌ์ธํ„ฐ, ์นด์šดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ์น˜ ์ œ์–ด๊ธฐ๊ฐ€ CPU์˜ ๋„์›€ ์—†์ด DMA์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ด์šฉ

www.jidum.com

https://en.wikipedia.org/wiki/User_space_and_kernel_space#:~:text=A%20modern%20computer%20operating%20system,malicious%20or%20errant%20software%20behaviour.

 

User space and kernel space - Wikipedia

From Wikipedia, the free encyclopedia Way of using computer memory "Kernel space" and "User space" redirect here. For the mathematical definition, see Null space. For the user space on Wikipedia, see Wikipedia:User pages. A modern computer operating system

en.wikipedia.org

https://www.geeksforgeeks.org/operating-systems/introduction-of-system-call/

 

System Call - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

https://medium.com/@kaixin667689/zero-copy-principle-and-implementation-9a5220a62ffd

 

Zero-copy: Principle and Implementation

1. Introduction

medium.com

https://www.howtogeek.com/435903/what-are-stdin-stdout-and-stderr-on-linux/

 

What Are stdin, stdout, and stderr on Linux?

Mystified by stdin, stdout and stderr? Learn to use them in your Linux scripts.

www.howtogeek.com

 

728x90