ํฌ์ŠคํŠธ

๐ŸŒ‘ IO

๐Ÿ’ซ IO


Input/Output, ์ž…์ถœ๋ ฅ

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

๐Ÿ’ซ ์ž…์ถœ๋ ฅ ์žฅ์น˜ IO Device


  • ์ž…์ถœ๋ ฅ ์žฅ์น˜ IO Device
    • ์ž…๋ ฅ Input
      • CPU, DMA ๋“ฑ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์ฃผ๋ณ€ ์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ Data Register๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ฝ์–ด ์ฃผ๊ธฐ์–ต์žฅ์น˜๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…
      • ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ์ฝ์„ ๋•Œ์—๋Š” ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ Status Register์˜ ๋ฐ์ดํ„ฐ ์ค€๋น„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ
        • ์ค€๋น„๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ฝ์„ ๊ฒฝ์šฐ ์—‰ํ„ฐ๋ฆฌ ๊ฐ’์„ ์ฝ๊ฒŒ ๋จ
    • ์ถœ๋ ฅ Output
      • ์ž…๋ ฅ๊ณผ ๋ฐ˜๋Œ€๋กœ ์ฃผ๊ธฐ์–ต์žฅ์น˜์œผ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ฝ์–ด ์ฃผ๋ณ€์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…
      • ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ์“ฐ๊ธฐํ•  ๋•Œ์—๋Š”, ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ์ด์ „ ๋ฐ์ดํ„ฐ์˜ ์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ
        • ์ด์ „ ๋ฐ์ดํ„ฐ์˜ ์ถœ๋ ฅ ์™„๋ฃŒ ์ „ ๋˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐํ•˜๋ฉด ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
  • ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๊ตฌ์กฐ
    • ์ž…์ถœ๋ ฅ ์žฅ์น˜ ์ œ์–ด๊ธฐ IO Device COntroller ์ž…์ถœ๋ ฅ์žฅ์น˜์ธํ„ฐํŽ˜์ด์Šค
      • ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ Status Register
        • ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋Š”๊ฐ€ ํ˜น์€ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜์—ˆ๋Š” ๊ฐ€ ๋“ฑ ์žฅ์น˜์˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ณณ
      • ๋ช…๋ น ๋ ˆ์ง€์Šคํ„ฐ Command Register
        • ์ž…๋ ฅ ํ˜น์€ ์ถœ๋ ฅ ํ•˜๋ผ๋Š” ๋“ฑ์˜ ๋ช…๋ น์„ ๋ณด๋‚ด๋Š”/์“ฐ๋Š” ๊ณณ
        • ์ž…๋ ฅ ๋ช…๋ น์— ๋”ฐ๋ผ ์ž…๋ ฅ => ๋™๊ธฐ์  ์ž…๋ ฅ (๋””์Šคํฌ ๋“ฑ)
        • ์ž…๋ ฅ ๋ช…๋ น์—†์ด ์ˆ˜์‹œ๋กœ ์ž…๋ ฅ => ๋น„๋™๊ธฐ์  ์ž…๋ ฅ (ํ‚ค๋ณด๋“œ ๋“ฑ)
        • ์ถœ๋ ฅ์€ ์–ธ์ œ๋‚˜ ๋™๊ธฐํ™”
      • ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ Data Register
        • ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์ถœ๋ ฅ๋  ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ๊ณณ
      • ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๊ตฌ๋™๊ธฐ IO Device Driver
        • ์žฅ์น˜ ์ œ์–ด๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž…์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด
  • ์ž…์ถœ๋ ฅ ์žฅ์น˜์˜ ์‹๋ณ„
    • ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์‘ ์ž…์ถœ๋ ฅ Memory Mapped IO
      • ์ž…์ถœ๋ ฅ ์žฅ์น˜์˜ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์˜ ์œ„์น˜๋ฅผ ์ฃผ๊ธฐ์–ต์žฅ์น˜์˜ ์ฃผ์†Œ์˜์—ญ ์ผ๋ถ€์— ๋Œ€์‘
      • ์ฃผ๊ธฐ์–ต์žฅ์น˜ (๋ณ€์ˆ˜, ์ฃผ์†Œ)์—์„œ ์ฝ๊ณ  ์“ฐ๊ธฐํ•˜๋Š” ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž…์ถœ๋ ฅ์ด ์ด๋ฃจ์–ด์ง
      • ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ช…๋ น์–ด์™€ ๋™์ผํ•œ ๊ธฐ๊ณ„ ๋ช…๋ น์–ด (load, save ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…์ถœ๋ ฅ์„ ์ง„ํ–‰ํ•จ
        • ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ํŽธ๋ฆฌํ•˜๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ผ๋ถ€๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ์ž…๋ ฅ ์˜ˆ
    • load r1, 10
      • ๋ฉ”๋ชจ๋ฆฌ 10๋ฒˆ์ง€์— ๋Œ€์‘๋œ ์ž…๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ CPU์˜ r1 ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ฝ์Œ (์ž…๋ ฅ)
    • save r1, 1000
      • ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ 1000๋ฒˆ์ง€์— ์ €์žฅ
  • ์ถœ๋ ฅ ์˜ˆ
    • load r1, 2000
      • ๋ฉ”๋ชจ๋ฆฌ 2000๋ฒˆ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ CPU์˜ r1 ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ ์žฌ
    • saver1, 20
      • ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ 20๋ฒˆ์ง€์— ๋Œ€์‘๋œ ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์— ๊ธฐ๋ก (์ถœ๋ ฅ)
  • ๊ฒฉ๋ฆฌ๋œ ์ž…์ถœ๋ ฅ Isolated IO
    • ์ฃผ๊ธฐ์–ต ์žฅ์น˜์˜ ์ฃผ์†Œ ์˜์—ฌ๊ณผ ๋ณ„๊ฐœ๋กœ ์ž…์ถœ๋ ฅ ์žฅ์น˜ ์ฃผ์†Œ ์˜์—ญ (ํฌํŠธ, Port)์ด ๋”ฐ๋กœ ์žˆ์Œ
    • ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ 10๋ฒˆ์ง€์™€ ์ž…์ถœ๋ ฅ ํฌํŠธ 10์˜ ์ˆซ์ž๋Š” ๋™์ผํ•˜์ง€๋งŒ ์ง€์‹œํ•˜๋Š” ์œ„์น˜๋Š” ์ „ํ˜€ ๋‹ค๋ฆ„
    • ๋”ฐ๋ผ์„œ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๊ธฐ๊ณ„์–ด ์™ธ์— ์ž…์ถœ๋ ฅ ํฌํŠธ ์ ‘๊ทผ์„ ์œ„ํ•œ ์ „์šฉ ๊ธฐ๊ณ„ ๋ช…๋ น์–ด (in, out ๋“ฑ)๊ฐ€ ํ•„์š”ํ•จ
    • = ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์‹œ์Šคํ…œ ์„ค๊ณ„๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•ด์ง
  • ์ž…๋ ฅ ์˜ˆ
    • in r1, 10
      • ์ž…๋ ฅ ํฌํŠธ 10๋ฒˆ์ง€์˜ ์ž…๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ CPU์˜ r1 ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ฝ์Œ (์ž…๋ ฅ)
    • save r1, 1000
      • ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ 1000๋ฒˆ์ง€์— ์ €์žฅ
  • ์ถœ๋ ฅ ์˜ˆ
    • load r1, 2000
      • ๋ฉ”๋ชจ๋ฆฌ 2000๋ฒˆ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ CPU์˜ r1๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ ์žฌ
    • out r1, 20
      • ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ 20๋ฒˆ์ง€์ธ ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์— ์ ์žฌ (์ถœ๋ ฅ)

@@ Storage

๋ฌธ์ œ 4-2 ๋ช…๋ น์–ด
ํ•œ ์ž๋ฆฌ์”ฉ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€๋ฆฐ๋‹ค, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๊ฐ€์žฅ ์™ผ์ชฝ์œผ๋กœ ๊ฐ„๋‹ค

  • ์ž…์ถœ๋ ฅ ๊ฐœ๊ด€

  • ์ž…์ถœ๋ ฅ ๊ณผ์ •
    • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ž…์ถœ๋ ฅ ์š”๊ตฌ => ์šด์˜์ฒด์ œ => ์ž…์ถœ๋ ฅ ์žฅ์น˜ (์ž…์ถœ๋ ฅ ํ•˜๋“œ์›จ์–ด) ์ธํ„ฐํŽ˜์ด์Šค
    • ๋””์Šคํฌ, ํ‚ค๋ณด๋“œ, ๋ชจ๋‹ˆํ„ฐ, ์ธํ„ฐ๋„ท ํ†ต์‹ , ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹ , ์‹œ๋ฆฌ์–ผ ํ†ต์‹ 
  • ์ง์ ‘ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ๊ณผ ๊ฐ„์ ‘ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ
    • ์ง์ ‘ ์ž…์ถœ๋ ฅ
      • ์šด์˜์ฒด์ œ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ HW ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณต์—†์ด ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ
      • #RAW Device
      • #Special File (!Regular File)
      • #Major Number, Minor Number
    • ๊ฐ„์ ‘ ์ž…์ถœ๋ ฅ (๋Œ€๋ถ€๋ถ„์ด)
      • ์šด์˜์ฒด์ œ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ HW ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ „๋‹ฌ
      • #๊ณ„์ธต์  ์ €์žฅ๊ตฌ์กฐ๋ฅผ ์œ„ํ•ด์„œ
      • #ํŒŒ์ผ ์‹œ์Šคํ…œ
      • #TCP/IP ํ”„๋กœํ† ์ฝœ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท(ํ—ค๋”) ๊ฐ™์€ ๊ฑธ ๋ถ™์ด๋Š”
  • ๋ฌธ์ž Character ์ž…์ถœ๋ ฅ ์žฅ์น˜์™€ ๋ธ”๋ก Block ์ž…์ถœ๋ ฅ์žฅ์น˜
    • ๋ฌธ์ž ์ž…์ถœ๋ ฅ ์žฅ์น˜
      • ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๊ฐ€๋ณ€์  ํฌ๊ธฐ์˜ ์ž…์ถœ๋ ฅ (ํ‚ค๋ณด๋“œ, LAN ๋“ฑ)
    • ๋ธ”๋ก ์ž…์ถœ๋ ฅ ์žฅ์น˜
      • ๋””์Šคํฌ์˜ 512๋ฐ”์ดํŠธ ๋‹จ์œ„ ์ž…์ถœ๋ ฅ๊ณผ ๊ฐ™์ด ์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ๋ธ”๋ก ๋‹จ์œ„ ์ž…์ถœ๋ ฅ
      • #ํ•˜๋“œ๋””์Šคํฌ๋Š” ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๊ทธ ๋ฐ”์ดํŠธ๊ฐ€ ํฌํ•จ๋œ ํ•œ ์„นํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ „์ฒด๋ฅผ ๋ฎ์–ด์”Œ์›Œ์•ผ ํ•จ

ํŒŒ์ผ ๊ธฐ์ˆ ์ž File Descriptor : ํŒŒ์ผ์˜ ์ƒ์„ธ ์ •๋ณด์— ๋Œ€ํ•œ ์ง€์‹œ์ž

  • ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์ ˆ์ฐจ (์œ ๋‹‰์Šค/๋ฆฌ๋ˆ…์Šค)
    • ์ž…์ถœ๋ ฅ ์‹œ์Šคํ…œ ํ˜ธ์ถœ (์‹œ์Šคํ…œ ์ฝœ)
      • Open Read Write Close
      • SW ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฒ•์œผ๋กœ OS์— ์ง„์ž…
      • Copy in
        • ์‚ฌ์šฉ์ž ์˜์—ญ => ์šด์˜์ฒด์ œ ์˜์—ญ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
      • Copy-out
        • ์‚ฌ์šฉ์ž ์˜์—ญ <= ์šด์˜์ฒด์ œ ํ–ฅ์œผ๋กœ
  • fd = open(โ€œpathโ€, โ€ฆ) <= ํŒŒ์ผ ๊ธฐ์ˆ ์ž
  • n = read(fd, buf, size)
  • n = write(fd, buf, size)
  • close(fd)

  • ํŒŒ์ผ ํ…Œ์ด๋ธ”

  • ๋Œ€๊ธฐ ์ž… ์ถœ๋ ฅ Blocking IO๊ณผ ๋น„๋Œ€๊ธฐ ์ž…์ถœ๋ ฅ Non-Blocking IO

  • ์ž…๋ ฅ ๋Œ€๊ธฐ ๋ฐฉ์•ˆ
    • n = read(fd, buf, size)
      • 1๋ฐ”์ดํŠธ๋ผ๋„ ์ž…๋ ฅ๋  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ โ†’ Blocking IO
      • size ๋ฐ”์ดํŠธ๊นŒ์ง€ ๋Œ€๊ธฐ โ†’ Blocking IO
      • ์ž…๋ ฅ์ด ์—†์œผ๋ฉด ๋Œ€๊ธฐ์—†์ด ์˜ค๋ฅ˜ ๋ฆฌํ„ด โ†’ Non-Blocking IO
  • ์ถœ๋ ฅ ๋Œ€๊ธฐ ๋ฐฉ์•ˆ
    • n = write(fd, buf, size)
    • 1 ๋ฐ”์ดํŠธ๋ผ๋„ ์ถœ๋ ฅ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ โ†’ Blocking IO
    • size ๋ฐ”์ดํŠธ๊นŒ์ง€ ๋Œ€๊ธฐ โ†’ Blocking IO
    • ํ˜„์žฌ ์ถœ๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ๋Œ€๊ธฐ ์—†์ด ์˜ค๋ฅ˜ ๋ฆฌํ„ด โ†’ Non-Blocking IO
  • ์™œ ์ค‘์š”ํ•˜๋ƒ, ์ธํ„ฐ๋„ท์—์„œ ํด๋ผ๊ฐ€ ์–ด๋–ค ํฌํ„ธ ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ์„ ์‹ ์ฒญํ•˜๋ฉด ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ด์ œ ๋ญ˜ ๋ฐ›์•„์•ผํ•ด ์•„์ด๋””ํ•˜๊ณ  ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ฝ์–ด๋“ค์–ด์•ผ๊ฒ ์ง€ ๊ทธ๊ฒŒ ์ด๊ฑธ๋กœ ํ•˜๋Š”๊ฑฐ์•ผ ์ธํ„ฐ๋„ท์—์„œ๋Š” read ๋Œ€์‹  receive๋„ ๊ฐ€๋Šฅ, ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ๋‚ด์—์„œ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•˜๊ฒ ์ง€, ๊ทผ๋ฐ ํด๋ผ๊ฐ€ ๋งŒ์•ฝ์— ์ž…๋ ฅ์„ ์•ˆํ•ด ๊ทธ๋Ÿฌ๋ฉด ์š” ๋ฐฉ์‹œ๊ทธ์˜ฌ (Block) ์šด์˜์ฒด์ œ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ž…๋ ฅ์ด ์—†์œผ๋‹ˆ๊นŒ ์ž…๋ ฅ ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ ๋ฉˆ์ถฐ์žˆ๊ฒ ์ง€, ํ•œ ์‚ฌ๋žŒ์ด๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ ํด๋ผ๊ฐ€ ๋งŽ์€ ์‚ฌ๋žŒ์ด ์—ฐ๊ฒฐํ•ด์„œ ์ž…๋ ฅ์„ ์•ˆํ•˜๊ณ  ์žˆ๋‹ค๋ฉด.., + ์ ‘์†ํ• ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋„ ํ• ๋‹น์„ ํ•ด์ฃผ๋Š”๋ฐ ๊ทธ๊ฒŒ ์•ˆ๋”˜๋‹ค, DOS ๊ณ ์˜๋กœ ์—ฐ๊ฒฐ์„ ํ•˜๊ณ  ์ž…๋ ฅ์„ ์•ˆํ•˜๋Š”๊ฒƒ, ๊ทธ๋ž˜์„œ Non-Blocking ๋ฐฉ์‹์œผ๋กœ, ์–ด๋Š ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ž…๋ ฅ์ด ์—†์œผ๋ฉด ๋Š์–ด๋ฒ„๋ฆผ, ๊ทธ๋Ÿฐ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค

  • ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๊ตฌ๋™๊ธฐ (๋“œ๋ผ์ด๋ฒ„ ๋“œ๋ผ์ด๋ฒ„ Device Driver)
    • ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์‘ ์ž…์ถœ๋ ฅ, ๊ฒฉ๋ฆฌ๋œ ์ž…์ถœ๋ ฅ
    • ๋™๊ธฐ ์ž…๋ ฅ
      • ๋””์Šคํฌ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ
      • ๋ช…๋ น ๋ ˆ์ง€์Šคํ„ฐ์— โ€˜์ฝ๊ธฐโ€™ ๋ช…๋ น์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •
    • ๋น„๋™๊ธฐ ์ž…๋ ฅ
      • ํ‚ค๋ณด๋“œ, LAN ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ปดํ“จํ„ฐ ์™ธ๋ถ€์—์„œ ์–ธ์ œ ์–ผ๋งˆ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋  ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
      • ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์˜ โ€˜์ค€๋น„โ€™ ์ƒํƒœ๋กœ๋งŒ ํ™•์ธํ•˜์—ฌ ์ž…๋ ฅ
    • ๋™๊ธฐ ์ถœ๋ ฅ
      • ์ถœ๋ ฅ์€ ํ•ญ์ƒ ๋™๊ธฐ์‹์œผ๋กœ๋งŒ ์ด๋ฃฝ์ง
      • ๋ช…๋ น ๋ ˆ์ง€์Šคํ„ฐ์— โ€˜์“ฐ๊ธฐโ€™ ๋ช…๋ น์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •
  • ํ”„๋กœ๊ทธ๋žจ ์ž…์ถœ๋ ฅ (๋ฐ”์œ ๋Œ€๊ธฐ ์ž…์ถœ๋ ฅ Busy-waiting I/O)
  • ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ๋ฐ˜๋ณต๊ตฌ๋ฌธ์œผ๋กœ ์ง€์†์ ์œผ๋กœ ์ฒดํฌํ•˜์—ฌ ์ž…์ถœ๋ ฅ

  • ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ Interrupt-Driven I/O
  • ์ž…์ถœ๋ ฅ ์™„๋ฃŒ ์ธํ„ฐ๋ŸฝํŠธ ํ™œ์šฉ
  • vs Busy-Waiting
    • ๊ณ„์† ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์ž…๋ ฅ์ด ์™”์„ ๋•Œ์—๋งŒ ์ž ๊น์ž ๊น ๋‹ค๋ฅธ ์ผ
    • CPU ํšจ์œจ ์ฆ๊ฐ€
  • ISR Interrupt Service Routine

  • DMA (Direct Memory access) IO
  • ์ž…์ถœ๋ ฅ ์ „๋‹ด ์ฒ˜๋ฆฌ๊ธฐ ํ™œ์šฉ

  • ์ž…์ถœ๋ ฅ์€
  • ๋‹จ์ˆœํžˆ ์™ธ๋ถ€ ์žฅ์น˜์˜ 3๊ฐ€์ง€ ๋ ˆ์ง€์Šคํ„ฐ์ค‘ Data ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•ด
  • ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ = ์ž…๋ ฅ
  • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ = ์ถœ๋ ฅ

  • DMA๋Š” ์œ„ ๋‚ด์šฉ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š”
  • (Address, Count, Command)
  • vs Busy-Waiting
    • CPU๋ฅผ ๋” ๋ถˆ๋ ค๋จน์„ ์ˆ˜ ์žˆ๋‹ค
    • ์ฃผ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์ธ ์ด์œ ๋Š” CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ,
    • DMA๋„ CPU์ฒ˜๋Ÿผ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๊ฑฐ๋‚˜
    • = Direct Memory Access
  • ์ž…์ถœ๋ ฅ ์ฑ„๋„ IO Channel
    • ์ž…์ถœ๋ ฅ์ด ์ง€๋‚˜๊ฐ€๋Š” ํ†ต๋กœ
    • IOP IO Processor ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ
    • DMA๋„ ์ฑ„๋„ ์ค‘์ด ํ•˜๋‚˜์ž„
    • ์‹ค๋ ‰ํ„ฐ ์ฑ„๋„, ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ ์ฑ„๋„, ๋ธ”๋ก ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ ์ฑ„๋„ ๋“ฑ์˜ ์œ ํ˜•์ด ์žˆ์Œ
    • Selector Channel ํ•œ ๋ฒˆ์— ํ•˜๋‚˜ (์†๋„๊ฐ€ ๋น ๋ฆ„), Multiplexer Channel ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ (์†๋„๊ฐ€ ๋Š๋ ค์„œ), Black Multiplexer Channel
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.