1. 기존의 방식(비효율적인 방법)
AC, INPR, OUTR의 기본 역할
AC(누산기)
: 16bit 크기의 레지스터로, 컴퓨터의 계산과 명령어 수행중 발생하는 중간 결과를 일시적으로 저장하는 역할을 한다.
INPR(입력 레지스터)
: 8bit 크기의 레지스터로, 키보드에서 입력된 데이터를 잠시 보관해두는 공간이다.
OUTP(출력 레지스터)
: 8bit 크기의 레지스터로, 프린터로 데이터를 보내기 전에 일시적으로 데이터를 저장하는 공간이다.
FGI와 FGO 플래그의 역할
FGI(Input Flag)
: 키보드로부터 입력이 완료되었을 때 1로 설정한다. FGI가 1이 되면 컴퓨터는 입력된 데이터를 처리할 준비가 되었다는 신호로 인식한다.
FGO(Output Flag)
: 프린터로 데이터를 보낼 준비가 되었을 때 1로 설정한다. FGO가 0일 때는 프린터가 데이터를 출력 중임을 의미한다. 따라서 새로운 데이터를 보낼 수 없다.
키보드 입력의 흐름(데이터가 INPR에서 AC로 이동하는 과정)
1. 입력 발생
: 사용자가 키보드에서 문자를 입력하면 INPR에 그 데이터가 저장된다.
2. FGI 설정
: 키보드로부터 데이터가 INPR에 들어가면, FGI는 1로 변경된다. ➡️ "키보드 데이터가 준비되었음"을 의미한다.
3. AC로 데이터 전송
: 컴퓨터는 FGI가 1인 것을 인식하고 INPR에 저장된 8 bit 데이터를 AC의 하위 8 bit로 옮긴다. 이로 인해 입력 값이 AC에 저장된다.
4. FGI 초기화
: 데이터가 AC로 옮겨지면, FGI는 0으로 재설정한다. ➡️ 다음 입력을 받을 준비를 마친다.
프린터 출력의 흐름(데이터가 AC에서 OUTR로 이동하는 과정)
1. 출력 준비 확인
: 프린터로 데이터를 보내기 위해, FGO 플래그가 0인지 확인한다. ➡️ FGO가 0일 때만 AC에서 OUTR로 데이터를 보낼 수 있다.
2. AC에서 OUTR로 데이터 전송
: FGO가 0이면 AC의 하위 8비트 데이터를 OUTR로 옮긴다. 이렇게 하여 AC에 있는 데이터가 OUTR로 전달되고, 이제 프린터로 전송될 준비가 된 것이다.
3. 출력 진행
: 프린터가 OUTR에 있는 데이터를 받아 출력을 시작한다.
4. FGO 플래그 설정
: 프린터가 데이터를 받으면, FGO를 1로 설정해 AC에서 새로운 데이터를 OUTR로 보낼 수 있도록 준비 상태로 만들어.
- FGO가 0일 때 ➡️ AC에서 OUTR로 데이터를 보낼 수 없는 상태 / 데이터 전송 중 (프린터가 데이터를 출력 중이어서 새로운 데이터를 받을 수 없는 상태)
- FGO가 1일 때 ➡️ AC에서 OUTR로 데이터를 보낼 수 있는 상태 / 프린터가 새로운 입력을 받을 준비 중''
.
2. Interrupt Cycle을 이용한 방식 (효율적인 방식)
❓ R 이란?
: 컴퓨터가 현재 일반적인 명령어를 수행하고 있는지, 아니면 인터럽트를 처리 중인지를 결정하는 역할을 한다.
❓ Interrupt란?
: 다른 작업을 하다가 키보드 입력이나 프린트 출력이 생기면 하던 일을 멈추고 키보드 입력이나 프린트 출력을 하는 것
Instruction cycle에서...
- 모든 첫 번째 사이클은 R = 0으로 두고 인스트럭션 사이클(Instruction Cycle)로 들어감
- 여기서 R = 0 상태는 일반적인 명령어를 수행하고 있는 상태를 의미한다.
- 인스트럭션 사이클 내부에서 IEN(Interrupt Enable)이 1인지 확인
- IEN이 1이면 인터럽트를 허용하는 상태로, 긴급 상황(키보드 입력 또는 프린터 출력)이 발생할 수 있다고 판단한다.
- IEN이 0이라면 인터럽트를 무시하고 일반 작업을 계속 진행한다.
- IEN이 1인 경우, FGI와 FGO 상태를 확인
- FGI = 1이면 키보드 입력이 완료된 상태이고, FGO = 1이면 프린터가 출력 준비가 완료된 상태이다.
- 따라서 (IEN == 1) && (FGI == 1 || FGO == 1) 조건이 참이면, 컴퓨터는 이를 긴급 상황(인터럽트 발생)으로 인식한다.
- 인터럽트 발생 시 R을 1로 설정하여 R 분기문으로 돌아감
- 이제 R = 1이 되었으므로 인터럽트 사이클(Interrupt Cycle)로 전환되고, 컴퓨터는 긴급 상황을 처리하기 위해 현재 작업을 잠시 멈추고 인터럽트 요청을 처리한다.
Interrupt cycle에서...
- 돌아올 주소를 저장
- PC(명령어 주소값)을 M[0](메모리 0번지)에 저장한다.
- 1 번지에 있는 다음 명령어를 실행한다.
- 기존의 명령어를 메모리에 저장하고 다음으로 바로 실행해야할 명령어(키보드 입력 또는 프린터 출력)를 긴급으로 처리해준다.
- IEN(Interrupt Enable)을 0으로, R을 0으로 초기화
- 긴급 상황을 처리할 때까지 IEN과 R을 모두 0으로 만들어 긴급상황이 중첩되지 않게 한다.
Input-output instructions(명령어) - 1 1 1 1 x x x x일 때 ⭐️
Demonstration of the interrupt cycle
1. 다음 명령어(PC = 256)을 M[0]에 저장
2. PC ← 1(1번지 명령어)으로 interrupt 처리 시작(키보드 입력이나 프린터 출력 등 긴급한 작업을 수행)
3. interrupt 처리 후 "1 BUN 0"으로 일반 명령어로 복귀(M[0]에 저장되어 있던 PC=256 명령어를 수행)
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
5.9 Design of basic computer (1) | 2024.10.27 |
---|---|
5.8 Complete computer description (0) | 2024.10.27 |
5.6 Memory reference instructions (0) | 2024.10.27 |
5.5 Instruction cycle + Register reference instruction (1) | 2024.10.27 |
5.4 Timing and control (0) | 2024.10.27 |