본문 바로가기

카테고리 없음

Internal 2장 정리자료

아키텍쳐는 크게 사용자 모드와 커널 모드로 나뉘어 진다.

사용자 모드의 프로세스들은 자신만의 전용 프로세스 주소 공간을 가진다.
-시스템 지원 프로세스 : 로그온 프로세스와 세션 관리자 (windows서비스 아님)
- 서비스 프로세스 : 작업 스케줄러, 스풀러 서비스 (일반적으로 사용자 로그온에 독립적 실행을 요구한다.)
- 사용자 응용 프로그램 : windows 32bit,64bit,3.1 16bit, MS-DOS 16bit, POSIX 32bit, OS/2 32bit 중 하나가 될수 있다.
- 환경 서브시스템 서버 프로세스 : 운영체제 환경 또는 사용자와 프로그래머에 나타난 개별 구성에 대한 지원 부분으로 구현

서비스 프로세스, 사용자 응용 프로그램은 네이티브 Windows 운영체제 서비스를 직접 호출하지 못한다.
 대신에 하나 이상의 서브시스템 동적 링크 라이브러리(DLL)을 통해 호출한다.

DLL(dynamic linking library)

: OS/2, 윈도즈 등의 운영 체계(OS) 본래 기능으로, 소프트웨어의 루틴을 몇 개의 파일로 나누어 디스크에 두고 필요한 것만을 실행 메모리에 실어서 사용하기 위한 파일. DLL로 사용되는 파일은 확장자가 ‘dll’로 되어 있기 때문에 ‘DLL 파일’이라고 부른다. DLL의 장점은 루틴을 공통으로 사용하는 것이다. 루틴의 함수 집단을 자료집이라고 하는데, 보통 실행 파일을 작성할 때 자료집을 포함해서 컴파일하는 경우가 많다. 그러나 이 방법은 동일 루틴을 다수의 실행 파일이 갖게 되어 비효율적이다. DLL은 다수의 실행 파일에 공유될 수 있기 때문에 디스크 용량이나 메모리를 절약할 수 있다. 또 프로그램을 수정하려는 경우, DLL 파일만을 수정함으로써 완료되는 경우도 있다. 윈도즈 등에서는 OS 기능은 물론 DLL을 애플리케이션과 공유할 수도 있으나, DLL 파일 등의 애플리케이션이 공유되고 있는지는 이용자 수준에서는 판단하기가 어렵다.

NTDLL.DLL
▶ 서브시스템 DLL들을 사용하기 위한 특별한 주요 시스템 지원 라이브러리이며
 - Windows 실행부 시스템 서비스에 대한 시스템 서비스 디스패치 스텁(stub)
 - 서브시스템, 서브시스템DLL, 다른 네이티브 이미지에 의해 사용되는 내부 지원 함수
를 포함한다.


커널 모드는 크게
-windows 실행부 : 메모리 관리, 프로세스 및 스레드 관리, 보안, I/O, 네트워킹, 프로세스간 통신등을 포함
-windows 커널 : 스레드 스케줄링, 인터럽트,예외 디스패칭,멀티프로세서 동기화등과 같은 저수준 운영체제함수
-장치드라이버 : 하드웨어장치, 파일시스템과 파일시스템 필터, 네트워크 리디렉터 및 서버, 프로토콜,커널 스트리밍 필터 드라이버들이 있다.
   ▶ 드라이버 모델별로는 버스 드라이버, 기능 드라이버, 필터 드라이버
- 하드웨어 추상 계층(HAL) : 플랫폼들 간의 이식성을 가능하게 하는 핵심 부분이며, Windows가 실행되는 하드웨어 플랫폼에 대한 저수준 인터페에스를 제공하기 위해 로드되는 커널 모듈(Hal.dll)이다.
- 윈도우와 그래픽스 시스템 : 사용자 인터페이스 제어, GUI 함수 구현


<시스템 프로세스>
1. System Idle Process :  유휴 프로세스
2. System Process : 커널 모드의 시스템 스레드
3. Smss.exe : 세션 관리자 - 윈도우즈 시작 단계에서 추가적인 페이지 파일을 열고, 지연된 파일 이름 변경을 수행, 세스템 환경 변수를 생성하는 것과 같은 여러 중요한 단계를 담당
 Csrss.exe와 Winlogon 프로세스를 실행하고 이들은 시스템 프로세스의 나머지를 차례로 생성한다.
4. Csrss.exe : Windows 서브시스템 프로세스
5. Winlogon.exe : 로그온 프로세스 - 대화식 사용자 로그온과 로그오프를 처리하며, SAS(secure attention sequence) 키스트로크 조합이 입력될 때 사용자 로그온 요청을 Winlogon에 통지한다.
6. Services.exe : 서비스 제어 관리자 - 서비스 프로세스들과 상호작용하고 시작/종료를 담당하는  이미지 \Windows\System32\Service.exe를 실행하는 특별한 시스템 프로세스이다.
7. Lsass.exe : 로컬 보안 인증 서버 - 액티브 디렉터리 또는 SAM(사용자와 그룹의 정의를 가지고 있는 레지스트리 부분)에 저장된 것과 암호가 일치하는지 여부를 검사하는 것처럼 실제 검증을 수행하기 위해 적절한 인증 패키지(DLL로 구현되었다)를 호출한다.

하이퍼 스레딩이란?

하이퍼 스레딩은 펜터엄 4에 적용된 넷버스트 아키텍처가 가지는 깊은 파이프라인의 장점을 가장 잘 이용하고 있는 기술이다. 파이프라인이 무려 20단계에 달하는(프레스콧에 이르러서는 더 늘어난 것으로 추정되기도 하지만 확인되지는 않았다.)펜티엄 4의 특성상, 파이프라인 중간중간이 '놀고있을'확률이 상대적으로 높다. 물론 인텔은 이러한 길어진 파이프라인을 효율적으로 활용하기 위해서 디코더가 든 샐행추적 캐시라던가 더욱 강화된 동적 실행 기능을 적용시키고 있지만 P6 코어에 비해서도 2배 이상으로 늘어나버린 거대한 파이프 라인은 CPU의 클럭을 높이는 것 외에 다른 노림수가 있는 것인데, '하이퍼스레딩'이 바로 그것이다.

하이퍼 스레딩의 데뷔.

하이퍼 스레딩이 처음 적용된 것은 2002년 3월 533MHz로 동작하는 FSB를 채택한 제온 CPU이다. 이후 PC CPU로는 2002년 11월에 펜티엄 4 3.06MHz를 통해서 데뷔했다.

하이퍼 스레딩의 성능.

하이퍼스레딩을 쓰는 CPU라면 작업관리자에 2개의 CPU가 달린 것처럼 나타난다. 하이퍼스레딩 기술은 1개의 CPU를 마치 2개처럼 인식시켜주기 때문이다.

하이퍼스레딩의 동작원리는 길어진 파이프라인 사이사이의 놀고 있는 CPU 자원을 활용해보자는 데서 출발한다. 파이프라인이 길어졌기 때문에 중간중간 놀고 있는 CPU 자원이 있기 마련인데, 이 빈공간을 또하나의 CPU처럼 써먹는 것이다.

CPU가 2개로 인식되기 때문에 성능도 2배일 것으로 생각하는 이도 있지만, 앞서 말했듯 동작중인 파이프라인의 빈 공간을 활용하는 것이기 때문에 실제 성능향상은 많아봐야 10%에 불과하고, 보통은 5% 전후라고 보면 된다.

하이퍼스레딩이 큰 의미를 가지는 것은 논리적인 다수의 CPU를 쓰기 때문에 하이퍼 스레딩이 적용되지 않은 경우보다 멀티태스킹 등에서 매우 부드러운 동작을 보여준다는 데에 있다. 복잡한 소프트웨어를 돌리면서 다른 작업을 시도해 본 적이 있다면 이해가 더 빠를 것이다. 인텔은 하이퍼스레딩에 대해 '백그라운드 작업이 많을 때 '를 매우 중요하게 간주하고 있다. 백신이라던가 하는 프로그램들이 돌아가고 있느느 상황에서 다른 프로그램을 또 돌리게 된다면 멀티태스킹에 강한 하이퍼스레딩 기술이 높은 효과를 보여준다는 것이다.

하이퍼 스레딩의 단점.

하지만 하이퍼스레딩도 분명한 단점이 있다. 우선 '멀티프로세서'를 알아채는 운영체제를 써야 한다는 것이다. 논리적이기는 해도 어더까지나 CPU를 2개로 인식시켜 동작하기 때문에 윈도우 98,95,Me 등에서 하이퍼스레딩 효과를 볼 수 없다. 윈도XP와 NT는 멀티프로세서를 알아채기 때문에 하이퍼스레딩의 덕을 본다.

또 한가지, 멀티태스킹에서는 분명히 부드러운 동작을 보여주지만 무거운 프로그램 하나만 돌릴 때는 어떨까? 이 때에는 해당 소프트웨어가 "멀티스레딩(Multi threading)"을 해야만 한다. 만약 멀티스레딩을 하지 않는 소프트웨어라면 이 역시 하이퍼스레딩의 효과를 볼 수 없다.

<NUMA란>  (Non-Uniform Memory Architecture)
 1. 정의

  NUMA는 멀티 프로세서에서 사용되는 메모리 구조의 한가지로, 이 구조에서는 메모리의 접근 시간이 CPU 대비 메모리의 상대적인 위치에 의해 결정된다. 즉, CPU의 로컬 메모리일 경우 메모리 접근 시간이 매우 빠르며, 다른 CPU의 로컬 메모리거나, 여러 프로세스가 공유하는 메모리일 경우 접근 시간이 느려지는 특성을 가지고 있다.

사용자 삽입 이미지
2.. 기본 개념

  컴퓨터가 개발된지 얼마 안된 1950~60년대에는 CPU의 속도가 메인 메모리 속도보다 느렸다고 한다. 그러던 것이, 1970년대를 지나면서 CPU 속도가 메모리 속도를 추월하게 되었다. 결과적으로 메모리에서 데이터를 제때 가져오지 못해 CPU가 일처리를 못하고 지연되는 현상이 발생했다. 따라서 1980~90년대 슈퍼 컴퓨터들은 빠른 속도로 메모리에 접근할 수 있는 방법에 초점을 두고 디자인됐다. 최근의 컴퓨터들은 메인 메모리로의 접근 횟수를 제한하여 높은 성능을 내고 있다. 이는 속도가 빠른 캐시 메모리를 장착하고 세련된 알고리즘을 사용하여 캐시 미스(cache miss)를 피하는 방법을 의미한다. 그러나 운영체제와 운영체제에서 동작하는 어플리케이션들이 예전과는 비교할수 없을 정도로 그 크기가 커짐에 따라서 캐시를 이용하여 성능을 높이는 방법은 한계에 다달았다. 멀티 프로세서 시스템에서는 상태가 더더욱 나빠졌다. 메인 메모리에 동시에 접근할 수 없기 때문에 동시에 접근한 몇몇 프로세서들은 메모리를 사용하지 못하고 지연되는 사태가 발생한 것이다.

  NUMA에서는 각각의 프로세서에 메모리를 분할하여 제공함으로써 여러 프로세서들이 동시에 메모리에 접근할때 발생하는 성능상의 문제를 회피하도록 시도하고 있다. 널리 분포된 데이터에 대해서는 프로세서 개수 혹은 메모리 뱅크의 개수에 비례하여 단일 공유 메모리에 저장함으로써 속도를 높이고 있다.

  물론 모든 데이터들이 특정한 하나의 태스크(task)에 종속되지는 않는다. 즉 하나 이상의 프로세서에서 같은 데이터가 필요한 상황도 있다. 이러한 경우 NUMA는 분리된 메모리 뱅크 사이에 데이터를 이동하도록 추가적인 하드웨어나 소프트웨어를 사용한다. 따라서 다른 메모리 뱅크의 데이터를 사용하게 되면 속도가 느려지게 되는 것이다. 그러므로 NUMA의 성능은 전적으로 해당 시스템에서 돌아가는 태스크의 특징에 달려있다.

POSIX (Portable Operating System Interface)

POSIX는 유틱스 운영체제에 기반을 두고 있는 일련의 표준 운영체계 인터페이스이다. POSIX의 시작은 많은
버전으로 개발, 배포되는 UNIX를 표준화하기 위해 만들어졌다. Source Code Portability를 목표로 OS에 대한
표준화 작업을 진행하면서 Real-Time OS에 대한 표준을 만드는 작업도 같이 진행되고 있다. 미국에서 진행하는
만큼 미국에서 개발되는 대부분의 RTOS는 POSIX를 따르고 있다.

유닉스는 앞서가는 특정 컴퓨터 회사들에 의해 소유된 독점적인 운영체계가 아니었다는 것과, 또 그것이 표준
프로그래밍 언어로 작성되고, 대중적인 많은 아이디어를 받아들였다는 이유 때문에, 누구에 의해서도 개선되고
강화될 수 있는 최초의 개방형 표준 운영체계가 되었다. 다양한 버전의 유닉스로 부터 나온 C 언어와 쉘 인터페이스의 복합체는 IEEE의 찬조하에서 POSIX로 표준화 되었다.


 HAL(Hardware Abstraction Layer) :  운영체제와 하드웨어 간의 독립성을 제공해 주는 구성요서로서 Windows 2000 이 다양한 하드웨어 플랫폼에서 설치되도록 제공함