I/O์™€ IPC โญโญโญ

I/O์™€ IPC โญโญโญ

๊ฐœ์š”

์ด ์žฅ์—์„œ๋Š” ์šด์˜์ฒด์ œ์˜ ์ž…์ถœ๋ ฅ(I/O) ์‹œ์Šคํ…œ๊ณผ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด ์ œ์–ด๋ถ€ํ„ฐ ๊ณ ์ˆ˜์ค€ ํ†ต์‹  ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. I/O ํ•˜๋“œ์›จ์–ด
  2. I/O ๋ฐฉ์‹
  3. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„
  4. ๋ฒ„ํผ๋ง ์ „๋žต
  5. IPC ๊ฐœ์š”
  6. ํŒŒ์ดํ”„
  7. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ
  8. ๋ฉ”์‹œ์ง€ ํ์™€ ์†Œ์ผ“
  9. ์—ฐ์Šต ๋ฌธ์ œ

1. I/O ํ•˜๋“œ์›จ์–ด

1.1 I/O ์žฅ์น˜ ๋ถ„๋ฅ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        I/O ์žฅ์น˜ ๋ถ„๋ฅ˜                                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚        ๋ถ„๋ฅ˜            โ”‚              ์˜ˆ์‹œ                       โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”‚
โ”‚   โ”‚ ๋ธ”๋ก ์žฅ์น˜              โ”‚ ํ•˜๋“œ ๋””์Šคํฌ, SSD, USB ์ €์žฅ์žฅ์น˜         โ”‚   โ”‚
โ”‚   โ”‚ (Block Device)         โ”‚ - ๊ณ ์ • ํฌ๊ธฐ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ ‘๊ทผ           โ”‚   โ”‚
โ”‚   โ”‚                        โ”‚ - ์ž„์˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ                       โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”‚
โ”‚   โ”‚ ๋ฌธ์ž ์žฅ์น˜              โ”‚ ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ํ”„๋ฆฐํ„ฐ, ์‹œ๋ฆฌ์–ผ ํฌํŠธ    โ”‚   โ”‚
โ”‚   โ”‚ (Character Device)     โ”‚ - ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ ‘๊ทผ               โ”‚   โ”‚
โ”‚   โ”‚                        โ”‚ - ์ˆœ์ฐจ ์ ‘๊ทผ                            โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”‚
โ”‚   โ”‚ ๋„คํŠธ์›Œํฌ ์žฅ์น˜          โ”‚ ์ด๋”๋„ท, WiFi, Bluetooth                โ”‚   โ”‚
โ”‚   โ”‚ (Network Device)       โ”‚ - ํŒจํ‚ท ๊ธฐ๋ฐ˜                            โ”‚   โ”‚
โ”‚   โ”‚                        โ”‚ - ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค                      โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                          โ”‚
โ”‚   Linux ์žฅ์น˜ ํŒŒ์ผ:                                                       โ”‚
โ”‚   /dev/sda       - ์ฒซ ๋ฒˆ์งธ SCSI/SATA ๋””์Šคํฌ (๋ธ”๋ก)                      โ”‚
โ”‚   /dev/tty1      - ์ฒซ ๋ฒˆ์งธ ํ„ฐ๋ฏธ๋„ (๋ฌธ์ž)                                โ”‚
โ”‚   /dev/null      - ๋„ ์žฅ์น˜ (๋ฌธ์ž)                                       โ”‚
โ”‚   /dev/random    - ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ (๋ฌธ์ž)                                   โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1.2 I/O ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      I/O ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ                                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                            CPU                                    โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                   โ”‚                                      โ”‚
โ”‚                                   โ–ผ                                      โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                        ์‹œ์Šคํ…œ ๋ฒ„์Šค                                โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚          โ”‚             โ”‚             โ”‚             โ”‚                    โ”‚
โ”‚          โ–ผ             โ–ผ             โ–ผ             โ–ผ                    โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚   โ”‚  ๋ฉ”๋ชจ๋ฆฌ    โ”‚ โ”‚ ๋””์Šคํฌ     โ”‚ โ”‚ ๊ทธ๋ž˜ํ”ฝ     โ”‚ โ”‚ ๋„คํŠธ์›Œํฌ   โ”‚          โ”‚
โ”‚   โ”‚ ์ปจํŠธ๋กค๋Ÿฌ   โ”‚ โ”‚ ์ปจํŠธ๋กค๋Ÿฌ   โ”‚ โ”‚ ์ปจํŠธ๋กค๋Ÿฌ   โ”‚ โ”‚ ์ปจํŠธ๋กค๋Ÿฌ   โ”‚          โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ”‚                        โ”‚              โ”‚              โ”‚                  โ”‚
โ”‚                        โ–ผ              โ–ผ              โ–ผ                  โ”‚
โ”‚                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚
โ”‚                   โ”‚  HDD    โ”‚   โ”‚  GPU    โ”‚   โ”‚  NIC    โ”‚              โ”‚
โ”‚                   โ”‚  SSD    โ”‚   โ”‚         โ”‚   โ”‚         โ”‚              โ”‚
โ”‚                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์žฅ์น˜ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ:                                                   โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚  ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ    โ”‚ ๋ช…๋ น ๋ ˆ์ง€์Šคํ„ฐ   โ”‚ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ           โ”‚   โ”‚
โ”‚   โ”‚  (Status)         โ”‚ (Command)       โ”‚ (Data)                    โ”‚   โ”‚
โ”‚   โ”‚  - ์ค€๋น„/์™„๋ฃŒ      โ”‚ - ์ฝ๊ธฐ/์“ฐ๊ธฐ     โ”‚ - I/O ๋ฐ์ดํ„ฐ ๋ฒ„ํผ        โ”‚   โ”‚
โ”‚   โ”‚  - ์˜ค๋ฅ˜           โ”‚ - ์ œ์–ด ๋ช…๋ น     โ”‚                           โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2. I/O ๋ฐฉ์‹

2.1 ํด๋ง (Polling / Programmed I/O)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           ํด๋ง ๋ฐฉ์‹                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   CPU๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฅ์น˜ ์ƒํƒœ๋ฅผ ํ™•์ธ                                     โ”‚
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚  CPU                          ์žฅ์น˜ ์ปจํŠธ๋กค๋Ÿฌ                      โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  1. ๋ช…๋ น ์ „์†ก โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ ๋ช…๋ น ๋ ˆ์ง€์Šคํ„ฐ                 โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  2. while (์ƒํƒœ == busy) {    โ—€โ”€โ”€ ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ                 โ”‚   โ”‚
โ”‚   โ”‚        // ๊ณ„์† ํ™•์ธ (CPU ๋‚ญ๋น„!)                                 โ”‚   โ”‚
โ”‚   โ”‚     }                                                            โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  3. ๋ฐ์ดํ„ฐ ์ „์†ก โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ/โ—€โ”€โ”€ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ             โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  4. ์™„๋ฃŒ ํ™•์ธ                 โ—€โ”€โ”€ ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ                 โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์žฅ์ :                                                                  โ”‚
โ”‚   - ๊ตฌํ˜„ ๊ฐ„๋‹จ                                                           โ”‚
โ”‚   - ๋น ๋ฅธ ์žฅ์น˜์—์„œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ ์ ์Œ                                       โ”‚
โ”‚                                                                          โ”‚
โ”‚   ๋‹จ์ :                                                                  โ”‚
โ”‚   - CPU ์‹œ๊ฐ„ ๋‚ญ๋น„ (Busy Waiting)                                        โ”‚
โ”‚   - ๋А๋ฆฐ ์žฅ์น˜์—์„œ ๋น„ํšจ์œจ์                                               โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์‚ฌ์šฉ ์˜ˆ: ๋น ๋ฅธ ๋„คํŠธ์›Œํฌ ์žฅ์น˜ (๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰)                             โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.2 ์ธํ„ฐ๋ŸฝํŠธ (Interrupt-Driven I/O)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹                                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   ์‹œ๊ฐ„ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ              โ”‚
โ”‚                                                                          โ”‚
โ”‚   CPU:    [๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰]              [์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ]  [๋‹ค๋ฅธ ์ž‘์—…]    โ”‚
โ”‚                โ”‚                              โ–ฒ                          โ”‚
โ”‚                โ”‚ I/O ์š”์ฒญ                     โ”‚ ์ธํ„ฐ๋ŸฝํŠธ                 โ”‚
โ”‚                โ–ผ                              โ”‚ ์™„๋ฃŒ ์‹ ํ˜ธ                โ”‚
โ”‚   ์žฅ์น˜:       [I/O ์ž‘์—… ์ˆ˜ํ–‰...............] โ”‚                          โ”‚
โ”‚                                               โ”‚                          โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๊ณผ์ •:                                                    โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  1. ์žฅ์น˜๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ ์‹ ํ˜ธ ๋ฐœ์ƒ                                   โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  2. CPU๊ฐ€ ํ˜„์žฌ ์ž‘์—… ์ค‘๋‹จ                                        โ”‚   โ”‚
โ”‚   โ”‚     - ๋ ˆ์ง€์Šคํ„ฐ ์ €์žฅ                                             โ”‚   โ”‚
โ”‚   โ”‚     - PC (Program Counter) ์ €์žฅ                                 โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  3. ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ ํ…Œ์ด๋ธ” ์กฐํšŒ                                   โ”‚   โ”‚
โ”‚   โ”‚     ์ธํ„ฐ๋ŸฝํŠธ ๋ฒˆํ˜ธ โ†’ ํ•ธ๋“ค๋Ÿฌ ์ฃผ์†Œ                                 โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  4. ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ (ISR) ์‹คํ–‰                                  โ”‚   โ”‚
โ”‚   โ”‚     - ์žฅ์น˜ ์ƒํƒœ ํ™•์ธ                                            โ”‚   โ”‚
โ”‚   โ”‚     - ๋ฐ์ดํ„ฐ ์ „์†ก                                               โ”‚   โ”‚
โ”‚   โ”‚     - ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๊นจ์šฐ๊ธฐ                                 โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ”‚  5. ๋ ˆ์ง€์Šคํ„ฐ/PC ๋ณต์›, ์›๋ž˜ ์ž‘์—… ์žฌ๊ฐœ                            โ”‚   โ”‚
โ”‚   โ”‚                                                                  โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์žฅ์ : CPU๊ฐ€ I/O ๋Œ€๊ธฐ ์ค‘ ๋‹ค๋ฅธ ์ž‘์—… ๊ฐ€๋Šฅ                                โ”‚
โ”‚   ๋‹จ์ : ์ธํ„ฐ๋ŸฝํŠธ ์˜ค๋ฒ„ํ—ค๋“œ, ๋นˆ๋ฒˆํ•œ I/O์—์„œ ๋น„ํšจ์œจ์                       โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.3 DMA (Direct Memory Access)

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

3. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„

3.1 ๋“œ๋ผ์ด๋ฒ„ ๊ตฌ์กฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ๊ณ„์ธต                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚                     ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜                          โ”‚   โ”‚
โ”‚   โ”‚                   (open, read, write, ioctl)                    โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                โ”‚ ์‹œ์Šคํ…œ ์ฝœ                              โ”‚
โ”‚                                โ–ผ                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚                         VFS ๊ณ„์ธต                                 โ”‚   โ”‚
โ”‚   โ”‚               (Virtual File System)                              โ”‚   โ”‚
โ”‚   โ”‚            ์žฅ์น˜ ๋…๋ฆฝ์ ์ธ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค                       โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                โ”‚                                        โ”‚
โ”‚          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”‚
โ”‚          โ–ผ                     โ–ผ                     โ–ผ                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”‚
โ”‚   โ”‚ ๋ธ”๋ก ๋“œ๋ผ์ด๋ฒ„โ”‚       โ”‚ ๋ฌธ์ž ๋“œ๋ผ์ด๋ฒ„โ”‚       โ”‚ ๋„คํŠธ์›Œํฌ    โ”‚         โ”‚
โ”‚   โ”‚  (Block)    โ”‚       โ”‚ (Character) โ”‚       โ”‚ ๋“œ๋ผ์ด๋ฒ„    โ”‚         โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ”‚
โ”‚          โ”‚                     โ”‚                     โ”‚                 โ”‚
โ”‚          โ–ผ                     โ–ผ                     โ–ผ                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”‚
โ”‚   โ”‚ SCSI/SATA   โ”‚       โ”‚  TTY/Serial โ”‚       โ”‚  ์ด๋”๋„ท     โ”‚         โ”‚
โ”‚   โ”‚   ๋“œ๋ผ์ด๋ฒ„   โ”‚       โ”‚   ๋“œ๋ผ์ด๋ฒ„   โ”‚       โ”‚  ๋“œ๋ผ์ด๋ฒ„    โ”‚         โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ”‚
โ”‚          โ”‚                     โ”‚                     โ”‚                 โ”‚
โ”‚          โ–ผ                     โ–ผ                     โ–ผ                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”‚
โ”‚   โ”‚    ํ•˜๋“œ์›จ์–ด   โ”‚       โ”‚    ํ•˜๋“œ์›จ์–ด   โ”‚       โ”‚    ํ•˜๋“œ์›จ์–ด   โ”‚         โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3.2 Linux ๋“œ๋ผ์ด๋ฒ„ ์˜ˆ์‹œ

// ๊ฐ„๋‹จํ•œ ๋ฌธ์ž ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ๊ตฌ์กฐ
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/uaccess.h>

#define DEVICE_NAME "mydevice"

static int major_number;
static char device_buffer[1024];
static int open_count = 0;

// ์žฅ์น˜ ์—ด๊ธฐ
static int device_open(struct inode *inode, struct file *file) {
    open_count++;
    printk(KERN_INFO "mydevice: opened %d time(s)\n", open_count);
    return 0;
}

// ์žฅ์น˜ ๋‹ซ๊ธฐ
static int device_release(struct inode *inode, struct file *file) {
    printk(KERN_INFO "mydevice: closed\n");
    return 0;
}

// ์žฅ์น˜์—์„œ ์ฝ๊ธฐ
static ssize_t device_read(struct file *file, char __user *buffer,
                           size_t length, loff_t *offset) {
    int bytes_to_read = min(length, sizeof(device_buffer) - (size_t)*offset);

    if (*offset >= sizeof(device_buffer)) return 0;

    if (copy_to_user(buffer, device_buffer + *offset, bytes_to_read)) {
        return -EFAULT;
    }

    *offset += bytes_to_read;
    return bytes_to_read;
}

// ์žฅ์น˜์— ์“ฐ๊ธฐ
static ssize_t device_write(struct file *file, const char __user *buffer,
                            size_t length, loff_t *offset) {
    int bytes_to_write = min(length, sizeof(device_buffer) - 1);

    if (copy_from_user(device_buffer, buffer, bytes_to_write)) {
        return -EFAULT;
    }

    device_buffer[bytes_to_write] = '\0';
    return bytes_to_write;
}

// ํŒŒ์ผ ์—ฐ์‚ฐ ๊ตฌ์กฐ์ฒด
static struct file_operations fops = {
    .owner = THIS_MODULE,
    .open = device_open,
    .release = device_release,
    .read = device_read,
    .write = device_write,
};

// ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”
static int __init mydevice_init(void) {
    major_number = register_chrdev(0, DEVICE_NAME, &fops);
    if (major_number < 0) {
        printk(KERN_ALERT "Failed to register device\n");
        return major_number;
    }
    printk(KERN_INFO "mydevice: registered with major number %d\n",
           major_number);
    return 0;
}

// ๋ชจ๋“ˆ ์ •๋ฆฌ
static void __exit mydevice_exit(void) {
    unregister_chrdev(major_number, DEVICE_NAME);
    printk(KERN_INFO "mydevice: unregistered\n");
}

module_init(mydevice_init);
module_exit(mydevice_exit);
MODULE_LICENSE("GPL");

4. ๋ฒ„ํผ๋ง ์ „๋žต

4.1 ๋ฒ„ํผ๋ง ์œ ํ˜•

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         ๋ฒ„ํผ๋ง ์œ ํ˜•                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   1. ๋‹จ์ผ ๋ฒ„ํผ๋ง (Single Buffering)                                     โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚   โ”‚ ์žฅ์น˜    โ”‚ โ”€โ”€โ”€โ–ถ โ”‚  ๋ฒ„ํผ   โ”‚ โ”€โ”€โ”€โ–ถ โ”‚ ํ”„๋กœ์„ธ์Šค โ”‚                        โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ”‚                                                                          โ”‚
โ”‚   ๋ฌธ์ œ: ๋ฒ„ํผ ์ฒ˜๋ฆฌ ์ค‘ ์žฅ์น˜ ๋Œ€๊ธฐ                                          โ”‚
โ”‚                                                                          โ”‚
โ”‚   2. ์ด์ค‘ ๋ฒ„ํผ๋ง (Double Buffering)                                     โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚   โ”‚ ์žฅ์น˜    โ”‚ โ”€โ”€โ”€โ–ถ โ”‚ ๋ฒ„ํผ A  โ”‚ โ”€โ”€โ”€โ–ถ โ”‚ ํ”„๋กœ์„ธ์Šค โ”‚                        โ”‚
โ”‚   โ”‚         โ”‚      โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค      โ”‚         โ”‚                        โ”‚
โ”‚   โ”‚         โ”‚ โ”€โ”€โ”€โ–ถ โ”‚ ๋ฒ„ํผ B  โ”‚ โ”€โ”€โ”€โ–ถ โ”‚         โ”‚                        โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์žฅ์น˜๊ฐ€ A์— ์“ฐ๋Š” ๋™์•ˆ ํ”„๋กœ์„ธ์Šค๋Š” B์—์„œ ์ฝ์Œ (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ)               โ”‚
โ”‚                                                                          โ”‚
โ”‚   3. ์ˆœํ™˜ ๋ฒ„ํผ๋ง (Circular Buffering)                                   โ”‚
โ”‚                                                                          โ”‚
โ”‚        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚        โ”‚           ์ˆœํ™˜ ๋ฒ„ํผ ํ                 โ”‚                        โ”‚
โ”‚        โ”‚    โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”    โ”‚                        โ”‚
โ”‚        โ”‚    โ”‚ 0 โ”‚ 1 โ”‚ 2 โ”‚ 3 โ”‚ 4 โ”‚ 5 โ”‚ 6 โ”‚    โ”‚                        โ”‚
โ”‚        โ”‚    โ””โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜    โ”‚                        โ”‚
โ”‚        โ”‚        โ†‘               โ†‘             โ”‚                        โ”‚
โ”‚        โ”‚      head            tail            โ”‚                        โ”‚
โ”‚        โ”‚   (์†Œ๋น„ ์œ„์น˜)     (์ƒ์‚ฐ ์œ„์น˜)        โ”‚                        โ”‚
โ”‚        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ”‚                                                                          โ”‚
โ”‚   ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ํŒจํ„ด์—์„œ ํšจ์œจ์                                          โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

4.2 ์Šคํ’€๋ง (Spooling)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                          ์Šคํ’€๋ง                                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   Simultaneous Peripheral Operations On-Line                            โ”‚
โ”‚                                                                          โ”‚
โ”‚   ํ”„๋ฆฐํ„ฐ ์Šคํ’€๋ง ์˜ˆ:                                                     โ”‚
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                                           โ”‚
โ”‚   โ”‚ ํ”„๋กœ์„ธ์Šค1โ”‚โ”€โ”€โ”€โ”                                                      โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚
โ”‚                 โ”‚    โ”‚                  โ”‚    โ”‚             โ”‚            โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”œโ”€โ”€โ”€โ–ถโ”‚   ์Šคํ’€ ๋””๋ ‰ํ† ๋ฆฌ  โ”‚โ”€โ”€โ”€โ–ถโ”‚  ํ”„๋ฆฐํ„ฐ     โ”‚            โ”‚
โ”‚   โ”‚ ํ”„๋กœ์„ธ์Šค2โ”‚โ”€โ”€โ”€โ”ค    โ”‚   (๋””์Šคํฌ ํ)   โ”‚    โ”‚  ๋ฐ๋ชฌ       โ”‚โ”€โ”€โ”€โ–ถ ํ”„๋ฆฐํ„ฐ โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚    โ”‚                  โ”‚    โ”‚  (์ˆœ์ฐจ์ฒ˜๋ฆฌ)  โ”‚            โ”‚
โ”‚                 โ”‚    โ”‚  job1.spl       โ”‚    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚    โ”‚  job2.spl       โ”‚                                โ”‚
โ”‚   โ”‚ ํ”„๋กœ์„ธ์Šค3โ”‚โ”€โ”€โ”€โ”˜    โ”‚  job3.spl       โ”‚                                โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                โ”‚
โ”‚                                                                          โ”‚
โ”‚   ํŠน์ง•:                                                                  โ”‚
โ”‚   - ๋А๋ฆฐ ์žฅ์น˜ (ํ”„๋ฆฐํ„ฐ)๋ฅผ ๊ฐ€์ƒํ™”                                         โ”‚
โ”‚   - ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— "์ถœ๋ ฅ" ๊ฐ€๋Šฅ                                  โ”‚
โ”‚   - ์‹ค์ œ ์ถœ๋ ฅ์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ                                         โ”‚
โ”‚   - ํ”„๋กœ์„ธ์Šค๋Š” ์ฆ‰์‹œ ๋ฐ˜ํ™˜๋จ (๋น„๋™๊ธฐ)                                     โ”‚
โ”‚                                                                          โ”‚
โ”‚   ๋‹ค๋ฅธ ์˜ˆ: ๋ฉ”์ผ ์Šคํ’€, ๋ฐฐ์น˜ ์ž‘์—… ํ                                      โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

5. IPC ๊ฐœ์š”

5.1 ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        IPC ๋ฐฉ์‹ ๋น„๊ต                                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚      ๋ฐฉ์‹       โ”‚                    ํŠน์ง•                          โ”‚ โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚
โ”‚  โ”‚ ํŒŒ์ดํ”„ (Pipe)   โ”‚ - ๋‹จ๋ฐฉํ–ฅ (์ต๋ช…), ์–‘๋ฐฉํ–ฅ (๋ช…๋ช…)                  โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ๋ถ€๋ชจ-์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹                     โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ                                 โ”‚ โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚
โ”‚  โ”‚ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ     โ”‚ - ๊ฐ€์žฅ ๋น ๋ฆ„ (์ปค๋„ ๊ฐœ์ž… ์ตœ์†Œ)                    โ”‚ โ”‚
โ”‚  โ”‚ (Shared Memory) โ”‚ - ๋™๊ธฐํ™” ํ•„์š” (์„ธ๋งˆํฌ์–ด ๋“ฑ)                     โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ์ ํ•ฉ                          โ”‚ โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚
โ”‚  โ”‚ ๋ฉ”์‹œ์ง€ ํ       โ”‚ - ๊ตฌ์กฐํ™”๋œ ๋ฉ”์‹œ์ง€                               โ”‚ โ”‚
โ”‚  โ”‚ (Message Queue) โ”‚ - ๋น„๋™๊ธฐ ํ†ต์‹                                    โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ๊ฐ€๋Šฅ                            โ”‚ โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚
โ”‚  โ”‚ ์‹œ๊ทธ๋„ (Signal) โ”‚ - ๋น„๋™๊ธฐ ์•Œ๋ฆผ                                   โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ์ œํ•œ๋œ ์ •๋ณด ์ „๋‹ฌ                              โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ์ธํ„ฐ๋ŸฝํŠธ์™€ ์œ ์‚ฌ                               โ”‚ โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚
โ”‚  โ”‚ ์†Œ์ผ“ (Socket)   โ”‚ - ๋„คํŠธ์›Œํฌ ํ†ต์‹                                  โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹  ๊ฐ€๋Šฅ                      โ”‚ โ”‚
โ”‚  โ”‚                 โ”‚ - TCP/UDP ํ”„๋กœํ† ์ฝœ                              โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

6. ํŒŒ์ดํ”„

6.1 ์ต๋ช… ํŒŒ์ดํ”„ (Anonymous Pipe)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ์ต๋ช… ํŒŒ์ดํ”„                                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   ๋ถ€๋ชจ-์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹                                      โ”‚
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                   โ”‚
โ”‚   โ”‚   ๋ถ€๋ชจ      โ”‚     ํŒŒ์ดํ”„          โ”‚   ์ž์‹      โ”‚                   โ”‚
โ”‚   โ”‚  ํ”„๋กœ์„ธ์Šค   โ”‚                     โ”‚  ํ”„๋กœ์„ธ์Šค   โ”‚                   โ”‚
โ”‚   โ”‚             โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚             โ”‚                   โ”‚
โ”‚   โ”‚ write(fd[1])โ”‚โ”€โ–ถโ”‚===============โ”‚โ”€โ–ถโ”‚ read(fd[0]) โ”‚                   โ”‚
โ”‚   โ”‚             โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚             โ”‚                   โ”‚
โ”‚   โ”‚  close(fd[0])                     โ”‚ close(fd[1])โ”‚                   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ”‚
โ”‚                                                                          โ”‚
โ”‚   fd[0]: ์ฝ๊ธฐ ๋ (Read End)                                             โ”‚
โ”‚   fd[1]: ์“ฐ๊ธฐ ๋ (Write End)                                            โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// ์ต๋ช… ํŒŒ์ดํ”„ ์˜ˆ์ œ
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main() {
    int pipefd[2];
    pid_t pid;
    char buffer[1024];

    // ํŒŒ์ดํ”„ ์ƒ์„ฑ
    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(1);
    }

    pid = fork();
    if (pid == -1) {
        perror("fork");
        exit(1);
    }

    if (pid == 0) {
        // ์ž์‹ ํ”„๋กœ์„ธ์Šค: ํŒŒ์ดํ”„์—์„œ ์ฝ๊ธฐ
        close(pipefd[1]);  // ์“ฐ๊ธฐ ๋ ๋‹ซ๊ธฐ

        ssize_t n = read(pipefd[0], buffer, sizeof(buffer));
        printf("์ž์‹์ด ๋ฐ›์Œ: %.*s\n", (int)n, buffer);

        close(pipefd[0]);
        exit(0);
    } else {
        // ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค: ํŒŒ์ดํ”„์— ์“ฐ๊ธฐ
        close(pipefd[0]);  // ์ฝ๊ธฐ ๋ ๋‹ซ๊ธฐ

        const char* message = "Hello from parent!";
        write(pipefd[1], message, strlen(message));
        printf("๋ถ€๋ชจ๊ฐ€ ๋ณด๋ƒ„: %s\n", message);

        close(pipefd[1]);
        wait(NULL);
    }

    return 0;
}

6.2 ๋ช…๋ช… ํŒŒ์ดํ”„ (Named Pipe / FIFO)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                       ๋ช…๋ช… ํŒŒ์ดํ”„ (FIFO)                                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŒŒ์ดํ”„                                      โ”‚
โ”‚   ๊ด€๋ จ ์—†๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๊ฐ€๋Šฅ                                       โ”‚
โ”‚                                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    /tmp/myfifo    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                    โ”‚
โ”‚   โ”‚ ํ”„๋กœ์„ธ์Šค A  โ”‚                   โ”‚ ํ”„๋กœ์„ธ์Šค B  โ”‚                    โ”‚
โ”‚   โ”‚             โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚             โ”‚                    โ”‚
โ”‚   โ”‚ write() โ”€โ”€โ”€โ”ผโ”€โ–ถโ”‚  FIFO ํŒŒ์ผ  โ”‚โ”€โ”€โ–ถโ”‚ read()     โ”‚                    โ”‚
โ”‚   โ”‚             โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚             โ”‚                    โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                    โ”‚
โ”‚                                                                          โ”‚
โ”‚   $ mkfifo /tmp/myfifo   # ์ƒ์„ฑ                                        โ”‚
โ”‚   $ ls -l /tmp/myfifo                                                   โ”‚
โ”‚   prw-r--r-- 1 user group 0 Jan 15 10:00 /tmp/myfifo                   โ”‚
โ”‚   # 'p'๊ฐ€ ํŒŒ์ดํ”„ ์œ ํ˜• ํ‘œ์‹œ                                              โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// FIFO ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>

#define FIFO_PATH "/tmp/myfifo"

// Writer ํ”„๋กœ์„ธ์Šค
void writer() {
    mkfifo(FIFO_PATH, 0666);

    int fd = open(FIFO_PATH, O_WRONLY);
    const char* message = "Hello via FIFO!";
    write(fd, message, strlen(message));
    close(fd);
}

// Reader ํ”„๋กœ์„ธ์Šค
void reader() {
    int fd = open(FIFO_PATH, O_RDONLY);
    char buffer[1024];
    ssize_t n = read(fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Received: %s\n", buffer);
    close(fd);
}

7. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ

7.1 POSIX ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   ํ”„๋กœ์„ธ์Šค A                         ํ”„๋กœ์„ธ์Šค B                         โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                โ”‚
โ”‚   โ”‚ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„   โ”‚               โ”‚ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„   โ”‚                โ”‚
โ”‚   โ”‚                 โ”‚               โ”‚                 โ”‚                โ”‚
โ”‚   โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚               โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚                โ”‚
โ”‚   โ”‚ โ”‚    ์ฝ”๋“œ     โ”‚ โ”‚               โ”‚ โ”‚    ์ฝ”๋“œ     โ”‚ โ”‚                โ”‚
โ”‚   โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚               โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚                โ”‚
โ”‚   โ”‚ โ”‚   ๋ฐ์ดํ„ฐ    โ”‚ โ”‚               โ”‚ โ”‚   ๋ฐ์ดํ„ฐ    โ”‚ โ”‚                โ”‚
โ”‚   โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚               โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚                โ”‚
โ”‚   โ”‚ โ”‚ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ  โ”‚โ—€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ–ถโ”‚ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ  โ”‚ โ”‚                โ”‚
โ”‚   โ”‚ โ”‚ (0x7000)    โ”‚ โ”‚      โ”‚        โ”‚ โ”‚ (0x9000)    โ”‚ โ”‚                โ”‚
โ”‚   โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚      โ”‚        โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚                โ”‚
โ”‚   โ”‚ โ”‚    ํž™       โ”‚ โ”‚      โ”‚        โ”‚ โ”‚    ํž™       โ”‚ โ”‚                โ”‚
โ”‚   โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚      โ”‚        โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚                โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ”‚
โ”‚                            โ”‚                                            โ”‚
โ”‚                            โ–ผ                                            โ”‚
โ”‚                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                               โ”‚
โ”‚                  โ”‚     ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ      โ”‚                               โ”‚
โ”‚                  โ”‚                     โ”‚                               โ”‚
โ”‚                  โ”‚    [๊ณต์œ  ์˜์—ญ]       โ”‚                               โ”‚
โ”‚                  โ”‚   ํ”„๋ ˆ์ž„ 100-110    โ”‚                               โ”‚
โ”‚                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                               โ”‚
โ”‚                                                                          โ”‚
โ”‚   ๊ฐ™์€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ๊ฐ€์ƒ ์ฃผ์†Œ๋กœ ๋งคํ•‘                              โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// POSIX ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์ œ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/wait.h>

#define SHM_NAME "/my_shm"
#define SHM_SIZE 4096

typedef struct {
    int counter;
    char message[256];
} SharedData;

int main() {
    // ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ
    int fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
    ftruncate(fd, SHM_SIZE);

    // ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘
    SharedData* shared = mmap(NULL, SHM_SIZE,
                              PROT_READ | PROT_WRITE,
                              MAP_SHARED, fd, 0);

    // ์ดˆ๊ธฐํ™”
    shared->counter = 0;
    strcpy(shared->message, "Hello!");

    pid_t pid = fork();

    if (pid == 0) {
        // ์ž์‹: ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ˆ˜์ •
        printf("์ž์‹ ์ฝ์Œ: counter=%d, message=%s\n",
               shared->counter, shared->message);

        shared->counter = 100;
        strcpy(shared->message, "Modified by child");

        munmap(shared, SHM_SIZE);
        exit(0);
    } else {
        // ๋ถ€๋ชจ: ์ž์‹ ๋Œ€๊ธฐ ํ›„ ํ™•์ธ
        wait(NULL);

        printf("๋ถ€๋ชจ ์ฝ์Œ: counter=%d, message=%s\n",
               shared->counter, shared->message);

        // ์ •๋ฆฌ
        munmap(shared, SHM_SIZE);
        shm_unlink(SHM_NAME);
    }

    return 0;
}

7.2 ๋™๊ธฐํ™” ํ•„์š”์„ฑ

// ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ธ๋งˆํฌ์–ด ๋™๊ธฐํ™”
#include <semaphore.h>

typedef struct {
    sem_t mutex;       // ์ƒํ˜ธ ๋ฐฐ์ œ
    sem_t items;       // ์•„์ดํ…œ ์ˆ˜
    sem_t spaces;      // ๋นˆ ๊ณต๊ฐ„
    int buffer[10];
    int in, out;
} SharedBuffer;

// ์ƒ์‚ฐ์ž
void producer(SharedBuffer* sb, int item) {
    sem_wait(&sb->spaces);  // ๋นˆ ๊ณต๊ฐ„ ๋Œ€๊ธฐ
    sem_wait(&sb->mutex);   // ์ž„๊ณ„ ๊ตฌ์—ญ

    sb->buffer[sb->in] = item;
    sb->in = (sb->in + 1) % 10;

    sem_post(&sb->mutex);   // ์ž„๊ณ„ ๊ตฌ์—ญ ํ•ด์ œ
    sem_post(&sb->items);   // ์•„์ดํ…œ ์ถ”๊ฐ€ ์•Œ๋ฆผ
}

// ์†Œ๋น„์ž
int consumer(SharedBuffer* sb) {
    sem_wait(&sb->items);   // ์•„์ดํ…œ ๋Œ€๊ธฐ
    sem_wait(&sb->mutex);   // ์ž„๊ณ„ ๊ตฌ์—ญ

    int item = sb->buffer[sb->out];
    sb->out = (sb->out + 1) % 10;

    sem_post(&sb->mutex);   // ์ž„๊ณ„ ๊ตฌ์—ญ ํ•ด์ œ
    sem_post(&sb->spaces);  // ๋นˆ ๊ณต๊ฐ„ ์ถ”๊ฐ€ ์•Œ๋ฆผ

    return item;
}

8. ๋ฉ”์‹œ์ง€ ํ์™€ ์†Œ์ผ“

8.1 POSIX ๋ฉ”์‹œ์ง€ ํ

// ๋ฉ”์‹œ์ง€ ํ ์˜ˆ์ œ
#include <mqueue.h>
#include <stdio.h>
#include <string.h>

#define QUEUE_NAME "/my_queue"

typedef struct {
    long type;
    char text[256];
} Message;

// ์†ก์‹ ์ž
void sender() {
    struct mq_attr attr = {
        .mq_maxmsg = 10,
        .mq_msgsize = sizeof(Message)
    };

    mqd_t mq = mq_open(QUEUE_NAME, O_CREAT | O_WRONLY, 0666, &attr);

    Message msg;
    msg.type = 1;
    strcpy(msg.text, "Hello via Message Queue!");

    mq_send(mq, (char*)&msg, sizeof(msg), 0);
    mq_close(mq);
}

// ์ˆ˜์‹ ์ž
void receiver() {
    mqd_t mq = mq_open(QUEUE_NAME, O_RDONLY);

    Message msg;
    mq_receive(mq, (char*)&msg, sizeof(msg), NULL);

    printf("Received: %s\n", msg.text);

    mq_close(mq);
    mq_unlink(QUEUE_NAME);
}

8.2 ์†Œ์ผ“ ํ†ต์‹ 

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         ์†Œ์ผ“ ํ†ต์‹                                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚   ์„œ๋ฒ„                                     ํด๋ผ์ด์–ธํŠธ                    โ”‚
โ”‚                                                                          โ”‚
โ”‚   socket() โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ socket()                     โ”‚
โ”‚      โ”‚                                         โ”‚                        โ”‚
โ”‚      โ–ผ                                         โ”‚                        โ”‚
โ”‚   bind()                                       โ”‚                        โ”‚
โ”‚      โ”‚                                         โ”‚                        โ”‚
โ”‚      โ–ผ                                         โ”‚                        โ”‚
โ”‚   listen()                                     โ”‚                        โ”‚
โ”‚      โ”‚                                         โ”‚                        โ”‚
โ”‚      โ–ผ                                         โ–ผ                        โ”‚
โ”‚   accept() โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ์—ฐ๊ฒฐ ์š”์ฒญ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ connect()                     โ”‚
โ”‚      โ”‚                                         โ”‚                        โ”‚
โ”‚      โ”‚       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚                        โ”‚
โ”‚      โ–ผ       โ”‚      ๋ฐ์ดํ„ฐ ๊ตํ™˜          โ”‚     โ–ผ                        โ”‚
โ”‚   read() โ—€โ”€โ”€โ”€โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚โ”€โ”€โ”€write()                    โ”‚
โ”‚   write()โ”€โ”€โ”€โ”€โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚โ”€โ”€โ”€read()                     โ”‚
โ”‚      โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚                        โ”‚
โ”‚      โ–ผ                                         โ–ผ                        โ”‚
โ”‚   close() โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ close()                      โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// TCP ์„œ๋ฒ„ ์˜ˆ์ œ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int server_fd, client_fd;
    struct sockaddr_in address;
    socklen_t addrlen = sizeof(address);
    char buffer[1024] = {0};

    // ์†Œ์ผ“ ์ƒ์„ฑ
    server_fd = socket(AF_INET, SOCK_STREAM, 0);

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    // ๋ฐ”์ธ๋”ฉ
    bind(server_fd, (struct sockaddr*)&address, sizeof(address));

    // ๋ฆฌ์Šค๋‹
    listen(server_fd, 3);
    printf("Server listening on port %d\n", PORT);

    // ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ์ˆ˜๋ฝ
    client_fd = accept(server_fd, (struct sockaddr*)&address, &addrlen);

    // ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
    read(client_fd, buffer, sizeof(buffer));
    printf("Received: %s\n", buffer);

    // ์‘๋‹ต ์†ก์‹ 
    send(client_fd, "Hello from server", 17, 0);

    close(client_fd);
    close(server_fd);
    return 0;
}

์—ฐ์Šต ๋ฌธ์ œ

๋ฌธ์ œ 1: I/O ๋ฐฉ์‹ ๋น„๊ต

ํด๋ง, ์ธํ„ฐ๋ŸฝํŠธ, DMA์˜ ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ๊ฐ ์ œ์‹œํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ณด๊ธฐ
1. ํด๋ง (Polling):
   - ๋งค์šฐ ๋น ๋ฅธ ์žฅ์น˜ (๊ณ ์† ๋„คํŠธ์›Œํฌ ์นด๋“œ)
   - ์‘๋‹ต ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง์€ ๊ฒฝ์šฐ
   - ์ธํ„ฐ๋ŸฝํŠธ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ์„ ๋•Œ
   ์˜ˆ: 10Gbps ๋„คํŠธ์›Œํฌ, ์ €์ง€์—ฐ ํŠธ๋ ˆ์ด๋”ฉ ์‹œ์Šคํ…œ

2. ์ธํ„ฐ๋ŸฝํŠธ (Interrupt):
   - ๋А๋ฆฐ ์žฅ์น˜ (ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค)
   - I/O ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๊ฒฝ์šฐ
   - CPU๊ฐ€ ๋‹ค๋ฅธ ์ž‘์—…๋„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
   ์˜ˆ: ์ผ๋ฐ˜ ์ž…๋ ฅ ์žฅ์น˜, ์ €์† ์‹œ๋ฆฌ์–ผ ํฌํŠธ

3. DMA (Direct Memory Access):
   - ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก
   - ๋ธ”๋ก ์žฅ์น˜ (๋””์Šคํฌ, SSD)
   - ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ•„์š”
   ์˜ˆ: ๋””์Šคํฌ I/O, ๋น„๋””์˜ค ์บก์ฒ˜, ๋Œ€์šฉ๋Ÿ‰ ๋„คํŠธ์›Œํฌ ์ „์†ก

๋ฌธ์ œ 2: ํŒŒ์ดํ”„ ํ†ต์‹ 

๋‹ค์Œ ์‰˜ ๋ช…๋ น์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ํŒŒ์ดํ”„ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

$ cat file.txt | grep "error" | wc -l
์ •๋‹ต ๋ณด๊ธฐ
1. ์‰˜์ด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„ ์ƒ์„ฑ:
   pipe1: cat โ†’ grep
   pipe2: grep โ†’ wc

2. ์„ธ ๊ฐœ์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ:

   ํ”„๋กœ์„ธ์Šค 1 (cat):
   - stdout์„ pipe1[1]๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
   - exec("cat", "file.txt")
   - ํŒŒ์ผ ๋‚ด์šฉ์„ pipe1์— ์“ฐ๊ธฐ

   ํ”„๋กœ์„ธ์Šค 2 (grep):
   - stdin์„ pipe1[0]์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
   - stdout์„ pipe2[1]๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
   - exec("grep", "error")
   - pipe1์—์„œ ์ฝ์–ด "error" ํ•„ํ„ฐ๋ง ํ›„ pipe2์— ์“ฐ๊ธฐ

   ํ”„๋กœ์„ธ์Šค 3 (wc):
   - stdin์„ pipe2[0]์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
   - exec("wc", "-l")
   - pipe2์—์„œ ์ฝ์–ด ๋ผ์ธ ์ˆ˜ ์นด์šดํŠธ

3. ๋ฐ์ดํ„ฐ ํ๋ฆ„:
   file.txt โ†’ cat โ†’ pipe1 โ†’ grep โ†’ pipe2 โ†’ wc โ†’ stdout

๋ฌธ์ œ 3: ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ vs ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ

ํ”„๋กœ๋“€์„œ-์ปจ์Šˆ๋จธ ๋ฌธ์ œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฉ”์‹œ์ง€ ํ์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ณด๊ธฐ
๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ:

์žฅ์ :
- ๊ฐ€์žฅ ๋น ๋ฅธ IPC (์ปค๋„ ๊ฐœ์ž… ์—†์Œ)
- ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ํšจ์œจ์ 
- ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋‹จ์ :
- ๋™๊ธฐํ™” ์ง์ ‘ ๊ตฌํ˜„ ํ•„์š” (์„ธ๋งˆํฌ์–ด, ๋ฎคํ…์Šค)
- ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ ์กฐ๊ฑด ์ฃผ์˜
- ๋‹จ์ผ ์‹œ์Šคํ…œ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ณต์žก

๋ฉ”์‹œ์ง€ ํ:

์žฅ์ :
- ๋™๊ธฐํ™” ๋‚ด์žฅ (์šด์˜์ฒด์ œ๊ฐ€ ์ฒ˜๋ฆฌ)
- ๊ตฌ์กฐํ™”๋œ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
- ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ๊ฐ€๋Šฅ
- ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„ ๋ช…ํ™•

๋‹จ์ :
- ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ์˜ค๋ฒ„ํ—ค๋“œ
- ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ ์ œํ•œ
- ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋А๋ฆผ

์„ ํƒ ๊ธฐ์ค€:
- ๋Œ€์šฉ๋Ÿ‰/๊ณ ์†: ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ
- ๊ฐ„ํŽธํ•จ/์•ˆ์ „์„ฑ: ๋ฉ”์‹œ์ง€ ํ
- ๋ถ„์‚ฐ ์‹œ์Šคํ…œ: ์†Œ์ผ“ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ๋ฉ”์‹œ์ง€ ํ

๋ฌธ์ œ 4: DMA ๊ณ„์‚ฐ

1MB ํŒŒ์ผ์„ ๋””์Šคํฌ์—์„œ ์ฝ์„ ๋•Œ DMA์™€ PIO(Programmed I/O)์˜ CPU ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์‹œ์˜ค.

  • ๋ธ”๋ก ํฌ๊ธฐ: 512 ๋ฐ”์ดํŠธ
  • PIO: ๋ธ”๋ก๋‹น CPU 100 ์‚ฌ์ดํด
  • DMA: ์„ค์ • 1000 ์‚ฌ์ดํด, ์™„๋ฃŒ ์ธํ„ฐ๋ŸฝํŠธ 500 ์‚ฌ์ดํด
  • CPU ํด๋Ÿญ: 1GHz
์ •๋‹ต ๋ณด๊ธฐ
ํŒŒ์ผ ํฌ๊ธฐ: 1MB = 1,048,576 ๋ฐ”์ดํŠธ
๋ธ”๋ก ์ˆ˜: 1,048,576 / 512 = 2,048 ๋ธ”๋ก

PIO ๋ฐฉ์‹:
- CPU ์‚ฌ์ดํด = 2,048 ร— 100 = 204,800 ์‚ฌ์ดํด
- CPU ์‹œ๊ฐ„ = 204,800 / 1,000,000,000 = 0.2048 ms

DMA ๋ฐฉ์‹:
- ์„ค์ •: 1,000 ์‚ฌ์ดํด
- ์™„๋ฃŒ ์ธํ„ฐ๋ŸฝํŠธ: 500 ์‚ฌ์ดํด
- ์ด CPU ์‚ฌ์ดํด = 1,000 + 500 = 1,500 ์‚ฌ์ดํด
- CPU ์‹œ๊ฐ„ = 1,500 / 1,000,000,000 = 0.0015 ms

๋น„๊ต:
- PIO: 0.2048 ms
- DMA: 0.0015 ms
- DMA๊ฐ€ ์•ฝ 136๋ฐฐ ๋” ํšจ์œจ์ 

์ถ”๊ฐ€ ๊ณ ๋ ค:
- DMA๋Š” ์„ค์ • ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์–ด ๋งค์šฐ ์ž‘์€ ์ „์†ก์—๋Š” ๋น„ํšจ์œจ์ 
- ์†์ต๋ถ„๊ธฐ์ : 1500 / 100 = 15 ๋ธ”๋ก = 7.5 KB
- 7.5 KB ์ด์ƒ์˜ ์ „์†ก์—์„œ DMA๊ฐ€ ์œ ๋ฆฌ

๋ฌธ์ œ 5: ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

TCP์™€ UDP ์†Œ์ผ“์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ ์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์‹œํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ณด๊ธฐ
TCP (Transmission Control Protocol):

ํŠน์ง•:
- ์—ฐ๊ฒฐ ์ง€ํ–ฅ์  (3-way handshake)
- ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ (์ˆœ์„œ, ์žฌ์ „์†ก)
- ํ๋ฆ„ ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด
- ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ

์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜:
- ์›น (HTTP/HTTPS)
- ์ด๋ฉ”์ผ (SMTP, IMAP)
- ํŒŒ์ผ ์ „์†ก (FTP, SCP)
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ
- SSH

UDP (User Datagram Protocol):

ํŠน์ง•:
- ๋น„์—ฐ๊ฒฐํ˜•
- ์‹ ๋ขฐ์„ฑ ์—†์Œ (์†์‹ค ๊ฐ€๋Šฅ)
- ์ˆœ์„œ ๋ณด์žฅ ์—†์Œ
- ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๊ธฐ๋ฐ˜
- ๋‚ฎ์€ ์˜ค๋ฒ„ํ—ค๋“œ

์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜:
- ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ (๋น„๋””์˜ค, ์˜ค๋””์˜ค)
- ์˜จ๋ผ์ธ ๊ฒŒ์ž„
- DNS ์ฟผ๋ฆฌ
- VoIP
- IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ

์„ ํƒ ๊ธฐ์ค€:
- ์‹ ๋ขฐ์„ฑ ํ•„์ˆ˜: TCP
- ์†๋„/์ €์ง€์—ฐ ์šฐ์„ : UDP
- ์•ฝ๊ฐ„์˜ ์†์‹ค ํ—ˆ์šฉ: UDP
- ์ •ํ™•ํ•œ ์ „๋‹ฌ ํ•„์š”: TCP

๋‹ค์Œ ๋‹จ๊ณ„

์šด์˜์ฒด์ œ ์ด๋ก  ํ•™์Šต์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ถ”์ฒœํ•˜๋Š” ํ•™์Šต ๊ฒฝ๋กœ:

์‹ฌํ™” ํ•™์Šต

  • Linux: ์‹ค์ œ ์šด์˜์ฒด์ œ์—์„œ ํ•™์Šต ๋‚ด์šฉ ์ ์šฉ
  • ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ: ps, top, kill
  • ํŒŒ์ผ ์‹œ์Šคํ…œ: mount, df, du
  • ๋„คํŠธ์›Œํ‚น: netstat, ss, iptables

๊ด€๋ จ ๋ถ„์•ผ

  • Computer_Architecture: ํ•˜๋“œ์›จ์–ด ๊ด€์  ์ดํ•ด
  • ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ
  • ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ
  • ์ž…์ถœ๋ ฅ ์‹œ์Šคํ…œ

์‹ค์Šต ํ”„๋กœ์ ํŠธ

  • ๋ฏธ๋‹ˆ ์‰˜ ๊ตฌํ˜„ (ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ, ํŒŒ์ดํ”„)
  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž ๊ตฌํ˜„
  • ํŒŒ์ผ ์‹œ์Šคํ…œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ
  • ์Šค์ผ€์ค„๋Ÿฌ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

์ฐธ๊ณ  ์ž๋ฃŒ

  • Silberschatz, "Operating System Concepts" Chapters 12-13
  • Stevens, "Advanced Programming in the UNIX Environment"
  • Linux man pages: pipe(2), mmap(2), socket(2), shm_open(3)
  • Linux kernel documentation: https://www.kernel.org/doc/html/latest/
  • Tanenbaum, "Modern Operating Systems" Chapters 5-6
to navigate between lessons