• IIS가 웹 리소스 요청을 받았을때 처리 하는 방식
  • IIS 5.X 버전과 IIS 6.0 의 버전간 차이가 있다.

  • IIS 5.X
  1. 클라이언트의 모든 HTTP 요청은 IIS의 실행 프로세스인 inetinfo.exe 가 받아 들인다.
    inetinfo는 요청 리소스의 형식을 확인하여 확장자와 매핑되어 있는 ISAPI Extension 모듈로 요청을 전달한다.
    ex)
    asp -> asp.dll,
    aspx, asmx, ashx -> aspnet_isapi.dll,
    txt, 이미지, 스크립트 없는 asp 파일이 요청되면 inetinfo는 외부 모듈 연계없이 직접 처리함.
  2. aspnet_isapi.dll 은 닷넷 웹 리소스를 직접 처리 하지 않고 ASP.NET Worker Process 인 aspnet_wp.exe 로 요청을 전달하는 dispatcher 로서 역할을 수행한다.
  3. aspnet_isapi.dll 과 aspnet_wp.exe 사이의 연결은 프로세스 경계를 넘어 데이터를 전송하기 위한 Win32 메커니즘인 명명 파이프를 통해 이루어 진다.
  4. ASP.NET Worker Process 인 aspnet_wp.exe 는 닷넷공용언어런타임(CLR)을 호스트하며 HTTP 파이프라인을 활성화하여 웹 리소스의 실제 처리를 시작한다.
  5. 각 웹 응용프로그램들은 Worker Process 의 가상 디렉터리로 식별되며, AppDomain 이라는 응용프로그램 도메인에 속하게 된다.
    - 각각의 웹 응용프로그램들은 논리적으로 격리됨을 알 수 있다.
    (응용프로그램 설정(Application, Session, Cache 등)이 공유 되지 않는다.)
    - AppDomain 은 Win32 내의 프로세스 분리와 유사한 방식으로 서로 분리되고, 격리 되어 진다.
    - CLR 은 서로 다른 AppDomain 내에 있는 개체들 사이의 직접적인 호출을 막음으로써 격리를 강제한다.
    (여기서 웹 응용프로그램이라 함은 웹 사이트 혹은 응용프로그램으로 구성된 웹사이트 하위 가상 디렉터리를 의미)
  6. 기본적으로 모든 활성 웹 응용프로그램들은 하나의 Worker Process 에서 호스트한다.
    - 그러나 멀티 CPU를 가진 웹 서버라면 다중 Worker Process 가 실행되도록 할 수 있다. (웹 가든)
    - machine.config 파일의 <processModel> 섹션의 webGarden 속성을 true 로 설정하고 cpuMask 속성을 비트 마스크값으로 지정

  • IIS 6.0
  1. 클라이언트의 모든 HTTP 요청은 커널 모드에서 작동하는 http.sys 드라이버가 받아 들인다.
    - http.sys 리스너는 요청을 적절한 응용프로그램 풀 요청 대기열에 배치한다.
    - 다수의 웹 응용프로그램들이 하나의 응용프로그램 풀을 사용하더라도 풀의 요청 대기열은 오직 하나다.)
  2. 응용프로그램 풀은 worker process 와 가상디렉터리를 구별한다.
    - 요청을 올바른 worker process 로 보내기 위해 http.sys 매퍼가 사용하는 논리 프로세스 경계에 의해 정의되는 구성 개체이다.
  3. WAS 는 메타베이스와 응용프로그램 푸을 관리하는 중추적인 역할을 담당한다. (WAS 는 Worker Process 를 생성, 관리한다.)
    - 이 프로세스는 공유되지 않는 svchost.exe 의 사용자 모드에서 Local System 권한으로 실행된다.
    - 또한 worker process 의 모니터링, 리사이클링 등 관리를 담당한다.
  4. IIS 6.0 의 메타베이스는 XML 기반의 파일로 관리된다.
    - WAS 는 이 메타베이스의 변경사항을 실시간으로 반영한다.
  5. 닷넷 웹 리소스를 처리하기 위한 worker process 는 더 이상 aspnet_wp.exe 가 아닌 w3wp.exe 이다.
    - w3wp.exe 는 응용프로그램 풀 대기열로부터 요청을 읽어온다.
    - w3wp.exe 는 또한 asp 와 같은 닷넷 이전버전의 웹 리소스도 처리한다.
  6. inetinfo.exe 에서 호스트 되었던 aspnet_isapi.dll 은 이제 w3wp 라는 worker process 가 로드한다.
    - aspnet_isapi.dll 은 CLR 을 로드하고 파이프라인을 시작한다.

  • IIS6.0 에서는 WWW 서비스가 더 이상 inetinfo.exe 프로세스에 호스트 되지 않고 별도의 작업자 프로세서인 w3wp.exe 에 의해 처리된다.
    단, 요청 프로세스 설정, FTP, SMTP, NNTP, IIS Admin 과 같은 서비스는 여전히 inetinfo.exe 에서 호스트 한다.

  • 커널 모드(Kernel Mode)와 사용자 모드(User Mode)
    - 커널 모드는 컴퓨터의 모든 메모리에 접근할 수 있고 다른 어플리케이션의 프로세스로부터 격리된 메모리 공간에서 실행된다.
    - 커널 모드 구성요소만이 하드웨어와 같은 리소스에 직접 접근이 가능하다.
    - 반면 어플리케이션과 이를 지원하는 서브시스템은 사용자 모드에서 실행 된다.
      사용자 모드의 프로세스는 직접 자원에 접근할 수 없으며 자원에 대한 접근 요구가 커널 모드 구성 요소에 의해 허가되어야 한다.

+ Recent posts