[한권으로 읽는 컴퓨터 구조와 프로그래밍] 인터럽트, 상대 주소 지정

2022. 2. 2. 14:51코딩공부/ComputerScience

인터럽트

등장 배경

어떤 작업이 진행되는데 중간에 꼭 확인해야 하는 이벤트가 발생한다면?

- 작업을 다 끝내고 이벤트를 처리한다? 늦어서 더이상 이벤트를 처리할 수 없는 상태가 됨

- 폴링 방식을 사용한다?

폴링 : 정해진 시간 또는 순번에 상태를 확인해서 상태변화가 있는지 없는지를 체크하는 방식

본 작업보다 간섭 처리 작업에 더 시간이 오래 걸릴 수 있다.

 

-> 소프트웨어적으로 해결할 수 있는 방법은 소스 군데군데 상태를 체크할 수 있도록 코딩을 해야하는것;;.

프로그램의 구조를 잘 배치한다? 한계가 있음

 

실행중인 프로그램을 잠깐 중단시켜서 주의를 기울어야 하는 외부의 요소에 대응할 수 있게 만들 방법으로

새로운 하드웨어 장치가 필요 => 인터럽트!!

 

인터럽트 시스템의 구조

적절한 신호가 들어오면 CPU 실항을 잠깐 중단시킬 수 있는 이나 전기 연결 포함

 * 핀 : 칩에 연결된 전기적 접점

 

장치 크기가 줄어듦에 따라 통합 주변장치의 내부에서 인터럽트 시스템을 사용하는 것으로 발전함

* 통합 주변장치 : 컴퓨터에 연결하여 정보를 입력하거나 정보를 가져 오는 보조 장치

 

인터럽트시스템  작동 방식

1. 주변장치가 인터롭트 요청 생성

2. 프로세서는 현재 실행중인 명령어를 끝까지 실행

3. 현재 실행 중인 프로그램을 잠시 중단시키고 인터랩트 핸들러 실행

4. 인터럽트 핸들러가 필요한 작업을 마치면 원래 실행중이던 프로그램이 중단된 위치부터 다시 실행

=> 인터럽트 핸들러는 함수이다!

 

인터럽트가 고려해야할 사항

1. 인터럽트에 대한 응답 시간 :

인터럽트 처리는 정해진 시간 안에 끝내야 한다.

2. 인터럽트를 서비스하고 나중에 원래대로 돌아오기 위해 상태를 저장해야한다.

=> 인터럽트 핸들러는 저장해야 하는 요소를 최소화해서 돌아올 프로그램 위치를 스택에 저장

 

인터럽트 핸들러의 위치

인터럽트 핸들러 주소를 저장하기로 약속한 메모리주소 안에

여러 인터럽트 벡터가 들어 있고 각 인터럽트 벡터는 각 인터럽트에 대한 핸들러 주소 지정

* 인터럽트 벡터 : 메모리 위치를 가리키는 포인터 like 화살표

 

인터럽트가 일어나면 컴퓨터는 인터럽트 벡터에 저장된 주소를 보고 제어를 그 주소로 옮김

 

인터럽트 핸들러의 목적

=> 예외 처리!

물리적인 주소를 벗어나는 주소를 사용하려고 시도하거나, 스택 오버플로가 일어나는 등

예외 상황에 대한 인터럽트 벡터를 제공함

 

특별한 인터럽트 제어

어떤 인터럽트를 켜거나 끌 수 있는데,

인터럽트를 중단시킬 수 있는 마스크

인터럽트 간의 우선순위를 둬서 우선 순위가 낮은 인터럽트를 일시 중단,

일정 시간이 지나면 인터럽트를 발생시킬 수 있는 내장 타이머

 

운영체제는 가상 인터럽트나 소프트웨어 인터럽트 시스템을 제공

e.g ) 유닉스의 시그널

 

최근 개발된 시스템은 보통 이를 이벤트라고 부른다

 

 

상대 주소 지정

 

운영체제(OS)란?

여러 프로그램을 동시에 실행하기위해 각 프로그램을 서로 전환시켜줄 수 있는 일종의 관리자프로그램

 

OS를 시스템 프로그램이라고 부르고 다른 모든 프로그램(OS가 관리하는 프로그램)을 사용자 프로그램이나 프로세스라고 부른다.

 

운영체제 작동 흐름

p.207 그림 5-8

 

시분할이란 사용자 프로그램 실행 시간을 조절하는 기법이다.

시분할 방식에서는 시간을 정해진 간격으로 나누고, 정해진 시간 간격동안 실행

 

사용자 프로그램 상태 또는 문맥은 레지스터의 상태와 프로그램이 사용 중인 메모리의 상태를 뜻하는데

이때 메모리에 스택도 포함된다.

 

시분할 방식은 잘 작동하지만 프로그램을 메모리로 불러들이기때문에 매우 느리다.

프로그램을 메모리로 불러오되,

각 프로그램에게 각기 다른 공간을 허용할 수 있으면 훨씬 더 빠르게 시분할 실행 가능

 

각기 다른 메모리 공간의 사용자 프로그램 작동 방법

1. 명령어 주소가 특정 메모리를 가리키는 절대 주소 지정 방식에 인덱스 레지스터를 추가해 메모리 주소를 나눠준다.

인덱스 레지스터의 값을 명령어에 들어있는 주소와 더해서! 유효주소를 계산하는 원리

 

2. 상대 주소 지정

명령어에 들어 있는 주소를 위치로 해석하지 않고, 명령어의 주소를 기준으로 하는 상대적인  주소로 해석

 

상대 주소(relative address)는 메모리 공간에서 사용자 영역이 시작되는 주소번지를 0번지로 변경하여 사용하는 주소 지정 방식이다.

즉, 사용자 프로세스 입장에서 메모리 공간을 바라본 주소이며 절대 주소와 관계없이 항상 0번지부터 시작한다.

 

아래의 그림처럼 어떠한 데이터가 메모리의 120번지에 있다고 해보자.

절대 주소로는 실제 메모리 공간에 있는 주소를 의미하므로 120번지 그대로 쓰인다.

상대 주소로는 사용자 영역이 시작되는 주소번지, 즉 100번지가 0번지로 변경되므로 20번지로 쓰인다

 

상대 주소 지정을 사용하면 프로그램을 메모리의 원하는 위치로 자유롭게 재배치 가능