ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4장. CPU
    CS/컴퓨터구조 2023. 8. 26. 16:19

     

    CPU를 구성하는 주요 부품 3가지: ALU, 제어 장치, 레지스터

     

    4-1. ALU와 제어 장치

    ALU

    ALU는 명령어대로 산술/논리 연산을 수행하는 부품.

    출처:  https://ko.wikipedia.org/wiki/산술_논리_장치

    제어 장치로부터 제어신호를 통해 수행해야 할 명령어(연산) + 레지스터로부터 피연산자를 받아들임. 두 정보를 조합하여 연산을 수행.

    연산 결과 또는 연산 결과에 대한 주소와 플래그를 내보냄. 이 때, 연산 결과와 플래그는 속도 고려를 위해 레지스터에 임시 저장됨. (메모리에 저장하여 CPU와 메모리 사이를 왔다 갔다 하는 것보단 레지스터에 저장하여 CPU 내부에서 왔다 갔다 하는 것 이 더 빠르므로)

    플래그: 연산 결과에 대한 부가적인 상태 정보

    • 부호 플래그: 연산 결과의 음수/양수 정보를 의미. 1-음수, 0-양수
    • 제로 플래그: 연산 결과가 0인지 아닌지 의미. 1-0, 0-0 아님.
    • 오버플로우 플래그: ALU의 연산 결과가 그 결과를 저장할 레지스터 크기보다 큰 경우를 오버플로우라고 함. ALU의 연산에 오버플로우 발생여부를 의미. 1-발생, 0-미발생
    • 캐리 플래그: 연산 결과 올림수, 빌림수 발생 여부를 의미. 1-발생, 0-미발생
    • 인터럽트 플래그: 인터럽트 가능 여부를 의미. 1-인터럽트 가능한 상태, 0-인터럽트 불가능한 상태
    • 슈퍼바이저 플래그: 커널 모드와 사용자 모드를 의미. 1-커널모드, 2-사용자모드

     

    제어 장치

    제어 장치는 명령어를 해석하여 다른 부품이 수행해야 할 동작을 제어 신호를 보내 알려주는 장치.

    받아 들이는 정보

    • 클럭: 컴퓨터의 모든 부품이 맞춰 움직이는 시간 단위.
    • 명령어 레지스터로부터 해석해야 할 명령어
    • 플래그 레지스터로부터 플래그
    • CPU 외부로부터 오는 제어 신호: 제어 신호는 제어 장치 뿐만 아니라 입출력 장치에서도 생성할 수 있다. 이 때의 제어신 호는 제어 버스를 통해 제어 장치로 전달된다.

     

    내보내는 정보

    • To. CPU내부(ALU, 레지스터)레지스터에게는 레지스터 간 데이터 이동이나 레지스터에 저장된 명령어를 해석을 지시.
    • ALU에게는 수행해야 할 명령어(연산자) 지시.
    • To. CPU 외부(메모리, 보조기억장치를 포함한 입출력장치)입출력장치로 데이터를 읽어 오거나 쓸 때 입출력장치 제어 신호 전송
    • 메모리로부터 데이터를 읽거나 쓸 때 메모리 제어 신호 전송

     

     

    4-2. 레지스터

    주요 레지스터 8 가지

    프로그램 카운터 Program Counter → PC = 명령어 포인터 Instructor Pointer → IP

    다음 번에 메모리에서 가져올 명령어의 유효 주소를 저장하는 레지스터. 현재 저장된 유효 주소로부터 값을 읽어 오는 동작이 끝나면 유효 주소 값을 증가하여 다음 수행해야 할 명령어의 위치를 가리킨다.

    cf) 일반적인 상황에서 프로그램 카운터는 순차적으로 증가하지만, 명령어 중 특정 메모리 주소로 이동을 의미하는 명령어가 실행되면 PC에 저장된 값은 순차적이지 않은, 특정 주소 값으로 변경된다.

    메모리 주소 레지스터 Memory Adressing Register → MAR

    메모리 상의 유효 주소를 저장하는 레지스터. CPU는 읽어 들일 데이터가 위치한 메모리 주소를 주소 버스로 보내야 함. 이 때 주소 버스로 보내질 메모리 주소는 무조건 MAR에서 가져와야 함.

    ⇒ 즉, PC에 저장되어 있던 유효 주소 값 증가 → PC의 값을 MAR에 저장 → MAR의 값을 주소 버스로 전송.

    메모리 버퍼 레지스터 Memory Bugger Register → MBR or Memory Data Register → MDR

    메모리에서 읽어 왔거나 쓸 예정인 모든 값(명령어와 데이터 전부 포함)을 저장하는 레지스터. 즉 데이터 버스를 통해 가져왔거나 보낼 모든 값은 무조건 MBR에 저장된다. 만약 MBR에 저장된 값이 명령어라면 PC에 저장된 값이 증가한다.

    명령어 레지스터 Instruction Register → IR

    메모리에서 가져온 값(MBR에 저장되어 있다.) 중 명령어에 해당하는 값을 임시 저장하는 레지스터. 제어 장치는 IR로부터 명령어를 가져와 해석 후 제어 신호를 보낸다.

    범용 레지스터

    데이터나 유효 주소를 모두 저장할 수 있는 레지스터. CPU 안에 여러 개가 존재한다.

    플래그 레지스터

    플래그를 저장하는 레지스터

    스택 포인터

    스택의 최상단 위치를 저장하는 레지스터. 참고로 스택의 위치나 규모 등은 메모리 안의 특정 영역에 미리 규정되어 있음.

    베이스 레지스터

    기준 주소 역할을 할 주소 값이 저장되는 레지스터

     

    레지스터를 이용한 주소 지정 방식

    스택 주소 지정 방식

    데이터의 위치를 스택 포인터에서 찾는 방식

    변위 주소 지정 방식

    명령어에 레지스터 필드를 추가하여 특정 레지스터에 저장된 값에 오퍼랜드 필드의 값을 더하여 유효 주소를 얻는 방식

    대표적인 방식 2가지 = 레지스터 필드에 어떤 레지스터를 사용하느냐로 결정

    1) 프로그램 카운터 사용 ex) 다음에 읽어 올 명령어의 주소보다 3번지 앞(=오퍼랜드 필드에 ‘-3’)에 있는 위치의 값을 읽어오시오.

    2) 베이스 레지스터 사용: 이 때 오퍼랜드 필드의 값은 기준 주소로부터 얼만큼 떨어진 곳인지를 의미.

     

    4-3 명령어 사이클과 인터럽트

    명령어 사이클 Instruction cycle

    CPU가 명령어 처리를 위해 수행하는 사이클

    명령어 인출 사이클, 명령어 실행 사이클, 간접 사이클, 인터럽트 사이클로 구성된다.

    명령어 인출 사이클 fetch cycle

    프로그램 카운터(PC)가 가리키는 유효 주소에 있는 명령어를 명령어 레지스터(IR)로 가져오는 과정

    명령어 실행 사이클 execution cycle

    제어 장치가 IR의 명령어를 해석하고 제어 신호를 ALU에 보내 명령어 처리를 지시하는 과정

    간접 사이클 inderect cycle

    명령어 인출을 하기 위해 메모리에 한 번 더 접근이 필요한 경우 = 간접 주소 지정 방식이 사용된 경우

    한 번 더 메모리에 접근하여 명령어를 인출하는 사이클

    인터럽트 사이클 interrupt cycle

    CPU가 명령어 실행 도중 내/외부에서 발생한 인터럽트를 처리하는 사이클

    출처:  https://www.geeksforgeeks.org/different-instruction-cycles/

     

    인터럽트

    인터럽트 Intterupt

    CPU의 정상적인 수행을 방해하는 신호.

    책에서는 크게 동기 인터럽트와 비동기 인터럽트로 나누고 있다.

    동기 인터럽트는 CPU에 의해 발생한 인터럽트. 예외exeption 이라고도 부름.

    비동기 하드웨어 인터럽트라고도 하며, 주로 입출력장치에서 발생한다. (입출력장치가 제 역할을 수행하는 동안 CPU는 다른 작업을 처리함.(CPU의 활용 빈도 증가 효과) 입출력장치는 자신의 작업이 완료되면 CPU로 인터럽트를 보낸다.(= 인터럽트 요청 신호 발생) CPU는 인터럽트 사이클 동안 인터럽트를 처리한다.)

     

    하드웨어 인터럽트를 처리하는 과정(인터럽트 사이클)

    1) 인터럽트 요청 신호 발생(인터럽트 요청을 발생한 대상이 인터럽트 벡터도 데이터 버스를 통해 함께 보냄..)

    인터럽트 벡터란 인터럽트 서비스 루틴을 식별하기 위한 정보로 CPU가 실행해야 하는 인터럽트 서비스 루틴의 주소를 갖고 있다.

     

    2) CPU는 원래 실행 사이클 종료 후 인터럽트의 발생 여부를 확인한다. 인터럽트 요청 신호가 감지되면 CPU는 인터럽트 플래그(4-1.에서 첫 등장)로 가서 현재 상태가 인터럽트 요청을 받아도 되는 상태인지(=인터럽트를 처리해도 되는 상태인지)를 파악.

    cf) 인터럽트 플래그가 0이어도, 무시할 수 없는 인터럽트 요청도 존재함.

     

    3) 인터럽트 처리가 가능한 상태이면 현재 처리 중이었던 모든 작업을 스택에 백업

     

    4) 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴Interupt Service Routine → ISR (=인터럽트 핸들러)의 유효 주소로 접근

    인터럽트 서비스 루틴이란 인터럽트의 종류에 따라 처리 방식이 정의되어 있는 프로그램이다. 메모리에 여러 개의 인터럽트 서비스 루틴이 저장되어 있다. 인터럽트 서비스 루틴을 실행하는 과정은 일반 명령어를 처리하듯 프로그램 카운터, 레지스터, 메모리를 사용한다.

     

    5)인터럽트 서비스 루틴을 순서대로 실행

     

    6) 인터럽트 서비스 루틴이 종료되면 인터럽트 발생 전 수행하고 있었던 작업 재개.(스택에 가장 마지막에 쌓인 작업부터 시작하면 됨.)

     

    cf) 예외의 종류

    폴트: 예외 처리 후 CPU는 처리하던 명령어부터 다시 실행한다. ex)

    트랩: 예외 처리 후 CPU는 처리하던 명령어의 다음 명령어부터 실행해야 한다. ex) 디버깅

    중단: CPU가 실행 중인 프로그램을 강제 중단할 정도의 심각한 오류 발견 시 발생

    소프트웨어 인터럽트: 시스템 호출 시 발생. 자세한 내용은 9장에서

     

    * 본 글의 일부 설명과 그림의 출처는 인프런 강의 '혼자-공부하는-컴퓨터구조-운영체제'와 동명의 서적 입니다.

    https://www.yes24.com/Product/Goods/111378840

     

    혼자 공부하는 컴퓨터 구조+운영체제 - 예스24

    혼자 해도 충분합니다! 1:1 과외하듯 배우는 IT 지식 입문서이 책은 독학으로 컴퓨터 구조와 운영체제를 배우는 입문자가 ‘꼭 필요한 내용을 제대로 학습’할 수 있도록 구성했다. 뭘 모르는지

    www.yes24.com

     

    ===========================================================

    스택이라는 자료 구조의 동작 원리나 알고 있었지 이것이 어디에서 어떻게 사용되고 있는지는 잘 몰랐는데 이제야 명쾌해졌다

    'CS > 컴퓨터구조' 카테고리의 다른 글

    6장. 메모리와 캐시메모리  (0) 2023.08.31
    5장. CPU 성능 향상 기법  (0) 2023.08.26
    3장. 명령어  (0) 2023.08.24
    [컴퓨터구조] 2장. 데이터  (0) 2023.08.23
    [컴퓨터구조] 1. 컴퓨터 구조 시작하기  (0) 2023.08.22

    댓글

Designed by Tistory.