-
# 03. Interrupt & System call전공 지식/OS 2022. 8. 15. 01:57
0. 폴링(Polling)이란?
인터럽트에 들어가기 전 우선 폴링 개념부터 먼저 알아야 그 다음을 이해할 수 있다.
이전 포스팅에서 운영체제에 대해 설명하며 운영체제는 자원을 효율적으로 관리한다 라고 강조했었다. 운영체제가 자원을 효율적으로 관리하기 위해서는 현재 각 자원들의 상태를 파악하는 것은 필수적이다.
컴퓨터 시스템에 존재하는 각 자원들의 현 상황을 파악할 수 있는 잘 알려진 방법으로는 폴링(Polling)이 있다. 폴링은 CPU가 일정한 시간 간격을 두고 각 자원들의 상태를 주기적으로 확인하는 방법이다. CPU가 주기적으로 자원들을 찾아 너 괜찮니? 하고 묻는거다.
자원들은 폴링 신호를 받으면 자신의 상태나 원하는 것을 CPU에게 알려준다. 하지만 이러한 과정은 문제가 발생하는데 CPU 입장에서는 폴링을 한 후 다음 폴링 전까지 자원의 상태를 알 수 없다는 점이다. 게다가 아무 일도 없었는데도 일정시간을 폴링을 위해 들여야 하는 부담도 있다.
그래서 나온 개념이 인터럽트 이다.
1. 인터럽트(Interrupt)란?
인터럽트란 CPU 작업 도중에 입출력 요청 또는 예외상황 등을 처리해야 하면 수행 중인 작업을 멈추고 CPU가 해당 작업을 처리하도록 하는 것이다. 폴링과 정반대로 각 자원들이 능동적으로 자신의 상태 변화를 CPU에게 알리면 CPU가 하던일을 멈추고 자원이 요청한 일을 해주는 방식이다
CPU는 따로 시간을 들이지 않아도 되고, 자원들은 상황이 발생하면 즉시 내 상황을 알려 처리 받을 수 있으니 폴링에 비해 훌륭한 방식임이 틀림없다. 이러한 이유로 오늘날 거의 대부분의 시스템에서는 인터럽트 방식을 채택하고 있다.
Polling
CPU가 필요한지 Device들에게 일정 주기로 체크
Pros: 구현이 쉬움
Cons: 특정 주기마다 확인해야 하기 때문에 CPU 사이클을 낭비함, 반응 속도가 느림
Interrupt
Device에게 요청이 들어오면 수행
Pros: 필요할 때만 방해받기 때문에 CPU 사이클이 절약됨, 반응 속도가 빠름
Cons: 구현이 어려움1.1 인터럽트 종류에 대해서
인터럽트는 크게 두가지로 분류된다.
(1) 하나는 하드웨어 인터럽트 → (인터럽트)
(2) 다른 하나는 소프트웨어 인터럽트 → (트랩)
하드웨어 인터럽트는 주로 우리가 흔히 말하는 인터럽트이고, 소프트웨어 인터럽트는 트랩이라고 불린다.
트랩은 Exception과 System call로 나눠지는데 이 중 System call은 이따 알아보자.
- Interrupt (하드웨어 인터럽트)
- Trap (소프트웨어 인터럽트)
Exception : 프로그램이 오류를 범한 경우
System call : 프로그램이 커널 함수를 호출하는 경우인터럽트를 내부 / 외부로 나누는 경우도 있다.
(1) 내부 인터럽트는 하드웨어 고장, 실행할 수 없는 명령어, 명령어 실행 오류, 사용 권한 위배 등이 있다.
하드웨어 고장은 컴퓨터 고장 또는 비트 오류가 있으며,
명령어 실행 오류는 나누기 0과 같은 경우,
사용 권한 위배는 말 그대로 사용자가 OS만 접근 가능한 곳에 엑세스한 경우.
(2) 외부 인터럽트는 보통 외부 입출력장치에 의해 발생하는데, 대표적으로 컴퓨터 종료(전원 버튼 누르기), 타이머 인터럽트(타이머가 일정 시간 간격으로 인터럽트 요청), 입출력 인터럽트(입출력장치가 입출력완료를 알리기 위해 인터럽트 요청) 가 있다.1.2 인터럽트 발생 처리 과정
인터럽트가 발생한다.
↓
CPU는 인터럽트를 인지하고 수행하던 작업을 멈춘다.
↓
스택에 원래 하던 일에 대한 정보를 저장한다. (왜냐하면 다시 돌아와서 아까하던 작업을 계속 해야해서)
↓
인터럽트가 왜? 생겼는지 그 원인을 판별하기 위해서 인터럽트 처리 루틴을 실행한다.
↓
문제를 해결하기 위해서 인터럽트 서비스 루틴을 실행한다.
↓
서비스 루틴을 완료하면 CPU는 이전에 하고 있던 작업을 재개한다.
1.3 중첩된 인터럽트의 처리는
다중 인터럽트 처리 방식 인터럽트가 2개 이상 발생하였을 때는 어떻게 처리할까? 방법에는
(1) 순차처리와 (2) 중첩처리가 있다.
인터럽트의 우선순위에 따라 달라진다.
새로 들어온 인터럽트의 우선순위가 더 낮으면 현재 하던 일을 마저 다 끝낸 후 차례대로 처리하고(순차처리)
우선순위가 더 높으면 하던 일을 멈추고 새로 들어온 인터럽트를 실행한다. (중첩처리)
1.4 인터럽트의 우선순위를 판별하는 방식
1. 소프트웨어적인 방법 = 폴링(Polling)
- 인터럽트 발생 시 높은 우선순위의 인터럽트 자원부터 인터럽트 요청 플래그를 검사하여, 우선순위가 가장 높은 인터럽트 자원을 찾아내 루틴을 수행하는 방식
- 많은 인터럽트가 있을 경우, 모두 조사하는 데에 시간이 걸려 처리 속도가 느림
- 회로가 간단함
- 융통성이 있음
- 별도의 하드웨어가 필요없어 경제적
2. 하드웨어적인 방법 = Vectored Interrupt
- CPU와 인터럽트를 요청할 수 있는 장치 사이에 장치번호에 해당하는 버스를 직렬이나 병렬로 연결하여 요청 장치의 번호를 CPU에게 알리는 방식
- 인터럽트 벡터란, 인터럽트를 발생한 장치가 프로세서에게 분기할 곳에 대한 정보를 제공하는 것
- 장치 판별을 위한 별도의 프로그램 루틴이 없어 응답 속도가 빠름
- 회로가 복잡함
- 융통성이 없음
- 추가적인 하드웨어가 필요하므로 비경제적
1) 직렬(Serial) 우선순위 부여 방식 = 데이지체인(Daisy-chain)
- 인터럽트가 발행하는 모든 장치를 한 개의 회선에 직렬로 연결
- 우선순위가 높은 장치를 선두에 위치시키고 나머지를 우선순위에 따라 차례로 연결
- 호스트에 가까운 쪽에 높은 우선권을 두는 경우가 많음
2) 병렬(Parallel) 우선순위 부여 방식
- 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결
- Mask Register의 비트 위치에 따라 우선순위 결정
- Mask Register는 우선순위가 높은 것이 서비스를 받고 있을 때, 우선순위 낮은 것을 비활성화 할 수 있음
- 우선순위가 높은 인터럽트는 낮은 인터럽트가 처리되는 중에도 우선적으로 처리됨
H/W S/W 속도 빠름 느림 회로 복잡 간단 융통성 없음 있음 경제적 비경제적 경제적 2. 이중 동작 모드(Dual Mode)란?
윈도우에서 정의한 윈도우 구조 시스템 콜을 설명하려면 우선 운영체제의 듀얼 모드에 대해 설명을 해야해서 중간에 넣게 되었다.
이전에 운영체제 기본에 대해서 설명하며 윈도우는 마이크로 커널, 리눅스는 모놀리식 커널로 이루어져 있다고 이야기 한적이 있다. 운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다. 간단하게 말하면 리눅스의 모놀리식 커널은 대부분의 운영이 커널모드에서 이루어지는 것이고, 윈도우의 마이크로 커널은 커널 모드가 축소되고 사용자 모드에서 운영하는 것이다. 여기까지가 복습이고,
3. 시스템 콜(System call)이란?
시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해주는 것이다.
다시 말해 볼까? 시스템 콜은 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출 하는 것.
다시 말해 볼까? 시스템 콜은 운영체제에게 어떤 일을 부탁하는 것.
3.1 시스템 콜 과정
사용자가 원하는 I/O작업 있다고 하자.
↓
사용자는 시스템 콜을 걸어서 커널에게 요청을 한다. (소프트웨어 인터럽트)
↓
그럼 우리의 깐깐한 커널은 아무 요청이나 다 들어주는 건 아니고 올바른 요청인지 확인한다.
↓
올바른 요청인 경우 커널은 I/O Controller에게 사용자가 요청한 일을 하라고 명령한다.
↓
그럼 I/O Controller는 요청받은 일을 한다.
↓
I/O Controller가 일을 하는 중에 바쁜 우리의 CPU는 또 다른 프로그램에게 넘어간다.
↓
I/O가 일을 끝내면 나 일 다 끝났어요~ 하고 CPU에게 알려준다. (하드웨어 인터럽트)
그럼 자 생각해보자 사용자가 시킨 I/O를 수행 하기위해서는 인터럽트가 어떤 것이 걸리게 될까?
시스템 콜인 소프트웨어 인터럽트?
아니면 하드웨어 인터럽트?
정답은 둘다이다. I/O 수행 전 한번, 수행 후 한번.
첫번째는 사용자 프로그램이 I/O를 요청하기 위해 운영체제에게 소프트웨어 인터럽트(시스템 콜)을 요청한다. 이후에 일이 다 끝나면 하드웨어 인터럽트를 통해 끝났다고 알려주는 것. 2가지 다 필요하다.3.2 시스템 콜 유형
1. 프로세스 컨트롤
프로세스 생성, 프로세스 종료 및 중단
메모리 할당 및 할당 해제
2. 파일 관리
3. 디바이스 관리
특정 디바이스 요청 및 해제
특정 디바이스에서 read 또는 디바이스에 write
4. 정보 유지
사용자 프로그램과 OS 간의 정보 전송
5. 프로세스 간 통신
출처
https://ddungkill.tistory.com/85?category=814409 [Shine Myself:티스토리]
'전공 지식 > OS' 카테고리의 다른 글
# 07. Memory (3) 2022.09.19 # 05. 병행프로세스 동기화 (3) 2022.08.30 # 04. CPU 스케줄링 (0) 2022.08.30 # 02. 프로세스와 스레드 (0) 2022.08.07 # 01. 운영체제란? (0) 2022.08.07