modesta.log
로그인
modesta.log
로그인
혼자 공부하는 컴퓨터 구조 + 운영체제 Section 4. CPU의 작동 원리
jihyelee
·
2023년 7월 7일
팔로우
0
운영체제
컴퓨터구조
0
achitecture-os
목록 보기
4/15
강의 링크
CPU의 작동 원리
CPU
ALU
레지스터
제어장치
ALU
계산하는 장치
계산을 하기 위해서는 피연산자와 수행할 연산이 필요
레지스터로부터 피연산자를, 제어장치로부터 제어 신호(수행할 연산)를 받아들임
결괏값: 숫자, 문자, 주소, ...
플래그: 연산 결과에 대한 부가 정보
e.g. 연산 결과가 음수, 연산 결과가 0, 연산 결과가 (결과가 담을 레지스터에 비해) 너무 크다(=overflow)
제어장치
제어 신호를 발생시키고 명령어를 해석하는 장치
클럭: 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
레지스터
CPU 내부의 작은 임시저장장치
프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장
반드시 알아야 할 레지스터 (CPU 종류마다 레지스터 종류는 다름)
프로그램 카운터
메모리에서 가져올 명령어의 주소 (메모리에서 읽어들일 명령어의 주소)
instruction pointer (명령어 포인터) 라고 부르는 CPU도 있음
명령어 레지스터
해석할 명령어 (방금 메모리에서 읽어 들인 명령어)
제어장치가 해석
메모리 주소 레지스터
메모리의 주소
CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터
메모리 버퍼 레지스터
메모리와 주고받을 값 (데이터와 명령어)
CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터
플래그 레지스터
연산 결과 또는 CPU 상태에 대한 부가적인 정보
범용 레지스터
다양하고 일반적인 상황에서 자유롭게 사용
주소, 명령어, 데이터 등 다양하게 담을 수 있음
스택 포인터
스택 주소 지정 방식에서 사용 (스택, 스택 포인터 이용)
스택 포인터란 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
베이스 레지스터
기준 주소 저장
변위 주소 지정 방식에서 사용
오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻는 방식
연산 코드 + 레지스터(프로그램 카운터 or 베이스 레지스터) + 오퍼랜드 형식으로 표현
1) 상대 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더함
2) 베이스 레지스터 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더함
예시) 프로그램 실행
메모리의 1000번지에서 1500번지까지 1101, 1111, ... 1000 등 실행될 프로그램 명령어가 저장
[프로그램 카운터]에서 1000 (메모리의 프로그램 실행 시작 주소) 가지고 있음
[프로그램 카운터]에서 [메모리 주소 레지스터]에 1000 복사
[메모리 주소 레지스터]에서 주소 버스를 통해 메모리로 메모리 주소(1000)가 이동, 제어 장치에서 제어신호(메모리 읽기)가 제어 버스를 통해 메모리로 이동
[프로그램 카운터]의 값 1 증가 (프로그램 순차 실행), 메모리에서 데이터버스를 통해 주소 1000에 저장된 값 1101이 [메모리 버퍼 레지스터]로 이동
[메모리 버퍼 레지스터]에서 [명령어 레지스터]에 1101이 복사됨
순차적인 실행 흐름이 끊기는 경우
특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
e.g. JUMP, CONDITIONAL JUMP, CALL, RET
인터럽트 발생 시
명령어 사이클
프로그램 속 명령어들은 일정한 주기가 반복되며 실행
주기 = 명령어 사이클
일반적으로 인출-실행의 반복
인출 사이클
메모리에 저장된 값을 CPU 내부로 가져오는 작업 = 인출
실행 사이클
가져온 프로그램을 실행
간접 사이클
CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우 (e.g. 간접주소지정방식) 존재
메모리 접근이 더 필요한 경우 간접 사이클 필요 (인출-간접-실행)
인터럽트 (interrupt)
CPU가 꼭 주목해야 할 때, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
동기 인터럽트 (예외)
CPU가 예기치 못한 상황을 접했을 때 발생
e.g. 폴트, 트랩, 중단, 소프트웨어 인터럽트
비동기 인터럽트 (하드웨어 인터럽트)
주로 입출력장치에 의해 발생
입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용
입출력장치는 CPU에 비해 느림
인터럽트가 없다면 CPU가 주기적으로 입출력장치의 작업이 끝났는지 확인해야
하지만 인터럽트가 있다면, 입출력작업 동안 CPU는 다른 작업 처리 가능
알림과 같은 역할
하드웨어 인터럽트의 처리 순서
입출력장치가 CPU에
인터럽트 요청 신호
를 보냄
인터럽트 요청 신호란, CPU의 작업을 방해하는 인터럽트에 대한 요청
CPU는 실행 사이클을 끝내고 명령어 인출 전 인터럽트 여부 확인
CPU가 인터럽트 요청 확인,
인터럽트 플래그
를 통해 인터럽트를 받아들일 수 있는지 여부 확인
인터럽트 플래그란, 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
플래그 레지스터에는 부호, 제로, 캐리, 오버플로우, 인터럽트, 슈퍼바이저 플래그 등을 가짐
모든 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아님
막을 수 있는 인터럽트 = maskable interrupt
막을 수 없는 인터럽트 = non maskable interrupt (e.g. 고장, 정전)
인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
CPU는
인터럽트 벡터
를 참조하여
인터럽트 서비스 루틴
을 실행
인터럽트 서비스 루틴이란, 인터럽트가 발생했을 때 해당 인터럽트를 처리하기 위한 프로그램
프로그램이기 때문에 메모리에 저장
인터럽트 벡터란, 각각의 인터럽트를 구분하기 위한 정보 (인터럽트 서비스 루틴의 식별정보)
CPU가 해당 인터럽트 서비스 루틴의 시작주소를 알기 위해 필요
서비스 루틴 실행이 끝나면 백업해둔 작업을 복구하여 실행 재개
인터럽트를 처리할 때 CPU의 프로그램 카운터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 명령어 레지스터에 든 내용을 모두 메모리의 스택에 백업해야
jihyelee
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab
팔로우
이전 포스트
혼자 공부하는 컴퓨터구조 + 운영체제 Section 3. 명령어
다음 포스트
혼자 공부하는 컴퓨터 구조 + 운영체제 Section 5. CPU의 성능 향상 기법
0개의 댓글
댓글 작성