Computer Science
🔥 컴퓨터가 이해하는 정보에 대하여 알아보도록 하자
- 비트: 0과 1을 나타내는 가장 작은 정보의 단위
- 1 byte: 8 bit,
- 1 kB: 1,000 byte
- 1 MB: 1,000 kB
- 1 GB: 1,000 MB
- 1 TB: 1,000 GB
[ 데이터 - 0과 1로 문자 표현하기 ]
- 2진법: 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 모든 숫자를 표현하는 방법
- 10진법: 숫자가 9를 넘어가는 시점에 자리 올림을 하여 0부터 9까지, 열 개의 숫자만으로 모든 수를 표현하는 방법
- Encoding: 컴퓨터가 이해하는 0과 1로 이루어진 문자 코드로 변환하는 과정
- Decoding: 0과 1로 표현된 문자를 사람이 이해하는 문조로 변환하는 과정
인코딩, 디코딩 실패 예시
- ASCII(아스키): 초창기 컴퓨터에서 사용하던 문자 집합 중 하나로, 영어의 알파벳과, 아라비아 숫자, 일부 특수 문자를 포함
- 아스키코드를 2진수로 표현함으로써 아스키 문자를 0과 1로 대응시킬 수 있습니다.
- code point: 문자 인코딩에서 글자에 부여된 고유한 값
- ex) 'A'는 10진수 65로 인코딩, 'a'는 10진수 97로 인코딩 됩니다.
- 유니코드: 통일된 문자 집합. 현대에서 가장 많이 사용되는 표준 문자 집합이며, 문자 인코딩에 있어 매우 중요한 역할을 맡고 있습니다.
- UTF-8: 유니코드가 문자의 집합이라면 UTF-8 은 유니코드 문자에 부여된 값을 인코딩하는 방식을 말합니다.
- base64: 문자뿐만 아니라, 이진 데이터까지 변환할 수 있는 인코딩 방식
- 사진 파일 등을 전송할 때 이메일 원문을 확인해 보면 base64로 인코딩 되어 있는 것을 확인할 수 있습니다.
- base64는 사실 64진법을 의미
[ 명령어 ]
- 명령어: 연산자와 피연산자로 이루어져 있습니다.
명령어 구조
- 연산 코드 = 연산자: 명령어가 수행할 동작
- 오퍼랜드 = 피연산자 = 주소 필드: 동작에 사용될 데이터가 저장된 위치
- 기계어: CPU가 이해할 수 있도록 0과 1로 표현된 정보
- 어셈블리어: 0과 1로 표현된 기계어를 읽기 편한 상태로 단순 번역한 언어
- 정리: CPU가 읽고, 이해하고, 실행하는 기계어를 사람이 읽을 수 있도록 하기 위해 어셈블리어를 사용하여 번역한다.
[ 궁금증과 해결 ]
- 문제 발생❗❗
- CPU마다 각자 명령어의 종류와 생김새가 다르다고 한다
🤔 그렇다면, 왜 굳이 CPU마다 명령어를 다르게 사용하는 것일까? 명령어를 하나로 통일해 두면 모두가 편리한 거 아닐까? 라는 궁금증이 들었다
💁 1. 역사적 배경: 각 CPU 제조사와 아키텍처의 개발은 각기 다른 시점과 배경에서 이루어졌다고 한다. ex) 인텔과 AMD는 PC시장을 목표로 / ARM은 임베디드 및 모바일 시스템을 타겟으로 개발되었기 때문에 각자의 설계 목적에 따라 명령어가 다르게 개발 되었다고 한다.
2. 표준화의 어려움: 명령어를 하나로 통일하는 것은 이론적으로는 가능하나 현실적으로는 불가능하다고 한다. 이미 시장에 많은 종류의 CPU가 사용되고 있으며, 각 CPU가 실행하는 소프트웨어와 생태계도 매우 다양하다고 한다.
또한, 새로 개발된 명령어 집합이 기존의 "다양한 생태계의 모든 용도에 적합하지 않을 수 있다." 는 이유가 있다고 한다.
3. 정리: 이러한 이유들로 인하여 다양한 용도와 최적화를 위한 아키텍처가 존재하는 것이 오히려 전체적인 기술 발전과 효율성을 위해 필요할 수 있다고 볼 수 있다.
[ 명령어 사이클 ]
- 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클: CPU로 가져온 명령어를 실행하는 단계
- 명령어 사이클: CPU는 메모리에서 명령어를 인출하고 실행하기를 반복하며 프로그램을 실행하기 때문에 인출 사이클과, 실행 사이클을 반복하게 됩니다. 바로 이 주기를 명령어 사이클이라고 합니다
- 간접 사이클: 명령어를 실행하기 위해 한 번 더 메모리에 접근하는 단계
- 위와 같은 상황시 간접 사이클 발생
명령어 사이클 구조
혹시 보면서 사이클 하나가 빠져 있다는 생각이 들수도 있다. 사실 명령어 사이클 중에서 아직 중요한 사이클이 하나 더 남아 있는데 그것은 바로 인터럽트 사이클!!
인터럽트 사이클을 이해하려면 CPU와 레지스터에 대한 이해가 선행되어야 하므로 아직 다루지 못했다고 한다.
읽어 주셔서 감사합니다 😊
'해피 코딩 > CS' 카테고리의 다른 글
[CS 운영체제] 가상 머신과 컨테이너 (3) | 2024.12.14 |
---|---|
[CS 운영체제] 운영체제, 이름만 알던 그것의 정체 (7) | 2024.12.07 |
[CS 컴퓨터 구조] CPU (1) | 2024.09.26 |
[CS 컴퓨터 구조] 컴퓨터의 큰 그림 (1) | 2024.09.10 |