SlideShare ist ein Scribd-Unternehmen logo
1 von 35
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

Weitere ähnliche Inhalte

Was ist angesagt?

[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기Daehee Kim
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http RequestNAVER D2
 
비동기 파일 로딩
비동기 파일 로딩비동기 파일 로딩
비동기 파일 로딩Bongseok Cho
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍NAVER D2
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것흥배 최
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은jieun kim
 
android_thread
android_threadandroid_thread
android_threadhandfoot
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Yong Joon Moon
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스Seunghwa Song
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 

Was ist angesagt? (20)

[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
 
비동기 파일 로딩
비동기 파일 로딩비동기 파일 로딩
비동기 파일 로딩
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
 
android_thread
android_threadandroid_thread
android_thread
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 

Ähnlich wie windows via c++ Ch 5. Job

Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8Jinkyoung Kim
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기Mario Cho
 
제로부터시작하는오픈소스
제로부터시작하는오픈소스제로부터시작하는오픈소스
제로부터시작하는오픈소스Mario Cho
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
Tizen main loop 이해
Tizen main loop 이해Tizen main loop 이해
Tizen main loop 이해Hermet Park
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10hungrok
 
한글시계웍샵_SW
한글시계웍샵_SW한글시계웍샵_SW
한글시계웍샵_SW영광 송
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼NAVER D2
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 

Ähnlich wie windows via c++ Ch 5. Job (20)

Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기
 
제로부터시작하는오픈소스
제로부터시작하는오픈소스제로부터시작하는오픈소스
제로부터시작하는오픈소스
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
Tizen main loop 이해
Tizen main loop 이해Tizen main loop 이해
Tizen main loop 이해
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10
 
Anatomy of an android
Anatomy of an androidAnatomy of an android
Anatomy of an android
 
한글시계웍샵_SW
한글시계웍샵_SW한글시계웍샵_SW
한글시계웍샵_SW
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼
[224]nsml 상상하는 모든 것이 이루어지는 클라우드 머신러닝 플랫폼
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
12books
12books12books
12books
 

Mehr von Hyosung Jeon

9장 도메인 주도 설계
9장 도메인 주도 설계9장 도메인 주도 설계
9장 도메인 주도 설계Hyosung Jeon
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동Hyosung Jeon
 

Mehr von Hyosung Jeon (7)

Nodejs express
Nodejs expressNodejs express
Nodejs express
 
WebGL
WebGLWebGL
WebGL
 
9장 도메인 주도 설계
9장 도메인 주도 설계9장 도메인 주도 설계
9장 도메인 주도 설계
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
Map reduce
Map reduceMap reduce
Map reduce
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동
 

Kürzlich hochgeladen

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Kürzlich hochgeladen (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

windows via c++ Ch 5. Job

  • 1. Windows via C++ 5장 잡(Job) 아키텍트를 꿈꾸는 사람들 (http://cafe.naver.com/archtect1) 전효성 itmentor@gmail.com 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
  • 20. 보안 제한 사항 설정 20
  • 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