카테고리 없음

[혼공컴운] 1주차 | 컴퓨터 구조 시작하기, 데이터, 명령어

muncaem 2024. 7. 7. 20:04

첫 장에선 이렇게 말한다.

컴퓨터 구조를 알면 코드만 작성할 줄 아는 개발자를 넘어 다양한 문제를 스스로 해결할 줄 아는 개발자

가 될 수 있다고.

 

이번 주차는

▶Chapter 1 컴퓨터 구조 시작하기

▶ Chapter 2 데이터

▶ Chapter 3 명령어 에 대해 알아보았다.


그럼 먼저 Chapter 1 컴퓨터 구조 시작하기에 대해서 정리해 볼 것이다.

 

컴퓨터의 핵심 4가지 장치는 ①중앙처리장치(CPU), ②주기억장치(=메모리), ③보조기억장치, ④입출력장치 이다.

 

②주기억장치(=메모리)란,

현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다.

따라서 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.

메모리에 저장된 값에 빠르고 효율적으로 접근하기 위해서 "주소"라는 개념이 사용된다.

 

①중앙처리장치(CPU)란,

컴퓨터의 두뇌이다. 메모리에 저장된 명령어를 읽고, 해석하고, 실행한다.

CPU의 중요한 3가지 구성 요소는 ①ALU(산술논리연산장치), ②레지스터, ③제어장치 이다.

     ①ALU(산술논리연산장치)는 컴퓨터 내부에서 수행되는 계산을 담당한다.

     ②레지스터는 프로그램을 실행하는데 필요한 값들을 임시로 저장하는 공간이다. 여러개가 존재한다.

     ③제어장치는 전기 신호를 내보내명령어를 해석하는 장치이다.

 

③보조기억장치란,

메모리에 비해 크기가 크고, 가격이 저렴하고, 전원이 꺼져도 저장된 내용을 잃지 않는 저장 장치를 말한다.

메모리는 현재 '실행되는' 프로그램을 저장하는 반면 / 보조기억장치는 '보관할' 프로그램을 저장함을 알아두자.

 

④입출력장치란,

컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치이다.

 

마지막으로 메인보드시스템 버스에 대해알아보자.

위 4가지 핵심 부품들은 모두 메인보드에 연결된다. 마더보드라고도 불린다.

연결된 부품들은 메인보드 내 버스라는 통로를 통해 서로 정보를 주고 받는다. 여러 버스 중 핵심 부품을 연결하는 가장 중요한 버스는 시스템 버스 이다.

 

시스템 버스는 주소를 주고받는 주소 버스, 명령어와 데이터를 주고받는 데이터 버스, 제어 신호를 주고 받는 제어 버스로 이루어져 있다.

 

51p, 확인문제 3번


다음은 Chapter 2 데이터에 대해서 알아보자.

 

컴퓨터가 이해하는 가장 작은 정보 단위는 0과 1을 나타내는 비트(bit)이다.

1비트는 2가지 정보를 표현할 수 있기 때문에 n비트로는 2^n가지 정보를 표현할 수 있다.

 

프로그램 크기는 아래와 같은 단위로 말할 수 있다.

1byte 8bit
1kB 1000byte
1MB 1000kB
1GB 1000MB
1TB 1000GB

 

추가로 중요한 정보 단위인 "워드"가 있다.

워드란, CPU가 한 번에 처리할 수 있는 데이터 크기를 의미한다. CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고, 32비트를 처리할 수 있다면 1워드는 32비트가 된다. 인텔의 x86 CPU는 32비트 워드 CPU이고 x64 CPU는 64비트 워드 CPU다.

 

컴퓨터가 이해하는 정보인 0과 1만으로 숫자를 표현하는 방법은 2진법과 16진법이 있다.

2진법은 0과 1만으로 모든 숫자를 표현하는 방법이며 코드 상에서 이진수를 표기할 때 이진수 앞에 0b를 붙인다.

16진법은 0~9, A~F까지 한 글자로 16가지의 정보를 표현할 수 있어 이진수에 비해 더 적은 자릿수로 더 많은 정보를 표현할 수 있다. 코드 상에선 맨 앞에 0x를 붙인다.

 

2진법에서 음수를 표현하는 방법 중의 하나는 2의 보수를 구해 해당 값을 음수로 간주하는 방법이 있다.

2의 보수의 사전적 의미는 어떤 수를 그보다 큰 2^n에서 뺀 값을 의미한다.

하지만 다음과 같이 쉽게 2의 보수를 구할 수 있다.

먼저 1101에서 1은 0으로 0은 1로 뒤바꾼다. 그 값에 1을 더한다. 더한 값은 1101의 음수인 0011이다.

65p, 확인문제 3번

 

여기서 2가지 짚고 넘어갈 것이 있다.

먼저, -1101의 음수로 표현한 0011과 십진수 3을 표현한 0011을 구분하려면 컴퓨터 내부에서 플래그를 사용하여 구분한다.

다음은, 2의 보수로는 0의 음수와 2^n형태의 이진수의 음수를 표현할 수 없다는 점이다.


마지막으로 Chapter 3 명령어에 대해서 알아보자.

 

우리가 프로그램을 만들 때 사용하는 프로그래밍 언어는 사람을 위한 언어인 '고급 언어'이다.

반면 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 '저급 언어'라고 한다.

 

여기서 저급 언어는 ①기계어, ②어셈블리어로 구분할 수 있다.

①기계어란, 0과 1의 명령어 비트로 이루어진 언어로 사람이 읽기 어렵다.

그래서 등장한 저급 언어가

②어셈블리어이다. 이는 기계어를 읽기 편한 형태로 변역한 언어이다.

 

그러면 사람이 작성한 고급 언어를 컴퓨터가 읽을 수 있도록 하려면 이를 변환하는 과정이 필요하다.

크게 2가지 방식이 있는데 ①컴파일 방식, ②인터프리트 방식이 있다.

①컴파일 방식

컴파일 방식으로 작동하는 프로그래밍 언어를 컴파일 언어라고 한다. 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어이다. 이런 과정을 컴파일이라고 하며 컴파일을 수행해주는 도구를 컴파일러라고 한다. 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 한다.

②인터프리트 방식

인터프리트 방식으로 작동하는 프로그래밍 언어를 인터프리트 언어라고 한다. 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어이다. 변환하여 실행해주는 도구를 인터프리터라고 하며 코드 전체를 저급 언어로 변환하는 시간을 기다릴 필요가 없다.

 

인터프리터 언어가 컴파일 언어보다 빠르다고 생각할 수 있지만 일반적으로 인터프리터 언어는 컴파일 언어보다 느리다. 번역본을 읽는 것이(컴파일 언어) 옆에 붙어 한 줄 한 줄 해석해주는 것(인터프리터)보다 빠르기 때문이다.

 

명령어연산 코드 + 오퍼랜드 로 구성된다.

여기서 연산 코드명령어가 수행할 연산을 의미한다. 가장 기본적인 연산 코드 유형은 아래와 같이 나눌 수 있다.

- 데이터 전송

- 산술/논리 연산

- 제어 흐름 변경

- 입출력 제어

 

오퍼랜드연산에 사용할 데이터 / 연산에 사용할 데이터가 저장된 위치를 의미한다. 메모리 주소나 레지스터의 이름이 담긴다. 따라서 오퍼랜드 필드를 주소 필드라고 부르기도 한다. 아래와 같이 오퍼랜드의 개수에 따라 명령어를 구분할 수 있다.

- 0-주소 명령어: 오퍼랜드가 하나도 없는 명령어

- 1-주소 명령어: 오퍼랜드가 하나인 명령어

- 2-주소 명령어: 두 개인 명령어

- 3-주소 명령어: 세 개인 명령어

 

다음은 오퍼랜드 필드에서 연산에 사용할 데이터 위치를 찾는 방법을 알아보자.

이 방법을 주소 지정 방식이라고 하며 연산의 대상이 되는 데이터가 저장된 위치인 유효 주소를 찾는 방법이라고 할 수 있다.

 

그렇다면 왜 오퍼랜드 필드에 데이터가 아닌 메모리나 레지스터의 주소를 담는 것일까?

=> 명령어의 길이 때문이다. 연산 코드 필드가 m비트라고 할 때, 오퍼랜드 필드에 가장 많은 공간을 할당할 수 있는 것은 1-주소 명령어 이다. 오퍼랜드 필드가 늘어날 수록 각 크기는 점점 작아질 것이다. 따라서 오퍼랜드 필드에 메모리 주소를 담으면 그 주소의 메모리 크기만큼 데이터를 담을 공간을 키울 수 있다.

 

다양한 주소 방식 중 ①즉시 주소 지정 방식, ②직접 주소 지정 방식, ③간접 주소 지정 방식, ④레지스터 주소 지정 방식, ⑤레지스터 간접 주소 지정 방식 에 대해 알아볼 것이다.

 

①즉시 주소 지정 방식은 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식이다. 표현할 수 있는 데이터의 크기가 작아지는 단점이 있지만 데이터를 찾는 과정이 없어 빠르다.

 

②직접 주소 지정 방식유효 주소를 직접적으로 명시하는 방식이다.

 

③간접 주소 지정 방식은 연산 대상 데이터의 위치인 유효 주소의 주소를 명시한다. 직접 주소 지정 방식보다 유효 주소의 범위가 넓어진다. 하지만 메모리에 2번 접근이 필요하기 때문에 느리다. 

 

④레지스터 주소 지정 방식은 연산 대상 데이터를 저장한 레지스터를 오퍼랜드 필드에 명시한다. CPU외부에 있는 메모리보다 내부에 있는 레지스터에 접근하는 것이 더 빠르다.

 

⑤레지스터 간접 주소 지정 방식은 연산에 사용할 데이터는 메모리에 저장하고 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시한다.