
[ "혼자 공부하는 컴퓨터구조 + 운영체제" ] 공부한 후 정리한 내용 입니다
1. ALU
- ALU는 CPU 내부 "계산기" 역할을 담당하는 요소로, 산술 연산과 논리 연산을 수행한다.
(1) 받아들이는 정보 / 내보내는 정보
- ALU가 계산을 수행하기 위해 두 가지 정보가 필요하다.

[ 입력 ]
- 피연산자(Operand)
- → 레지스터로부터 전달
- 제어 신호(Control Signal)
- → 제어 장치로부터 전달
- → 어떤 연산을 수행할지 지정
[ 출력 ]
- 연산 결과
- → 다시 레지스터에 저장
- 플래그 정보
- → 연산 결과에 대한 부가 정보를 플래그 레지스터에 저장
(2) 플래그(Flag)란?
플래그는 연산 결과의 상태를 나타내는 정보 → 플래그 레지스터라는 특수한 레지스터에 저장된다.

[ 플래그 종류 ]
부호 플래그 : 연산 결과 부호
제로 플래그 : 연산 결과가 0인지 여부
캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는지 여부
오버플로우 플래그 : 오버플로우 발생 여부( 연산 결과가 저장할 레지스터에 비해 클 경우 )
인터럽트 플래그 : 인터럽트가 가능한지 여부 ( 비활성화 시 인터럽트 요청을 무시함 )
슈퍼바이저 플래그 : 현재 실행 모드 ( 커널 모드로 실행 중인지, 사용자 모드 실행인지 )
2. 제어장치
- 제어 장치는 CPU에서 지휘자 역할을 하는 요소로 → "명령어"를 해석하고 수행을 제어한다.
(1) 받아들이는 정보 / 내보내는 정보
- 제어 장치는 여러 구성 요소로부터 정보를 받아 제어 신호를 생성하고 전달한다.

[ 입력 ]
- 클럭 : 모든 명령어는 클럭 신호에 맞춰 순차적으로 수행
- 명령어 레지스터 : 현재 실행할 명령어를 저장 → 제어 장치는 해당 명령어를 읽고 해석
- 플래그 레지스터 : ALU 연산 결과에 대한 상태 정보를 제공
- 제어 버스 : 컴퓨터 각 부품들과 제어 신호를 주고 받는 통로
[ 출력 ]
- 제어 신호 ( 제어 장치가 생성하는 신호로 다음과 같은 동작을 지시 )
- ALU가 수행할 연산 종류
- 레지스터에 값 저장 여부
- 메모리 읽기 / 쓰기 제어
- 입출력 장치 동작 제어
(2) 동작 흐름 요약
- 클럭 신호에 맞춰 명령 수행 시작
- 명령어 레지스터에 저장된 명령어 해석
- 플래그 레지스터의 상태를 참고
- 필요한 제어 신호를 생성
- 제어 버스를 통해 각 부품에 전달
3. 레지스터
- CPU 내부 작은 임시 저장 장치로 → 명령어 실행 과정에서 "데이터 ·주소·상태 정보"를 임시로 저장한다.
- CPU 내부에는 역할에 따라 다양한 레지스터가 존재한다.
(1) 주요 레지스터 종류
1. 프로그램 카운터 : 다음에 실행할 명령어의 메모리 주소를 저장
2. 명렁어 레지스터 : 방금 메모리에서 읽어온 명령어를 저장 → 제어 장치가 해당 명령어를 해석
3. 메모리 주소 레지스터 : 접근할 메모리 주소를 저장 → 메모리 읽기/쓰기 대상 주소 지정
4. 메모리 버퍼 레지스터 : 메모리와 주고받는 데이터 또는 명령어를 저장 ( 메모리 ↔ CPU 간 데이터 이동 시 사용 )
5. 플래그 레지스터 : ALU 연산 결과에 대한 부가 정보 저
6. 범용 레지스터 : 다양한 상황에서 자유롭게 사용 ( 프로그램 실행 중 가장 빈번하게 사용 )
7. 스택 포인터 : 특별한 주소지정에 사용 → 스택 포인터를 이용한 주소 지정 방식, 맨 꼭데기

8. 베이스 레지스터 : 특별한 주소지정에 사용(변이 주소 지정 방식, 오퍼랜드 필드의 값과 레지스터 값을 더하여 유효 주소 얻기)

- 상대 주소 지정 방식 : 오퍼랜드 값 + 프로그램 카운터의 값을 더하여 유효 주소 얻는 방법
- 베이스 레지스터 주소 지정 방식 : 오퍼랜드 값 + 베이스 레지스터 값을 더해 유효 주소 얻는 방법
(2) 실행 흐름 정리
- 프로그램 카운터는 기본적으로 자동 증가
- 순차 실행이 원칙
- 하지만 다음 경우 흐름이 변경됨
- 분기 / 점프 명령 실행
- 인터럽트 발생
- 함수 호출 및 복귀
4. 명령어 사이클과 인터럽트
- cpu는 프로그램에 포함된 명령어들을 사이클에 따라 반복적으로 실행한다. → 이 실행 흐름을 "명령어 사이클" 이라고 함
(1) 명령어 사이클 구성
- 인출 사이클 : 메모리에 있는 명령어를 cpu로 가지고옴 ( 프로그램 카운트 주소의 명령어 읽음 → 명령어 레지스터에 저장 )
- 실행 사이클 : 메모리로 부터 가지고온 명령어를 수행하는 단계
- 간접 사이클 : 명령어 실행을 위해 추가적인 메모리 접근이 필요한 경우 ( 사용할 데이터의 주소를 다시 메모리에서 가져옴 )
(2) 인터럽트
- CPU의 정상적인 실행 흐름을 잠시 중단시키고 → 우선 처리해야 할 작업을 수행하게 하는 메커니즘
[ 인터럽트 종류 ]

- 동기 인터럽트 : CPU가 예기치 못한 상황에 접할 때
- 비동기 인터럽트 : 주로 입출력장치에 의해 발생 → 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용
[ 인터럽트가 필요한 이유 ]
- 인터럽트가 없다면 CPU는 하드웨어 완료 여부를 주기적으로 확인해야됨
- 인터럽트가 존재시 CPU는 하드웨어 작업동안 다른일을 할수있다 → 필요할 떄만 인터럽트를 처리!
[ 비동기 인터럽트 처리 순서 ]
- 입출력 장치는 CPU에 인터럽트 요청 신호 보냄
- CPU는 실행 사이클 마무리 후 명령어 인출전 항상 인터럽트 여부를 확인
- CPU는 인터럽트 요청을 확인 후 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인
- 인터럽트 받아들일 수 있다면 CPU는 지금 까지 작업을 백업
- CPU는 인터럽트 벡터를 참조해 인터럽트 서비스 루틴(프로그램) 실행
- 인터럽트 서비스 루틴 종료시 (4)에서 백업한 작업을 복구해 실행 재개
인터럽트 벡터 : 인터럽트를 구분하기 위한 정보( cpu가 해당 인터럽트 주소의 시작점을 알수있음 )
인터럽트 발생 시 → 기존에 실행정보가 저장된 각각의 레지스터 값들을 스택영역에 저장후 인터럽트 서비스 실행

→ 인터럽트 서비스 루틴 종료시 다시 스택에서 백업을 한 후 실행
'cs기초 지식 정리 > 컴퓨터구조, 운영체제' 카테고리의 다른 글
| 보조기억장치 (0) | 2024.03.27 |
|---|---|
| 메모리의 주소 공간(논리,물리 주소), 캐시 메모리 (0) | 2024.03.26 |
| 명령어 집합 구조(CISC, RISC), RAM의 특성과 종류(메모리) (0) | 2024.03.21 |
| 빠른 cpu 설계 기법, 명령어 병렬 처리 기법 (0) | 2024.03.20 |
| 컴퓨터 구조, 운영체제 (0) | 2023.10.31 |