이전 게시글에서 1~5번 개념까지 설명하였다.

해당 게시글에서 소개할 개념은 다음과 같다.

6. 멀티프로세싱

7. 유니코드

8. 서브시스템 

9. 세션

6. 멀티 프로세싱

SMP 

  • 윈도우는 다수의 프로세서가 하나의 메모리영역과 하드웨어 자원을 공유해서 사용하는 SMP(Symmetric multiprocessing)을 지원한다.
  • 이는 리눅스와 같은 대부분의 시스템이 지원하는 시스템구조이다.
  • CPU입장에서 데이터가 어느 위치에 있던 각 프로세스가 동일하게 접근할 수 있고, 작업스케줄링을 통해 효율적으로 프로세스를 이용할 수 있게한다.
  • win10기준 256개의 논리 프로세서까지 지원한다.

 

  • windows 버전별로 지원하는 물리적 프로세서(CPU) 개수를 제한 하고 있다.
    • 자료는 구글링 하길 바란다.

7. 유니코드

진짜 윈도우 프로그래밍 할 때 간단하면서 제일 빡치는 부분. 문자셋이 왜이렇게 많은지^^..

 

아스키코드(ASCKII)

  • 미국에서 정의하는 표준
  • 알파벳 26개 및 확장문자를 포함하여 256문자 존재
  • 하나의 문자를 1바이트를 이용해 표현할 수 있어 Char형으로 이용됨

 

유니코드

  • 2바이트를 이용해 문자표현
  • WChar형으로 표현
  • 문자앞에 유니코드 형태라는 L을 넣어줘야 인식 가능
    • 멀티바이트 형태라면 _T로 써도됨

국제표준을 위해 아스키코드와 같이 1바이트를 이용하는 경우 SBCS(Single Byte Character Set)을 이용하고, 유니코드와 같은 2바이트를 이용하는 경우 WBCS(Wide Byte Character Set)을 이용

둘 다 사용하는경우 MBCS(Multi Byte Character Set)사용

MBCS의 경우 아스키 코드에서 사용하지 않은 문자를 처리할 때 2바이트를 이용하나, 이 때 이용하는 코드가 이뉴코드는 아니므로 개발에 주의해야 한다. 그냥 유니코드 쓰는게 쌉 안정적.

 

 

8. 서브시스템

환경 서브시스템

  • 윈도우에서 실행 중인 프로그램의 환경을 지원해 주는 기능을 제공 
  • 응용 프로그램의 실행을 위한 환경 부분과 프로세스 관리만 담당
  • 윈도우 환경을 지원하는 윈도우 서브시스템 Csrss.exe
  • Unix용 환경을 지원하는 POSIX서브시스템 Psxss.exe
    • Unix용도로 개발된 프로그램을 윈도우에서 구동할 수 있도록 호환성 지원

왜 서브시스템이 다를까?

->파일의 실행구조가 다르기 때문이다.

참조 : 윈도우에서 사용하는 실행 파일 구조는 PE구조

 

서브시스템 DLL

프로그램이 사용할 서브시스템 DLL은 PE헤더에 정의되어 있음(IAT관련)

 

1.Kernel32.dll

  • 파일 생성과 같은 하드웨어 요청에 주로 사용

2.Advapi32.dll

  • 보안 구성이나 확인 등 추가적으로 윈도우에서 제공하는 기능에서 사용

3.User32.dll

  • 사용자에게 제공하는 창이나 메뉴 등의 화면을 생성하는데 필요한 요소 요청

4.GDi32.dll

  • 직접 그림을 그릴 수 있는 부분에서 사용

 

ntdll.dll

서브시스템 바로 하단에서 동작하며 유저모드에서 동작 중이던 프로그램을 위해 커널모드의 요청을 대신 처리한 후 결과값을 반환해주는 역할

커널모드 이용 권한이 필요한 Native API(또는 System Service API)을 ntdll을 통해 진행

 

9. 세션

윈도우는 다중 사용자 환경을 제공한다. 이로 인해 세션이 탄생..!

프로그램을 실행시킨 사용자만이 해당프로그램의 입출력을 보장받고 제어할 수 있도록 구분해주는 역할

Window Station과 Desktop 우로 존재

하나의 세션은 하나 혹은 여러개의 Window Station으로 구성되며, 하나의 Window Station은 하나 혹은 여러개의 Desktop으로 구성된다.

세션은 사용자 구분이라는 의미를 가진다면, Window Station은 사용자 입력과 화면 출력을 할 수 있는 공간, 없는 공간을 구분하는 역할을 하고 최종적으로 Desktop객체를 이용해 화면을 표현한다.

 

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

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