[컴퓨터구조] 데이터와 명령어에 대해 알아보기

Yong·2023년 7월 6일
2

홍공컴운

목록 보기
1/6

컴퓨터 구조를 알아야하는 이유

문제해결 능력과 비용

개발자가 되기 위해서 반드시 컴퓨터 공학 학위를 취득하거나 CS 공부를 하지 않아도 괜찮습니다. 실제로 주변을 보면 비전공자인 개발자가 많은 것 같습니다.

하지만 개발을 하면서 에러가 발생했을 때, 빠르게 문제해결을 하기 위해서는 CS 지식이 절대적으로 도움이 된다고 생각이 됩니다. 매일 같이 에디터에 작성하는 코드들이 어떻게 컴퓨터에서 동작하는지 원리를 알아야 좋은 코드(?)를 작성 할 수 있다고 생각합니다.

또한 컴퓨터 구조를 알고 있을때 성능, 용량, 비용 문제를 고려하며 개발을 할 수 있습니다.

컴퓨터 구조 훑어보기

컴퓨터가 이해하는 정보는 0과 1로 이루어진 이진수(binary)입니다. 이진수는 컴퓨터가 처리할 수 있는 데이터의 가장 기본적인 형태입니다. 이진수를 조작하여 컴퓨터가 원하는 작업을 수행하게 됩니다.

컴퓨터에는 네가지 핵심 부품이 있습니다.

  • CPU: 컴퓨터의 두뇌와 같은 부품으로 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품입니다.
  • 메모리: CPU가 처리할 데이터를 저장하는 장치.
  • 보조기억장치: 메모리보다 용량이 크고 비교적 느린 속도로 데이터를 저장하는 장치.
  • 입출력장치: 스피커, 프린터, 마우스, 키보드 등. 컴퓨터와 사용자 간의 상호작용을 위한 장치.

데이터에 대해 알아보기

정보 단위

비트(bit)는 0과 1을 나타내는 정보단위입니다. 컴퓨터에서 처리하는 정보의 최소표현단위로 2진법 1자리를 표현하는 정보량의 최소단위입니다. 비트는 바이트(Byte)와 함께 사용되며, 8비트가 1바이트입니다.

1byte = 8bit
1kB = 1,000byte
1MB = 1,000kB
1GB = 1,000MB
1TB = 1,000GB

이진법과 십육진법

이진법은 0과 1 두 개의 숫자로 수를 표현하는 방법입니다.

십육진법은 한 자릿수에 16개의 숫자를 사용하는 방법입니다. 이진법으로 나타낸 경우보다 자릿수의 경우의 수가 많은 대신 숫자 자체를 단축시킬 수 있어서 컴퓨터에서는 이진법과 더불어 많이 사용하는 진법입니다.

십육진법은 4비트의 이진수로 나타낼 수 있습니다. 이 것을 니블 (nibble) 이라고 합니다. 예를 들어 D는 1101로 나타낼 수 있습니다.

아스키 코드와 유니코드

아스키는 영문 알파벳을 사용하는 문자 인코딩입니다. 7비트 문자 인코딩 체계로, 128개의 문자를 표현할 수 있습니다.

아스키는 영문 만 인코딩 할 수 있기 떄문에 각 나라의 언어에 맞는 인코딩 체계가 필요하여 여러 인코딩 방식이 나왔습니다.

하지만 언어별로 인코딩해야하는 수고로움이 있었기 때문에 통일된 표준 인코딩 방식인 유니코드가 등장했습니다.

유니코드는 전 세계의 모든 문자를 표현하기 위한 국제 표준 문자 인코딩 체계입니다.

명령어

우리가 작성하는 코드는 모두 인간이 읽을 수 있는 명령어입니다.
컴퓨터는 인간이 읽을 수 있는 코드를 읽을 수 없습니다. 0과 1로 표현된 명령어만 읽을 수 있기 때문에 변환하는 작업이 필요합니다.

고급언어와 저급 언어

C, C++, Java, Python 과 같이 사람을 위한 언어를 고급 언어라고 하고 반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 합니다.

저급 언어에는 두가지 종류가 있습니다. 기계어어셈블리어입니다. 기계어는 컴퓨터가 이해할 수 있는 0과 1로 이루어진 언어입니다. 기계어는 사람이 이해하기 어렵기 때문에 어셈블리어가 탄생하게 되었습니다. 사람이 읽기 편한 형태로 번역한 언어가 어셈블리어 입니다.

  • 기계어: 0과 1의 명령어 비트로 이루어진 언어. CPU는 0과 1로 이루어진 기계어를 이해하고 실행.
  • 어셈블리어: 0과 1로 이루어진 기계어를 사람이 읽기 편한 형태로 번역한 저급언어.
  • 10110000 01100001 는 어셈블리어로 옮겨쓴다면 mov al, 061h 이다.
  • 모든 개발자가 어셈블리어를 알아야하는 것은 아니지만, 하드웨어와 밀접하게 맞닿아 있는 개발자(임베디드, 정보 보안 등)들이 많이 사용한다고 한다.

컴파일 언어와 인터프리터 언어

고급 언어는 결국 저급 언어로 변환이 되어 실행되는데, 이 때 변환되는 방식은 컴파일 방식인터프리트 방식이 있다.

  • 컴파일 언어: 컴파일러에 의해서 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어.
    소스 코드 전체를 훌터보기 때문에 오류가 있는지, 실행 가능한지 등을 따지며 컴파일 한다.
    인터프리터 언어와는 다르게 인터프리터를 거치지 않기 때문에 빠르다.
  • 인터프리터 언어: 인터프리터에 의해서 소스 코드가 한 줄씩 실행되는 고급언어.
    컴파일 언어와는 다르게 코드를 한 줄씩 실행하기 때문에 변환하는 시간을 기다릴 필요가 없다.
    오류가 있더라도 오류가 있는 코드 까지 변환이 된다.

연산 코드와 오퍼랜드

명령어는 연산코드오퍼랜드로 구성되어 있습니다. 명령어가 수행하는 연산을 연산코드라고 하고 연산 코드가 연산에 사용하는 데이터의 위치가 오퍼랜드입니다.

예시) mov al, 061h mov가 연산코드이고 al, 061h가 오퍼랜드가 된다.

  • 연산 코드: 연산 코드의 종류는 많지만 크게 네가지로 나눌 수 있음. 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어
  • 오퍼랜드: 연산에 사용되는 데이터 혹은 연선에 사용되는 데이터가 저장된 위치.
    명령어에 오퍼랜드가 없을 수도 있고 여러개가 있을 수 있다.

1주차 미션

p. 51 확인문제 3번

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

P. 64 확인문제 3번 - 이진수 1101의 음수를 2의 보수 표현법으로 구하기

1101 -> 모든 0과 1을 뒤집기 -> 0010 -> 1을 더한다. -> 0011

p. 100 스택과 큐 정리

스택과 큐는 자료구조의 종류 이며 스택은 LIFO (last in first out)이고, 큐는 FIFO (first in first out)이다.

스택은 막혀 있는 통과 같은 저장공간에 데이터를 차례로 저장했다가 필요할 때 마지막에 넣은 데이터부터 꺼내는 구조이다.

큐는 먼저 들어온 데이터가 먼저 나가는 구조이다.


이 글은 한빛미디어의 혼공학습단 활동을 하며 적는 글입니다. 혼자 공부하는 컴퓨터 구조+운영체제 책을 참고하여 작성되었습니다.
혼공시리즈: https://hongong.hanbit.co.kr/

profile
If I can do it, you can do it.

2개의 댓글

comment-user-thumbnail
2023년 7월 7일

if you can do it, we can do it!

1개의 답글