2017년 3월 14일 화요일

operating system(3) - 운영체제의 구조

운영체제 설계와 구현

    * 운영체제의 요구사항 : 사용자 목적과 시스템 목적
      - 사용자 목적 : 사용자가 사용하기 쉬워야 하고 신뢰성이 있어야하며 빨라야 한다.
      - 시스템 목적 : 설계, 구현, 관리가 쉬워야하고 융통성 신뢰성 효율성이 있어야한다.

   ==> 이러한 요구사항은 모호하며 다양하게 해석될 수 있다!
         ==> 즉, 새로운 요구사항이 등장함에 따라 다양한 OS들이 개발되고 있다.



1. 운영체제의 구조

  1) 단일(monolithic, 모노리틱) 커널 구조 : MS-DOS
    : 컴퓨터 등장 초창기에 출현했으며, 운영체제의 거의 모든 기능이 하나의
     프로그램에 의해 구현됨
     ex. Unix : 초기의 유닉스(여러가지 기능들이 하나의 프로그램에 구현되어있었다.)

단일 커널 구조 : Unix



  2) 마이크로 커널 구조
    : 중요 기능만 커널로 구현하고 나머지 많은 기능을 사용자 모듈인 서버들로 구현
     => 커널과 사용자 모듈 서버는 메시지를 사용하여 통신한다. 
         (서버는 사용자에게 서비스를 제공하는 모든 프로그램)

     장점 : 확장이 쉽다.
             커널이 작아 새로운 하드웨어의 이식이 쉽다.
             코드가 적기 때문에 버그가 적어 신뢰성이 좋다.
     
     단점 : 잦은 통신이 필요하기 때문에 성능저하의 우려가 있다.
             (요즘은 하드웨어 기술이 발달함에 따라 거의 없다고 봐도 무방함)

      ==> 이러한 장점들 덕분에 기존의 OS들이 대부분 마이크로 커널로 옮겨오게 됨
            ex. Mach, Mac OS X, Windows NT



==> 단일커널에서는 하드웨어 드라이버나 파일 시스템을 함수 호출로 실행했으나,
      마이크로 커널에서는 메시지 통신을 통해 하드웨어 드라이버나 파일 시스템을 
      응용프로그램처럼 취급하여 실행한다.



  3) 모듈 지원 구조
    : 코널과 모듈을 분리하지만 실행시에 커널과 링크하여 함수호출하듯 프로그램을 
    실행하여 마이크로 커널의 문제점을 상쇄하는 운영체제.

     평소에는 추가기능(프로그램)들을 모듈로 구현해 마이크로 커널같은 구조를 하고 있음.   ----> 사용자가 프로그램을 실행하게 되면 운영체제가 해당 프로그램을 동적으로 메모리에 적재하고 커널에 링크한다. ---> 이후 함수호출하듯이 프로그램을 실행함.

   ex. Solaris, Linux, Max OS X등...


2. 운영체제의 수행

  * 컴퓨터 시스템의 메모리는 ROM(비휘발성)RAM(휘발성)으로 구성되며,
   일반적으로 메모리의 첫 부분에는 ROM, 뒷부분는 RAM이 위치한다.
    - Rom의 시작 위치에는 부트로더 프로그램이 저장되어 있다.


  * 컴퓨터의 전원이 켜지면 CPU는 메모리의 첫 부분의 내용을 수행함
     ==> 부트로더가 실행되고, CPU모드는 커널 모드로 초기화됨

  * 실행된 부트로더는 시스템을 초기화하고 보조기억장치(HDD)에서 운영체제를
  읽어들여 메모리에 적재하고 CPU의 PC값을 OS의 메모리 주소로 바꿈으로서 실행시킨다.

  * 운영체제가 부팅되면 시스템을 초기화하고 프로세서 모드를 사용자 모드로 변경한뒤
   최초의 응용프로그램을 시작시킴 (Unix의 경우, init)
   (OS가 PC값을 init프로그램이 적재된 메모리의 첫 주소로 변경시킴)
  
  * 이후, 운영체제는 인터럽트에 의해 CPU 제어를 받아서 수행됨
    (운영체제는 인터럽트에 의해 구동되는 프로그램)
    - 타이머 인터럽트 : 주기적으로 인터럽트를 발생
     (ex. 100ms가 기준이라면, 1초에 10번 os가 수행됨)

    - 응용프로그램 : 시스템 호출을 수행
      (ex. 사용자의 파일 열기 및 실행...)

    - 입출력 장치 : 입출력을 마치면 인터럽트를 발생시킴

   * 인터럽트에 의해 운영체제가 수행 될 때, 운영체제는 먼저 CPU의 상태(registers의 값)
    를 저장한다. 그리고 인터럽트 서비스 루틴(인터럽트의 시작주소)을 수행한 후, 저장했던
    CPU의 상태를 복원하여 인터럽트가 발생하기 직전으로 상태로 CPU제어를 넘긴다.

   * CPU 모드 : OS가 자기자신을 보호하고 시스템 구성요소를 보호할 수 있게 함
    - 사용자 모드와 커널모드로 나뉨
    - 커널모드만이 특권명령어를 사용할 수 있음

   * 운영체제는 항상 커널모드에서만 수행됨
    - 인터럽트가 발생하면, 하드웨어적으로 CPU모드가 커널모드로 설정됨
    - 따라서, 운영체제는 항상 커널모드에서 수행된다.
    - 운영체제가 인터럽트를 처리한 이후, 특권명령어를 수행하여 CPU모드를 변경


3. 운영체제와 사용자 인터페이스의 연관성

  1) CLI (Command Line Interface)
    - 키보드를 사용하여 직접 명령어를 입력
      ex. Unix shells, MS windows cmd

  2) GUI (Graphical User Interface)
    - 마우스와 키보드를 사용하여, 파일, 프로그램 등을 아이콘으로 나타냄
    - 보통 대부분의 시스템들은 CLI와 GUI를 모두 다 제공함

   * 시스템 호출

     : 운영체제가 응용 프로그램에게 제공하는 시스템 함수
        => 응용 프로그램은 마치 함수 호출하듯이 호출하여 사용할 수 있다.

    - 응용 프로그램은 직접 하드웨어를 제어하거나 파일을 읽기 / 쓰기 할 수 없다.
       -> 따라서, 운영체제가 이러한 서비스를 대신하여 응용프로그램에게 제공함




    - 시스템 호출의 종류로는 프로세스 제어, 파일 조작, 장치관리, 정보유지관리, 통신 등
      약 100 ~ 200여개 정도 있다.


댓글 없음:

댓글 쓰기