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관련 내용은 중략함..
  • 프로세스도 객체이며 스레드도 객체라고 볼 수 있다. 단 윈도우에서 객체들은 커널메모리에 존재
  • 객체에 접근하기 위해서는 조정자가 필요하다 = 핸들

핸들

  • 객체를 사용하기 위해 존재
  • 핸들을 통해 객체의 사용을 윈도우에 요청
  • 유저모드에서 동작하는 프로그램들은 모두 핸들을 통해서 객체에 접근
  • 커널모드에서 동작하는 프로그램들은 핸들 없이 바로 객체에 접근 가능

 

복사했습니다!