devFancy BE Developer

3. Introduction to Computing Systems

2022-11-24
devfancy
OS

이 글의 사진과 내용은 공룡책 과 컴퓨터학부 수업인 운영체제 강의자료를 기반으로 작성했습니다.

1. 컴퓨터 시스템의 구조

  • 컴퓨터 시스템의 구조는 컴퓨터 내부장치인 CPU, 메모리와 컴퓨터 외부장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구성된다.

  • Processor와 Memory 부분이 컴퓨터 내부장치에 해당하고, 입출력 장치을 컴퓨터 외부장치라 부른다.

  • 컴퓨터는 외부장치에서 내부장치로 데이터를 읽어와 각종 연산을 수행한 후, 그 결과를 외부장치로 다시 내보내는 방식으로 업무를 처리한다.

  • 이때 컴퓨터 내부로 데이터가 들어오는 것을 입력(input)이라 하고, 컴퓨터 외부 장치로 데이터가 나가는 것을 출력(output)이라고 한다.

  • 메모리 및 입출력 장치 등의 각 하드웨어 장치에는 컨트롤러라는 것이 붙어 있다. 컨트롤러는 각 하드웨어 장치마다 존재하면서 이들을 제어하는 작은 CPU라고 할 수 있다.

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


Mode Bit

  • Dual Mode in OS by setting mode bit

    • Mode bit 0 -> 커널 모드
      OS가 CPU권한을 갖는다. (시스템을 안전하게 유지, 관리하기 위해서)
    • 시스템의 중요한 동작들을 OS가 관리한다.

    • Mode bit 1 -> User 모드
      User가 CPU 권한을 갖는다.
      • Why dual mode(or multi-mode)?

      • OS 그 자체와 다른 시스템의 구성요소들을 보호하기 위해서다.


Timer

  • Timer는 특정 시간이 지나면 CPU를 중단시키는 것이다.

  • Timer가 동작되면 기존 프로그램을 멈춘 다음, User 모드에서 Kernel 모드로 이동시킨 후 그 다음 프로그램을 수행시킨다.

  • User program이 CPU를 독점(monopolizing)하는 것을 막아준다.

  • 시분할 시스템(time-sharing system) 구현에 사용된다.


2. CPU 연산과 I/O 연산

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

  • 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 가지고 있는데, 이를 로컬버퍼(local buffer)라고 부른다.

  • 디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달된다.

  • 이때 장치에서 로컬버퍼로 읽어오는 일은 컨트롤러(controller)가 담당한다.

  • 로컬버퍼로 읽어오는 작업이 끝났는지를 메인 CPU가 지속적으로 체크하는 것이 아니라 장치에 있는 컨트롤러가 인터럽트를 발생시켜 CPU에 보고하게 된다.

  • 이때 인터럽트(interrupt)컨트롤러들이 CPU의 서비스가 필요할 때 이를 통보하는 방법을 말한다.

  • 기본적으로 CPU는 매 시점 메모리에서 명령(instruction)을 하나씩 읽어와서 수행한다.

  • 이때 CPU 옆에는 인터럽트 라인(interrupt line)이 있어서, CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고 인터럽트와 관련된 일을 먼저 처리한다.

  • 즉, CPU는 명령 하나를 수행할 때마다 인터럽트가 발생했는지 확인한다.


3. 인터럽트의 일반적 기능

  • OS는 각종 HW 및 SW 자원 관리뿐 아니라 사용자 프로그램에 필요한 서비스도 제공한다. 그 중 한가지가 인터럽트 처리루틴이다.

  • CPU는 하던 일을 잠시 멈추고 이 인터럽트가 발생하였을 때 OS 커널 내에서 해당 인터럽트의 처리를 위해 정의된 코드를 찾아 수행한다.

  • 이때 수행하는 일은 디스크의 로컬버퍼에 있는 내용을 사용자 프로그램의 메모리로 전달하고, 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시해두는 일이다.

  • OS는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터(interrupt vector)를 가지고 있다.

  • 인터럽트 벡터인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조를 말한다.

  • 실제 처리해야할 코드는 인터럽트 처리루틴(interrupt service routine) 또는 인터럽트 핸들러(interrupt handler) 라고 불리는 다른 곳에 정의된다.

내부 인터럽트 종류

Software interrupt 또는 Internal interrupt

  • Trap

    • 의도적이다.

    • 예시) system call

    • 이벤트 수행하고 나면 “next” 명령으로 간다.

  • Fault

    • 의도치 않는 실수이지만 복구 가능하다.

    • 예시) page fault

    • “current” 명령을 재수행하거나 중단한다.

  • Abort

    • 의도치 않는 실수이고 복구 불가능하다.

    • 예시) illegal instruction

    • 현재 프로그램이 멈춘다.


4. 인터럽트 핸들링

  • 인터럽트 핸들링(interrupt handling)이란 인터럽트가 발생한 경우에 처리해야 할 일의 절차를 의미한다.

  • OS는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 프로세스 제어블록(Process Control Block: PCB)이라는 자료구조를 둔다. PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있다.

  • 프로그램 A가 실행되던 중에 인터럽트가 발생하면 A의 현재 상태를 PCB에 저정한 후 CPU의 제어권이 인터럽트 처리루틴으로 넘어가게 되며, 인터럽트 처리가 끝나면 저장된 상태를 PCB로부터 CPU상에 복원해 인터럽트 당하기 직전의 위치부터 실행이 이어지게 되는 것이다.


5. 입출력 구조

  • 입출력(I/O)이란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고받는 것을 말한다.

동기식 입출력(Synchronous I/O)

  • 동기식 입출력은 프로그램 A가 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 프로그램 A의 후속 작업을 수행할 수 있는 방식을 말한다.

  • 동기식 입출력에서 CPU는 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비하게 된다.

비동기식 입출력(Asynchronous I/O)

  • 비동기식 입출력은 입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식을 말한다.

예시

  • 왼쪽이 비동기식 입출력, 오른쪽이 동기식 입출력이다.

6. DMA

DMA(Diredt Memory Access)

  • 원칙적으로 메모리는 CPU에 의해서만 접근할 수 있는 장치이다.

  • CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터런트를 발생시켜 CPU가 이를 대행하는 식으로만 가능하다.

  • 하지만, 컨트롤러가 CPU에게 인터럽트를 발생시키면 CPU는 컨트롤러의 로컬버퍼와 메모리 사이에서 데이터를 옮기는 일을 하게 된다.

  • 모든 메모리 접근 연산이 CPU에 의해서만 이루어질 경우 입출력 장치가 메모리 접근을 원할 때마다 인터럽트에 의해 CPU의 업무가 방해를 받게 되어 CPU 사용의 효율성이 떨어지는 문제점을 발생하게 된다.

  • 이러한 비효율성을 극복하기 위해 CPU 이외에 메모리 접근이 가능한 장치를 DMA라고 부른다.

  • DMA는 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 한다.

  • 이때 DMA는 블록(block) 이라는 큰 단위로 정보를 메모리로 읽어온 후에 CPU에게 인터럽트를 발생시켜서 해당 작업의 완료를 알려준다.

  • 이러한 방식으로 CPU에게 발생하는 인터럽트의 빈도를 줄여 CPU를 좀 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있게 된다. (interrupt 낮추고, CPU 성능 높이는)


7. Bus

  • Northbridge(= Memory Controller Hub) : PC motherboard 에 있는 핵심 로직 칩셋에서 두개의 칩 중 하나이다.

    • CPU, Memory, Graphic card에 직접적으로 연결 O

    • 매우 빠른 의사소통을 처리한다.

    • PCle bus를 통해 “southbridge”로 연결된다.

  • Southbridge(= I/O Controller Hub) : 모든 컴퓨터 I/O 기능들을 관리하는 칩이다.

    • USB, audio, serial, BIOS 등등

    • CPU에 직접적으로 연결 X

Reference


Comments

Index