바이트 메모리 (Byte Memory)

컴퓨터는 바이트(Byte)단위로 일을 처리한다.

(좌) 바이트 메모리 자세히 (우) 바이트 메모리 간단히

그림에 나와있는 M 은 비트메모리이다. 비트메모리가 8개가 모여서 바이트 메모리가 된다.

 

>> 비트메모리?

https://jinn-o.tistory.com/117

 

[논리회로] 비트메모리 : 메모리가 비트를 저장하는 방법

메모리에 비트는 어떻게 저장될까? 비트 메모리는 위와 같은 사진으로 이루어져있다. 크게 보면 중요한 단자는 세 가지이다. input 입력단자인 i, output 출력단자인 o, 입력 제어 단자인 s. s i a b c o

jinn-o.tistory.com

 

 

 

 

 

출력 제어기

바이트 메모리와 언뜻보면 비슷해보이지만, 엄연히 다르다. 데이터를 입력하는 바이트 메모리의 경우, 비트 메모리가 필요하다. 그리고 그 비트 메모리의 핵심 기능은, 데이터를 변경하고 유지하는 것이다. 그러나 출력 제어기의 경우 데이터를 보관할 필요가 없다. 따라서 말 그대로 데이터를 내보낼 것인지 말 것인지만 정하면 된다. 즉, 바이트 메모리는 NAND 게이트들로 이루어져 있지만, 출력 제어기는 AND 게이트들로 이루어져 있다.

(좌) 출력 제어기 자세히 (우) 출력 제어기 간단히

입력 e 가 0 이면 출력하지 않고, 1 이면 출력한다는 의미이다.

 

 

 

 

이러한 바이트 메모리와 출력 제어기가 합쳐지면?

레지스터(register)가 된다!

(좌) 레지스터 자세히 (우) 레지스터 간단히

 

 

 

 

 

이러한 레지스터들은 버스(bus) 형태로 묶여있다!

(좌) 레지스터 버스 자세히 (우) 레지스터 버스 간단히
버스 형태로 묶여있는 레지스터들

버스는 바이트 데이터가 이곳저곳 갈 수 있게 해주는 8개짜리 전선 다발이다. 한 레지스터가 s를 1로 설정하고 있을 때 다른 레지스터의 e가 1이 되어 출력을 한다면, 레지스터 간의 데이터가 전달된다고 할 수 있다. 이 때 바이트를 이동해도 출발지의 바이트 내용은 절대로 지워지지 않는다. 바이트 이동이 완료되어도 출발지 바이트의 내용이 변하거나 소거되지 않는다. 오히려 목적지 바이트에 있던 원본 바이트 패턴만 사라진다. 어딘가로 '이동' 한다기보다 '복사'된다고 보는 것이 맞다.

비트 메모리

메모리에 비트는 어떻게 저장될까?

비트 메모리는 위와 같은 사진으로 이루어져있다. 크게 보면 중요한 단자는 세 가지이다. input 입력단자인 i, output 출력단자인 o, 입력 제어 단자인 s.

s i a b c o 설명
0 0 1 0 1 0 즉, s=1 이면, o 는 i 의 값을 따라간다.
그러나 s=0 이면, o 는 항상 0이다.
1 0 1 0 1
1 0 1 1 o의 이전 값이 1이었다면 c=0, o=1.
o의 이전 값이 0이었다면 c=1, o=0.
즉, s=0 이면, o는 이전 값을 기억한다.
1

핵심은, s=1 일 때는 값을 입력하고, s=0 일 때는 값을 보존한다는 것이다.

 

 

 

비트 메모리(단순화)

 

NAND 게이트

NAND 게이트란?

 AND 게이트에 NOT 을 붙인 것이다. 따라서 이 게이트를 "입력이 모두 TRUE 일때만 꺼지는 게이트" 라고 이해하면 쉽다. 그런데 왜 이 게이트가 컴퓨터를 구성할 때 가장 기본적인 게이트로 쓰일까? 그 이유는 다음과 같다.

 먼저 NAND 게이트가 가장 만들기 쉽다. 생산을 하는데 과정이 쉽고 소자도 적어서, 값싸고 안정적인 생산이 가능하다. 그리고 그 다음 이유가 핵심인데, 바로 NAND 만으로도 잘만 연결하면 모든 부품이나 장치를 만들 수 있다는 점에 있다. 이러한 이유들로 인해서 NAND 게이트는 컴퓨터에서 가장 기본적인 게이트이다.

 

 

 

NAND 게이트로 NOT 게이트 만들기

NOT 게이트 실제 내부 구조
NOT 게이트 단순화

 

 

 

NAND 게이트로 AND 게이트 만들기

AND 게이트 실제 내부 구조
AND 게이트 단순화

 

 

 

NAND 게이트로 OR 게이트 만들기

OR 게이트 실제 내부 구조
OR 게이트 단순화

 

a b c d e
0 0 1 1 0
0 1 1 0 1
1 0 0 1 1
1 1 0 0 1

 

 

 

NAND 게이트로 XOR 게이트 만들기

XOR 게이트 실제 내부 구조
XOR 게이트 단순화

 

a b c d e f g
0 0 1 1 1 1 0
0 1 1 0 0 1 1
1 0 0 1 1 0 1
1 1 0 0 1 1 0

 

데이터 영역

전역변수와 static 변수가 할당된다.

프로그램의 시작과 동시에 할당되고, 프로그램의 종료와 동시에 소멸된다.

 

스택 영역

이 영역에는 지역변수와 매개변수가 저장된다.

함수의 호출과 동시에 할당되고, 함수 호출이 완료되면 소멸된다.

 

힙 영역

이 영역에는 동적 할당이 필요할 때 쓰인다.

첫 번째, 무어의 법칙 Moore's Law

18개월마다 컴퓨팅 성능은 2배 빨라지고 가격은 반으로 떨어진다. 즉, IC(Integrated Circuit, 집적 회로)의 트랜지스터 수는 18-24개월마다 2배가 된다는 법칙이다.

무어의 법칙 더 자세히 알아보기
>> https://blog.naver.com/kasbel/222494096513

 

 

 

 

 

두 번째, 추상화 Abstraction

눈에 보기 쉽고 파악이 편한 (simple한) 설계를 위해서 기저의 복잡한 설계를 숨기고 더 간단한 모델을 제공해야 한다.

 

 

 

 

 

세 번째, 일반적 케이스를 더 빠르게 Common case fast

확률이 적은 일반적이지 않은 (rare한) 케이스를 최적화하기 보다는, 일반적 상황에서의 성능을 높여야 한다.

 

 

 

 

 

네 번째, 병렬성 Parallelism

성능을 높이기 위하여, 여러 계산이 동시에 병렬적으로 수행되어야 한다. 핵심은 문제를 해결할 때 큰 문제 하나를 한꺼번에 통째로 해결하기 보다는 여러 작은 문제들로 세분화해서 처리하는 것이다.

 

 

 

 

 

다섯 번째, 파이프라이닝 Pipelining

병렬성의 한 종류로, 한 요소의 출력이 바로 다음 요소의 입력이 되도록 직렬로 연결된 데이터 처리요소의 집합 형태가 되어야 한다. 예를 들면, 어떤 하나의 물건이 생산될 때 한 사람이 모든 일을 순서대로 다 처리하는 것보다 컨베이어벨트처럼 일이 전달되면서 처리되는 방식을 말한다.

 

 

 

 

 

여섯 번째, 예측 Prediction

성능을 위해서 어느정도 예측도 필요하다.

 

 

 

 

 

일곱 번째, 메모리 계층 Hierarchy of memories

상위 메모리 계층에 포함될수록, 더 빠르며 더 비싼 메모리에 속한다. 하위의 넓은 메모리 계층일수록, 저장 공간이 더 넓다. 레지스터 -> 캐시 -> 메모리 -> 하드디스크

 

 

 

 

 

여덟 번째, 의존성 Dependability

컴퓨터 시스템들은 서로 상호 의존적이어야 한다. 한 부분이 에러가 발생할 경우, 다른 부분을 통해서 에러를 감지하기 위함이다.

 

 

 

 

 

더 자세한 설명
>> https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tnalsdl326&logNo=221157071492

API (Application Programming Interface) 란?

api 의 개념에 대해서는 컴퓨터 공학을 공부한다면 많은 곳에서 언급되므로, 나름 익숙한 개념일 것이다. API 는 응용 프로그램을 사용할 수 있도록 필요한 기능을 사용할 수 있도록 돕는 인터페이스를 의미한다. 핵심은, "응용프로그램" 의 기능을 다룬다는 것에 있다. 그래서 우리(사용자)에게 직접적으로 눈에 보이며, 더 가깝게 느껴지는 개념이 API이다.

 

ABI (Application Binary Interface) 란?

그렇다면 abi는 뭘까? 바이너리 단계에서 사용되는 abi와 달리, api는 프로그래밍 단계에서 사용이 된다. 개발자가 직접적으로 코딩할 때 가져다쓰거나 사용자가 응용 프로그램을 사용할 때 사용하는 개념이다. 그러나 abi는 더 깊숙히 들어간다. 바로 응용 프로그램과 운영체제의 관계 혹은 응용 프로그램과 라이브러리의 관계, 마지막으로 응용 프로그램과 구성요소 간에서 사용되는 기능을 도와주는 인터페이스를 의미한다. 따라서 이 인터페이스는 사용자가 직접적으로 다루게 될 일은 없다.

소프트웨어 개발자와 하드웨어 개발자를 연결해주는 역할이 ISA 이다.

ISA 란?

 간단하게 요약하면, ISA는 이름 자체에서도 엿볼 수 있듯이, 마이크로프로세서(즉, CPU)가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령들의 집합을 말한다. 다만, 마이크로프로세서마다 기계어 코드들이 다르기 때문에 명령어의 각 비트들은 기능적으로 분할하여 처리하는데, 이 때 이 기계어와 바이트 코드를 이어주는 역할을 하는 것이 어셈블리언어이다.

 명령어 집합 구조를 물리적으로 구현하는 방법을 마이크로아키텍처(microarchitecture) 라고 하며, 같은 명령어 집합 구조를 다른 마이크로아키텍처로 구현하기도 한다. 예를 들어, 인텔의 펜티엄과 AMD의 애슬론은 거의 같은 명령어 집합 구조를 서로 다른 마이크로 아키텍처로 구현한 것이다. 모든 64-bis 인텔 CPU의 경우, x86-64 ISA를 따른다.

 

 따라서 명령어 집합구조를 안다는 것은 컴퓨터 구조의 공부의 시작이라고 할 수 있다.

 

>> 참고문서 (위키백과)
https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%EC%96%B4_%EC%A7%91%ED%95%A9

 

 

마이크로아키텍처(microarchitecture)는 뭐지?

마이크로프로세서가 CPU를 지칭하듯이, 마이크로아키텍처는 CPU구조를 의미한다. 즉, 마이크로프로세서(CPU) 내부 하드웨어 구조를 의미한다.

 

>> 참고문서 (위키백과)
https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

 

 

 

+ Recent posts