[운영체제]컴퓨터의 작동 과정

1 minute read

운영체제 #2 컴퓨터의 작동 과정

컴퓨터 시스템에서 CPU와 각 장치들은 서로 연결되어 메모리를 공유합니다. 각각의 장치마다 Controller가 작업을 도와주며 모든 기계들은 동기화되어 적절히 작동합니다.

컴퓨터의 부팅과정

  • 전원이 켜질 때 ROM에 저장된 초기 프로그램(Boot strap)을 실행합니다.
  • ROM에 저장되어 있기 때문에 변경이 불가능합니다.
  • 초기 프로그램은 메모리, CPU 레지스터 등을 초기화 시킵니다.
  • 이후 OS를 찾아서 메모리에 적재합니다.
  • OS는 첫 번째 프로세스를 즉시 실행합니다.
  • 인터럽트가 발생하면서 CPU가 각종 작업을 처리합니다.

  • HW, SW는 모두 CPU에 인터럽트를 발생시킬 수 있습니다. 일반적으로 인터럽트는 입출력 연산이 종료되었을 때, 예외가 발생했을 때, OS의 다양한 서비스를 요구할 때 등 다양한 이유로 발생할 수 있습니다.

  • 인터럽트가 발생했을 때, CPU는 현재 하던 일을 중단하고, 그 인터럽트에 대한 처리를 먼저 하게 됩니다. 그러한 처리를 ‘서비스 루틴’ 이라고 하며 일반적으로 OS가 이를 처리합니다. 서비스 루틴이 종료가 되면 다시 CPU는 인터럽트 되었던 그 연산을 재개합니다.

인터럽트 처리 방법

-방법 1-

  1. OS가 어떤 종류의 인터럽트인지 확인합니다.
  2. 인터럽트 핸들러(Handler)를 호출해서 인터럽트를 처리합니다. –> OS가 모든 인터럽트 서비스 루틴을 갖고 있어야 하기 때문에 메모리 제약이 심하다.

-방법 2 (개선사항)-

  1. 인터럽트가 요청이 되면 인터럽트 서비스 루틴의 주소를 가리키는 포인터들로 구성된 인터럽트 벡터 테이블(IVT)를 참조합니다.

  2. 참조된 포인터가 가리키는 인터럽트 처리 루틴을 호출하여 인터럽트를 처리합니다.

  • IVT란? –> 우선순위와 메모리주소, 벡터 넘버 등이 저장 되어있는 테이블을 말합니다. 인터럽트가 들어왔을 때 우선순위에 따라 더 우선시 되는 일을 먼저 처리합니다.

** 최근에는 방법 2를 채택한 OS가 많습니다. 인터럽트가 발생하면 OS는 하던 일에 대한 정보를 시스템 스택에 저장하고 중단합니다. 인터럽트 벡터로 제어를 옮겨 요청한 인터럽트 처리 루틴의 주소를 가리키는 포인터를 참조합니다. 포인터를 따라 이동하여 SSD나 HD에 있는 인터럽트 처리 루틴을 완료한 뒤에 저장된 곳으로 돌아갑니다.

인터럽트 동기화 (시간대를 어떻게 맞출 것인가?)

–> 인터럽트가 실행이 되고 있을 때 다른 인터럽트가 또 발생하는 경우 다른 인터럽트들을 대기시킵니다. 대기를 시키는 이유는 데이터 소실을 막기 위함입니다. 또한 인터럽트 사이에는 우선순위가 있어서 우선순위에 따라 인터럽트 처리 순서를 조절합니다.