프로세스
- 운영체제 입장에서 실행되는 하나의 작업
- 실제 커널객체로 생성되어 위치함
프로세스가 소유하는 정보
- 개인 가상 메모리 영역
- 메모리 크기는 32비트 프로세스에서 최대 4GB , 64비트에서 최대 16GB
- 개인 물리 메모리 영역
- 보안토큰
- 공유자원을 Access할 때 사용
- 핸들 테이블
- 스레드
- 우선 순위
- 메모리 주소
- 현재 프로세스가 사용하는 메모리 주소
프로세스 사용 용도에 따른 구분
- 시스템 프로세스
- 운영체제에서 생성하고 반드시 존재해야하는 프로세스
- 네이티브 API사용
- WinLogon 이나 세션매니저(SMSS) 등
- 서비스 프로세스
- Win32 Services에 의지하여 서비스 형태로 실행되는 프로세스
- 응용 프로그램(사용자 프로그램)
- 유저모드에서 실행되는 프로그램
- 환경 서브시스템
- 프로그램의 실행 환경에 맞게 실행해주는 역할
- csrss.exe
1. 프로세스 관련 API
프로세스 생성
- CreateProcess
프로세스 다른 유저 권한으로 생성
- CreateProcessAsUser
- CreateProcessWithLogonW
프로세스 종료
- ExitProcess
- 처리중인 스레드에게 종료를 지시하고 스레드의 종료를 기다렸다가 종료하게 된다.
- 자신만 종료 가능하다.
- TerminateProcess
- 사용중인 모든 핸들과 자원을 해제하고 종료하게 된다.
- ExitProcess보다 강력하지만 작업이 실행중인 경우 문제가 발생할 수 있는 소지가 있다.
- 자신 말고 다른 프로세스도 죽일 수 있다.
다른 프로세스 핸들 가져오기
- OpenProcess
프로세스의 생성 흐름(파란색은 커널모드다)
- 파일 열기(CreateProcess)
- 프로세스 객체 생성
- 스레드 초기화
- 메인스레드 객체 생성
- 환경 서브 시스템에 생성된 프로세스와 스레드 알림/복제
- 환경서브시스템이 프로세스와 스레드 관리 시작
- 첫번째 스레드 메인 함수 실행
용어 정리
- 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 |