인터럽트(interrupt)
인터럽트 벡터(interrupt vector)
인터럽트의 종류에 따라 handler 코드를 가리키는 포인터를 가진 자료구조.
인터럽트 종류마다 번호가 정해져있다.
인터럽트 번호
- linux
0 ~ 31 : 예외상황
32 ~ 47 : 하드웨어 인터럽트
128 : 시스템콜
- BIOS
0 ~ 7 : 예외상황
8 ~ 19 : 하드웨어 인터럽트
10, 13 ... : 시스템 콜
linux와 BIOS의 인터럽트 번호 중 겹치는 번호가 존재한다.
리눅스는 로딩이 되면 BIOS의 인터럽트 번호를 제거하고 linux의 인터럽트 번호를 설정한다.
인터럽트 핸들링(interrupt handling)
인터럽트가 발생했을 때 처리하는 것.
커널의 코드를 수행하는 것이므로 커널의 스택을 이용한다.
n개의 프로그램 -> n개의 독립 공간 존재
( 참고 )
스택 : 다른 함수를 호출했을 때, 돌아가야할 주소를 저장하는 자료구조
데이터 : 전역 변수 등 프로그램이 사용하는 각종 데이터가 저장되는 곳
코드 : 프로그래머가 작성한 코드가 기계어 형태로 저장되는 곳
처리 과정
1) 현재까지 수행한 것을 PCB(Proces Control Block)에 저장한다.
2) 인터럽트 처리 루틴으로 와서 커널 코드 수행
3) 인터럽트가 발생한 지점으로 돌아감
* 인터럽트 중 인터럽트 발생은 허용되지 않는다.
하지만 우선순위가 높은 인터럽트가 발생하는 경우
커널 스택에 저장하고 우선 순위가 높은 것부터 처리
인터럽트의 종류
1) 하드웨어 인터럽트(hardware interrupt) : 하드웨어 장치가 CPU에게 서비스를 받아야하는 경우
2) 소프트웨어 인터럽트(software interrupt) : 예외 처리(메모리 침범, 0으로 나누는 연산 등), 시스템 콜
입출력 처리 방법
1) 동기
- 입출력이 완료된 다음에 CPU를 다른 프로그램에 양도하는 방식
- 비효율적이다
- 다른 프로그램에 양도하는 경우, 장치별로 큐를 두어 다수의 입출력 연산을 순서대로 처리하도록 한다.
2) 비동기
입출력 연산을 요청한 뒤, CPU 제어권이 연산을 호출한 프로그램에 부여하는 방식
DMA(Direct Memory Access):
CPU이외에 메모리 접근이 가능한 장치
일종의 컨트롤러
원래는 주변 장치들이 메모리에 접근하기 위해서는 CPU에 인터럽트를 발생시켜 CPU가 로컬 버퍼와 메모리 사이에서 데이터를 옮겨준다.
비효율적
주변 장치들에 의해 자주 인터럽트 되는 것을 방지
바이트 대신 블록 단위로 메모리를 읽은 뒤 CPU에 인터럽트.
인터럽트의 빈도를 줄임.
메모리
1) 주기억 장치
메모리 휘발성, RAM
2) 보조기억 장치
비휘발성
- 파일 시스템용
- 메모리의 연장 공간인 스왑 영역(swap area)
프로그램 중 지금 사용하지 않는 부분을 저장하는 것
swap out : 디스크에 내려 놓는 일
하드 디스크가 주로 이용됨
하드웨어 보안
모드비트(mode bit) : 사용자 프로그램이 커널 모드에서만 사용할 수 있는 연산을 하는 것을 방지하기 위한 감시 장치
CPU는 보안 관련 명령 이전에 항상 모드 비트를 확인.
사용자 프로그램에 CPU의 제어권을 넘길 때는 1로 세팅
인터럽트 발생시 다시 0으로 리셋됨.
3.10 메모리 보안
접근하는 메모리 영역이 합법적인가 확인하는 두 개의 레지스터
1) 기준 레지스터 : 가장 작은 주소
2) 한계 레지스터 : 범위
사용자 모드에서는 두 레지스터를 이용하여 주소 범위 체크
커널 모드에서는 무제한 접근
3.11 CPU 보호
한 프로그램의 독점을 막기 위해 타이머(timer) - 하드웨어 사용
정해진 시간이 지나면 인터럽트 발생 -> 운영체제에 CPU 제어권 넘김
1씩 감소해서 0이 되면 timeout
참고 : https://rusy.tistory.com/entry/인터럽트interrupt
'CS 기본 이론 > OS' 카테고리의 다른 글
6.4 CPU 스케줄링 (0) | 2019.10.31 |
---|---|
5장 프로세스 (0) | 2019.10.26 |
4장 인터럽트 원리 (0) | 2019.10.24 |
개요 (0) | 2019.10.08 |
1. 운영체제의 정의 (0) | 2019.10.08 |