R e d A l i e n Click

엄청난 기술을 접하면, 마치 외계인의 기술을 훔친 것과 같다고 말합니다

붉은외계인은 그러한 놀라운 기술을 탐구하고, 기술적인 도전에 맞서는 것을 의미하는 저의 또 다른 이름입니다

서로가 성장할 수 있는 건설적인 토론을 좋아합니다.

article_thumbnail

[붉은외계인] CS - 컴퓨터구조와 작동 원리 1 - CPU와 메모리

2024. 1. 5.
클릭 시, 이동!

1. 컴퓨터 작동 원리 구조도

컴퓨터의 구조와 작동 원리를, 구조도로 표현하자면 아래와 같다 ( 구조도 그리느라 애 좀 먹었다...)
제조사와 제조 방법에 따라 매우 달라지겠지만 핵심은 최대한 표현하려고 노력하였다 ( OS는 여기서 다루지 않는다 )

해당 게시물은, 각 부품의 상세한 내역보다는
프로그램을 실행하였을 때, 어떠한 부품을 거쳐 작동하는지, 큰 그림을 다룰 것이다

여기서 MMU는 CPU 내부에 위치하는 것이 맞으나, 그냥 바깥으로 빼서 표현하였다


 

2. 컴퓨터가 이해하는 정보, 컴퓨터의 핵심 부품

결론적으로, 컴퓨터는 0과 1로 이루어진 정보만 이해할 수 있다

컴퓨터가 이해하는 정보는 아래 그림과 같이, 명령어 데이터로 분류할 수 있다 
컴퓨터의 핵심 부품의 경우 또한, 아래 그림과 같다

데이터는 컴퓨터가 이해하는 숫자, 문자, 그림같은 정적인 정보를 가리켜 데이터라고 부른다 
그리고 명령어는 이러한 데이터를 동작시키는 정보이다

그렇다면, 컴퓨터는 0과 1로 이루어진 정보만 이해할 수 있는데 어떻게 문자, 그림 등을 이해하고 표현하는 것일까?
번외로 다루겠지만, 결론부터 말하자면 문자는 코드 체계인 아스키 코드체계를 이용해서 렌더링을 통해 표현하고,
그림은 화소 하나당 RGBA를 이용해서 표현한다

데이터 또한 중요하나, 이러한 데이터를 움직이는 명령어가 더 중요하다 
이러한 명령어의 구조는 아래 그림과 같이 표현할 수 있다

연산코드명령어가 수행할 연산이 담겨 있고, 오퍼랜드에는 데이터 혹은 데이터가 위치한 주소가 담겨 있다


물리 주소상, 데이터가 위치한 주소유효 주소라고 표현하며,  유효 주소에 접근하는 방법주소 지정 방식이라고 한다
그리고 이러한 접근 방법을 오퍼랜드에 표기한다

주소 지정 방식은 자세하게 다루진 않으나, 간단하게 열거해보겠다

 


1. 즉시 주소 지정 방식 : 오퍼랜드에, 데이터를 직접 기록하는 방식
2. 직접 주소 지정 방식 : 오퍼랜드에, 유효 주소를 기록하는 방식
3. 레지스터 주소 지정 방식 : 오퍼랜드에, 레지스터 유효주소를 기록하는 방식

4. 간접 주소 지정 방식 : 유효주소의 주소를 기록하는 방식
5. 레지스터 간접 주소 지정 방식 : 메모리 유효주소를 기록한 레지스터의 유효주소를 기록하는 방식

6. 스텍 주소 지정 방식 : 스텍과 스텍 포인터를 사용하여, 유효주소에 접근하는 방식
7. 변위 주소 지정 방식 : 특정 레지스터와 오퍼랜드 값을 더하여, 유효주소에 접근하는 방식이다 크게 2가지로 나눌 수 있다

7-1. 상대 주소 지정 방식 : 프로그램 카운터 레지스터와 오퍼랜드 값을 더하여, 유효 주소에 접근하는 방식
7-2. 베이스 레지스터 주소 지정 방식 : 베이스 레지스터와 오퍼랜드 값을 더하여, 유효주소에 접근하는 방식

# 포인트
데이터를 직접 기록하는 방식보다는, 유효 주소를 기록하는 방식이 효율적이고 더 많이 사용된다 
왜냐하면, 오퍼랜드에 담을 수 있는 데이터의 크기는 한정적이기 때문이다

간접 주소 지정 방식의 경우, 메모리에 두 번 접근하기 때문에 속도가 느려지는 문제가 있다
하지만 레지스터 간접 주소 지정 방식은, 레지스터에 접근하였다가 메모리에 접근하기 때문에 상대적으로 속도가 빠른편이다


 

 

그래서 위에 내용들을 통해 말하고 싶은 것이 무엇이냐면
프로그램이 실행되면, 해당 프로그램의 데이터와 명령어가 메모리에 담긴다는 것이다

그리고 해당 명령어에는  연산코드와, 주소 지정 방식을 표기한 오퍼랜드가 담겨 있다는 것이다

이제 컴퓨터의 핵심 부품들에 대해서 알아보겠다

 


 

2. 컴퓨터의 핵심 부품 - CPU

메모리를 이해하기 위해서는 먼저, CPU에 대해 알아야 한다

CPU메모리로부터, 명령어와 데이터를 가져와 읽어들이고 해석하는 부품이다
이러한 CPU의 핵심 부품 3가지는 ALU, 레지스터, 제어 장치가 있다 

ALU(산술논리연산기) : 산술과 논리 연산을 하는 계산기 
레지스터 : CPU 내부의 작은 임시저장장치
제어 장치 : 명령어를 해석하고, 전기 신호인 제어 신호를 통해 부품들을 제어하는 장치 

이러한 핵심 부품 3가지는 하나의 코어에 담겨 있다

스레드까지 붙여 설명한다면
코어명령어를 실행하는 부품이고, 스레드하나의 코어 당 명령어의 실행 단위이다
스레드는 프로그램상의 스레드와 하드웨어적 스레드로 또 한 번 나눌 수 있다

하드웨어적 스레드 : 하나의 코어 당 명령어의 실행 단위
소프트웨어적 스레드 : 하나의 프래그램의 독립적인 실행 단위
하나의 프로그램에서 A기능, B기능, C기능을 구현하였다면, 3가지 기능이 독립적으로 실행된다는 것이다 

클럭 설명은 생략할려 했으나, 간단하게 설명해보겠다 클럭은 단순하게, 발진기의 발진 주기이다
CPU는 CPU 클럭이 발진할 때 마다 동작을 한다 
이러한 클럭이 높아지면 성능을 높일 수 있으나 열이 발생 + 클럭을 강제로 높이는 것을 오버클럭이라고 한다


다음으로, CPU와 메모리의 동작 구조도는 아래와 같다 ( 구조도 그리느라 애 좀 먹었다....)
여기서, 메모리 주소와 메모리 값은 이해를 위하여 간단하게 표현하였다

# MMU란
논리 주소를 물리 주소로 바꾸어 주는 장치이다
CPU와 프로그램은 논리주소만을 사용하고, 데이터는 실제 메모리 하드웨어 물리 주소에 기록된다

# 여기서 보라색 화살표가 의미하는 것
제어 장치는 플래그 레지스터를 참고하여, 제어 신호를 보낸다 예를들어, 인터럽트 플래그를 참고하여 
인터럽트를 처리할 수 있는 상태인지 아닌지를 판별하여, 장치 컨트롤러에게 제어 신호를 보낸다

 


1. CPU는 프로그램 카운터로부터, 읽어들일 메모리의 논리 주소를 확인한다


2. 해당 논리 주소를 MMU(Memory Management Unit)로 보낸다 이 때, 제어 신호 또한 함께 보낸다
2. 동시에, 프로그램 카운터는 순차적인 실행을 위해, 1을 더한다
2. MMU는 논리 주소를 물리 주소로 바꾼 후, 주소 버스를 통해 메모리 시스템으로 전달한다 

3. 메모리 시스템은, 해당 물리 주소에 해당하는 데이터를 읽기/쓰기 한다
3-1. 읽기라면, 데이터 버스를 통해 메모리 버퍼 레지스터로 전달한다
3-2. 쓰기라면, CPU는 데이터 버스를 통해 데이터를 전달한다 그러면 시스템 버스는 해당 주소에 데이터를 쓴다

4. 명령어를 명령어 레지스터로 전달한다

5. 명령어 해석을 위하여, 제어 장치로 명령어를 전달한다

6. 제어 장치는 명령어를 해석한 후, 연산이 필요하다 판별되면 연산자를 ALU로 보낸다
6. 이 때, 피연산자는 레지스터로부터 받아온다

7. 연산 결과값은 레지스터에 저장한다
7. 또한, 연산 결과값에 대한 추가 정보는 플래그 레지스터에 기록한다 예를들어, 연산 결과값이 음수일 경우 부호 플래그에 1을 표시한다


다음으로 주변 장치를 다뤄보겠다
글이 길어졌기 때문에 다음 포스트에서 작성해보겠다