[혼공컴운_2주]Chapter4 ALU와 제어장치

study_record·2024년 1월 9일
0

혼공컴운

목록 보기
4/17

CPU구성

  • ALU : 계산담당
  • 제어장치 : 명령어를 읽고 해석하는 장치
  • 레지스터 : 작은 임시저장 장치

ALU

  • 레지스터를 통해서 피연산자를 받음
  • 제어장치를 통해서 제어신호를 받음
  • 레지스터에 ALU결과값을 우선저장
  • 플래그 레지스터에 플래그(추가정보)를 저장시킴

플래그

  • 연산결과에 대해 기억해야 하는 상태 정보
    1) 부호플래그 : 연산결과 음수, 양수 정보
    2) 제로플래그 : 연산결과 0인지 아닌지 알려줌
    3) 캐리플래그 : 연산결과 올림수, 빌림수가 발생했는지 나타냄
    4) 오버플로우 플래그 : 연산결과가 레지스터보다 큰지 아닌지 알려줌
    5) 인터럽트 플래그 : 인터럽트가 가능한지 알려줌
    6) 슈버바이저 플래그 : 커널모드인지 사용자모드인지 알려줌

제어장치

  • 제어신호를 보내고 명령어 해석하는 부분

  • 제어장치가 받는 정보
    1. 클럭신호를 받아들임
    클럭이란? 컴퓨터 부품의 시간단위
    2. 명령어 레지스터에 저장된 명령어를 받아들임
    3. 플래그 레지스터의 플래그 값을 받아들임
    4. 제어버스를 통해 외부로 전달된 제어신호를 받아들임

  • 제어장치가 내보내는 정보
    1. CPU외부에 전달하는 신호 = 제어버스로 제어신호를 내보낸다
    - 메모리에 저장된값을 읽거나 새로운 값을 사용하고 싶을때 메모리에 신호전달
    - 입출력장치의 값을 읽거나 새로운 값을 쓰고싶을때 입출력장치(보조기억장치)에 신호 전달
    2. CPU내부에 전달하는 신호
    - ALU에 전달하는 제어신호(수행할 연산 지시를 위해)
    - 레지스터애 전달하는 제어신호(레지스터간 데이터이동 또는 레지스터에 저징된 명령어 해석)

레지스터 종류

1. 프로그램 카운터 PC (program counter)

  • 메모리에서 읽을 명령어의 주소
  • 명령어포인터(IP)와 같은 의미
  • 변위주소 지정방식에 사용

2. 명령어 레지스터 IR (instruction register)

  • 메모리에서 읽어 들인 명령어를 저장하는 레지스터
  • 명령어 레지스터의 명령어를 제어장치가 받아서 해석하고 제어신호를 보냄

3. 메모리 주소 레지스터 MAR (memory address register)

  • 메모리의 주소를 저장함
  • CPU가 읽고자하는 주소값을 주소버스로 보낼때 메모리 주소 레지스터를 거쳐서 감

4. 메모리 버퍼 레지스터 MBR (memory buffer register)

  • 메모리와 주고받을 값을 저장 함
  • 데이터 버스로 주고받을 값이 메모리 버퍼 레지스터를 거쳐서 감

5. 플래그 레지스터

  • ALU 결과에 따른 플래그를 저장함

6. 범용 레지스터

  • 다양한 상황에서 자유롭게 사용되는 레지스터
  • 데이터, 주소 모두 저장함

7. 스택 포인터

  • 스택주소 지정방식에 사용됨

8. 베이스 레지스터

  • 변위주소 지정방식에 사용됨

레지스터 작동 방식(=인출 사이클)

스택주소 지정방식

  • 스택과 스택포인터를 이용한 주소 지정방식
  • 스택포인터: 스택의 마지막으로 저장한 값의 위치를 저장한 레지스터
  • 스택의 위치 : 메모리안에 스택 영역이 정해져 있음

변위주소 지정방식

  • 오퍼랜드 필드 값과 특정 레지스터의 값을 더해서 유효주소를 얻어내는 주소 지정방식
  • 변위주소 지정방식 명령어 구성 = 연산코드 필드 + 레지스터 필드 + 오퍼랜드 필드
  • 지정방식이 두개 →상대주소 지정방식, 베이스 레지스터 지정방식
    • 상대주소 지정방식: 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식. 명령어주소 이전, 이후 주소 지정이 가능함
    • 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터의 값을 더하여 유효주소를 얻는 방식. 기준주소에서 얼마나 떨어졌는가를 의미함

명령어사이클

  • 프로그램 명령들의 일정한 주기
    1. 첫번째 인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
    2. 두번째 실행 사이클 : CPU로 가져온 명령어를 실행하는 단계. 명령어 레지스터에 담긴 값을 해석하고 제어신호를 발생시킴
    3. 간접 사이클 : 메모리의 접근이 더 필요한 경우 사용
    4. 인터럽트 사이클 : 인터럽트가 발생한 경우 사용

인터럽트

  • CPU의 작업을 방해하는 신호
  • 종류
    • 동기 인터럽트(=예외) : CPU에 의해 발생. CPU가 명령어를 수행하다 오류나 예외상황이 생겼을때 발생함
    • 비동기 인터럽트(=하드웨어 인터럽트) : 입출력장치에 의해 발생. 키보드나 마우스가 어떤 입력을 받아들였을때 처리하기위해 CPU에 입력 알림을 발생함
      • 막을수 있는 인터럽트
      • 막을수 없는 인터럽트

하드웨어 인터럽트 처리 순서

  1. 입출력장치가 CPU에 인터럽트 요청 신호를 보냄
    • 인터럽트 요청 신호 : CPU의 작업에 끼어드는 인터럽트에 대한 요청
  2. CPU는 실행사이클이 끝내고 명령어 인출전에 인터럽트 여부를 확인함
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 인터럽트를 받아들수 있는지 확인함
    • 인터럽트 플래그 : 하드웨어 인터랩트를 받아들일지 무시할지 결정하는 플래그
  4. 인터럽트를 받아들일수 있으면 CPU의 지금 까지 작업을 백업함
  5. CPU는 인터럽트 백터를 참고해 인터럽트 서비스 루틴 실행
    • 인터럽트 서비스 루틴(=인터럽트 핸들러) : 인터럽트를 처리하기 위한 프로그램.인터럽트를 어떻게 처리하고 작동해야할지에 대한 정보로 이루어진 프로그램
    • 인터럽트 백터 : 인터럽트 서비스 루틴의 시작주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
  6. 인터럽트 서비스 루틴을 종료하고 백업 작업에 돌아가서 실행함

    📚인터럽트 과정 정리해보면
    CPU가 인터럽트를 처리한다
    인터럽트 서비스루틴을 실행하고 원래 수행하던 작업으로 되돌아 온다
    인터럽트 서비스루틴을 실행하기 위해 인터럽트 백터를 통해 시작 주소를 알아낸다

예외(=동기 인터럽트)의 종류

  1. 폴트(fault)
    • 예외 처리후 CPU가 본래작업으로 복귀했을때 예외가 발생한 명령어부터 실행하는것
  2. 트랩(trap)
    • 예외 처리후 CPU가 본래작업으로 복귀했을때 예외가 발생한 명령어의 다음 명령어부터 실행하는것
    • 디버깅을 할때 사용됨
  3. 중단(abort)
    • CPU가 실행중인 프로그램을 강제 중단해야하는 심각한 요류를 발견했을떄 발생
  4. 소프트웨어 인터럽트
    • 시스템 호출 발생시 예외

마무리 문제 📌미션



0개의 댓글