Windows via C++
         5์žฅ ์žก(Job)
    ์•„ํ‚คํ…ํŠธ๋ฅผ ๊ฟˆ๊พธ๋Š” ์‚ฌ๋žŒ๋“ค
(http://cafe.naver.com/archtect1)
              ์ „ํšจ์„ฑ

                            itmentor@gmail.com
                                            1
์–ด๋””์„œ ์‚ฌ์šฉํ• ๊นŒ?



  ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
ํ‚ค์›Œ๋“œ๋Š” โ€œOpenJobObjectโ€



                       2
๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ




        3
4
์‚ฌ์šฉ ์‚ฌ๋ก€
โ€ข ์›น ๋ธŒ๋ผ์šฐ์ € โ€“ ๊ตฌ๊ธ€ ํฌ๋กฌ
โ€ข ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ
โ€ข Virtual machine




                    5
์‚ฌ์šฉ ์šฉ๋„
โ€ข ์—ฌ๋Ÿฌ ๊ฐœ์˜ Process๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ
  ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
โ€ข Process๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ํ™˜๊ฒฝ์— ์ œ์•ฝ์„ ๊ฑธ๊ณ 
  ์‹ถ์„ ๊ฒฝ์šฐ
 โ€“ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
 โ€“ CPU ์‚ฌ์šฉ์‹œ๊ฐ„ ์ œํ•œ




                              6
์ฃผ์š” ์šฉ์–ด ์„ค๋ช…
โ€ข Sandbox
  โ€“ ์ œ์•ฝ์ด ์‹ฌํ•œ ํ™˜๊ฒฝ ๏ƒ  ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ฐ์ดํ„ฐ
    ๋ณดํ˜ธ ๋ชฉ์ 
  โ€“ ์‚ฌ์šฉ ์‚ฌ๋ก€
    โ€ข ๊ตฌ๊ธ€ ํฌ๋กฌ
    โ€ข ๋ฐฑ์‹ 
    โ€ข Virtual machine




                               7
์ฝ”๋“œ๋ฅผ ์‚ดํŽด ๋ด…์‹œ๋‹ค.




              8
9
ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ „์—
Jobํ•ธ๋“ค์„ ์ œ๊ฑฐํ•ด๋„ ๋ ๊นŒ์š”?




                   10
Job object




     P1      P2        P3




ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋  ๋•Œ
Job object๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

                            11
์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ๋“ค
1.   ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ œํ•œ์‚ฌํ•ญ ์„ค์ •
2.   ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค ๋ฐฐ์น˜ํ•˜๊ธฐ
3.   ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ
4.   ์žก ํ†ต์ง€
5.   ์žก ์‹ค์Šต ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜




                             12
1. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ œํ•œ์‚ฌํ•ญ ์„ค์ •

โ€ข ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
 โ€“ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค
 โ€“ UI์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋“ค ( ๊ฐ•์ œ ์ข…๋ฃŒ, ๋กœ๊ทธ ์•„์›ƒ, โ€ฆ )
 โ€“ ๋ณด์•ˆ ์‚ฌํ•ญ์˜ ์ ‘๊ทผ( ํŒŒ์ผ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋ธŒํ‚ค )
โ€ข How?
 โ€“ SetInformationJobObject()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ




                                      13
SetInformationJobObject function
BOOL WINAPI SetInformationJobObject(
  __in HANDLE hJob,
  __in JOBOBJECTINFOCLASS JobObjectInfoClass,
  __in LPVOID lpJobObjectInfo,
  __in DWORD cbJobObjectInfoLength
);


โ€ข ์ œํ•œ ์‚ฌํ•ญ ํ˜•ํƒœ
   โ€“ ๊ธฐ๋ณธ ์ œํ•œ์‚ฌํ•ญ
   โ€“ ํ™•์žฅ ์ œํ•œ์‚ฌํ•ญ
   โ€“ ๊ธฐ๋ณธ UI์ œํ•œ์‚ฌํ•ญ
   โ€“ ๋ณด์•ˆ ์ œํ•œ์‚ฌํ•ญ

                                                14
์‚ฌ์šฉ ๋ฐฉ๋ฒ•
BOOL WINAPI SetInformationJobObject(
  __in HANDLE hJob,
  __in JOBOBJECTINFOCLASS JobObjectInfoClass,
  __in LPVOID lpJobObjectInfo,
  __in DWORD cbJobObjectInfoLength
);




                                                15
๊ธฐ๋ณธ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ •
     1. ํ”„๋กœ์„ธ์Šค๋ณ„ user ๋ชจ๋“œ์‹œ๊ฐ„ ์ œํ•œ
     2. Job๋ณ„ user ๋ชจ๋“œ ์‹œ๊ฐ„ ์ œํ•œ
     3. Limit flag
     4~5 : ์ตœ๋Œ€/์ตœ์†Œ working set์ง€์ •
     6. ๋™์‹œ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ์ˆ˜
     7. ํ”„๋กœ์„ธ์Šค๋ณ„ ์ œํ•œ์‚ฌํ•ญ ์„ค์ •
     8. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ์„ค์ •
     9. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„ ์„ค์ •
      ( 0 : ์‹œ๊ฐ„ ์ ์œ  ๋‚ฎ๋‹ค ~ 9 : ์‹œ๊ฐ„์ ์œ  ๋†’๋‹ค )




                                       16
ํ™•์žฅ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ •
     1. ๊ธฐ๋ณธ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ • ๊ฐ์ฒด
     2. IO์นด์šดํ„ฐ
     3. ํ”„๋กœ์„ธ์Šค ๋‹น ์ปค๋ฐ‹ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ
        ํฌ๊ธฐ
     4. Job์—์„œ ์ปค๋ฐ‹ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ํฌ
        ๊ธฐ
     5. ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค๋‹น ์ปค๋ฐ‹๋œ ์ตœ๋Œ€ ๋ฉ”๋ชจ
        ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ
     6. ์žก ์ „์ฒด์˜ ์ปค๋ฐ‹๋œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ




              ์˜ˆ์™ธ ์ฐฝ์ด ์•ˆ๋– ์š”..
                            17
UI ์ œํ•œ ์‚ฌํ•ญ ์„ค์ •
     1.  ์ œํ•œ์‚ฌํ•ญ ์—†์Œ
     2.  ์žก ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ•ธ๋“ค ์‚ฌ์šฉ ๊ธˆ์ง€
     3.  ํด๋ฆฝ๋ณด๋“œ ์ฝ๊ธฐ ๊ธˆ์ง€
     4.  ํด๋ฆฝ๋ณด๋“œ ์“ฐ๊ธฐ ๊ธˆ์ง€
     5.  ์‹œ์Šคํ…œ ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ณ€๊ฒฝ ๊ธˆ์ง€
     6.  ๋””์Šคํ”Œ๋ ˆ์ด ์„ค์ • ๋ณ€๊ฒฝ ๊ธˆ์ง€
     7.  ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ „์—ญ ์•„ํ†ฐ ํ…Œ์ด
         ๋ธ”์—๋งŒ ์ ‘๊ทผ
     8. ์ƒˆ๋กœ์šด ๋ฐ์Šคํฌํƒ‘ ์ƒ์„ฑ / ๊ต์ฒด ๊ธˆ์ง€
     9. ์œˆ๋„์šฐ ์ข…๋ฃŒ ๊ธˆ์ง€
     10. ๋ชจ๋‘ ๊ธˆ์ง€




                           18
์žก ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์˜ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ 

                          ์žก ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค
 ์žก ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค


             ํ•ธ๋“ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ



             ํ•ธ๋“ค ์‚ฌ์šฉ ๋ถˆ๊ฐ€




                    BOOL WINAPI UserHandleGrantAccess(
                      __in HANDLE hUserHandle,
                      __in HANDLE hJob,
                      __in BOOL bGrant
                    );
                                                         19
๋ณด์•ˆ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ •




              20
Job์— ๊ฑธ๋ ค์žˆ๋Š” ์ œํ•œ ์ •๋ณด ์กฐํšŒ

   BOOL WINAPI QueryInformationJobObject(
     __in_opt HANDLE hJob,
     __in    JOBOBJECTINFOCLASS JobObjectInfoClass,
     __out    LPVOID lpJobObjectInfo,
     __in    DWORD cbJobObjectInfoLength,
     __out_opt LPDWORD lpReturnLength
   );


SetInformationJobObject ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
โ€ข Handle
โ€ข ์–ด๋–ค ๊ตฌ์กฐ์ฒด ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ตฌ์กฐ์ฒด ์ข…๋ฅ˜
โ€ข ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ
โ€ข ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ
โ€ข ๋ฐ›์•„์˜ฌ ๊ฐ’

                                                      21
2. ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค ๋ฐฐ์น˜ํ•˜๊ธฐ

โ€ข ์ƒ์„ฑ ์š”์ฒญํ•œ Process๊ฐ€ Job์— ์†ํ•ด์žˆ๋Š” ๊ฒฝ์šฐ
โ€ข ์ƒ์„ฑ ์š”์ฒญํ•œ Process๊ฐ€ Job์— ์†ํ•ด์žˆ์ง€ ์•Š์€ ๊ฒฝ
  ์šฐ
 โ€“ CreateProcess์‹œ CREATE_SUSPEND ํ”Œ๋ž˜๊ทธ๋กœ ์ƒ์„ฑ
 โ€“ AssignProcessToJobObject(hJob, hProcess)๋กœ ์ƒ์„ฑ
   ํ•œ process๋ฅผ Job์— ๋ฐฐ์น˜
 โ€“ ResumeThread๋กœ threadํ๋ฆ„ ์žฌ๊ฐœ




                                              22
23
3. ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ

โ€ข ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ
 โ€“ TerminateJobObject( jobHandle, exitCode )
โ€ข ์žก์˜ ํ†ต๊ณ„ ์ •๋ณด ์กฐํšŒ
 โ€“ QueryInformationJobObject()
    โ€ข BASIC_ACCOUNTING_INFORMATION
    โ€ข IO_COUNTERS
       โ€“ Read or Write ํšŸ์ˆ˜
       โ€“ Read or Write ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ
    โ€ข ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ Job ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค ์กฐํšŒ
โ€ข ์žก์— ์†ํ•˜์ง€ ์•Š์€ IO_COUNTER์กฐํšŒ
 โ€“ GetProcessIoCounters()์‚ฌ์šฉ

                                               24
BASIC_ACCOUNTING_INFORMATION




BOOL WINAPI QueryInformationJobObject(
  __in_opt HANDLE hJob,
  __in    JOBOBJECTINFOCLASS JobObjectInfoClass,
  __out    LPVOID lpJobObjectInfo,
  __in    DWORD cbJobObjectInfoLength,
  __out_opt LPDWORD lpReturnLength
);


                                                   25
๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฑฐ๋ฉดโ€ฆ
โ€ข Tool์„ ์‚ฌ์šฉ ํ•ฉ์‹œ๋‹ค.
โ€ข Process explorer
  โ€“ ํ”„๋กœ์„ธ์Šค๊ฐ€ Job ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰๋˜๋ฉด ๊ฐˆ์ƒ‰์œผ๋กœ ๋ณ€ํ•จ




                                  26
4. ์žก ํ†ต์ง€
โ€ข ์žก ํ†ต์ง€๋ฅผ ๋ฐ›๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•
 โ€“ WaitForSingleObject()๋ฅผ ์ด์šฉ
 โ€“ IOCP( Input/Ouptput Completion Port )๋ฅผ ์ด์šฉ




                                           27
CPU ์‹œ๊ฐ„ ์†Œ๋ชจ ํ†ต์ง€
โ€ข WaitForSingleObject๋‚˜
  WaitForMultiObjects๋ฅผ ์ด
  ์šฉํ•˜์—ฌ ํ†ต์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆผ
โ€ข CPU์‹œ๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด
  wait์•„๋ž˜ ์ฝ”๋“œ ์ˆ˜ํ–‰




                           28
IOCP๋ฅผ ์ด์šฉํ•˜๋Š” ํ†ต์ง€ ๋ฐฉ๋ฒ• ์ข…๋ฅ˜
         1. Job์ด ์ฃผ์–ด์ง„ CPU์‹œ๊ฐ„ ๋ชจ๋‘ ์†Œ๋ชจ,
            Process์ข…๋ฃŒ๋Š” ์•ˆํ•จ
         2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ์–ด์ง„ CPU์‹œ๊ฐ„์„ ๋ชจ๋‘
            ์†Œ๋ชจ, ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ, ํ”„๋กœ์„ธ์Šค id๋ฅผ
            ๋„˜๊ฒจ์คŒ
         3. ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ˆ˜์˜ ์ œํ•œ์„
            ๋„˜๊น€
         4. ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์Œ
         5. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋จ( id์ „๋‹ฌ )
         6. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋จ( id์ „๋‹ฌ )
         7. Unhandled exception์œผ๋กœ ์ธํ•œ ํ”„๋กœ
            ์„ธ์Šค ์ข…๋ฃŒ ํ†ต์ง€( id์ „๋‹ฌ )
         8. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋„˜
            ์–ด์„  ํ• ๋‹น์„ ์š”์ฒญํ•จ ( id์ „๋‹ฌ )
         9. Job์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ
            ์šฉ๋Ÿ‰์„ ๋„˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์ด ๋“ค์–ด
            ์˜ด

                                      29
IOCP๋ฅผ ์ด์šฉํ•œ job notify ์ฒ˜๋ฆฌ
Application thread             Job notify thread function

     IOCPํฌํŠธ ํ•˜๋‚˜ ์ƒ์„ฑ




 Job notify๋ฅผ ์ฒ˜๋ฆฌํ•  thread์ƒ์„ฑ




       ์žก๊ณผ IOCP์˜ ์—ฐ๊ฒฐ
   SetInformationJobObject()




Job notify thread์˜ ์ข…๋ฃŒ๊นŒ์ง€ wait




                                                            30
์ฃผ์˜์‚ฌํ•ญ
โ€ข ์žก ์˜ค๋ธŒ์ ํŠธ์˜ CPU์‹œ๊ฐ„ ๋ชจ๋‘์‚ฌ์šฉ ๏ƒจ ์ข…๋ฃŒ
โ€ข CPU ์‹œ๊ฐ„ ๋ชจ๋‘ ์‚ฌ์šฉ ํ†ต์ง€๋งŒ ๋ฐ›์œผ๋ ค๋ฉด?
 โ€“ JOBOBJECT_END_OF_JOB_TIME_INFORMATION
   ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ ํ›„ SetInformationJobObject()ํ•จ์ˆ˜๋กœ ์„ค์ •




                                          31
32
5. ์žก ์‹ค์Šต ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
โ€ข http://www.hanb.co.kr/exam/1621/




                                     33
์ฃผ์˜์‚ฌํ•ญ
โ€ข Console์—์„œ ์‹คํ–‰ ํ•  ๊ฒƒ
โ€ข Visual studio๋‚˜ ํƒ์ƒ‰๊ธฐ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜
  ์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
 โ€“ ํƒ์ƒ‰๊ธฐ๋ฅผ ํ†ตํ•˜์—ฌ ์‹คํ–‰๋œ ํŒŒ์ผ์€ ์ž๋™์ ์œผ๋กœ
   โ€œPCAโ€๋ผ๋Š” Job์— ํ• ๋‹น ๋œ๋‹ค.




                                 34
๋ฐœํ‘œ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€โ€ฆ




            35

More Related Content

PDF
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
PDF
์ œํ”„๋ฆฌ ๋ฆฌ์ฒ˜์˜ Windows via C/C++ : 8์žฅ ์œ ์ € ๋ชจ๋“œ์—์„œ์˜ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”
PPTX
Windws via c/c++ chapter 6
PPTX
07 ์Šค๋ ˆ๋“œ์Šค์ผ€์ค„๋ง,์šฐ์„ ์ˆœ์œ„,๊ทธ๋ฆฌ๊ณ ์„ ํ˜ธ๋„
PPTX
Windows via C/C++ 06 ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋ณธ
PPTX
์Šค๋ ˆ๋“œ
ย 
PPTX
11 ์œˆ๋„์šฐ์Šค๋ ˆ๋“œํ’€
PPTX
Startup JavaScript 8 - NPM, Express.JS
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
์ œํ”„๋ฆฌ ๋ฆฌ์ฒ˜์˜ Windows via C/C++ : 8์žฅ ์œ ์ € ๋ชจ๋“œ์—์„œ์˜ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”
Windws via c/c++ chapter 6
07 ์Šค๋ ˆ๋“œ์Šค์ผ€์ค„๋ง,์šฐ์„ ์ˆœ์œ„,๊ทธ๋ฆฌ๊ณ ์„ ํ˜ธ๋„
Windows via C/C++ 06 ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋ณธ
์Šค๋ ˆ๋“œ
ย 
11 ์œˆ๋„์šฐ์Šค๋ ˆ๋“œํ’€
Startup JavaScript 8 - NPM, Express.JS

What's hot (19)

PDF
[143] Modern C++ ๋ฌด์กฐ๊ฑด ์จ์•ผ ํ•ด?
PDF
[2B7]แ„‰แ…ตแ„Œแ…ณแ†ซ2 แ„†แ…ฅแ†ฏแ„แ…ตแ„Šแ…ณแ„…แ…ฆแ„ƒแ…ณแ„‘แ…ณแ„…แ…ฉแ„€แ…ณแ„…แ…ขแ„†แ…ตแ†ผแ„‹แ…ต แ„‹แ…ซ แ„‹แ…ตแ„…แ…ต แ„’แ…ตแ†ทแ„ƒแ…ณแ„‚แ…กแ„‹แ…ญ
PPT
ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ •๋ฆฌ
PPTX
04 ํ”„๋กœ์„ธ์Šค
PDF
[NDC 2016] ์œ ๋‹ˆํ‹ฐ, iOS์—์„œ LINQ ์‚ฌ์šฉํ•˜๊ธฐ
PDF
[D2 CAMPUS] ์•ˆ๋“œ๋กœ์ด๋“œ ์˜คํ”ˆ์†Œ์Šค ์Šคํ„ฐ๋””์ž๋ฃŒ - Http Request
PDF
๋น„๋™๊ธฐ ํŒŒ์ผ ๋กœ๋”ฉ
PDF
Javascript ์กฐ๊ธˆ ๋” ์ž˜ ์•Œ๊ธฐ
PDF
[1B4]แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„ƒแ…ฉแ†ผแ„‰แ…ตแ„‰แ…ฅแ†ผ_แ„‘แ…ณแ„…แ…ฉแ„€แ…ณแ„…แ…ขแ„†แ…ตแ†ผ
PDF
์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ˆจ์€ ์ง„์ฃผ, Winsock API - WSAPoll, Fast Loopback
PPT
Gcd ppt
PPTX
multi-thread ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„ ๋‘์ง€ ์•Š์œผ๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ
PDF
android_thread
PPTX
Jupyter notebok tensorboard ์‹คํ–‰ํ•˜๊ธฐ_20160706
PPTX
11_์›น์„œ๋น„์Šคํ™œ์šฉ
ย 
PPTX
Startup JavaScript 9 - Socket.IO ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
PDF
์‹œ์ฆŒ 2: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์™œ์ด๋ฆฌ ํž˜๋“œ๋‚˜์š”?
PPTX
์ด๊ธฐ์ข… ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฐ ์˜์ƒ์ฒ˜๋ฆฌ ์˜คํ”ˆ์†Œ์Šค
PPT
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
[143] Modern C++ ๋ฌด์กฐ๊ฑด ์จ์•ผ ํ•ด?
[2B7]แ„‰แ…ตแ„Œแ…ณแ†ซ2 แ„†แ…ฅแ†ฏแ„แ…ตแ„Šแ…ณแ„…แ…ฆแ„ƒแ…ณแ„‘แ…ณแ„…แ…ฉแ„€แ…ณแ„…แ…ขแ„†แ…ตแ†ผแ„‹แ…ต แ„‹แ…ซ แ„‹แ…ตแ„…แ…ต แ„’แ…ตแ†ทแ„ƒแ…ณแ„‚แ…กแ„‹แ…ญ
ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ •๋ฆฌ
04 ํ”„๋กœ์„ธ์Šค
[NDC 2016] ์œ ๋‹ˆํ‹ฐ, iOS์—์„œ LINQ ์‚ฌ์šฉํ•˜๊ธฐ
[D2 CAMPUS] ์•ˆ๋“œ๋กœ์ด๋“œ ์˜คํ”ˆ์†Œ์Šค ์Šคํ„ฐ๋””์ž๋ฃŒ - Http Request
๋น„๋™๊ธฐ ํŒŒ์ผ ๋กœ๋”ฉ
Javascript ์กฐ๊ธˆ ๋” ์ž˜ ์•Œ๊ธฐ
[1B4]แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„ƒแ…ฉแ†ผแ„‰แ…ตแ„‰แ…ฅแ†ผ_แ„‘แ…ณแ„…แ…ฉแ„€แ…ณแ„…แ…ขแ„†แ…ตแ†ผ
์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ˆจ์€ ์ง„์ฃผ, Winsock API - WSAPoll, Fast Loopback
Gcd ppt
multi-thread ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„ ๋‘์ง€ ์•Š์œผ๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ
android_thread
Jupyter notebok tensorboard ์‹คํ–‰ํ•˜๊ธฐ_20160706
11_์›น์„œ๋น„์Šคํ™œ์šฉ
ย 
Startup JavaScript 9 - Socket.IO ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
์‹œ์ฆŒ 2: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์™œ์ด๋ฆฌ ํž˜๋“œ๋‚˜์š”?
์ด๊ธฐ์ข… ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฐ ์˜์ƒ์ฒ˜๋ฆฌ ์˜คํ”ˆ์†Œ์Šค
GCGC- CGCII ์„œ๋ฒ„ ์—”์ง„์— ์ ์šฉ๋œ ๊ธฐ์ˆ  (4) - Executing System
Ad

Similar to windows via c++ Ch 5. Job (20)

PPTX
Windosw via c/c++ ์Šคํ„ฐ๋””5์žฅ
ย 
PPTX
๋™๊ธฐํ™”, ์Šค์ผ€์ค„๋ง
ย 
PPT
job ์„ค์ •์— ๋Œ€ํ•ด
PDF
03 ์ฒซ๋ฒˆ์งธํ”„๋กœ๊ทธ๋žจ
PPTX
Windows via c++ part 1
PDF
Anyframe Enterprise JAVA Center-cut Framework
PPTX
ํ”„๋กœ์„ธ์Šค
ย 
PPTX
Thread programming
PPTX
์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ
PPTX
๊ต์ฐฉ ์ƒํƒœ
PPT
U engine social bpm ํ”„๋กœ์„ธ์Šค ์ฝ”๋”” - process codi
PPTX
์šด์˜ ์ฒด์ œ Sig
PPTX
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
PDF
(2013 DEVIEW) ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์™œ์ด๋ฆฌ ํž˜๋“œ๋‚˜์š”?
PPT
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•
PDF
M3 4 1
ย 
PPTX
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
PPTX
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
PPTX
Windows via C/C++ Chapter 10
ย 
PPTX
Api design for c++ pattern
Windosw via c/c++ ์Šคํ„ฐ๋””5์žฅ
ย 
๋™๊ธฐํ™”, ์Šค์ผ€์ค„๋ง
ย 
job ์„ค์ •์— ๋Œ€ํ•ด
03 ์ฒซ๋ฒˆ์งธํ”„๋กœ๊ทธ๋žจ
Windows via c++ part 1
Anyframe Enterprise JAVA Center-cut Framework
ํ”„๋กœ์„ธ์Šค
ย 
Thread programming
์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ
๊ต์ฐฉ ์ƒํƒœ
U engine social bpm ํ”„๋กœ์„ธ์Šค ์ฝ”๋”” - process codi
์šด์˜ ์ฒด์ œ Sig
10 ๋™๊ธฐ๋ฐ๋น„๋™๊ธฐ์žฅ์น˜io
(2013 DEVIEW) ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์™œ์ด๋ฆฌ ํž˜๋“œ๋‚˜์š”?
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•
M3 4 1
ย 
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€
11์žฅ ์œˆ๋„์šฐ ์Šค๋ ˆ๋“œ ํ’€ + 12์žฅ ํŒŒ์ด๋ฒ„
Windows via C/C++ Chapter 10
ย 
Api design for c++ pattern
Ad

More from Hyosung Jeon (7)

PPTX
Nodejs express
PPTX
WebGL
PPTX
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
PPTX
Mongo db ๋ณต์ œ(Replication)
PPTX
xUnitTestPattern/chapter12
PDF
Map reduce
PPTX
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
Nodejs express
WebGL
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
Mongo db ๋ณต์ œ(Replication)
xUnitTestPattern/chapter12
Map reduce
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™

windows via c++ Ch 5. Job

  • 1. Windows via C++ 5์žฅ ์žก(Job) ์•„ํ‚คํ…ํŠธ๋ฅผ ๊ฟˆ๊พธ๋Š” ์‚ฌ๋žŒ๋“ค (http://cafe.naver.com/archtect1) ์ „ํšจ์„ฑ [email protected] 1
  • 2. ์–ด๋””์„œ ์‚ฌ์šฉํ• ๊นŒ? ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ๋Š” โ€œOpenJobObjectโ€ 2
  • 4. 4
  • 5. ์‚ฌ์šฉ ์‚ฌ๋ก€ โ€ข ์›น ๋ธŒ๋ผ์šฐ์ € โ€“ ๊ตฌ๊ธ€ ํฌ๋กฌ โ€ข ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ โ€ข Virtual machine 5
  • 6. ์‚ฌ์šฉ ์šฉ๋„ โ€ข ์—ฌ๋Ÿฌ ๊ฐœ์˜ Process๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ โ€ข Process๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ํ™˜๊ฒฝ์— ์ œ์•ฝ์„ ๊ฑธ๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ โ€“ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ โ€“ CPU ์‚ฌ์šฉ์‹œ๊ฐ„ ์ œํ•œ 6
  • 7. ์ฃผ์š” ์šฉ์–ด ์„ค๋ช… โ€ข Sandbox โ€“ ์ œ์•ฝ์ด ์‹ฌํ•œ ํ™˜๊ฒฝ ๏ƒ  ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ชฉ์  โ€“ ์‚ฌ์šฉ ์‚ฌ๋ก€ โ€ข ๊ตฌ๊ธ€ ํฌ๋กฌ โ€ข ๋ฐฑ์‹  โ€ข Virtual machine 7
  • 9. 9
  • 10. ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ „์— Jobํ•ธ๋“ค์„ ์ œ๊ฑฐํ•ด๋„ ๋ ๊นŒ์š”? 10
  • 11. Job object P1 P2 P3 ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋  ๋•Œ Job object๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค. 11
  • 12. ์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ๋“ค 1. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ œํ•œ์‚ฌํ•ญ ์„ค์ • 2. ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค ๋ฐฐ์น˜ํ•˜๊ธฐ 3. ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ 4. ์žก ํ†ต์ง€ 5. ์žก ์‹ค์Šต ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ 12
  • 13. 1. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ œํ•œ์‚ฌํ•ญ ์„ค์ • โ€ข ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. โ€“ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค โ€“ UI์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋“ค ( ๊ฐ•์ œ ์ข…๋ฃŒ, ๋กœ๊ทธ ์•„์›ƒ, โ€ฆ ) โ€“ ๋ณด์•ˆ ์‚ฌํ•ญ์˜ ์ ‘๊ทผ( ํŒŒ์ผ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋ธŒํ‚ค ) โ€ข How? โ€“ SetInformationJobObject()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ 13
  • 14. SetInformationJobObject function BOOL WINAPI SetInformationJobObject( __in HANDLE hJob, __in JOBOBJECTINFOCLASS JobObjectInfoClass, __in LPVOID lpJobObjectInfo, __in DWORD cbJobObjectInfoLength ); โ€ข ์ œํ•œ ์‚ฌํ•ญ ํ˜•ํƒœ โ€“ ๊ธฐ๋ณธ ์ œํ•œ์‚ฌํ•ญ โ€“ ํ™•์žฅ ์ œํ•œ์‚ฌํ•ญ โ€“ ๊ธฐ๋ณธ UI์ œํ•œ์‚ฌํ•ญ โ€“ ๋ณด์•ˆ ์ œํ•œ์‚ฌํ•ญ 14
  • 15. ์‚ฌ์šฉ ๋ฐฉ๋ฒ• BOOL WINAPI SetInformationJobObject( __in HANDLE hJob, __in JOBOBJECTINFOCLASS JobObjectInfoClass, __in LPVOID lpJobObjectInfo, __in DWORD cbJobObjectInfoLength ); 15
  • 16. ๊ธฐ๋ณธ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ • 1. ํ”„๋กœ์„ธ์Šค๋ณ„ user ๋ชจ๋“œ์‹œ๊ฐ„ ์ œํ•œ 2. Job๋ณ„ user ๋ชจ๋“œ ์‹œ๊ฐ„ ์ œํ•œ 3. Limit flag 4~5 : ์ตœ๋Œ€/์ตœ์†Œ working set์ง€์ • 6. ๋™์‹œ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ์ˆ˜ 7. ํ”„๋กœ์„ธ์Šค๋ณ„ ์ œํ•œ์‚ฌํ•ญ ์„ค์ • 8. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ์„ค์ • 9. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ( 0 : ์‹œ๊ฐ„ ์ ์œ  ๋‚ฎ๋‹ค ~ 9 : ์‹œ๊ฐ„์ ์œ  ๋†’๋‹ค ) 16
  • 17. ํ™•์žฅ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ • 1. ๊ธฐ๋ณธ ์ œํ•œ ์‚ฌํ•ญ ์„ค์ • ๊ฐ์ฒด 2. IO์นด์šดํ„ฐ 3. ํ”„๋กœ์„ธ์Šค ๋‹น ์ปค๋ฐ‹ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ 4. Job์—์„œ ์ปค๋ฐ‹ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ํฌ ๊ธฐ 5. ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค๋‹น ์ปค๋ฐ‹๋œ ์ตœ๋Œ€ ๋ฉ”๋ชจ ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ 6. ์žก ์ „์ฒด์˜ ์ปค๋ฐ‹๋œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ ์˜ˆ์™ธ ์ฐฝ์ด ์•ˆ๋– ์š”.. 17
  • 18. UI ์ œํ•œ ์‚ฌํ•ญ ์„ค์ • 1. ์ œํ•œ์‚ฌํ•ญ ์—†์Œ 2. ์žก ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ•ธ๋“ค ์‚ฌ์šฉ ๊ธˆ์ง€ 3. ํด๋ฆฝ๋ณด๋“œ ์ฝ๊ธฐ ๊ธˆ์ง€ 4. ํด๋ฆฝ๋ณด๋“œ ์“ฐ๊ธฐ ๊ธˆ์ง€ 5. ์‹œ์Šคํ…œ ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ณ€๊ฒฝ ๊ธˆ์ง€ 6. ๋””์Šคํ”Œ๋ ˆ์ด ์„ค์ • ๋ณ€๊ฒฝ ๊ธˆ์ง€ 7. ์žก ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ „์—ญ ์•„ํ†ฐ ํ…Œ์ด ๋ธ”์—๋งŒ ์ ‘๊ทผ 8. ์ƒˆ๋กœ์šด ๋ฐ์Šคํฌํƒ‘ ์ƒ์„ฑ / ๊ต์ฒด ๊ธˆ์ง€ 9. ์œˆ๋„์šฐ ์ข…๋ฃŒ ๊ธˆ์ง€ 10. ๋ชจ๋‘ ๊ธˆ์ง€ 18
  • 19. ์žก ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์˜ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹  ์žก ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค ์žก ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค ํ•ธ๋“ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ธ๋“ค ์‚ฌ์šฉ ๋ถˆ๊ฐ€ BOOL WINAPI UserHandleGrantAccess( __in HANDLE hUserHandle, __in HANDLE hJob, __in BOOL bGrant ); 19
  • 21. Job์— ๊ฑธ๋ ค์žˆ๋Š” ์ œํ•œ ์ •๋ณด ์กฐํšŒ BOOL WINAPI QueryInformationJobObject( __in_opt HANDLE hJob, __in JOBOBJECTINFOCLASS JobObjectInfoClass, __out LPVOID lpJobObjectInfo, __in DWORD cbJobObjectInfoLength, __out_opt LPDWORD lpReturnLength ); SetInformationJobObject ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ โ€ข Handle โ€ข ์–ด๋–ค ๊ตฌ์กฐ์ฒด ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ตฌ์กฐ์ฒด ์ข…๋ฅ˜ โ€ข ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ โ€ข ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ โ€ข ๋ฐ›์•„์˜ฌ ๊ฐ’ 21
  • 22. 2. ์žก ๋‚ด์— ํ”„๋กœ์„ธ์Šค ๋ฐฐ์น˜ํ•˜๊ธฐ โ€ข ์ƒ์„ฑ ์š”์ฒญํ•œ Process๊ฐ€ Job์— ์†ํ•ด์žˆ๋Š” ๊ฒฝ์šฐ โ€ข ์ƒ์„ฑ ์š”์ฒญํ•œ Process๊ฐ€ Job์— ์†ํ•ด์žˆ์ง€ ์•Š์€ ๊ฒฝ ์šฐ โ€“ CreateProcess์‹œ CREATE_SUSPEND ํ”Œ๋ž˜๊ทธ๋กœ ์ƒ์„ฑ โ€“ AssignProcessToJobObject(hJob, hProcess)๋กœ ์ƒ์„ฑ ํ•œ process๋ฅผ Job์— ๋ฐฐ์น˜ โ€“ ResumeThread๋กœ threadํ๋ฆ„ ์žฌ๊ฐœ 22
  • 23. 23
  • 24. 3. ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ โ€ข ์žก ๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ โ€“ TerminateJobObject( jobHandle, exitCode ) โ€ข ์žก์˜ ํ†ต๊ณ„ ์ •๋ณด ์กฐํšŒ โ€“ QueryInformationJobObject() โ€ข BASIC_ACCOUNTING_INFORMATION โ€ข IO_COUNTERS โ€“ Read or Write ํšŸ์ˆ˜ โ€“ Read or Write ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ โ€ข ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ Job ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค ์กฐํšŒ โ€ข ์žก์— ์†ํ•˜์ง€ ์•Š์€ IO_COUNTER์กฐํšŒ โ€“ GetProcessIoCounters()์‚ฌ์šฉ 24
  • 25. BASIC_ACCOUNTING_INFORMATION BOOL WINAPI QueryInformationJobObject( __in_opt HANDLE hJob, __in JOBOBJECTINFOCLASS JobObjectInfoClass, __out LPVOID lpJobObjectInfo, __in DWORD cbJobObjectInfoLength, __out_opt LPDWORD lpReturnLength ); 25
  • 26. ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฑฐ๋ฉดโ€ฆ โ€ข Tool์„ ์‚ฌ์šฉ ํ•ฉ์‹œ๋‹ค. โ€ข Process explorer โ€“ ํ”„๋กœ์„ธ์Šค๊ฐ€ Job ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰๋˜๋ฉด ๊ฐˆ์ƒ‰์œผ๋กœ ๋ณ€ํ•จ 26
  • 27. 4. ์žก ํ†ต์ง€ โ€ข ์žก ํ†ต์ง€๋ฅผ ๋ฐ›๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• โ€“ WaitForSingleObject()๋ฅผ ์ด์šฉ โ€“ IOCP( Input/Ouptput Completion Port )๋ฅผ ์ด์šฉ 27
  • 28. CPU ์‹œ๊ฐ„ ์†Œ๋ชจ ํ†ต์ง€ โ€ข WaitForSingleObject๋‚˜ WaitForMultiObjects๋ฅผ ์ด ์šฉํ•˜์—ฌ ํ†ต์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆผ โ€ข CPU์‹œ๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด wait์•„๋ž˜ ์ฝ”๋“œ ์ˆ˜ํ–‰ 28
  • 29. IOCP๋ฅผ ์ด์šฉํ•˜๋Š” ํ†ต์ง€ ๋ฐฉ๋ฒ• ์ข…๋ฅ˜ 1. Job์ด ์ฃผ์–ด์ง„ CPU์‹œ๊ฐ„ ๋ชจ๋‘ ์†Œ๋ชจ, Process์ข…๋ฃŒ๋Š” ์•ˆํ•จ 2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ์–ด์ง„ CPU์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ๋ชจ, ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ, ํ”„๋กœ์„ธ์Šค id๋ฅผ ๋„˜๊ฒจ์คŒ 3. ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ˆ˜์˜ ์ œํ•œ์„ ๋„˜๊น€ 4. ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์Œ 5. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋จ( id์ „๋‹ฌ ) 6. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋จ( id์ „๋‹ฌ ) 7. Unhandled exception์œผ๋กœ ์ธํ•œ ํ”„๋กœ ์„ธ์Šค ์ข…๋ฃŒ ํ†ต์ง€( id์ „๋‹ฌ ) 8. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋„˜ ์–ด์„  ํ• ๋‹น์„ ์š”์ฒญํ•จ ( id์ „๋‹ฌ ) 9. Job์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ ์šฉ๋Ÿ‰์„ ๋„˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์ด ๋“ค์–ด ์˜ด 29
  • 30. IOCP๋ฅผ ์ด์šฉํ•œ job notify ์ฒ˜๋ฆฌ Application thread Job notify thread function IOCPํฌํŠธ ํ•˜๋‚˜ ์ƒ์„ฑ Job notify๋ฅผ ์ฒ˜๋ฆฌํ•  thread์ƒ์„ฑ ์žก๊ณผ IOCP์˜ ์—ฐ๊ฒฐ SetInformationJobObject() Job notify thread์˜ ์ข…๋ฃŒ๊นŒ์ง€ wait 30
  • 31. ์ฃผ์˜์‚ฌํ•ญ โ€ข ์žก ์˜ค๋ธŒ์ ํŠธ์˜ CPU์‹œ๊ฐ„ ๋ชจ๋‘์‚ฌ์šฉ ๏ƒจ ์ข…๋ฃŒ โ€ข CPU ์‹œ๊ฐ„ ๋ชจ๋‘ ์‚ฌ์šฉ ํ†ต์ง€๋งŒ ๋ฐ›์œผ๋ ค๋ฉด? โ€“ JOBOBJECT_END_OF_JOB_TIME_INFORMATION ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ ํ›„ SetInformationJobObject()ํ•จ์ˆ˜๋กœ ์„ค์ • 31
  • 32. 32
  • 33. 5. ์žก ์‹ค์Šต ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ โ€ข http://www.hanb.co.kr/exam/1621/ 33
  • 34. ์ฃผ์˜์‚ฌํ•ญ โ€ข Console์—์„œ ์‹คํ–‰ ํ•  ๊ฒƒ โ€ข Visual studio๋‚˜ ํƒ์ƒ‰๊ธฐ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜ ์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. โ€“ ํƒ์ƒ‰๊ธฐ๋ฅผ ํ†ตํ•˜์—ฌ ์‹คํ–‰๋œ ํŒŒ์ผ์€ ์ž๋™์ ์œผ๋กœ โ€œPCAโ€๋ผ๋Š” Job์— ํ• ๋‹น ๋œ๋‹ค. 34