WINDOWS 프로그래밍을 위해 꼭 필요한 개념은 다음과 같다.
1. 유저모드와 커널모드
2. 프로세스
3. 스레드
4. 가상메모리
5. 객체와 핸들
6. 멀티프로세싱
7. 유니코드
8. 서브시스템
9. 세션
1. 유저 모드와 커널 모드
유저모드
- 운영체제의 시스템 영역을 제외한 데이터 영역에 접근 가능
- 하드웨어 액세스 불가
- 유저 모드에서 실행되는 개별 프로그램으로 인한 시스템 동작 불가 오류를 막는다.
커널모드
- 커널과 디바이스 드라이버들만 사용
- 모든 시스템 자원에 대해 접근 가능
- 오류 발생시 컴퓨터 뻑날수 있음..^^
Ring
- 권한을 의미하는 용어
- Ring 0 : 커널 모드
- Ring 3 : 주로 유저모드에게는 해당 권한 부여
2. 프로세스
- 하나의 프로그램을 실행하기 위한 자원의 집합
- 프로그램을 실행하면 프로세스
- 즉 , 프로그램은 하나지만 여러번 실행하면 프로세스가 여러개~
- 실행되는 코드, 객체와 핸들, 접근권한 정보 등이 하나의 프로세스(메모리)에 존재
서비스
- 사용자 화면이 필요없이 실행되는 프로세스
- 주로 네트워크 연결과 같은 윈도우의 기능을 담당하는 프로세스가 많이 사용됨
- 추후 서비스에 대해서는 따로 써야할듯,,
3. 스레드
- 프로그램의 실행코드를 커널에서 처리하는 역할
- cpu상태 정보를 가지고 있으며 스케줄링에 관련된 정보를 가지고 있음
- cpu에 값을 전달할 때 사용되는 스택정보도 또한 스레드가 가지고 있음
- 실행된 스택들을 call stack이라고 부른다.
- process explorer에서 스레드에 대한 스택정보를 가지고 있으며 확인이 가능하다.
- 이를 위해서는 심볼을 설정해야 하는데 option>Configure Symbols에서 설정하면 된다.
- http://msdl.microsoft.com/download/symbols
4. 가상 메모리
- 물리 메모리와 디스크를 이용하는 메모리를 모두 통합하여 관리해서 프로세스들이 메모리를 의식하지 않고 사용할수 있도록 도와준다!
- 프로세스는 실제로 메모리에 접근할 수는 없고 윈도우에서 제공하는 메모리 관리자를 이용해야 가능하다.
- 메모리 관리자는 맵(MAP)이라는 프로세스 별로 연결된 저장위치를 가지고있음
- 현재 프로세스가 사용하는 물리 메모리/디스크 위치 등을 관리
- 모든 프로세스는 메모리 관리자를 통해 독립된 메모리로 관리되고 있음
- 모든 프로세스는 메모리를 최대 0X00000000000~ 0X00007FFFFFFF 까지 사용 가능
- 나머지 이 이상의 메모리 주소는 커널에서 사용하고 있다.
5. 객체와 핸들
객체
- 변수들과 연관된 함수들로 이루어진 하나의 묶음
- OOP관련 내용은 중략함..
- 프로세스도 객체이며 스레드도 객체라고 볼 수 있다. 단 윈도우에서 객체들은 커널메모리에 존재
- 객체에 접근하기 위해서는 조정자가 필요하다 = 핸들
핸들
- 객체를 사용하기 위해 존재
- 핸들을 통해 객체의 사용을 윈도우에 요청
- 유저모드에서 동작하는 프로그램들은 모두 핸들을 통해서 객체에 접근
- 커널모드에서 동작하는 프로그램들은 핸들 없이 바로 객체에 접근 가능
'Programming > Windows' 카테고리의 다른 글
[WINDOWS] 프로세스 (0) | 2021.06.09 |
---|---|
[WINDOWS] 윈도우 기본 개념 (2) (0) | 2021.06.09 |
[windbg] Windbg 사용법 / 덤프 분석 (0) | 2021.02.23 |
[windows] 프로세스와 스레드 (0) | 2021.02.13 |
[windows] 프로시저와 스택구조 간단정리 (0) | 2021.02.12 |