반응형

오늘은 윈도우 구조에 대해 공부해보고자 한다.

기존에 간단하게 짚고 넘어간 부분을 세세하게 다뤄보고자 한다.


1. 운영체제란?

운영체제(Operating System)란 하드웨어를 관리, 응용 소프트웨어를 효율적으로 실행/사용할 수 있도록 만든 시스템 소프트웨어이다.

사용자와 하드웨어 간의 인터페이스로 동작하며, 컴퓨터 자원들을 효율적으로 사용할 수 있도록 도와주는 역할을 한다.

기능과 목적은 다음과 같다.

 

  • 운영체제의 기능
    • 메모리 관리 : 프로세스에 메모리 할당 및 회수 방법 결정, 메모리 점검, 프로그램 절대주소 매핑하여 메인 메모리 저장
    • 프로세스 관리 : 프로세스 스케줄링 및 동기화 관리, 프로세스 생성과 제거 및 시작과 정지 등 기능 담당
    • I/O 장치 관리 : Buffer-Caching 기능 제공, 입출력 장치 스케줄링, 일반 및 특정 장치용 드라이버 제공
    • 파일 관리 : 파일의 생성 및 삭제, 변경 등을 관리
    • 등등

  • 운영체제의 목적
    • 처리 능력 향상 : 일정 시간 내에 시스템이 처리하는 일의 양 처리 효율 향상
    • 반환 시간 단축 : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸리는 시간 단축
    • 사용 가능도 향상 : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도 향상
    • 신뢰도 향상 : 시스템이 주어진 문제를 정확하게 해결하는 신뢰 향상
    • 등등


2. 커널 & 시스템 호출

커널(Kernel)이란 운영체제의 중심에 위치하여 운영체제에 기본적인 기능을 제공하는 핵심 부분이다.
모든 작업은 커널의 동작에 의해 제어되며,

프로세스 관리, 메모리 관리, 파일 시스템 관리, 인터럽트 처리, 프로그래밍 인터페이스 제공 등의 기능을 제공한다.

 

커널에 사용자가 접근하기 위해선 어떡해야할까?

사용자가 커널에 접근하기 위해선 시스템 호출이 사용된다.

 

시스템 호출(System Calls)은 커널 영역의 기능을 사용자 모드가 사용 가능하게 해주며,

프로세스가 하드웨어에 접근하여 필요한 기능을 사용할 수 있게 해준다.

사용자, 혹은 응용 프로그램으로부터 컴퓨터의 자원을 보호하기 위해 직접 접근 차단 인터페이스라 볼 수 있다.

시스템 함수(write()과 같은 함수)에 의해 이루어진다.

 

아래 그림을 보면 시스템 콜을 이용하여 사용자 어플리케이션에서 API를 타고 커널 영역으로 들어가는 것을 볼 수있다.

좀 더 자세히 들여다보자면,

응용프로그램이 함수를 실행하면 Kernel32.dll의 API를 호출하고, 해당 API는 다시 ntdll.dll 함수를 호출한다.

그럼 ntdll.dll에선 커널에 요청해야 할 서비스 번호를 이용하여 특정 시스템 자원에 접근할 수 있게 된다.

 

*API(Application Programming Interface) : 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합

 

3. 윈도우즈 구조

윈도우는 Microsoft 사가 개발하였으며 1981년에 1.0버전이 처음 등장하였다.

3.1버전부터 대중에게 널리 알려지기 시작하였다.

 

윈도우는 대표적으로 링 구조로 이루어져 있으며

 

하드웨어 <> HAL <> 마이크로 커널 <> 각종 관리자 <> 응용프로그램으로 이루어져 있다.

 

커널 모드는 직접적인 사용자 접근이 불가능 하며,

사용자 모드에선 윈도우 운영체제에서 사용자가 프로그램을 만들고 실행하는 모든 과정이 가능하다(완벽하게 구현은 X).

 

 


상세 구조는 다음과 같다.

  • 커널 모드

 간단하게 용어를 정리해보고자 한다.
HAL(Hardware Abstraction Layer)은 하드웨어와 소프트웨어 간의 원할한 통신을 가능토록 해준다.

마이크로 커널은 다양한 커널 종류 중 하나로 하드웨어와 통신만을 제어하는 최소한 역할만 하는 커널이다.

프로세스 스케줄링, 메모리 관리 등의 작업들은 각종 관리자에게 맡긴다.

(System32 폴더의 ntopskrnl.exe가 마이크로 커널)

 

각 관리자의 역할은 다음과 같다.

- 입출력 관리자 : 시스템의 입출력을 제어, 장치 드라이버 사이에서 메세지를 전달(하드웨어와 응용 프로그램이 바로 통신 가능)

- 그래픽 장치 관리자 : 그래픽으로 처리되는 화면에 표시되는 선, 폰트 등을 관리

- 객체 관리자 : 파일, 포트, 스레드, 프로세스 등 각 객체 정보를 제공

- 보안 참조 관리자 : 각 데이터나 시스템 자원 제어를 허가/거부, 시스템의 보안을 강제적으로 설정

- 프로세스 관리자 : 스레드 생성 및 처리

- 로컬 프로시저 호출 관리자 : 각 메모리에 할당받은 프로세스들 간의 통신을 담당

- 가상 메모리 관리자 : 응용 프로그램 요청따라 램 메모리 할당, 가상 메모리의 페이징 제어

 

이외에도 캐리 관리자, PNP 관리자, 전원 관리자 등 다양한 기타 관리자가 존재한다.

 

  • 사용자 모드

사용자 모드엔 다양한 응용 프로그램이 존재하며 이를 실행하는 서브 시스템이 존재한다.

서브 시스템여러 응용 프로그램을 실행하는 컨테이너라 불린다.

- Win32 서브 시스템 : 기본적인 서브 시스템이다. 32비트 응용 프로그램을 동작 가능, 윈도우 사용자 인터페이스를 제공

- OS/2 서브 시스템 : MS와 IBM에서 초기 제작한 운영체제로 현재는 지원 중단

- POSIX 서브 시스템 : 이식 가능 운영체제 인터페이스이며, 유닉스에서 사용되었음. 호환 이슈로 최근엔 사용 X

- NTVDM : 64비트의 OS를 제외한 16, 32비트를 위해 도입된 시스템 구성 요소로 32비트와 16비트 사이 호환위해 사용

*현재는 NTVDM을 사용안하는 것을 권장(개발 중단으로 인한 보안 위험 요소로 인해)


여기까지 윈도우 커널 공부를 마친다. 앞으로 개발에 대한 부분도 차근차근 다뤄나갈 예정이다.

반응형

+ Recent posts