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

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


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

메모리를 각각의 장치가 공유하는 그림



컴퓨터의 부팅 과정

  1. 전원이 켜질 때 ROM에 저장된 초기 프로그램을 실행합니다.
    • ROM에 저장되어 있기 때문에 변경이 불가능하고, 항상 똑같은 방식으로 실행
  2. 초기 프로그램은 메모리, CPU 레지스터 등을 초기화시킵니다.
  3. 이후에 운영체제를 찾아서 메모리에 적재합니다.
  4. 운영체제는 첫 번째 프로세스를 즉시 실행합니다.
  5. 인터럽트가 발생하면 CPU가 각종 작업을 처리합니다.
    • 인터럽트 : CPU가 다음에 처리할 작업들을 알려주는 것들



인터럽트

  • 하드웨어와 소프트웨어는 모두 CPU에 인터럽트를 발생시킬 수 있습니다. 
  • 일반적으로 인터럽트는 입출력 연산이 종료되었을 때, 예외가 발생했을 때, 운영체제의 다양한 서비스를 요구할 때 등 다양한 이유로 발생할 수 있습니다.
    • ex) 한글 파일에서 드래그하는 동작, 입력하는 같은것들도 모두 인터럽트

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



인터럽트가 요청되었을 때 처리하는 방법


방법 1 

  • 운영체제가 어떠한 종류의 인터럽트인지 확인합니다.
  • 인터럽트 핸들러(Handler)를 호출해서 인터럽트를 처리합니다.
  • (이러한 방법은 인터럽트의 모든 처리 방식을 가지고 있어야 하므로 메모리에 제약이 있음)

방법 2

  • 방법 1 처럼 모든 서비스 루틴을 가지고 있는것이 아님
  • 서비스 루틴은 HDD, SSD와 같은 곳에 넣어 둠
  • 인터럽트가 요청이 되면 인터럽트 서비스 루틴의 주소를 가리키는 포인터들로 구성된 인터럽트 벡터 테이블을 참조합니다.
    • 인터럽트 벡터 테이블 : 인터럽트의 종류에 따라서 어느 루틴에 가서 인터럽트를 실행하게 되는지를 적어놓은 것
  • 참조된 포인터가 가리키는 인터럽트 처리 루틴을 호출해서 인터럽트를 처리합니다.


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


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





[운영체제] 입출력 시스템


출처


댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?