[OS] 운영체제 - interrupt 기반 운영체제

elinapark·2022년 7월 2일
0

Operating System

  • 컴퓨터의 사용자와 컴퓨터 하드웨어 사이의 중개자 역할을 한다.
  • 응용 프로그램의 기반을 제공한다.
  • 컴퓨터 하드웨어를 관리하는 소프트웨어이다.
    내부적으로 여러 라인을 따라 구성되기 때문에 구성이 매우 다양하다.
  • 주요 업무는 새로운 운영체제의 설계이다.
    (설계 시작 전, 시스템의 목표를 잘 정의하는 것이 중요하다.)
    때문에, 다양한 알고리즘과 전략 중 선택의 기초를 형성한다.
  • 운영체제는 크고 복잡하기 때문에 한 조각 한 조각 만들어져야 한다.
    (각 조각은 신중하게 정의된 입력과 출력 및 기능과 함께 시스템의 잘 정렬된 부분이어야 한다.)
  • 메인 프레임 운영체제는 주로 하드웨어의 활용도를 최적화하도록 설계되었다.

운영체제의 목적?

  • 컴퓨터의 사용자가 프로그램을 편리하고 효율적으로 실행할 수 있는 환경을 제공하는 것.
  • 컴퓨터 시스템의 동작원리
  • 컴퓨터의 구조
    입력과 출력을 가지고 내부적으로 CPU에서 연산을 하는 구조이다.

컴퓨터 시스템의 구조

키보드로부터 입력을 받아서 컴퓨터가 어떤 연산을 한 후
그 결과를 모니터에 출력하는 경우를 대표적인 입출력(I/O)라고 말할 수 있다.
따라서 컴퓨터 외부장치를 입출력 장치라고 부른다.
우리가 생각하는 운영체제는 여러 프로그램이 동시에 수행되는 시스템을 위한 운영체제이다.

프로그램이 수행되려면 그 프로그램이 메모리에 올라가 있어야 한다.
운영체제는 컴퓨터가 부팅되었을때부터 항상 수행되면서 각종 자원(resource)들을
관리해야 하므로 항상 메모리에 올라가 있다.
하지만, 운영체제의 모든 코드를 다 메모리에 상주시키면 메모리의 낭비가 발생하게 된다.
따라서 운영체제 중 항상 메모리에 올라가 있는 부분은
전체 운영체제 중 핵심적인 부분에 한정되며, 이 부분을 Kernel이라고 부른다.

Computer-System Operation

현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 공유 메모리에 대한 액세스를 제공하는
공통 버스를 통해 연결된 다수의 장치 컨트롤러로 구성된다(Figure 1.2).

각 장치 컨트롤러는 특정 장치 유형(예: 디스크 드라이브, 오디오 장치 또는 비디오 디스플레이)을 담당합니다.
CPU와 장치 컨트롤러는 메모리 사이클을 위해 경쟁하면서 병렬로 실행할 수 있다.
공유 메모리에 대한 순차적 액세스를 보장하기 위해 메모리 컨트롤러는 메모리에 대한 액세스를 동기화합니다.
컴퓨터가 실행되기 시작하려면(예: 전원을 켜거나 재부팅할 때) 초기 프로그램이 있어야 합니다.

이 초기 프로그램 또는 bootstrap program은 단순한 경향이 있다.
일반적으로 컴퓨터 하드웨어 내에 읽기 전용 메모리(ROM) 또는
electrically erasable programmable(전기적 소거가 가능한 프로그램 가능)
읽기 전용(read-only) 메모리(EEPROM)에 저장된다.

CPU register에서 장치 컨트롤러, 메모리 콘텐츠에 이르기까지 시스템의 모든 측면을 초기화합니다.
부트스트랩 프로그램은 운영 체제를 로드하는 방법과 해당 시스템 실행을 시작하는 방법을 알아야 합니다.
이 목표를 달성하기 위해 bootstrap program은 운영 체제 커널을 찾아 메모리에 로드해야 한다.
커널이 로드되고 실행되면 시스템과 사용자에게 서비스를 제공하기 시작할 수 있다.

일부 서비스는 커널 외부에서, 부팅 시 메모리에 로드되어 시스템 프로세스가 되는 시스템 프로그램이나 커널이 실행되는 동안 내내 실행되는 시스템 데몬에 의해 제공된다.
유닉스에서 첫 번째 시스템 프로세스는 "init"이며 다른 많은 데몬을 시작합니다.

이 단계가 완료되면 시스템이 완전히 부팅되고 시스템은 일부 이벤트가 발생할 때까지 기다립니다.
이벤트의 발생은 일반적으로 하드웨어 또는 소프트웨어로부터의 interrupt에 의해 신호된다.

하드웨어는 CPU로 신호를 보내어 언제든지 interrupt를 트리거할 수 있다.
소프트웨어는 시스템 호출(모니터 호출이라고도 함)이라는 특수 작업을 실행하여 interrupt를 트리거할 수 있습니다.
CPU가 중단되면 하던 작업을 중지하고 즉시 고정된 위치로 실행을 전송합니다.

고정 위치에는 일반적으로 interrupt에 대한 서비스 루틴이 위치한 시작 주소가 포함됩니다.
interrupt 서비스 루틴이 실행되며, 완료되면 CPU가 interrupt된 계산을 다시 시작합니다.
이 작업의 타임라인은 Figure 1.3 과 같다.

CPU 연산 & I/O 연산

컴퓨터가 연산을 한다는 것은 CPU가 무언가 일을 한다는 뜻이다.

  • 입출력 장치들의 I/O연산 - I/O controller가 담당한다.
  • 컴퓨터 내에서 수행되는 연산 - main CPU가 담당한다.

로컬 버퍼(Local buffer)
장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를
임시로 저장하기 위한 작은 메모리를 가지고 있다.
1. 프로그램A가 디스크에서 데이터를 읽어오라는 명령이 발생함
2. 디스크 컨트롤러가 물리적인 디스크에서 내용을 읽은 후, 해당 내용을 로컬버퍼에 저장
3. 다 읽으면 다음 일을 수행한다.

이때, 메인 CPU가 지속적으로 체크하는 것이 아니고,
장치에 있는 컨트롤러가 interrupt를 발생시켜 CPU에 보고한다.
CPU는 매 시점 메모리에서 명령을 하나씩 읽어와서 수행한다.
이때 CPU 옆에는 interrupt line이 있어서 CPU는 명령 하나를 수행할 때마다
interrupt가 발생했는지 확인한다.
interrupt가 발생했다면 다음 명령을 수행하기 전에 interrupt를 처리하게 되고,
그렇지 않으면 다음 명령을 계속 수행한다.
CPU가 자신의 작업을 하던 중간에 interrupt line에 신호가 들어오면 하던 일을 멈추고
interrupt와 관련된 일을 처리한다.

interrupt의 일반적인 기능

  • 운영체제 커널에는 interrupt가 들어왔을 때,
    해야 할 일이 미리 다 프로그래밍 되어 그 코드가 보관되어 있다.
  • 운영체제는 각종 하드웨어 및 소프트웨어 자원 뿐 아니라
    사용자 프로그램에 필요한 서비스도 제공한다.

interrupt 처리 루틴
다양한 interrupt에 대해 각각 처리해야 할 업무들을 정의하고 있다.

H/W interrupt = interrupt

  • controller 등 하드웨어 장치가 CPU의 interrupt line을 세팅한다.
  • CPU 어딘가에 interrupt를 받아들일 공간이 필요하다.

CPU => 일단, 프로세스라고 생각하면 이해에 도움이 된다.

cpu가 여러개 있다. 하지만! 메인 메모리는 하나이다.

다중 프로세스 시스템(Multiprocessor system)
다른 말로 병렬시스템(parallel system), 약 결함 시스템(tightly-coupled system)

  • 성능향상(performance)
  • 비용절감(cost)
    (하나의 강한 cpu보다는 여러개의 약한 cpu가 있는게 더 싸다)
  • 신뢰성(reliability)
    (하나가 고장나더라도 다른 cpu가 여전이 동작하도록)

다중 프로세서 운영체제 (Multiprocessor OS)

인터럽트 기반 시스템이 무엇인가!

interrupt = 가로채기 = 지금 하던 일을 멈추고 어디로 점프하기.

Interrupt Service Routine (ISR)

현대 운영체제는 전부 interrupt 기반 시스템이다!!!!!

  • 부팅이 끝나면?
    - 운영체제는 메모리에 상주(resident)
    - event를 기다리면서 대기한다 : 키보드, 마우스 …
  • 하드웨어 인터럽트
    - 인터럽트 결과 운영체제 내의 특정 코드 실행 (ISR)
    - interrupt service routine 종료 후, 다시 대기
  • 소프트웨어 인터럽트
    - 사용자 프로그램이 실행되면서 소프트웨어 인터럽트
    (운영체제 서비스 이용을 위해)
    - 인터럽트 결과 운영체제 내의 특정 코드 실행(ISR)
    - ISR 종료 후 다시 사용자 프로그램으로 복귀

보조기억장치
PC: 하드디스크 - 안에 OS(프로그램들, 인터넷, 게임 등등) 들어있다.

부팅하면, 메인 메모리는 다 비워져 있고,
ROM 코드가 먼저 동작한다. (bootstrap load 가 ROM안에 있다.)

bootstrap load 는 어떤 역할을 합니까?
하드디스크를 뒤져서 보조기억장치에 있는 OS를 메인메모리로 가져온다. = 부팅

부팅 시 발생하는 과정 (하드웨어 인터럽트)

  1. ROM에 있는 코드(bootstrap load)를 먼저 실행한다.
  2. 부팅이 끝나면, 운영체제는 메모리에 상주한다.(regident)
  3. windows -> 화면에 아이콘, 마우스커서 등등이 그냥 보이겠지.
  4. 마우스 또는 키보드에 이벤트가 발생하면? -> 전기신호가 발생한다
  5. 전기신호(interrupt)는 CPU에게 interrupt line 을 통해 전달된다.
  6. CPU는 지금 하던 일을 중지하고, OS안에 있는 이벤트 관련 코드(ISR)로 점프한다.
  7. 만약, 아이콘을 더블클릭 했을 경우,(예를들어 크롬) 보조기억장치에서 크롬 관련된 OS가 메모리에 들어간다.
그리고, 화면은 크롬 새창이 열린다.
  8. 만약, 키보드 입력이 발생하면, OS안에 있는 키보드 이벤트 관련 코드(ISR)로 점프한다.
  9. CPU는 다시 이벤트를 기다리며 대기모드에 들어간다.

OS는 프로그램이라고 생각해도 좋다.

ISR은 어떻게 실행될까? -> SWI, HWI 에 의해 실행되겠죠…

명령어 중에 인터럽트에 걸리는 게 있다.
int (interrupt)
swi (software interrupt) -> 인터럽트에 걸린다.

하드디스크를 읽어오는 루틴은 OS안에 있는 하드디스크 일련 코드로 읽어온다. (중복 방지)
이것들은 인터럽트에 의해 실행된다.

  • 운영체제는 평소에 아무 일도 하지않는다. = 대기 상태
  • H/W interrupt에 의해 운영체제 코드(ISR) 실행
  • S/W interrupt에 의해 ISR 실행
  • Internal interrupt(내부 인터럽트)에 의해 ISR 실행

S/W interrupt = Trap

  • CPU 옆에 있는 interrupt line에 신호를 보내서 interrupt가 발생했음을 알려주는 방식은 H/W interrupt와 동일하다.
  • interrupt가 발생하면 CPU는 하던 일을 멈추고
    운영체제 커널 내에서해당 interrupt의 처리를 위해 정의된 코드를 찾게 된다.
    운영체제는 할 일을 쉽게 찾아가기 위해 interrupt vector를 가지고 있다.

Interrupt vector
interrupt 종류마다 번호를 정해서,
번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조를 말한다.
실제로 처리해야 할 코드는
interrupt 처리 루틴 또는 interrupt 핸들러 라고 불리는 다른 곳에 정의된다.

S/W interrupt = Trap
1. 예외상황(Exception) : 비정상적인 작업을 시도하거나, 자신의 메모리 영역 바깥에 접근하려는 시도 등 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 interrupt를 말한다.
2. system call(System call) : 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법운영체제 커널에 있는 코드를 사용자 프로그램이 실행하고자 할 때에는 interrupt line 세팅을 통해 CPU 제어권을 운영체제로 넘겨 실행하게 되는 것이다.예를들면, 화면의 I/O가 필요한 경우, 이미 존재하는 커널의 코드를 호출해서 처리하는 방식이 있다.

Exception과 System call 모두 CPU의 제어권이 운영체제로 이양된다는 공통점이 있다.
** 프로그램이 제어를 하면 안되는 것, 다른 프로그램을 컨트롤하기 위한 것 빼고는
프로그램이 CPU의 제어권을 가지고 있다.

Interrupt handling
interrupt가 발생한 경우, 처리해야 할 일들의 절차를 의미한다.
프로그램 A가 실행되고 있을 때, interrupt가 발생하면
프로그램 A의 현재 상태를 먼저 저장한다.
(현재상태란? CPU에서 실행중인 명령의 메모리 주소를 포함하여 몇 가지 부가적인 정보들을 의미한다.)
CPU에서 명령이 실행될 때에는 CPU 내부에 있는
임시 기억장치인 register에 데이터를 읽거나 쓰면서 작업을 하는데,
이때 interrupt가 발생하여 새로운 명령을 실행하면 기존에 있던 register 값들이 모두 지워지게 되므로
CPU내의 이러한 상태를 저장해두어야 한다.
모두 저장한 뒤에 interrupt 처리가 이루어질 수 있다.
운영체제는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해
Process Control Block 이라는 자료구조를 둔다.

Process Control Block(PCB)
PCB는 각각의 프로그램마다 하나씩 존재하며,
해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있다.

프로그램 실행 중, interrupt가 발생하게 되면
1. 프로그램이 실행중이던 코드의 memory address와 register 값, 하드웨어 상태 등이 PCB에 저장된다.
2. CPU의 제어권이 interrupt 처리루틴으로 넘어간다.
3. interrupt 처리가 끝나면 저장된 상태를 PCB로부터 CPU상에 복원에 interrupt 당하기 직전의 위치부터 실행이 이어지게 된다.

참조 : Silberschatz_Operating_System_Concepts_10e
참조 : 2013 경성대학교 양희재 교수님의 운영체제 강의
참조 : 유튜브 Operating Systam (CPA310) - 운영체제 강의(김덕수)

profile
틀린 내용이나, 개선해야 할 사항을 발견하신다면 댓글로 편하게 남겨주세요. 감사합니다.🙇

0개의 댓글