-
Interrupt(인터럽트)
인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트로 나뉜다.
- 하드웨어 인터럽트 (인터럽트)
- 소프트웨어 인터럽트 (트랩)
인터럽트 핸들링
인터럽트가 발생한 경우에 처리해야 할 일들의 절차를 말한다.
프로그램 a가 실행되고 있을 때, 인터럽트가 발생한다면 ?
- a의 현재 상태를 먼저 저장한다. (현재 상태는 현재 CPU에서 실행중인 명령의 메모리 주소 및 부가적인 정보를 의미 한다.)
- 인터럽트 처리 루틴을 통해 인터럽트 들어온 것을 수행한다.
- 저장된 a의 상태를 불러와 다시 수행한다.
좀더 구체적인 설명으로
- OS는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 PCB(프로세스 제어 블록)을 가진다.
- PCB는 각각의 프로그램 마다 하나 씩 존재하며, 해당 프로그램의 어디를 실행중이 었는지를 저장(구체적으로 코드의 메모리 주소, 레지스터 값, 하드웨어 상태 등이 저장된다)
- 인터럽트가 발생하게되면 실행중이던 프로그램의 상태를 PCB에 저장하고 cpu의 제어권이 인터럽트 처리 루틴으로 넘어가게 되며 인터럽트 처리 후 저장된 상태를 PCB로 부터 CPU상에 복원 시켜 인터럽트 당하기 직전 위치 부터 실행할 수 있게 한다.
운영체제가 직접 cpu를 점유하는 경우는 인터럽트 발생에 의한 경우가 아니면 발생하지 않는다.
I/O (입출력 구조)
컴퓨터 시스템이 외부의 입출력 장치들과 데이터를 주고 받는 행위.
- 동기식 입출력
- 어떤 프로그램에서 입출력 요청을 하면, 입출력 작업이 완료 된 후에야 프로그램이 후속 작업을 수행할 수 있는 방식
- CPU는 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비하게 됨. 그래서 일반적으로 프로그램이 입출력을 수행 중이라면 CPU를 다른 프로그램에 이양해 계속 일할 수 있도록 관리한다.
- 서로 다른 동기식 입출력 프로그램에서 같은 데이터를 바라 볼 때 <- 먼저 접근한 프로그램에서 수정하게 되면 뒤에서 접근한 프로그램에도 영향을 주어 의도치 않은 결과를 초래할 수 있다. 이러한 문제를 방지하기 위해 동기식 입출력에서는 동기화를 위해 장치별 Queue같은 것을 두어 데이터의 동기화를 관리 해야 한다.
- 어떤 프로그램에서 입출력 요청을 하면, 입출력 작업이 완료 된 후에야 프로그램이 후속 작업을 수행할 수 있는 방식
- 비동기식 입출력
- 입출력 연산을 요청한 후 연산이 끝나기를 기다리지 않고 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에 곧바로 다시 부여하는 방식
- 어떤 프로그램이 데이터를 디스크에서 읽어오라는 요청을 했을 때 보통은 읽어온 결과를 이용해서 다음 연산을 수행하나, 그 데이터와 관련 없이 수행할 수 있는 일이 존재하는 경우가 있다.
비동기식 입출력에서는 그러한 작업을 먼저 수행하고, 읽어와야 하는 데이터가 있는 작업은 입출력이 완료 된 후에 수행하게 된다.
- 어떤 프로그램이 데이터를 디스크에서 읽어오라는 요청을 했을 때 보통은 읽어온 결과를 이용해서 다음 연산을 수행하나, 그 데이터와 관련 없이 수행할 수 있는 일이 존재하는 경우가 있다.
- 입출력 연산을 요청한 후 연산이 끝나기를 기다리지 않고 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에 곧바로 다시 부여하는 방식
DMA(Direct Memory Access)
- 메모리는 원칙적으로 CPU에 의해서만 접근할 수 있는 장치로, CPU 이외의 장치가 메모리의 데이터에 접근하기 위해선 CPU에 인터럽트를 발생시켜 CPU가 대행하게끔 하는 식으로만 가능하지만, 이렇게 되면 CPU의 효율성이 너무 떨어지게 된다.
이러한 문제를 해결하기 위해 CPU 이외에 메모리 접근이 가능한 장치를 하나 더 두는데, 이러한 장치를 DMA라 한다. - DMA는 일종의 컨트롤러로 CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는걸 막아준다.
- DMA를 사용하면, 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는게 아닌, DMA가 대행함으로 CPU는 인터럽트 처리를 할 필요가 없어진다.
- DMA는 바이트 단위가 아닌 블록이라는 보다 더 큰 단위로 정보를 메모리로 읽어고 CPU에게 인터럽트를 발생시켜 작업이 종료됨을 알린다.
'CS' 카테고리의 다른 글
메모리? 메인 메모리? (0) 2021.01.12 파일 시스템 (0) 2021.01.07 IP(Internet Protocol)? (0) 2021.01.03 로드 밸런싱? (0) 2020.12.22 해싱(Hashing)? (0) 2020.12.22