컴퓨터 시스템
CPU
- CPU는 클럭마다 순차적으로 메모리에서 명령을 읽어와서 실행
- 클럭(clock)이란 CPU의 속도를 나타내는 단위
- 다음 명령을 실행하기 전에 들어온 인터럽트가 있는지 확인
Device Controller
I/O 장치를 관리하는 작은 CPU
- I/O 디바이스마다 controller가 달려있어 일종의 CPU처럼 동작하여 관리
- CPU가 직접 디바이스한테 요청하지 않고 device controller에서 요청함
- 제어 정보를 위한 control register, status register를 가짐
- local buffer를 가짐(데이터를 저장)
- 실제 디바이스와 local buffer 사이에서 I/O가 발생
- I/O가 끝나면 CPU에게 Interrupt로 알림
DMA controller
Direct Memory Acces
특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능
- 데이터 관련 인터럽트가 시도때도 없이 들어오면 CPU가 일을 하기 어려움
- 원래는 메모리엔 CPU만 접근 가능하지만 CPU 개입 없이 DMA를 통해 데이터를 이동시킴
- CPU 대신에 메모리에 데이터를 넘겨주고 데이터 이동이 완료되었다는 단 한 번의 인터럽트만 발생
- 데이터가 전송되는 동안 CPU는 다른 작업을 수행할 수 있어 효율성 🆙
Timer
특정 프로그램이 CPU를 독점하지 못하게 도와주는 하드웨어
- 시간을 세팅해서 해당 시간이 지나면 운영체제로 CPU 제어권을 넘김 ->
timer interrupt
- 매 클럭 마다 1씩 감소
- CPU를 특정 프로그램이 독점하는 것을 보호
- time sharing을 구현하기 위한 방법
Mode bit
커널 모드(0)
- 모니터 모드, 시스템 모드
- 운영체제가 CPU 제어를 가짐
- 모든 기능을 수행 가능(I/O 디바이스 접근 같은)
- interrupt나 exception 발생 시 커널 모드로 변경됨
사용자 모드(1)
- 사용자 프로그램이 CPU 제어권을 가짐
- 기능이 제한되어 있음
-> 다른 프로그램 또는 운영체제에 피해가 되지 않도록(보안상 이유)
입출력의 수행
- 입출력의 특권 명령 중 하나 -> 사용자 프로그램은 못함
사용자 프로그램은 어떻게 I/O를 얻을 수 있나?
- 직접 받아오는 것은 불가능
- 사용자 프로그램이 운영체제에게 I/O 요청 ---> 운영체제에 부탁
- 사용자 프로그램이 운영체제(커널)의 함수를 호출하는 것 = 시스템 콜
- 프로그램을 실행하다 I/O가 필요하면 소프트웨어적으로 인터럽트를 걸음
- 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 시스템 콜이 끝나면 다음 명령을 실행
인터럽트
CPU가 프로그램을 실행하고있을 때, 입출력하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것
- CPU 제어 루틴을 인터럽트 처리 루틴(= 인터럽트 핸들러)으로 변경
이벤트 처리 방법 - Polling
컴퓨터는 모든 유형의 이벤트를 감지할 수 있는 방법이 있어야 함 ➡️ Polling & Interrupt
두 가지 방법을 통해 CPU는 언제든 발생하는 이벤트를 처리 가능
Polling
다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 자료처리를 하는 방식
- Device는 주의가 필요하지 않고 polling 프로그램이 조사하는 것을 기다리기만 하면 됨
- CPU가 직접 진행하는데 불필요한 polling에 시간이 낭비되어 비효율적
- 처리 작업이 많은 오늘날 프로세스 작업에는 알맞지 않음
인터럽트의 종류
하드웨어 인터럽트
- 일반적으로는 하드웨어가 발생시킨 인터럽트를 말함
- I/O 인터럽트: 입출력 작업이 종료되어 결과 혹은 오류로 정지된 경우 발생
- 이외에도 전원 이상 시, CPU 기능 이상 시, 외부 장치에서 인터럽트 발생 혹은 타이머 인터럽트
소프트웨어 인터럽트
- Trap이라고도 함
System Call
로 발생
- Exception: 프로그램 오류 발생 ex) 0으로 나누기, 오버플로우 등
- System Call: 프로그램에서 커널 함수를 호출
인터럽트 관련 용어
인터럽트 벡터
인터럽트 핸들러
- 인터럽트 서비스 루틴(ISR)이라고도 함
- 해당 인터럽트를 처리하는 커널 함수
- 인터럽트 수신으로 실행이 트리거 됨
- 소프트웨어이자 운영체제의 콜백 함수이자 device driver의 한 부분
- 인터럽트 벡터에 인터럽트 핸들러의 메모리 주소가 포함되어 있음
프로그램이 I/O를 받을 때
- 소프트웨어 인터럽트(System Call)을 요청
- I/O 디바이스가 처리하면 CPU로 하드웨어 인터럽트를 보냄
➡️ 소프트웨어 인터럽트와 하드웨어 인터럽트 모두 발생
➡️ 운영체제는 인터럽트로 제어된다
시스템 콜
- 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
- 프로그래밍 언어에서 지원하지 않는 기능에 대하여 운영 체제의 루틴을 호출하여 이용하는 것
시스템 콜(시스템 호출) 과정
- 프로그램 명령어 실행 중 인터럽트(시스템 콜) 발생
- CPU는 현재 실행 중인 프로그램을 중단하고 프로그램 위치(PC), 레지스터 상태 등을 스택에 저장
사용자 모드 -> 커널 모드
변경
- 인터럽트 벡터를 통해 알맞는 IRS를 찾아 실행해 인터럽트를 처리
- 처리가 끝나면 IRS 반환 값과 함께 스택에 저장했던 프로그램을 복구하고 다시 실행
시스템 콜 유형
프로세스 제어(process control)
- 프로세스 생성 및 중지 등
- ex) fork, exec, exit..
파일 조작(file manipulation)
- 파일 생성, 삭제, 관리 등
- ex) create, open, close, lseek..
장치 관리(device management)
- 장치 연결, 방출, 관리 등
- ex) open, close, iocil..
정보 유지(information maintenance)
- 시간 및 날짜 설정, 프로세스와 연결돤 파일 관리 등
- ex) time, date, dump, pid..
통신(communication)
- 통신 연결 생성 및 제거, 메시지 송수신 등
- ex) connect, accept, read, pope..
참고 링크
반효경 교수님 강의 - 캄퓨터 시스템 구조
위키백과 - 인터럽트
위키백과 - 시스템 호출
시스템 콜과 인터럽트
인터럽트(interrupt) & 시스템콜(system call)
위키백과 - DMA