과제
p. 125의 확인 문제 2번 (설명에 맞는 레지스터를 보기에서 찾아 빈칸을 채워보세요.)
- 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
- 프로그램 카운터 : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
- 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터
- 명령어 레지스터 : 해석할 명령어를 저장하는 레지스터
p. 155의 확인 문제 4번 : 빈칸에 알맞은 용어를 써 넣으세요.
- 코어
Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
- 아래에 공부내용 정리에 포함 :)
CPU의 작동
CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 장치.
내부에는 내부에 계산을 담당하는 ALU, 명령어를 읽어 들이고 해석하는 제어장치, 작은 임시 저장 장치인 레지스터로 구성되어 있다.
ALU
레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다. ALU는 받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행한다.
→ 결괏값을 레지스터에 저장하고, 플래그를 플레그 레지스터에 저장한다.
(메모리에 접근하는 것보다 레지스터에 접근하는 것이 빠르기 때문에 바로 메모리에 저장하지 않고 일시적으로 레지스터에 저장하게 된다.)
플래그
플래그 레지스터에는 부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 언터럽트 플래그, 슈퍼바이저 플래그가 있다.
- 만약 부호 플래그가 1이라면 결과는 음수.
- 만약 제로 플래그가 1이라면 연산 결과는 0.
제어장치
명령어를 해석하는 부품으로 ALU에 제어 신호를 보낸다. 제어 신호는 컴퓨터 부품을 관리하고 작동시키기 위한 일종의 전기 신호.
(제어장치는 제조사마다 구현 방식, 명령어 해석 방식 등등 차이가 있다.)
제어장치가 받아들이는 신호
클럭 신호
- 컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위.
해석해야할 명령어
- CPU가 해석해야 할 명령어는 명령어 레지스터에 있는데, 이로부터 해석할 명령어를 받아들이고 해석한 후, 제어 진호를 발생하여 컴퓨터 부품들에게 수행할 내용을 알려준다.
플래그 레지스터 속 플래그 값
- ALU 연산에 사용하는 추가적인 상태 정보인 플래그. 제어장치는 플래그 값을 받아들이고 참고하여 제어 신호를 발생시킨다.
제어 버스(시스템 버스의 일종)으로 전달된 제어 신호
- 제어 신호는 CPU 뿐만 아니라 입출력 장치를 비롯한 CPU 외부 장치도 발생시킨다. 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들인다.
제어장치가 내보내는 신호
제어 신호를 전달한다는 말은 제어 버스로 제어 신호를 보낸다는 말.
- 메모리에 전달하는 제어 신호
- 입출력 장치에 전달하는 제어 신호
- CPU 내부에 전달하는 제어 신호
- ALU에 전달 (연산 지시)
- 레지스터에 전달 (레지스터간 데이터 이동, 레지스터에 저장된 명령어 해석을 위함)
레지스터
반드시 알아야하는 레지스터
- 프로그램 카운터
- 메모리에서 가져올 명령어의 주소, 즉 메모리에 읽어 들일 명령어의 주소를 저장한다. 일반적으로는 프로그램 카운터는 꾸준히 증가하며 프로그램을 차례대로 실행한다.
- 변위 주소 지정 방식 - 상대 주소 지정 방식 : 오퍼랜드와 프로그램 카운터의 값을 더하여 유호 주소를 구한다.
- 명령어 레지스터 : 해석할 명령어, 즉 메모리에서 읽어들인 명령어를 저장하는 레지스터.
- 메모리 주소 레지스터 : CPU가 읽어들이고자 하는 메모리의 주소 값 저장.
- 메모리 버퍼 레지스터 : 메모리와 주고받을 값(데이터나 명령어)을 저장하는 레지스터. 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거친다.
- 플래그 레지스터 : ALU 연산 결과에 따른 플래그 저장.
- 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용하는 레지스터. 데이터, 주소를 모두 저장할 수 있다.
- 스택 포인터
- 특정 레지스터를 이용한 주소 지정 방식 - 스택 주소 지정 방식
- 스택은 메모리의 스택 영역에 있다.
- 베이스 레지스터
- 변위 주소 지정 방식 - 베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 주소를 얻어내는 방식
명령어 사이클
CPU는 명령어들을 하나씩 실행한다. 이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행되는데, 이 주기를 명령어 사이클이라고 한다.
1. 인출 사이클 : 메모리에서 CPU로 명령어 가져오기
2. 실행 사이클 : CPU로 가져온 명령어를 실행하기
- 제어신호를 발생시키는 단계
(추가 과정) 간접 사이클 : 메모리 접근이 더 필요한 경우
- 인출 사이클에서 메모리 접근이 더 필요하면 간접 사이클이 돌고 실행 사이클로 들어간다.
인터럽트
CPU의 작업을 방해하는 신호
동기 인터럽트
CPU에 의해서 발생하는 인터럽트. 예외(exception)라 부른다.
CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황.
비동기 인터럽트
주로 입출력 장치에 의해 발생하는 인터럽트. 하드웨어 인터럽트라고 부른다. (ex. 세탁기 완료 알림, 전자레인지 조리 완료 알림, 마우스 키보드의 입출력)
CPU가 프린터와 같은 입출력장치에 입출력 작업을 부탁하면 작업을 끝낸 입출력장치가 CPU에 완료 알림(인터럽트)를 보낸다.
하드웨어 인터럽트 처리 순서
- 입출력 장치는 CPU에 인터럽트 요청 신호를 보낸다.
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
- CPU는 인터럽트 요청을 확인하고 **인터럽트 플래그(플래그 레지스터에 있음)**를 통해 현재 인터럽트를 받아들일 수 있는지 확인
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(인터럽트 핸들러) 실행
- 인터럽트 벡터 : 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정
- 인터럽트 서비스 루틴이 끝나면 4에 백업해놓은 작업을 복구하여 실행 재개
CPU 성능 향상 기법
클럭
- 컴퓨터 부품들은 ‘클럭 신호’에 맞춰 움직인다.
- CPU는 ‘명령어 사이클’이라는 정해진 흐름에 맞춰 명령어를 실행한다.
→ 그렇다면 클럭이 빠르면 되겠네? : 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.
클럭 속도 (Hz 단위)
1초에 클럭이 몇 번 반복되는가를 나타내는 지표
ex) CPU의 기본속도가 2.5GHz, 최대 속도는 4.9GHz라면 평소에는 1초에 25억 번 클럭이 반복되고 최대는 49억.
그러나 CPU에 무리가 가는 작업을 하면 발열이 발생한다. 속도만 올려서는 성능을 올리는 것에 한계가 있다. 클럭 외에 CPU의 성능을 올리는 방법은 코어와 스레드 수를 늘리는 방법이 있다.
오버클러킹
CPU는 클럭 속도를 유지하기보다는 유동적으로 필요하면 속도를 높힌다. 최대 클럭 속도를 강제로 더 끌어올리는 기법을 오버클러킹이라 한다.
코어 & 멀티코어
전통적으로 CPU는 명령어를 실행하는 부품을 의미했다. 현대에는 명령어를 실행하는 부품(들)을 의미하게 되었다.
코어 : 전통적인 CPU 하나.
CPU : 코어 n개 (전통적인 CPU n개)
- 코어를 여러 개 포함하는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 한다.
스레드 & 멀티스레드
스레드 : 실행 흐름의 단위
CPU에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드는 용례가 다르다.
하드웨어적 스레드
하나의 코어가 동시에 처리하는 명령어 단위 (CPU에서 사용하는 스레드라는 용어의 정의)
한 코어 안에 여러 개의 스레드를 두고 처리한다. 그렇게 되면 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다. → 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다.
ex) 8코어 16스레드라면 한 CPU에 코어는 8개고 코어 1개에 스레드가 2개라는 얘기
멀티스레드 프로세서
핵심은 레지스터. 하나의 코어로 여러 명령어를 동시에 처리하도록 만들기 위해서는 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있어야한다.
메모리 속 프로그램 입장에서는 CPU가 여러 개의 명령어를 처리하는 것으로 보이기 때문에 하드웨어 스레드를 논리 프로세서라고 부른다.
소프트웨어적 스레드
하나의 프로그램에서 독립적으로 실행되는 단위 (프로그래밍이나 운영체제에서 사용되는 정의)
- 하나의 프로그램에서 한 부분만 실행되는 방식도 있겠지만 여러 부분이 동시에 실행될 수 있다. ex) 문서 툴에서 화면 출력, 맞춤법, 자동 저장 기능이 동시에 실행될 수 있다.
'컴퓨터구조&운영체제' 카테고리의 다른 글
[혼공컴운] 6주차_가상 메모리 & 파일 시스템 (0) | 2024.02.07 |
---|---|
[혼공컴운] 5주차_프로세스 동기화 & 교착 상태 (0) | 2024.02.02 |
[혼공컴운] 4주차_운영체제 알아가기 (0) | 2024.01.25 |
[혼공컴운] 3주차_컴퓨터의 핵심 부품 (CPU 빼고) (1) | 2024.01.18 |
[혼공컴운] 1주차_컴퓨터 구조 입문하기 (0) | 2024.01.07 |