SlideShare ist ein Scribd-Unternehmen logo
1 von 39
๋™๊ธฐ?! ๋น„๋™๊ธฐ?!

โ€ข ๋™๊ธฐ(Synchronous) : ๋™์‹œ ๋ฐœ์ƒํ•˜๋Š”

โ€ข ๋น„๋™๊ธฐ(Asynchronous) : ๋™์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”
์žฅ์น˜๋ž€ ?!
โ€ข ์ •์˜ : ํ†ต์‹  ๊ฐ€๋Šฅํ•œ ์–ด๋–ค ๊ฒƒ

โ€ข ์ข…๋ฅ˜ : ํŒŒ์ผ, ์ง๋ ฌํฌํŠธ, ๋ฉ”์ผ์Šฌ๋กฏ, ์†Œ์ผ“, etc... (p.388 ํ‘œ 10-1)

โ€ข ํŠน์„ฑ : ์ผ๋ถ€ ์žฅ์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ™๋‹ค.
   ๏ƒผ CreateMailSlot(), CreateNamedPipe()

HANDLE hHandle = CreateFile(...                    ์ƒ์„ฑ

SetCommConfig (HANDLE hCommDev, ...
SetMailslotInfo (HANDLE hMailslot, ...             ์ด์šฉ

CloseHandle(HANDLE hObject)                        ์ข…๋ฃŒ

 !! ๋‹จ ์žฅ์น˜๊ฐ€ Socket์ด์˜€๋‹ค๋ฉด Closesocket(SOCKET s)
HANDLE CreateFile (
      PCTSTR pszName,
      DWORD dwDesireAccess,
      DWORD dwShareMode,
      PSECURITY_ATTRIBUTES psa,
      DWORD dwCreationDisposition,
      DWORD dwFlagsAndAttributes,
      HANDLE hFileTemplate);


โ€ข   pszName : ํŠน์ • ์žฅ์น˜์˜ ์ธ์Šคํ„ด์Šค / ์žฅ์น˜์˜ ํƒ€์ž…์„ ๊ตฌ๋ถ„
โ€ข   dwDesireAccess : ์žฅ์น˜์™€ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธธ ์›ํ•˜๋Š” ๋ฒ”์œ„
โ€ข   dwShareMode : ์žฅ์น˜์˜ ๊ณต์œ ํŠน์„ฑ
โ€ข   Psa : ๋ณด์•ˆ ์„ค์ •
โ€ข   dwCreationDisposition : ํŒŒ์ผ์„ ์—ฌ๋Š” ๋ฐฉ๋ฒ•
โ€ข   dwFlagsAndAttributes : ์„ธ๋ถ€์  ํ†ต์‹  Flag / ํŒŒ์ผ์˜ ํŠน์„ฑ
โ€ข   hFileTemplate : ์ด๋ฏธ ์—ด๋ฆฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ•ธ๋“ค or NULL

!! ํŒŒ์ผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์žฅ์น˜์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ OPEN_EXISTING

                                         (p.391 ~ 398)
์žฅ์น˜ ์ด์šฉํ•˜๊ธฐ
โ€ข ํŒŒ์ผ ํฌ๊ธฐ ์–ป๊ธฐ

โ€ข ํŒŒ์ผ ํฌ์ธํ„ฐ ์œ„์น˜ ์ง€์ •

โ€ข ํŒŒ์ผ์˜ ๋ ์„ค์ •


BOOL GetFileSize (hFile, ...);                    ๋…ผ๋ฆฌ์ ์ธ ํฌ๊ธฐ ๋ฐ˜ํ™˜
DWORD GetCompressedFileSize (pszFileName, ...);
                                                  ๋ฌผ๋ฆฌ์ ์ธ ํฌ๊ธฐ ๋ฐ˜ํ™˜

ReadFile (hFile, ...);                 64bit ์˜คํ”„์…‹
SetFilePointEx (hFile, ... );          ๋™๊ธฐ์ ์ธ I/O๋ฅผ ์ˆ˜ํ–‰ํ•  ์œ„์น˜



SetEndOfFile(hFile, ...);              ์ปค๋„์˜ค๋ธŒ์ ํŠธ์˜ ํŒŒ์ผ
                                       ํฌ์ธํ„ฐ ๋ณ€๊ฒฝ
๋™๊ธฐ ์žฅ์น˜ I/O
โ€ข ๋™๊ธฐ ์žฅ์น˜ I/O ์ˆ˜ํ–‰

โ€ข ๋™๊ธฐ ์žฅ์น˜ I/O ์ทจ์†Œ (์ „์ ์œผ๋กœ ๋“œ๋ผ์ด๋ฒ„์— ๋‹ฌ๋ ค์žˆ๋‹ค.)


BOOL ReadFile (
HANDLE            hFile,
PVOID             pvBuffer,
DWORD nNumByteToRead,
PDWORD            pdwNumBytes,
OVERLAPPED* pOverlapped);


BOOL CancelSynchronousIo (HANDLE hThread);
์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์ž‘์—…๋“ค์— ๋น„ํ•ด ์žฅ์น˜ I/O๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€
์žฅ ๋Š๋ฆฌ๊ณ , ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋‹ค.
๋น„๋™๊ธฐ I/O ์š”์ฒญ์€ ๊ณ ์„ฑ๋Šฅ์˜ ํ™•์žฅ์„ฑ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜
๊ธฐ ์œ„ํ•˜์—ฌ ์„ค๊ณ„ ๋˜์—ˆ๋‹ค.
1. ์‹ค์ œ๋กœ I/O ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์žฅ์น˜์˜ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋กœ ์ „๋‹ฌ
2. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žฅ์น˜๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต ๋Œ€๊ธฐ
3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ I/O ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰

BOOL ReadFile (
HANDLE            hFile,
PVOID             pvBuffer,
DWORD nNumByteToRead,
PDWORD            pdwNumBytes,
OVERLAPPED* pOverlapped); FILE_FLAG_OVERLAPPED
typedef struct _OVERLAPPED {
       DWORD Internal;
       DWORD InternalHigh;
       DWORD Offset;
       DWORD OffsetHigh;
       HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;


โ€ข Internal : ์ฒ˜๋ฆฌ๋œ I/O์˜ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋‹ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋น„๋™๊ธฐ I/O ์š”์ฒญ
  ์„ ์‹œ๋„ํ•˜๋ฉด ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” Internal ๋ฉค๋ฒ„ ๊ฐ’์„
  STATUS_PENDING์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์•„์ง ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ
  ์–ด๋– ํ•œ ์—๋Ÿฌ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

โ€ข InternalHigh : ๋น„๋™๊ธฐ I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ด ๋ฉค๋ฒ„๋Š” ์‹ค์ œ๋กœ ์†ก์ˆ˜์‹ ๋œ
  ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.
โ€ข Offset : ์ด ์ธ์ž์™€ ์•„๋ž˜ OffsetHigh๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ๋‚ด์—์„œ I/O ์ž‘์—…์„ ์‹œ
  ์ž‘ํ•  ์œ„์น˜๋ฅผ 64๋น„ํŠธ ์˜คํ”„์…‹ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ํŒŒ์ผ ์ปค๋„
  ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋น„๋™๊ธฐ I/O ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ
  OVERLAPPED ๊ตฌ์กฐ์ฒด ๋‚ด์— I/O ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.



โ€ข OffsetHigh : ์œ„์˜ Offset๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉฐ 32๋น„ํŠธ ์ƒ์œ„ ํŒŒ์ผ์˜ ์˜ค
  ํ”„์…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.


โ€ข hEvent : ์ด ๋ฉค๋ฒ„๋Š” I/O ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์˜
  ๋ฐฉ๋ฒ•์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ํ†ต์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ
  ์šฉ์ž ์ž„์˜๋กœ ์ด ๋ฉค๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
โ€ข ๋น„๋™๊ธฐ I/O ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด I/O ์š”์ฒญ ์‹œ ์‚ฌ์šฉํ–ˆ๋˜
     OVERLAPPED ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด
     ๊ตฌ์กฐ์ฒด์— ์žฅ์น˜ ํ•ธ๋“ค์ด๋‚˜ ์œ ์šฉํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋งŒํ•œ
     ๋ฉค๋ฒ„๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ ์ž‘์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Enum IOType
{
        OP_RECV,
        OP_SEND
}
class OVERLAPPEDEX : public OVERLAPPED
{
        IOType       m_eIOType;
        SOCKET       m_hSocket;
};
๋น„๋™๊ธฐ ์žฅ์น˜ I/O ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ 


1. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” ๋น„๋™๊ธฐ I/O์š”์ฒญ์„ ํ•ญ์ƒ ์„ ์ž… ์„ ์ถœ๋กœ ์ฒ˜๋ฆฌ ์•ˆํ•จ


2. ์—๋Ÿฌ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ๋‹นํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  1. ๋น„๋™๊ธฐ ์š”์ฒญ์—๋„ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ ์žˆ๋‹ค.
  2. Read / Write File์€ I/O ์š”์ฒญ์ด ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ 0์ด ์•„
    ๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜
  3. I/O ์š”์ฒญ์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋‚˜ ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ FALSE
    ๋ฐ˜ํ™˜, ๊ณ ๋กœ GetLastError (ERROR_IO_PENDING)


3. ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์™€ OVERLAPPED ๊ตฌ์กฐ์ฒด๋Š” I/O ์š”์ฒญ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€
  ์˜ฎ๊ฒจ์ง€๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
์š”์ฒญ๋œ ์žฅ์น˜ I/O์˜ ์ทจ์†Œ


โ€ข   CancelIo ํ•จ์ˆ˜ ํ˜ธ์ถœ
    โ€ข   ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฝ์ž…ํ•œ ๋ชจ๋“  I/O ์š”์ฒญ ์ทจ์†Œ


โ€ข   ์žฅ์น˜์— ๋Œ€ํ•œ ํ•ธ๋“ค ๋‹ซ๊ธฐ
    โ€ข   ์–ด๋–ค ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•œ์ง€ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  I/O ์š”์ฒญ ์ทจ์†Œ


โ€ข   ํ•ธ๋“ค์ด I/O ์ปดํ”Œ๋ ˆ์ด์…˜ ํฌํŠธ์™€ ์—ฐ๊ณ„๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด, ์Šค๋ ˆ๋“œ๊ฐ€
    ์ข…๋ฃŒ๋  ๋•Œ ์ข…๋ฃŒ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฝ์ž…ํ•˜์˜€๋˜ ๋ชจ๋“  I/O ์š”์ฒญ์ด ์ทจ์†Œ


โ€ข   ํŠน์ • ์žฅ์น˜์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ I/O ์š”์ฒญ๋งŒ ์ทจ์†Œํ•  ๋•Œ
    โ€ข   CancelIoEx ํ•จ์ˆ˜ ํ˜ธ์ถœ
์™„๋ฃŒ ํ†ต์ง€ ๋ฐฉ๋ฒ•?


โ€ข   ๋น„๋™๊ธฐ ํ˜ธ์ถœ์€ ์–ธ์ œ ์™„๋ฃŒ๋  ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์™„๋ฃŒ
    ๋œ ์‚ฌ์‹ค์„ ํ†ต์ง€ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์™„๋ฃŒ ํ†ต์ง€ ๋ฐฉ๋ฒ•?

๋ฐฉ๋ฒ•                  ์š”์•ฝ

๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ ์‹œ๊ทธ๋„๋ง   โ€ข   ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ ์ ํ•ฉํ•˜์ง€
                        ์•Š๋‹ค.
                    โ€ข   ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ
                        ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง   โ€ข   ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ• 
                        ์ˆ˜ ์žˆ๋‹ค.
                    โ€ข   ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ
                        ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ์‚ฌ์šฉ         โ€ข   ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ• 
                        ์ˆ˜ ์žˆ๋‹ค.
                    โ€ข   ํ•ญ์ƒ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ
                        ์ˆ˜์‹ ํ•œ๋‹ค.
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์‚ฌ์šฉ      โ€ข   ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ• 
                        ์ˆ˜ ์žˆ๋‹ค.
                    โ€ข   ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ
                        ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
                    โ€ข   ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์œ ์—ฐ์„ฑ์ด ์žˆ
                        ๋‹ค.
๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง


 โ€ข   ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๊ณผ ๋…ผ์‹œ๊ทธ๋„ ์ƒํƒœ๋ฅผ ์ด์šฉ.

HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...)
BYTE bBuffer[100];
OVERLAPPED o = { 0 };
o.Offset = 345;

BOOL bReadDone = ReadFile(hFile, bBuffer, 100, NULL, &o);
DWORD dwError = GetLastError();

If (!bReadDone && (dwError == ERROR_IO_PENDING)) {
         WaitForSingleObject(hFile, INFINITE);
         bReadDone = TRUE;
}

If (bReadDone) {
...
}
๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง


โ€ข   ๋น„๋™๊ธฐ I/O๋ฅผ ์œ„ํ•ด ๋””๋ฐ”์ด์Šค๋ฅผ ์—ด ๋•Œ ๋ฐ˜๋“œ์‹œ FILE_FLAG_OVERLAPPED

โ€ข   OVERLAPPED ๊ตฌ์กฐ์ฒด์˜ Offset, OffsetHigh, hEvent ์ดˆ๊ธฐํ™”

โ€ข   bReadDone์„ ํ™•์ธํ›„ ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋™๊ธฐ์ ์ด ์•„๋‹ˆ
    ๋ผ๋ฉด ๋น„๋™๊ธฐ์ ์œผ๋กœ I/O ์ž‘์—…์ด ์š”์ฒญ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

โ€ข   ์ฝ๊ธฐ ์ž‘์—… ์™„๋ฃŒ ์‹œ bBuffer์—๋Š” ์ฝ์€ ๋ฐ์ดํ„ฐ๊ฐ€, OVERLAPPED ๊ตฌ์กฐ์ฒด์˜
    Internal ๋ฉค๋ฒ„์—๋Š” Error์ฝ”๋“œ๊ฐ€, InternalHigh ๋ฉค๋ฒ„์—๋Š” ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ
    ๊ฐ€ ๊ฐ๊ฐ ์ €์žฅ๋œ๋‹ค.
๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง์˜ ๋ฌธ์ œ ?

HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...)
BYTE bReadBuffer[100];
OVERLAPPED oRead = { 0 };

ReadFile(hFile, bReadBuffer, 100, NULL, &oRead);

BYTE bWriteBuffer[10] = {0, 1, 2, 3, ... };
OVERLAPPED oWrite = { 0 };
oWrite.Offset = 10;

WirteFile(hFile, bWriteBuffer, _countof(bWriteBuffer), NULL, &oWrite);

...

WaitForSingleObject(hFile, INFINITE)

// ???
์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง


HANDLE hHandle = CreateFile(..., FILE_FLAG_OVERLAPPED, ...)
BYTE bReadBuffer[100];
OVERLAPPED oRead = { 0 };
oRead.hEvent = CreateEvent(...);

ReadFile(hFile, bReadBuffer, 100, NULL, &oRead);

BYTE bWriteBuffer[10] = {0, 1, 2, 3, ... };
OVERLAPPED oWrite = { 0 };
oWirte.hEvent = CreateEvent(...);

WirteFile(hFile, bWriteBuffer, _countof(bWriteBuffer), NULL, &oWrite);
์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง


HANDLE h[2];
h[0] = oRead.hEvent;
h[1] = oWrite.hEvent;

DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE);
Switch (dw โ€“ WAIT_OBJECT_0) {
         case 0:        // ์ฝ๊ธฐ ์ž‘์—… ์™„๋ฃŒ
                 break;

        case 1:            // ์“ฐ๊ธฐ ์ž‘์—… ์™„๋ฃŒ
                  break;
}


๏ƒผ GetOverlappedResult(...)
    ๏ƒผ ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” Internal๊ณผ InternalHigh์ด ๋ฌธ์„œํ™”
์–ผ๋Ÿฌํ„ฐ๋ธ” I/O

๏ƒผ APC(Asynchronous Procedure Call)
   ๏ƒผ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด APC ํ๋ผ ๋ถˆ๋ฆฌ๋Š” ํ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ
   ๏ƒผ ReadFileEX / WriteFileEX

  BOOL ReadFileEx (
  HANDLE          hFile,
  PVOID           pvBuffer,
  DWORD nNumByteToRead,
  OVERLAPPED* pOverlapped,
  LPOVERLAPPED_COMPLETION_ROUTINE pfnRoutine);

     VOID WINAPI CompletionRoutine (
            DWORD dwError,
            DWORD pwNumBytes,
            OVERLAPPED* po);
์–ผ๋Ÿฌํ„ฐ๋ธ” I/O

hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);


ReadFileEx(hFile, ...);
WriteFileEx(hFile, ...);
ReadFileEx(hFile, ...);


SomeFunc();


Write I/O     Read I/O     Read I/O




๏ƒผ ์Šค๋ ˆ๋“œ๋ฅผ ์ธํ„ฐ๋ŸฝํŠธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค.
     ๏ƒผ ์ฆ‰, ์Šค๋ ˆ๋“œ๋ฅผ ์–ผ๋Ÿฌํ„ฐ๋ธ” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
์–ผ๋Ÿฌํ„ฐ๋ธ” I/O

๏ƒผ ์–ผ๋Ÿฌํ„ฐ๋ธ” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
โ€ข   SleepEx / WaitForSingleObjectEx / WaitForMultipleObjectsEx /
    SignalObjectAndWait / GetQueuedCompletionStatusEx /
    MsgWaitForMultipleObjectsEx



๏ƒผ ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O์˜ ์žฅ๋‹จ์ 
โ€ข   ์žฅ์ 
     โ€ข   ๋น„๋™๊ธฐ ํ˜ธ์ถœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค..ใ… .ใ… 
     โ€ข   ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ์„œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ใ… .ใ… 
โ€ข   ๋‹จ์ 
     โ€ข   ์ฝœ๋ฐฑํ•จ์ˆ˜
     โ€ข   ์“ฐ๋ ˆ๋”ฉ ๋ฌธ์ œ
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ


โ€ข    ์ปจ์ปค๋ŸฐํŠธ ๋ชจ๋ธ
      โ€ข   ์ปจ์ปค๋ŸฐํŠธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œˆ๋„์šฐ์—์„œ ๊ตฌํ˜„
          ํ•˜์˜€์„ ๋•Œ ์„ฑ๋Šฅ์ด ๊ธฐ๋Œ€๋งŒํผ ๋‚˜์˜ค์ง€ ์•Š์ž ๊ฐœ์„ ํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋กœ ํƒœ์–ด๋‚œ
          ๊ฒƒ์ด ๋ฐ”๋กœ I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค

โ€ข    I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ƒ์„ฑ

    HANDLE CreateIoCompletionPort(
           HANDLE hFile,
           HANDLE hExistingCompletionPort,
           ULONG_PTR CompletionKey,
           DWORD dwNumberOfConcurrentThreads);
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ

    HANDLE CreateNewCompletionPort (DWORD dwThreads)
    {
              return CreateIoCompletionPort(
                      INVALID_HANDLE_VALUE, NULL, 0,
                      dwThreads);
    |

โ€ข       dwThreads
         โ€ข   ๋™์ผ ์‹œ๊ฐ„์— ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜
         โ€ข   ๋ณดํ†ต์€ CPU ๊ฐœ์ˆ˜๋งŒํผ์„ ์ž…๋ ฅ
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ

โ€ข    I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์—ฐ๊ณ„

    HANDLE CreateIoCompletionPort(
           HANDLE hFile,
           HANDLE hExistingCompletionPort,
           ULONG_PTR CompletionKey,
           DWORD dwNumberOfConcurrentThreads);


โ€ข    hFile : ์žฅ์น˜์— ๋Œ€ํ•œ ํ•ธ๋“ค (ํŒŒ์ผ, ์†Œ์ผ“, ๋ฉ”์ผ์Šฌ๋กฏ, ํŒŒ์ดํ”„๋“ฑ)
โ€ข    hExistingCompletionPort : ์ƒ์„ฑํ•ด ๋‘” I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ํ•ธ๋“ค
โ€ข    CompletionKey : ์ปดํ”Œ๋ฆฌ์…˜ ํ‚ค (์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.)
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ

โ€ข       I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์—ฐ๊ณ„

    BOOL AssociateDeviceWithCompletionPort(
            HANDLE hDevice,
            HANDLE hExistingCompletionPort,
            ULONG_PTR CompletionKey,) {


            HANDLE h = CreateIoCompletionPort(hDevice,
            hCompletionPort, dwCompletionKey, 0);
            return (h == hCompletionPort);
    }
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ

              โ€ข ์žฅ์น˜ ๋ฆฌ์ŠคํŠธ


              โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํ



              โ€ข ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ



              โ€ข ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ



              โ€ข ์ผ์‹œ ์ •์ง€ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ

์ปค๋„ ๋ชจ๋“œ


      Device List       I/O Request List   I/O Completion Queue




์œ ์ € ๋ชจ๋“œ

                           WSARecv()
                          WSASend()        GetQueuedCompletionS
 CreateCompletionPort
                          ReadFileEX()            tatus()
                              โ€ฆ
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๋ฅผ ์ด์šฉํ•œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„

โ€ข    ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ ํ’€
      โ€ข   ํ’€ ๋‚ด์— ๋ช‡ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด ๋‘๋Š” ๊ฒƒ์ด ์ข‹์€๊ฐ€? (๋‹ค์Œ๋ฐœํ‘œ์ž๋ถ„)
โ€ข    ์™„๋ฃŒ ํ†ต์ง€๊ฐ€ ์ „๋‹ฌ ๋˜์—ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ!!


    BOOL GetQueuedCompletionStatus(
           HANDLE hCompletionPort,
           PDWORD pdwNumberOfBytesTransferred,
           PULONG_PTR pCompletionKey,
           OVERLAPPED** ppOverlapped,
           DWORD dwMilliseconds);
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๋ฅผ ์ด์šฉํ•œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„

โ€ข   ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ
    โ€ข   ํ›„์ž…์„ ์ถœ(LIFO) ๋ฐฉ์‹์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค.
โ€ข   ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ
    โ€ข   I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๊ฐ€ ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š” ๊ฒฝ์šฐ
    โ€ข   ์ผ์‹œ ์ •์ง€๋˜์—ˆ๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์‹œ ๊นจ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ
โ€ข   ์ผ์‹œ ์ •์ง€ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ
    โ€ข   ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ •์ง€์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    โ€ข   ์ •์ง€ ์ค‘์ด๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜๋ฉด ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ์‚ฝ์ž…
I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ์˜ ์Šค๋ ˆ๋“œ ํ’€ ๊ด€๋ฆฌ๋ฐฉ๋ฒ•

โ€ข   I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ƒ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜ ์ด์ƒ์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค
โ€ข   ๊ทผ๋ฐ ์™œ?! ์ด๋ณด๋‹ค ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ํ’€๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
    โ€ข   ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ
    โ€ข   ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ


๏ƒผ I/O ์ปดํ”Œ๋ฆฌ์…˜ ์‚ฌ์šฉ ๋ชฉ์ 
    ๏ƒผ CPU๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ
Windows via C/C++ Chapter 10
Windows via C/C++ Chapter 10

Weitere รคhnliche Inhalte

Was ist angesagt?

Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒBoost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒJinTaek Seo
ย 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5Jinkyoung Kim
ย 
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ์„ฑ์ฃผ ์ด
ย 
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11ํฅ๋ฐฐ ์ตœ
ย 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introductionJinkyoung Kim
ย 
Javascript ๊ต์œก์ž๋ฃŒ pdf
Javascript ๊ต์œก์ž๋ฃŒ pdfJavascript ๊ต์œก์ž๋ฃŒ pdf
Javascript ๊ต์œก์ž๋ฃŒ pdfHyosang Hong
ย 
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)Sang Don Kim
ย 
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€Gwangwhi Mah
ย 
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013Esun Kim
ย 
Near field communication
Near field communicationNear field communication
Near field communicationDH Y.
ย 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungeescor7910
ย 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 ExploitGangSeok Lee
ย 
System+os study 1
System+os study 1System+os study 1
System+os study 1Jinkyoung Kim
ย 
Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1Jinkyoung Kim
ย 
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎChangwon National University
ย 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œGangSeok Lee
ย 
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)Kyoungchan Lee
ย 
Pwnable study basic_3
Pwnable study basic_3Pwnable study basic_3
Pwnable study basic_3Jinkyoung Kim
ย 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘GangSeok Lee
ย 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2Jinkyoung Kim
ย 

Was ist angesagt? (20)

Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒBoost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
ย 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
ย 
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ
ํŒŒ์ด์ฌ 2์™€ ์œ ๋‹ˆ์ฝ”๋“œ
ย 
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11
[KGC 2011]Boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++11
ย 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
ย 
Javascript ๊ต์œก์ž๋ฃŒ pdf
Javascript ๊ต์œก์ž๋ฃŒ pdfJavascript ๊ต์œก์ž๋ฃŒ pdf
Javascript ๊ต์œก์ž๋ฃŒ pdf
ย 
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)
[Td 2015]๋…น์Šจ c++ ์ฝ”๋“œ์— ๋ชจ๋˜ c++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ(์˜ฅ์ฐฌํ˜ธ)
ย 
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
ย 
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
ย 
Near field communication
Near field communicationNear field communication
Near field communication
ย 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungee
ย 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
ย 
System+os study 1
System+os study 1System+os study 1
System+os study 1
ย 
Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1
ย 
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
ย 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique์˜ ๋ฐœ์ „๊ณผ ์ตœ์‹  ํŠธ๋žœ๋“œ
ย 
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)
GopherCon Korea 2015 - Python ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Go (์ด๊ฒฝ์ฐฌ)
ย 
Pwnable study basic_3
Pwnable study basic_3Pwnable study basic_3
Pwnable study basic_3
ย 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger ํ™œ์šฉ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์ž‘
ย 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
ย 

ร„hnlich wie Windows via C/C++ Chapter 10

10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜iossuser3fb17c
ย 
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ํ™์ค€ ๊น€
ย 
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„ํ™์ค€ ๊น€
ย 
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œ
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œOverlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œ
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œKwen Won Lee
ย 
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing SystemGCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System์ƒํ˜„ ์กฐ
ย 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. JobHyosung Jeon
ย 
Device driver
Device driverDevice driver
Device driverYongjae Choi
ย 
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ดIocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ดNam Hyeonuk
ย 
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C# ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C#  ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C#  ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C# ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„Sungkyun Kim
ย 
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐ
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐNodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐ
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐTaeYoung Kim
ย 
Tizen main loop ์ดํ•ด
Tizen main loop ์ดํ•ดTizen main loop ์ดํ•ด
Tizen main loop ์ดํ•ดHermet Park
ย 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
ย 
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open API
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open APIDo IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open API
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open APIHyunghun Cho
ย 
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€ ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€  ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐNODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€  ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€ ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐJohn Kim
ย 
eclipse์—์„œ intelliJ IDEA๋กœ
eclipse์—์„œ intelliJ IDEA๋กœeclipse์—์„œ intelliJ IDEA๋กœ
eclipse์—์„œ intelliJ IDEA๋กœJuntai Park
ย 
I os push: ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—ก
I os push:  ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ  ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—กI os push:  ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ  ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—ก
I os push: ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—กHannaSungKim
ย 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoTJaeho Lee
ย 
Init to systemd
Init to systemdInit to systemd
Init to systemdJaeock Shim
ย 
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„Seung-Hoon Baek
ย 

ร„hnlich wie Windows via C/C++ Chapter 10 (20)

10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
ย 
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
ย 
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
ย 
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œ
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œOverlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œ
Overlapped IO์™€ IOCP ์กฐ์‚ฌ ๋ฐœํ‘œ
ย 
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing SystemGCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
ย 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. Job
ย 
Device driver
Device driverDevice driver
Device driver
ย 
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ดIocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
ย 
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C# ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C#  ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C#  ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
[KGC2014] ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก๊ธฐ ์œ„ํ•œ C++ - C# ํ˜ผํ•ฉ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
ย 
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐ
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐNodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐ
NodeJs๋กœ ๋””๋ฐ”์ด์Šค ํ†ต์‹ ํ•˜๊ธฐ
ย 
Tizen main loop ์ดํ•ด
Tizen main loop ์ดํ•ดTizen main loop ์ดํ•ด
Tizen main loop ์ดํ•ด
ย 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
ย 
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open API
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open APIDo IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open API
Do IoT Yourself! - ์‚ฌ๋ฌผ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ Open API
ย 
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€ ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€  ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐNODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€  ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
NODE.JS ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ์ ์šฉ ์‚ฌ๋ก€ ๊ทธ๋ฆฌ๊ณ , real-time ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
ย 
eclipse์—์„œ intelliJ IDEA๋กœ
eclipse์—์„œ intelliJ IDEA๋กœeclipse์—์„œ intelliJ IDEA๋กœ
eclipse์—์„œ intelliJ IDEA๋กœ
ย 
I os push: ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—ก
I os push:  ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ  ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—กI os push:  ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ  ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—ก
I os push: ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋‚ ์”จ, ๋Œ€๊ธฐํ™˜๊ฒฝ ์—ก
ย 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
ย 
Init to systemd
Init to systemdInit to systemd
Init to systemd
ย 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
ย 
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„
Open vSwitch์˜ Vendor Extension ๊ตฌํ˜„
ย 

Windows via C/C++ Chapter 10

  • 1.
  • 2.
  • 3. ๋™๊ธฐ?! ๋น„๋™๊ธฐ?! โ€ข ๋™๊ธฐ(Synchronous) : ๋™์‹œ ๋ฐœ์ƒํ•˜๋Š” โ€ข ๋น„๋™๊ธฐ(Asynchronous) : ๋™์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”
  • 4.
  • 5. ์žฅ์น˜๋ž€ ?! โ€ข ์ •์˜ : ํ†ต์‹  ๊ฐ€๋Šฅํ•œ ์–ด๋–ค ๊ฒƒ โ€ข ์ข…๋ฅ˜ : ํŒŒ์ผ, ์ง๋ ฌํฌํŠธ, ๋ฉ”์ผ์Šฌ๋กฏ, ์†Œ์ผ“, etc... (p.388 ํ‘œ 10-1) โ€ข ํŠน์„ฑ : ์ผ๋ถ€ ์žฅ์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ™๋‹ค. ๏ƒผ CreateMailSlot(), CreateNamedPipe() HANDLE hHandle = CreateFile(... ์ƒ์„ฑ SetCommConfig (HANDLE hCommDev, ... SetMailslotInfo (HANDLE hMailslot, ... ์ด์šฉ CloseHandle(HANDLE hObject) ์ข…๋ฃŒ !! ๋‹จ ์žฅ์น˜๊ฐ€ Socket์ด์˜€๋‹ค๋ฉด Closesocket(SOCKET s)
  • 6. HANDLE CreateFile ( PCTSTR pszName, DWORD dwDesireAccess, DWORD dwShareMode, PSECURITY_ATTRIBUTES psa, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hFileTemplate); โ€ข pszName : ํŠน์ • ์žฅ์น˜์˜ ์ธ์Šคํ„ด์Šค / ์žฅ์น˜์˜ ํƒ€์ž…์„ ๊ตฌ๋ถ„ โ€ข dwDesireAccess : ์žฅ์น˜์™€ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธธ ์›ํ•˜๋Š” ๋ฒ”์œ„ โ€ข dwShareMode : ์žฅ์น˜์˜ ๊ณต์œ ํŠน์„ฑ โ€ข Psa : ๋ณด์•ˆ ์„ค์ • โ€ข dwCreationDisposition : ํŒŒ์ผ์„ ์—ฌ๋Š” ๋ฐฉ๋ฒ• โ€ข dwFlagsAndAttributes : ์„ธ๋ถ€์  ํ†ต์‹  Flag / ํŒŒ์ผ์˜ ํŠน์„ฑ โ€ข hFileTemplate : ์ด๋ฏธ ์—ด๋ฆฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ•ธ๋“ค or NULL !! ํŒŒ์ผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์žฅ์น˜์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ OPEN_EXISTING (p.391 ~ 398)
  • 7.
  • 8. ์žฅ์น˜ ์ด์šฉํ•˜๊ธฐ โ€ข ํŒŒ์ผ ํฌ๊ธฐ ์–ป๊ธฐ โ€ข ํŒŒ์ผ ํฌ์ธํ„ฐ ์œ„์น˜ ์ง€์ • โ€ข ํŒŒ์ผ์˜ ๋ ์„ค์ • BOOL GetFileSize (hFile, ...); ๋…ผ๋ฆฌ์ ์ธ ํฌ๊ธฐ ๋ฐ˜ํ™˜ DWORD GetCompressedFileSize (pszFileName, ...); ๋ฌผ๋ฆฌ์ ์ธ ํฌ๊ธฐ ๋ฐ˜ํ™˜ ReadFile (hFile, ...); 64bit ์˜คํ”„์…‹ SetFilePointEx (hFile, ... ); ๋™๊ธฐ์ ์ธ I/O๋ฅผ ์ˆ˜ํ–‰ํ•  ์œ„์น˜ SetEndOfFile(hFile, ...); ์ปค๋„์˜ค๋ธŒ์ ํŠธ์˜ ํŒŒ์ผ ํฌ์ธํ„ฐ ๋ณ€๊ฒฝ
  • 9.
  • 10. ๋™๊ธฐ ์žฅ์น˜ I/O โ€ข ๋™๊ธฐ ์žฅ์น˜ I/O ์ˆ˜ํ–‰ โ€ข ๋™๊ธฐ ์žฅ์น˜ I/O ์ทจ์†Œ (์ „์ ์œผ๋กœ ๋“œ๋ผ์ด๋ฒ„์— ๋‹ฌ๋ ค์žˆ๋‹ค.) BOOL ReadFile ( HANDLE hFile, PVOID pvBuffer, DWORD nNumByteToRead, PDWORD pdwNumBytes, OVERLAPPED* pOverlapped); BOOL CancelSynchronousIo (HANDLE hThread);
  • 11.
  • 12. ์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์ž‘์—…๋“ค์— ๋น„ํ•ด ์žฅ์น˜ I/O๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€ ์žฅ ๋Š๋ฆฌ๊ณ , ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋‹ค. ๋น„๋™๊ธฐ I/O ์š”์ฒญ์€ ๊ณ ์„ฑ๋Šฅ์˜ ํ™•์žฅ์„ฑ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜ ๊ธฐ ์œ„ํ•˜์—ฌ ์„ค๊ณ„ ๋˜์—ˆ๋‹ค. 1. ์‹ค์ œ๋กœ I/O ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์žฅ์น˜์˜ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋กœ ์ „๋‹ฌ 2. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žฅ์น˜๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต ๋Œ€๊ธฐ 3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ I/O ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰ BOOL ReadFile ( HANDLE hFile, PVOID pvBuffer, DWORD nNumByteToRead, PDWORD pdwNumBytes, OVERLAPPED* pOverlapped); FILE_FLAG_OVERLAPPED
  • 13. typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; } OVERLAPPED, *LPOVERLAPPED; โ€ข Internal : ์ฒ˜๋ฆฌ๋œ I/O์˜ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋‹ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋น„๋™๊ธฐ I/O ์š”์ฒญ ์„ ์‹œ๋„ํ•˜๋ฉด ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” Internal ๋ฉค๋ฒ„ ๊ฐ’์„ STATUS_PENDING์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์•„์ง ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์–ด๋– ํ•œ ์—๋Ÿฌ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. โ€ข InternalHigh : ๋น„๋™๊ธฐ I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ด ๋ฉค๋ฒ„๋Š” ์‹ค์ œ๋กœ ์†ก์ˆ˜์‹ ๋œ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.
  • 14. โ€ข Offset : ์ด ์ธ์ž์™€ ์•„๋ž˜ OffsetHigh๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ๋‚ด์—์„œ I/O ์ž‘์—…์„ ์‹œ ์ž‘ํ•  ์œ„์น˜๋ฅผ 64๋น„ํŠธ ์˜คํ”„์…‹ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ํŒŒ์ผ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋น„๋™๊ธฐ I/O ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ OVERLAPPED ๊ตฌ์กฐ์ฒด ๋‚ด์— I/O ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. โ€ข OffsetHigh : ์œ„์˜ Offset๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉฐ 32๋น„ํŠธ ์ƒ์œ„ ํŒŒ์ผ์˜ ์˜ค ํ”„์…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. โ€ข hEvent : ์ด ๋ฉค๋ฒ„๋Š” I/O ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ํ†ต์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ ์šฉ์ž ์ž„์˜๋กœ ์ด ๋ฉค๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • 15. โ€ข ๋น„๋™๊ธฐ I/O ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด I/O ์š”์ฒญ ์‹œ ์‚ฌ์šฉํ–ˆ๋˜ OVERLAPPED ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๊ตฌ์กฐ์ฒด์— ์žฅ์น˜ ํ•ธ๋“ค์ด๋‚˜ ์œ ์šฉํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋งŒํ•œ ๋ฉค๋ฒ„๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ ์ž‘์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค. Enum IOType { OP_RECV, OP_SEND } class OVERLAPPEDEX : public OVERLAPPED { IOType m_eIOType; SOCKET m_hSocket; };
  • 16. ๋น„๋™๊ธฐ ์žฅ์น˜ I/O ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์  1. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” ๋น„๋™๊ธฐ I/O์š”์ฒญ์„ ํ•ญ์ƒ ์„ ์ž… ์„ ์ถœ๋กœ ์ฒ˜๋ฆฌ ์•ˆํ•จ 2. ์—๋Ÿฌ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ๋‹นํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. 1. ๋น„๋™๊ธฐ ์š”์ฒญ์—๋„ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ ์žˆ๋‹ค. 2. Read / Write File์€ I/O ์š”์ฒญ์ด ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ 0์ด ์•„ ๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ 3. I/O ์š”์ฒญ์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋‚˜ ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ FALSE ๋ฐ˜ํ™˜, ๊ณ ๋กœ GetLastError (ERROR_IO_PENDING) 3. ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์™€ OVERLAPPED ๊ตฌ์กฐ์ฒด๋Š” I/O ์š”์ฒญ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์˜ฎ๊ฒจ์ง€๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • 17. ์š”์ฒญ๋œ ์žฅ์น˜ I/O์˜ ์ทจ์†Œ โ€ข CancelIo ํ•จ์ˆ˜ ํ˜ธ์ถœ โ€ข ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฝ์ž…ํ•œ ๋ชจ๋“  I/O ์š”์ฒญ ์ทจ์†Œ โ€ข ์žฅ์น˜์— ๋Œ€ํ•œ ํ•ธ๋“ค ๋‹ซ๊ธฐ โ€ข ์–ด๋–ค ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•œ์ง€ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  I/O ์š”์ฒญ ์ทจ์†Œ โ€ข ํ•ธ๋“ค์ด I/O ์ปดํ”Œ๋ ˆ์ด์…˜ ํฌํŠธ์™€ ์—ฐ๊ณ„๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด, ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ข…๋ฃŒ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฝ์ž…ํ•˜์˜€๋˜ ๋ชจ๋“  I/O ์š”์ฒญ์ด ์ทจ์†Œ โ€ข ํŠน์ • ์žฅ์น˜์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ I/O ์š”์ฒญ๋งŒ ์ทจ์†Œํ•  ๋•Œ โ€ข CancelIoEx ํ•จ์ˆ˜ ํ˜ธ์ถœ
  • 18.
  • 19. ์™„๋ฃŒ ํ†ต์ง€ ๋ฐฉ๋ฒ•? โ€ข ๋น„๋™๊ธฐ ํ˜ธ์ถœ์€ ์–ธ์ œ ์™„๋ฃŒ๋  ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์™„๋ฃŒ ๋œ ์‚ฌ์‹ค์„ ํ†ต์ง€ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • 20. ์™„๋ฃŒ ํ†ต์ง€ ๋ฐฉ๋ฒ•? ๋ฐฉ๋ฒ• ์š”์•ฝ ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ ์‹œ๊ทธ๋„๋ง โ€ข ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. โ€ข ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง โ€ข ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ์‚ฌ์šฉ โ€ข ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ํ•ญ์ƒ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์‚ฌ์šฉ โ€ข ๋‹จ์ผ์˜ ์žฅ์น˜์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ I/O ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ I/O ์š”์ฒญ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ ๋“œ๊ฐ€ ์™„๋ฃŒ ํ†ต์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์œ ์—ฐ์„ฑ์ด ์žˆ ๋‹ค.
  • 21. ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง โ€ข ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๊ณผ ๋…ผ์‹œ๊ทธ๋„ ์ƒํƒœ๋ฅผ ์ด์šฉ. HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...) BYTE bBuffer[100]; OVERLAPPED o = { 0 }; o.Offset = 345; BOOL bReadDone = ReadFile(hFile, bBuffer, 100, NULL, &o); DWORD dwError = GetLastError(); If (!bReadDone && (dwError == ERROR_IO_PENDING)) { WaitForSingleObject(hFile, INFINITE); bReadDone = TRUE; } If (bReadDone) { ... }
  • 22. ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง โ€ข ๋น„๋™๊ธฐ I/O๋ฅผ ์œ„ํ•ด ๋””๋ฐ”์ด์Šค๋ฅผ ์—ด ๋•Œ ๋ฐ˜๋“œ์‹œ FILE_FLAG_OVERLAPPED โ€ข OVERLAPPED ๊ตฌ์กฐ์ฒด์˜ Offset, OffsetHigh, hEvent ์ดˆ๊ธฐํ™” โ€ข bReadDone์„ ํ™•์ธํ›„ ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋™๊ธฐ์ ์ด ์•„๋‹ˆ ๋ผ๋ฉด ๋น„๋™๊ธฐ์ ์œผ๋กœ I/O ์ž‘์—…์ด ์š”์ฒญ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ โ€ข ์ฝ๊ธฐ ์ž‘์—… ์™„๋ฃŒ ์‹œ bBuffer์—๋Š” ์ฝ์€ ๋ฐ์ดํ„ฐ๊ฐ€, OVERLAPPED ๊ตฌ์กฐ์ฒด์˜ Internal ๋ฉค๋ฒ„์—๋Š” Error์ฝ”๋“œ๊ฐ€, InternalHigh ๋ฉค๋ฒ„์—๋Š” ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๊ฐ€ ๊ฐ๊ฐ ์ €์žฅ๋œ๋‹ค.
  • 23. ๋””๋ฐ”์ด์Šค ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง์˜ ๋ฌธ์ œ ? HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...) BYTE bReadBuffer[100]; OVERLAPPED oRead = { 0 }; ReadFile(hFile, bReadBuffer, 100, NULL, &oRead); BYTE bWriteBuffer[10] = {0, 1, 2, 3, ... }; OVERLAPPED oWrite = { 0 }; oWrite.Offset = 10; WirteFile(hFile, bWriteBuffer, _countof(bWriteBuffer), NULL, &oWrite); ... WaitForSingleObject(hFile, INFINITE) // ???
  • 24. ์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง HANDLE hHandle = CreateFile(..., FILE_FLAG_OVERLAPPED, ...) BYTE bReadBuffer[100]; OVERLAPPED oRead = { 0 }; oRead.hEvent = CreateEvent(...); ReadFile(hFile, bReadBuffer, 100, NULL, &oRead); BYTE bWriteBuffer[10] = {0, 1, 2, 3, ... }; OVERLAPPED oWrite = { 0 }; oWirte.hEvent = CreateEvent(...); WirteFile(hFile, bWriteBuffer, _countof(bWriteBuffer), NULL, &oWrite);
  • 25. ์ด๋ฒคํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์˜ ์‹œ๊ทธ๋„๋ง HANDLE h[2]; h[0] = oRead.hEvent; h[1] = oWrite.hEvent; DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE); Switch (dw โ€“ WAIT_OBJECT_0) { case 0: // ์ฝ๊ธฐ ์ž‘์—… ์™„๋ฃŒ break; case 1: // ์“ฐ๊ธฐ ์ž‘์—… ์™„๋ฃŒ break; } ๏ƒผ GetOverlappedResult(...) ๏ƒผ ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” Internal๊ณผ InternalHigh์ด ๋ฌธ์„œํ™”
  • 26. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ๏ƒผ APC(Asynchronous Procedure Call) ๏ƒผ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด APC ํ๋ผ ๋ถˆ๋ฆฌ๋Š” ํ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ ๏ƒผ ReadFileEX / WriteFileEX BOOL ReadFileEx ( HANDLE hFile, PVOID pvBuffer, DWORD nNumByteToRead, OVERLAPPED* pOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE pfnRoutine); VOID WINAPI CompletionRoutine ( DWORD dwError, DWORD pwNumBytes, OVERLAPPED* po);
  • 27. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...); ReadFileEx(hFile, ...); WriteFileEx(hFile, ...); ReadFileEx(hFile, ...); SomeFunc(); Write I/O Read I/O Read I/O ๏ƒผ ์Šค๋ ˆ๋“œ๋ฅผ ์ธํ„ฐ๋ŸฝํŠธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค. ๏ƒผ ์ฆ‰, ์Šค๋ ˆ๋“œ๋ฅผ ์–ผ๋Ÿฌํ„ฐ๋ธ” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
  • 28. ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O ๏ƒผ ์–ผ๋Ÿฌํ„ฐ๋ธ” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ โ€ข SleepEx / WaitForSingleObjectEx / WaitForMultipleObjectsEx / SignalObjectAndWait / GetQueuedCompletionStatusEx / MsgWaitForMultipleObjectsEx ๏ƒผ ์–ผ๋Ÿฌํ„ฐ๋ธ” I/O์˜ ์žฅ๋‹จ์  โ€ข ์žฅ์  โ€ข ๋น„๋™๊ธฐ ํ˜ธ์ถœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค..ใ… .ใ…  โ€ข ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ์„œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ใ… .ใ…  โ€ข ๋‹จ์  โ€ข ์ฝœ๋ฐฑํ•จ์ˆ˜ โ€ข ์“ฐ๋ ˆ๋”ฉ ๋ฌธ์ œ
  • 29. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ โ€ข ์ปจ์ปค๋ŸฐํŠธ ๋ชจ๋ธ โ€ข ์ปจ์ปค๋ŸฐํŠธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œˆ๋„์šฐ์—์„œ ๊ตฌํ˜„ ํ•˜์˜€์„ ๋•Œ ์„ฑ๋Šฅ์ด ๊ธฐ๋Œ€๋งŒํผ ๋‚˜์˜ค์ง€ ์•Š์ž ๊ฐœ์„ ํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋กœ ํƒœ์–ด๋‚œ ๊ฒƒ์ด ๋ฐ”๋กœ I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ƒ์„ฑ HANDLE CreateIoCompletionPort( HANDLE hFile, HANDLE hExistingCompletionPort, ULONG_PTR CompletionKey, DWORD dwNumberOfConcurrentThreads);
  • 30. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ HANDLE CreateNewCompletionPort (DWORD dwThreads) { return CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, dwThreads); | โ€ข dwThreads โ€ข ๋™์ผ ์‹œ๊ฐ„์— ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ โ€ข ๋ณดํ†ต์€ CPU ๊ฐœ์ˆ˜๋งŒํผ์„ ์ž…๋ ฅ
  • 31. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์—ฐ๊ณ„ HANDLE CreateIoCompletionPort( HANDLE hFile, HANDLE hExistingCompletionPort, ULONG_PTR CompletionKey, DWORD dwNumberOfConcurrentThreads); โ€ข hFile : ์žฅ์น˜์— ๋Œ€ํ•œ ํ•ธ๋“ค (ํŒŒ์ผ, ์†Œ์ผ“, ๋ฉ”์ผ์Šฌ๋กฏ, ํŒŒ์ดํ”„๋“ฑ) โ€ข hExistingCompletionPort : ์ƒ์„ฑํ•ด ๋‘” I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ํ•ธ๋“ค โ€ข CompletionKey : ์ปดํ”Œ๋ฆฌ์…˜ ํ‚ค (์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • 32. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์—ฐ๊ณ„ BOOL AssociateDeviceWithCompletionPort( HANDLE hDevice, HANDLE hExistingCompletionPort, ULONG_PTR CompletionKey,) { HANDLE h = CreateIoCompletionPort(hDevice, hCompletionPort, dwCompletionKey, 0); return (h == hCompletionPort); }
  • 33. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ โ€ข ์žฅ์น˜ ๋ฆฌ์ŠคํŠธ โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํ โ€ข ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ โ€ข ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ โ€ข ์ผ์‹œ ์ •์ง€ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ
  • 34. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ปค๋„ ๋ชจ๋“œ Device List I/O Request List I/O Completion Queue ์œ ์ € ๋ชจ๋“œ WSARecv() WSASend() GetQueuedCompletionS CreateCompletionPort ReadFileEX() tatus() โ€ฆ
  • 35. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๋ฅผ ์ด์šฉํ•œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„ โ€ข ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ ํ’€ โ€ข ํ’€ ๋‚ด์— ๋ช‡ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด ๋‘๋Š” ๊ฒƒ์ด ์ข‹์€๊ฐ€? (๋‹ค์Œ๋ฐœํ‘œ์ž๋ถ„) โ€ข ์™„๋ฃŒ ํ†ต์ง€๊ฐ€ ์ „๋‹ฌ ๋˜์—ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ!! BOOL GetQueuedCompletionStatus( HANDLE hCompletionPort, PDWORD pdwNumberOfBytesTransferred, PULONG_PTR pCompletionKey, OVERLAPPED** ppOverlapped, DWORD dwMilliseconds);
  • 36. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๋ฅผ ์ด์šฉํ•œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„ โ€ข ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ โ€ข ํ›„์ž…์„ ์ถœ(LIFO) ๋ฐฉ์‹์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค. โ€ข ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ๊ฐ€ ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ํ์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š” ๊ฒฝ์šฐ โ€ข ์ผ์‹œ ์ •์ง€๋˜์—ˆ๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์‹œ ๊นจ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ โ€ข ์ผ์‹œ ์ •์ง€ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ โ€ข ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ •์ง€์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ โ€ข ์ •์ง€ ์ค‘์ด๋˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜๋ฉด ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ์‚ฝ์ž…
  • 37. I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ์˜ ์Šค๋ ˆ๋“œ ํ’€ ๊ด€๋ฆฌ๋ฐฉ๋ฒ• โ€ข I/O ์ปดํ”Œ๋ฆฌ์…˜ ํฌํŠธ ์ƒ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜ ์ด์ƒ์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค โ€ข ๊ทผ๋ฐ ์™œ?! ์ด๋ณด๋‹ค ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ํ’€๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€? โ€ข ๋ฆด๋ฆฌ์ฆˆ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ โ€ข ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ ๋ฆฌ์ŠคํŠธ ๏ƒผ I/O ์ปดํ”Œ๋ฆฌ์…˜ ์‚ฌ์šฉ ๋ชฉ์  ๏ƒผ CPU๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ