CPU작동원리
ALU와 제어장치
ALU
ALU : 레지스터를 통해 피연산자를 받아들이고 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들이고 산술연산 논리연산들 다양한 연산을 수행합니다.
이후 결과값,플래그를 레지스터,플래그 레지스터에 저장합니다 (빠른속도를 위해)
플래그란? : 이진법에서 배웠던 양수와 음수를 구분하던 그 플래그다!
대표적인 플래그
플래그 종류 | 의미 | 사용 예시 |
부호 플래그 | 연산 결과의 부호(+,-)를 나타낸다. | 1 : 음수 0 : 양수 |
제로 플래그 | 연산 결과가 0인지 여부를 나타낸다. | 1 : 연산결과는 0 0 : 0이 아님 |
캐리 플래그 | 올림수나 빌림수가 발생하는지를 나타낸다. | 1 : 올림수나 빌림수 발생 0 : 발생X |
오버플로우 플래그 | 오버플로우가 발생했는지 나타낸다. | 1 : 오버플로우 발생 0 : 발생X |
인터럽트 플래그 | 인터럽트가 가능한지 나타낸다. | 1 : 인터럽트 가능함 0 : 인터럽트 불가능함. |
슈퍼바이저 플래그 | 커널모드/사용자모드 실행중인지 나타낸다. | 1 : 커널모드 0 : 사용자 모드 |
부호 : 음수 , 제로 : 연산값 0이 아님 , 캐리플래그 : 올림수 X , 오버플로우 : 없음 , 인터럽트 : 불가능 , 슈퍼바이저 : 사용자 모드임을 알려준다.
제어장치
제어장치 : 제어신호를 보내고 명령어를 해석하는 부품
제어신호 : 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기신호
- 제어장치는 클럭 신호를 받아들입니다. (클럭이란 컴퓨터를 조작할 수 있는 기본 시간 단위)
- 제어장치는 해석해야할 명령어를 받아들입니다.
-해석할 명령어는 명령어 레지스터 으로부터 가져온다. - 제어장치는 플래그 레지스터에서 플러그 값들을 가져온다.
- 제어장치는 제어 버스로 전달된 제어신호를 받아들인다.
즉 제어장치는 클럭,현재 수행할 명령어 , 플래그, 제어신호를 받아들입니다.
제어장치는 CPU 내외부로 제어신호를 내보내며
내부 - ALU(연산을 지시), 레지스터( 데이터 이동 및 해석을 위해)
외부 - 메모리(저장 값을 읽거나,새로운 값 저장), 입출력장치(입출력 장치의 값을 저장 또는 읽기 위해)
레지스터
반드시 알아야 할 레지스터
프로그램 카운터 | 메모리에서 읽어 들일 명령어의 주소를 저장(변위 주소 지정 방식) |
명령어 레지스터 | 메모리에서 읽어 들인 명령어를 저장하는 레지스터 |
메모리 주소 레지스터 | 메모리의 주소를 저장하는 레지스터(주소 버스로 내보낼 주소값만 저장한다.) |
메모리 버퍼 레지스터 | 메모리와 주고받을 값을 저장하는 레지스터(데이터 버스로 주고받을 값만 저장한다.) |
범용 레지스터 | 다양한 상황에서 자유롭게 사용할 수 있는 레지스터(데이터와 주소를 모두 저장할 수 있다.) |
플래그 레지스터 | ALU연산 결과에 따른 플래그를 저장하는 레지스터 |
스택 포인터 | 스택에 마지막으로 저장된 값의 위치를 저장하는 레지스터 |
베이스 레지스터 | 기준 주소로 오퍼랜드 값을 더하여 유효 주소를 얻는다. |
메모리에 저장된 프로그램을 실행하는 과정
- 프로그램 카운터에 실행할 명령어의 위치가 저장된다.
- 메모리 주소 레지스터에 프로그램 카운터 저장된 위치가 저장된다.
- 제어 버스를 통해 제어 신호가, 주소 버스를 통해 주소 레지스터 값이 메모리로 이동한다.
- 데이터 버스를 통해 메모리에 저장된 값은 메모리 버퍼 레지스터로 전달되고 프로그램 카운터를 증가시킨다
- 메모리 버퍼 레지스터에 저장된 값이 명령어 레지스터로 이동한다.
- 제어장치에서 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킨다.
- 프로그램 카운터 값이 증가하여 현재 명령어 처리가 끝나면 CPU는 다음 명령어를 읽어들인다.
※순차실행이 끊기는 경우 : 명령어 중 JUMP,CONDITIONAL JUMP,CALL ,RET과 같이 특정 메모리 주소로 이동하는 명령어가 실행되면 차례로 실행되지 않습니다. 마찬가지로 인터럽트가 발생해도 끊어집니다.
특정레지스터를 이용한 주소지정방식
스택 주소 지정 방식
스택과 스택 포인터를 이용하여 주소를 지정하는 방식
마지막으로 저장되어 있는 값의 위치를 스택 포인터가 가리키고 새로운 데이터가 추가되면 그 위에 쌓이고, 스택 포인터에 저장된 주소도 마지막에 쌓인 데이터의 주소로 바뀌게 된다.
※스택은 메모리안에 스택처럼 사용할 영역이 정해져있음 - 스택영역)
변위 주소 지정 방식
오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식 - 2가지 방식이 있음
- 상대 주소 지정 방식 - 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식
-if문과 유사하게 모든 코드를 실행하는 것이 아닌 분기하여 특정 주소의 코드를 실핼할때 사용함 - 베이스 레지스터 주소 지정 방식 - 베이스 레지스터와 오퍼랜드의 값을 더하는 방식
명령어 사이클과 인터럽트
명령어 사이클
명령어 사이클 - 프로그램 속 각각의 명령어들이 반복적으로 실행되는 주기
인출 사이클 - 메모리에 있는 명령어를 CPU로 가져오는 단계
실행 사이클 - 가져온 명령어를 실행하는 단계
간접 사이클 - 명령어를 실행하기 위해 메모리 접근이 필요해 메모리에 한 번 더 접근하는 단계
인터럽트
인터럽트 - CPU 작업을 방해하는 신호
동기 인터럽트(예외) - CPU에 의해 발생하는 인터럽트
예상치 못한 상황에 마주쳤을 때 발생 ( 프로그래밍상 오류를 마주쳤을때)
비동기 인터럽트 (하드웨어 인터럽트) - 입출력장치에 의해 발생하는 인터럽트
알림 역할 - 입력알림 , 입출력 완료알림
하드웨어 인터럽트
CPU가 효율적으로 명령어를 처리하기 위해 사용 - 입출력 작업이 느리기 때문에 CPU는 확인만 하고 다른작업함
하드웨어 인터럽트 처리 순서
- 입출력장치 CPU에 인터럽트 요청 신호 보냄
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부 확인
- CPU 인터럽트 요청 확인, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인
- 받아들일 수 있다면 CPU 지금까지의 작업 백업
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업 복구, 실행 재개
인터럽트 요청 신호: 인터럽트하기 전 가능한지 CPU에 물어보는 것
인터럽트 플래그: 요청 신호를 받아들일지 무시할지 결정하는 비트
인터럽트 벡터: 인터럽트 서비스 루틴을 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램
'컴퓨터 사이언스 > 컴퓨터 구조 & 운영체제' 카테고리의 다른 글
[혼공컴운] 컴퓨터 구조 2주차 미션 (1) | 2024.01.15 |
---|---|
[혼공컴운] 컴퓨터 구조 chapter 5 (1) | 2024.01.15 |
[혼공컴운] 컴퓨터 구조 1주차 미션 (1) | 2024.01.07 |
[혼공컴운] 컴퓨터 구조 chapter 3 (0) | 2024.01.07 |
[혼공컴운] 컴퓨터 구조 chapter 2 (2) | 2024.01.06 |