1. 컴퓨터 시스템의 구조
- 내부장치: CPU, 메모리
- 외부장치: 디스크, 보드, 네트워크 장치
컨트롤러
- 각 하드웨어 장치에 붙어 있음
- 각 하드웨어 장치를 제어하는 작은 cpu라고 할 수 있음
- 메모리 ~ 메모리 컨트롤러, 디스크 ~ 디스크 컨트롤러
2.CPU 연산과 I/O 연산
- 입출력 장치와 메인 CPU는 동시 수행이 가능하다
B라는 프로그램이 현재 CPU를 할당받아 프로그램 코드를 수행
동시에 A라는 프로그램은 하드디스크에서 어떠한 정보를 읽어오는 작업을 수행
- 디스크나 키보드 등에서 데이터를 읽어오는 경우 우선 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달
인터럽트
- 컨트롤러들이 CPU의 서비스가 필요할 때 이를 통보하는 방법
- cpu에서는 메모리에서 명령(instruction)을 하나씩 읽어와서 수행함
- cpu옆 인터럽트 라인(interrupt line)이 있음
- 인터럽트 라인에 신호 들어옴 -> 하던 일 멈추고 인터럽트와 관련된 일을 먼저 처리
- cpu는 명령 하나를 수행할 때 마다 인터럽트가 발생했는지 확인함
3. 인터럽트의 일반적 기능
🔥 운영체제 커널에는 인터럽트가 들어왔을 때 해야 할 일이 미리 다 프로그래밍 되어 코드가 보관되어 있음!
인터럽트 처리루틴
- 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의하고 있음
과정
- 인터럽트 발생
- cpu일 잠시 멈춤
- 그때의 인터럽트 처리 루틴을 수행
인터럽트 분류
- 하드웨어 인터럽트: 하드웨어 장치가 cpu의 인터럽트 라인을 세팅함
- 소프트웨어 인터럽트: 소프트웨어가 그 일을 수행함
인터럽트 벡터
- 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료 구조
소프트웨어 인터럽트
트랩(trap)이라는 용어로 주로 불림
예외상황(Exception)
- 비정상 적인 작업을 시도하거나, 자신의 메모리 영역 바깥에 접근하려는 시도 등 권한이 없는 작업을 시도할 때,
시스템 콜(System Call)
- 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을때 운영체제에 서비스를 요청하는 방법임
4. 인터럽트 핸들링
인터럽트가 발생한 경우 처리해야 할 일의 절차를 의미한다.
운영체제는 현재 시스템 내에서 실해왿는 프로그램들을 관리하기 위해 프로세스 제어블록(Process Control Block: PCB)이라는 자료구조를 둔다.
PCB
- 각각의 프로그램마다 하나씩 존재함
- 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있음
- 프로그램의 메모리 주소, 레지스터 값, 하드웨어 상태 등이 저장됨
정리
- 인터럽트 발생
- 프로그램의 실행 상태를 PCB에 저장
- CPU 제어권 인터럽트 처리루틴으로 전달
- 인터럽트 끝
- PCB로부터 CPU상에 복원
5. 입출력 구조
입출력이란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고받는 것을 말한다.
동기식 입출력
어떤 프로그램이 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행할 수 있는 방식을 말함
동기식 입출력에서 CPU는 입출력 연산이 끝날 때 까지 인터럽트를 기다리며 자원을
낭비 함
⭐️ cpu 명령 수행 속도 > 입출력 장치에서 데이터를 읽어오는 속도
입출력 중인 프로그램의 경우 봉쇄 상태(blocked state)로 전환시킴
동기식 입출력을 수행 중인 cpu를 다른 프로그램에게 할당하지 않는다면 매 시점 시스템 내에서는 하나의 입출력 연산만이 수행될 수 있다.
cpu의 효율적인 사용을 위해 입출력이 수행되는 동안 다른 프로그램에게 cpu를 양도하면 동시에 다수의 입출력 연산이 일어날 수 있다.
동기식 입출력에서는 입출력 요청의 동기화를 위해 장치별로 큐(queue)를 두어 요청한 대로 처리할 수 있도록 함
입출력부분의 연산 완료의 통보는 인터럽트를 통해서 수행하며, 이 경우 인터럽트 핸들링을 하게된다.
비 동기식 입출력:
비 동기식 입출력은 입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 cpu의 제어권을 입출력 연상르 호출한 그 프로그램에게 곧바로 다시 부여하는 방식을 말함
- 비동기식 입출력에서는 데이터와 관련 없이 수행할 수있는 작업을 먼저 수행하고, 읽어오는 데이터가 반드시 있어야 수행할 수 있는 일들은 입출력이 완료된 후에 수행하게 된다.
- 입출력 요청이 디스크에서 읽어노는 요청이 아니라 디스크에 쓰는 요청이어도 쓰기 작업이 완료되기 전에도 다음 명령을 수행할 수 있기에 비동기식 입출력이 사용될 수 있다.
6.DMA
문제의 원인:
원칙적으로 메모리는 CPU에 의해서만 접근할 수 있다.
문제의 결과:
만약 모든 메모리 접근 연산이 CPU에 의해서만 이루어질 경우 입출력 장치가 메모리 접근을 원할 때 마다 인터럽트에 의해 cpu의 업무가 방해를 받게된다.
CPU사용의 효율성이 떨어지는 문제가 발생한다
비효율성을 해결하기 위해 DMA(Direct Memory Access)를 통해 CPU이외의 메모리 접근이 가능한 장치를 두었다.
- DMA는 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 함
- 로컬버퍼에서 메모리로 읽어오는 작업을 cpu대신 DMA가 대행
- DMA는 Byte단위가 아니라 블록(block)이라는 큰 단위의 정보를 메모리로 읽어온 후 CPU에게 인터럽트를 발생시켜서 해당 작업의 완료를 알려준다.
DMA를 통한 효과
- CPU는 원래 하던 작업을 멈추고 인터럽트를 처리할 필요가 없다.
- CPU에 발생하는 인터럽트의 빈도를 줄여 CPU를 좀 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있다.
Reference
반효경, 운영체제와정보기술의원리, 이화여자대학교출판문화원, 2020.05.04, p67~81