Published 2021. 6. 9. 23:55

프로세스 

  • 운영체제 입장에서 실행되는 하나의 작업
  • 실제 커널객체로 생성되어 위치함

프로세스가 소유하는 정보

  • 개인 가상 메모리 영역
    • 메모리 크기는 32비트 프로세스에서 최대 4GB , 64비트에서 최대 16GB
  • 개인 물리 메모리 영역
  • 보안토큰
    • 공유자원을 Access할 때 사용
  • 핸들 테이블
  • 스레드
  • 우선 순위
  • 메모리 주소
    • 현재 프로세스가 사용하는 메모리 주소

프로세스 사용 용도에 따른 구분

  • 시스템 프로세스
    • 운영체제에서 생성하고 반드시 존재해야하는 프로세스
    • 네이티브 API사용
    • WinLogon 이나 세션매니저(SMSS) 등
  • 서비스 프로세스
    • Win32 Services에 의지하여 서비스 형태로 실행되는 프로세스
  • 응용 프로그램(사용자 프로그램)
    • 유저모드에서 실행되는 프로그램
  • 환경 서브시스템
    • 프로그램의 실행 환경에 맞게 실행해주는 역할
    • csrss.exe

1. 프로세스 관련 API

프로세스 생성

  • CreateProcess

프로세스 다른 유저 권한으로 생성

  • CreateProcessAsUser
  • CreateProcessWithLogonW

프로세스 종료

  • ExitProcess
    • 처리중인 스레드에게 종료를 지시하고 스레드의 종료를 기다렸다가 종료하게 된다.
    • 자신만 종료 가능하다.
  • TerminateProcess
    • 사용중인 모든 핸들과 자원을 해제하고 종료하게 된다.
    • ExitProcess보다 강력하지만 작업이 실행중인 경우 문제가 발생할 수 있는 소지가 있다.
    • 자신 말고 다른 프로세스도 죽일 수 있다.

다른 프로세스 핸들 가져오기 

  • OpenProcess

 

프로세스의 생성 흐름(파란색은 커널모드다)

  1. 파일 열기(CreateProcess)
  2. 프로세스 객체 생성
  3. 스레드 초기화
  4. 메인스레드 객체 생성
  5. 환경 서브 시스템에 생성된 프로세스와 스레드 알림/복제
  6. 환경서브시스템이 프로세스와 스레드 관리 시작
  7. 첫번째 스레드 메인 함수 실행

용어 정리

  • Entry Point(EP)
    • 프로그램 내 코드의 최초 실행 지점
  • Context
    • 멀티 프로세싱에서는 동시에 여러개의 스레드가 실행되고 시분할 방식으로 실행과 대기를 반복하면서 여러 스레드를 병렬로 처리한다
    • 스레드는 실행될 때 모든 작업 처리가 불가하기 때문에 대기모드로 전환하여 자기 차례를 기다렸다가 다시 실행 상태가 되었을 때 자신이 실행했던 지점을 기억하는 공간(=context)이 필요하다.

'Programming > Windows' 카테고리의 다른 글

[WINDOWS] 스레드  (0) 2021.06.11
[WINDOWS] 윈도우 기본 개념 (2)  (0) 2021.06.09
[WINDOWS] 윈도우 기본 개념 (1)  (0) 2021.06.09
[windbg] Windbg 사용법 / 덤프 분석  (0) 2021.02.23
[windows] 프로세스와 스레드  (0) 2021.02.13
복사했습니다!