하드웨어 보안

  • 여러 프로그램이 동시에 실행되는 다중 프로그래밍 환경에서는 각 프로그램들이 다른 프로그램의 실행을 방해하거나 프로그램들간의 서로 충돌하는 문제를 막기 위해 하드웨어에 대한 각종 보안이 요구된다.
  • 하드웨어적인 보안을 유지하기 위해 운영체제는 기본적으로 커널모드사용자모드라는 두가지 모드의 오퍼레이션을 지원한다.
    • 커널 모드(kernel mode)
      운영체제가 CPU의 제어권을 가지고 운영체제의 코드를 실행하는 모드,
      커널 모드에서는 모든 종류의 명령 실행이 가능하다.
    • 사용자 모드(user mode)
      일반 사용자 프로그램을 실행하는 모드, 제한적인 명령만 실행가능.
  • 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행가능하게 함으로써 하드에어의 보안을 유지한다.
    하지만 사용자 프로그램이 CPU를 가지고 있는동안에는, 운영체제가 CPU를 가지고 있지않으므로, 사용자 프로그램이 운영체제만 수행가능한 중요한 연산을 수행할 수도 있다.
    따라서, 컴퓨터 시스템은 CPU내부에 모드 비트(mode bit)를 두어 사용자 프로그램을 감시하게된다.
  • 모드비트가 0으로 세팅 → 커널모드 : 모든 명령 수행 가능.
    모드비트가 1으로 세팅 → 사용자모드 : 제한된 명령만 수행 가능.
  • CPU는 보안 관련 명령을 수행하기 전에는 항상 모드비트를 조사해 모드비트가 0으로 세팅된 경우에만 해당 명령을 수행한다.
    사용자 프로그램이 실행되다 하드웨어 접근 등 보안이 필요한 중요한 명령을 실행해야 할 경우에는 시스템콜을 통해 운영체제에게 서비스를 대신해줄 것을 요청한다.
    그러면, CPU의 제어권은 다시 운영체제에게 넘어가게 되고, 모드비트가 자동적으로 0으로 세팅되어, 운영체제는 모든 필요한 명령을 실행할 수 있는 상태가 되는 것이다.
    요청된 작업이 모두 끝나면, 모드 비트를 다시 1으로 만들어 사용자 프로그램에 CPU를 넘겨주게 된다.
  • 이와 같이 시스템 보안과 관련된 명령들을 특권 명령이라고 지칭하며, 특권명령은 모드 비트가 0일때만 실행가능하다. 사용자 프로그램이 디스크에 저장되어 있는 (본인 소유가 아닌) 파일에 접근하는 것을 방지해야 하므로 모든 입출력 명령도 특권명령으로 규정되며, 사용자 프로그램이 직접 입출력하는것을 차단한다.
    사용자 프로그램이 입출력을 하고 싶으면 시스템콜로 운영체제에게 요청해야 하고, 운영체제가 입출력 명령을 대신 수행한다. 운영체제는 입출력 요청이 올바른 요청인지 확인한 후 입출력을 실행하기 때문에 파일에 대한 보안을 유지할 수 있게 된다.

메모리 보안

  • 여러 프로그램이 메모리에 동시에 올라가게 되는 경우, 한 프로그램이 다른 프로그램이나 운영체제가 위치하는 메모리 영역에 침범하지 않도록, 메모리에 대해서도 보안을 유지할 필요가 있다.
  • 메모리 보호는 두개의 레지스터(기준레지스터, 한계레지스터)를 이용해서 프로그램에 접근하려는 메모리 부분이 접근해도 문제가 없는지 체크함으로써 이루어진다.

    • 기준 레지스터(base register) : 프로그램이 접근가능한 메모리상의 가장 작은 주소를 보관.
    • 한계 레지스터(limit register) : 프로그램이 기준레지스터 값부터 접근할 수 있는 메모리의 범위를 보관.
  • 사용자 프로그램은 기준 레지스터가 있는 주소부터 기준레지스터 + 한계레지스터값 사이의 주소영역만 가능하다.
    만약 접근하려는 주소가 그 범위를 벗어나게 되면, 예외상황이라는 일종의 소프트웨어 인터럽트가 발생하게 된다.
    예외 상황이 발생하면, CPU의 제어권이 해당 프로그램으로부터 운영체제로 넘어가게 되며, 운영체제는 해당 프로그램을 강제종료 시킨다.
  • 기준레지스터와 한계레지스터를 통한 메모리 보호기법은 하나의 프로그램이 메모리의 한 영역에 연속적으로 위치하는 경우에만 해당되는 설명이다.
  • 메모리 접근 명령은 특권 명령은 아니지만, 기준 레지스터와 한계 레지스터 값을 세팅하는 연산은 특권 명령으로 규정해야 한다.
    -> 운영체제가 두 개의 레지스터 값을 직접 세팅해주고, 사용자 프로그램은 값을 변경할 수 없다.

CPU 보안

  • 일반적으로 CPU는 컴퓨터 시스템 내에 하나밖에 존재하지 않는다.
  • CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머(timer)라는 하드웨어를 사용한다.
  • 타이머는 정해진 시간이 지나면, 인터럽트를 발생시켜 운영체제에게 CPU의 제어권을 넘겨주는 역할을 담당한다.
    타이머의 값을 세팅하는 명령을 로드 타이머(load timer)라고 하며, 이는 특권명령에 해당한다.

시스템 콜을 이용한 입출력 수행

  • 사용자 프로그램이 디스크의 파일에 데이터를 읽고 쓰거나, 키보드나 마우스로 입력받고, 모니터에 출력하는 행위는 모두 입출력 명령이며, 입출력 명령은 특권명령이므로, 사용자 프로그램이 직접 수행할 수 없다.
  • 이러한 입출력 명령은 운영체제 코드에 구현되어 있으며, 사용자 프로그램은 운영체제에게 시스템 콜이라는 서비스 대행 요청을 통해 입출력을 수행하게 된다.
  • 시스템콜은 일종의 소프트웨어 인터럽트로서, 사용자 프로그램이 시스템콜 할경우, 트랩이 발생해 CPU에 대한 제어권이 운영체제로 넘어가게 된다.
    운영체제가 해당 시스템 콜을 처리하기 위한 루틴으로 가서 정의돈 명령을 수행하고 나면, CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려주어 해당 프로그램이 다시 CPU를 할당받을 수 있도록 한다.

출저