"이것이 취업을 위한 컴퓨터 과학이다 with CS 기술면접" 책을 참고했습니다.
1. 컴퓨터 구조의 큰 그림
컴퓨터의 구조는 크게 컴퓨터가 이해하는 정보(데이터와 명령어)와 컴퓨터의 핵심 부품(CPU, 메모리, 보조기억장치, 입출력장치)로 나눌 수 있다. 각각의 내용에 대해서 간략히 설명하면 다음과 같다.
- 데이터 : 숫자, 문자, 이미지와 같은 정적 정보로 명령어의 재료
- 명령어 : 수행할 동작과 대상으로 나누어져 있는 기능
- CPU(Central Processing Unit) : 정보(데이터, 명령어)를 읽고 해석해서 실행하는 부품
- 핵심은 주요 구성 요소(ALU, 제어장치, register)와 빠른 명령어 처리를 위한 기술 정도만 이해하자.
- 메인 메모리 : RAM, ROM이 있지만 주로 RAM을 의미하며, 현재 실행 중인 프로그램을 구성하는 데이터와 명령어를 저장하는 부품으로 이해하면 됨. 즉, CPU가 처리할 정보에 대해서 저장하고 있는 부품.
- 메모리는 주소와 휘발성이라는 개념에 대해서 잘 인지하자.
- CPU와 메모리 사이에는 하나 이상의 캐시 메모리가 존재하며, 캐시 메모리는 CPU가 좀 더 빨리 메모리에 저장된 정보에 접근하기 위해 사용하는 저장장치이다.
- 보조기억장치 : 비휘발성의 데이터를 저장하는 저장장치. 하드 디스크, SSD, USB 등이 여기에 해당한다.
- 보조기억장치의 종류와 기본적인 설명에 대해 이해하고, RAID 라는 기술에 대해서 확인하자.
- 입출력장치 : 컴퓨터 외부에 연결되어 내부와 정보를 교환하는 장치.
- 보조기억장치와 연관이 크다. 보조기억장치가 컴퓨터 내부와 정보를 주고받는 방식이 입출력장치와 크지 않기 때문에 묶어서 주변장치라고 통칭하기도 한다.
- 메인보드와 버스 : 핵심 부품들이 실제 부착된 기판을 메인보드(혹은 마더보드)라고 부르며 부착된 각각의 부품들이 정보를 주고 받기 위한 통로를 버스라고 부른다.
- 버스는 다양한 종류가 있지만 핵심은 시스템 버스가 가장 중요하다.
위 내용을 정리하면 아래와 같은 구조를 띄게 된다.
컴퓨터 구조
├── 컴퓨터의 핵심부품
├── CPU
├── 주요 구성 요소
├── 빠른 명령어 처리를 위한 기술
├── 메모리
├── RAM
├── 엔디안(메모리가 데이터에 저장되는 순서)
├── 캐시 메모리
├── 보조기억장치 : RAID(안전하고 안정적으로 보조기억장치를 구성하는 기술)
└── 입출력장치 : 입출력 기법
├── 컴퓨터가 이해하는 정보
├── 데이터
├── 0과 1로 숫자 표현(실수, 정수)
├── 0과 1로 문자 표현
├── 명령어
├── 명령어 종류
├── 명령어 사이클
이제 위에서 정의한 내용을 정보부터 시작해서 하나하나 살펴보자.
2. 컴퓨터가 이해하는 정보
컴퓨터, 즉 CPU는 기본적으로 0과 1만을 이해할 수 있다. 여기서 이 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 하며, 1비트는 0 또는 1의 정보를 나타내므로 N개의 비트는 2^n개의 정보를 나타낼 수 있다.
다만 비트는 너무 작은 단위이므로 이 비트를 8개로 묶은 단위인 바이트(byte)를 일반적으로 사용하며, 그걸 1000개 단위로 묶어 우리가 아는 KB, MB, GB, TB 등의 단위로 환산해서 사용한다.
CPU가 한 번에 처리가능한 정보 단위를 워드(word)라고 하는데 현재 컴퓨터 대부분의 워드 크기는 32bit 혹은 64bit이다.
2-1 0과 1로 숫자 표현하기
CPU는 위에서 표현했던 것처럼 일반적으로 0과 1, 즉 2진법을 사용해서 표현한다. 다만 2진수, 10진수, 16진수에 대한 설명은 이미 알고 있다는 것을 전제하고 넘어가기로 한다.
문제는 컴퓨터 내부에서 2진수를 소수로 표현할 때 발생하는데, 표현하고자 하는 소수와 실제 저장된 소수에는 오차가 발생한다.
- 오차가 발생하는 원인은 부동 소수점 표현 방식을 사용하는데 있다.
- 예를 들어 123.123 이라는 소수를 컴퓨터는 1.23123 * * 10^2 의 형태를 사용해 저장한다.(앞의 1.23123을 가수, 뒤 10^2를 지수라고 한다)
- 1/3과 같은 무한소수를 위와 같은 부동소수점 형태로 표현하기에는 어려움이 있다. 따라서 일부 소수점을 생략하여 저장한다.
참고
[프로그래밍] 보수의 개념, 1의보수, 2의보수 정의 및 컴퓨터에서의 수의 표현
📢 컴퓨터에서의 수표현 ▼ 컴퓨터는 10진수가 아닌 2진수로 수를 표현한다. 일반적으로 컴퓨터에서 사용되는 정수형의 종류는 char (8bit,1byte) , short (16bit, 2byte) , int(32bit , 4byte) , long (64bit , 8byte)
dydals5678.tistory.com
IEEE 754 부동소수점(floating Point)
IEEE 754의 부동소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.예시−118.625(십진법)를 IEEE 754(32비
velog.io
2-2 0과 1로 문자 표현하기
컴퓨터가 이해할 수 있는 문자들의 집합은 문자 집합(character set)이라고 부른다. 그리고 이 문자 집합에 속한 문자를 컴퓨터가 이해 가능한 문자 코드로 변환하는 과정을 문자 인코딩이라고 한다. 반대의 과정은 문자 디코딩. 대표적인 문자 집합은 다음과 같다.
- 아스키 코드 : 초창기 사용하던 문자 집합으로 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한다.
- EUC-KR : 한글 표기가 가능한 문자 집합으로, 아스키 문자는 1바이트, 한글 글자는 2바이트 크기의 코드를 부여한다. 다만 모든 한글이 표현 가능한 것은 아니다.
- 유니코드 : 특수문자, 화살표, 이모티콘과 훨씬 많은 언어를 표현 가능한 통일된 문자 집합으로 현재 가장 많이 사용되는 표준 문자 집합이다. 인코딩방식에 따라 UTF-8, UTF-16, UTF-32 등을 가지고 있다.
- base64 : 문자 뿐만 아니라 이진 데이터까지 변환할 수 있는 인코딩 방식을 의미한다.
위에서 설명하는 모든 변환 방식을 안다기보다는 내용에 대해서 이해하고 필요하면 변환 방식에 대해서 찾아보는 것이 좋다.
2-3 명령어
명령어는 수행할 동작과 수행할 대상으로 이루어져 있으며 각각의 부분이 저장되는 영역을 필드라고 한다.
- 연산 코드(opcode) : 수행할 동작을 의미한다.
- CPU에 따라서 연산 코드의 구체적인 생김새가 조금씩 다르다.
- 대표적인 연산코드 유형은 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어 등이 있다.
- 오퍼랜드(operand) : 수행할 대상을 의미하며, 데이터 자체가 될 수도 있고 데이터가 저장된 위치가 될 수도 있다.
- 많은 경우 데이터 자체보다는 데이터가 저장된 위치, 즉 메모리 주소나 레지스터의 이름이 기재된다. 그렇기 때문에 오퍼랜드 필드를 주소 필드(address field)라고 부르기도 한다.
CPU가 이해가능하도록 0과 1로 표현된 정보를 있는 그대로 표현한 언어를 기계어라고 한다. 다만 그럴 경우 사람이 이해하기에는 문제가 있기 때문에 기계어를 한단계 번역한 언어를 어셈블리어라고 한다.
명령어 사이클 : CPU가 명령어를 처리하는 과정에서 프로그램 속 각각의 명령어는 일정한 주기를 반복하며 실행된다.
명령어 사이클은 크게 인출 -> 실행 사이클 순으로 실행되고 순환하지만, 메모리 주소에 접근하는 등 두 과정 사이에 있는 과정을 간접 사이클이라고 한다.
참고
명령어의 구조
명령어: 연산 코드 + 오퍼랜드연산 코드(operation code): 명령어가 수행할 연산(=연산자)오퍼랜드(operand): 연산에 사용할 데이터 또는 그것이 저장된 위치(=피연산자)연산 코드 필드: 명령어에서 연산
velog.io
'Computer Science' 카테고리의 다른 글
[CS] 3-3. 운영체제 - 가상 메모리, 파일 시스템 (0) | 2024.10.09 |
---|---|
[CS] 3-2. 운영체제 - 동기화와 교착 상태, CPU 스케줄링 (4) | 2024.10.05 |
[CS] 3-1. 운영체제 - 전체 개요, 프로세스 & 스레드 (3) | 2024.10.04 |
[CS] 2-3. 컴퓨터 구조 - 메모리, 보조기억장치, 입출력장치 (4) | 2024.09.27 |
[CS] 2-2. 컴퓨터 구조 - CPU, 레지스터, 인터럽트 (3) | 2024.09.25 |
"이것이 취업을 위한 컴퓨터 과학이다 with CS 기술면접" 책을 참고했습니다.
1. 컴퓨터 구조의 큰 그림
컴퓨터의 구조는 크게 컴퓨터가 이해하는 정보(데이터와 명령어)와 컴퓨터의 핵심 부품(CPU, 메모리, 보조기억장치, 입출력장치)로 나눌 수 있다. 각각의 내용에 대해서 간략히 설명하면 다음과 같다.
- 데이터 : 숫자, 문자, 이미지와 같은 정적 정보로 명령어의 재료
- 명령어 : 수행할 동작과 대상으로 나누어져 있는 기능
- CPU(Central Processing Unit) : 정보(데이터, 명령어)를 읽고 해석해서 실행하는 부품
- 핵심은 주요 구성 요소(ALU, 제어장치, register)와 빠른 명령어 처리를 위한 기술 정도만 이해하자.
- 메인 메모리 : RAM, ROM이 있지만 주로 RAM을 의미하며, 현재 실행 중인 프로그램을 구성하는 데이터와 명령어를 저장하는 부품으로 이해하면 됨. 즉, CPU가 처리할 정보에 대해서 저장하고 있는 부품.
- 메모리는 주소와 휘발성이라는 개념에 대해서 잘 인지하자.
- CPU와 메모리 사이에는 하나 이상의 캐시 메모리가 존재하며, 캐시 메모리는 CPU가 좀 더 빨리 메모리에 저장된 정보에 접근하기 위해 사용하는 저장장치이다.
- 보조기억장치 : 비휘발성의 데이터를 저장하는 저장장치. 하드 디스크, SSD, USB 등이 여기에 해당한다.
- 보조기억장치의 종류와 기본적인 설명에 대해 이해하고, RAID 라는 기술에 대해서 확인하자.
- 입출력장치 : 컴퓨터 외부에 연결되어 내부와 정보를 교환하는 장치.
- 보조기억장치와 연관이 크다. 보조기억장치가 컴퓨터 내부와 정보를 주고받는 방식이 입출력장치와 크지 않기 때문에 묶어서 주변장치라고 통칭하기도 한다.
- 메인보드와 버스 : 핵심 부품들이 실제 부착된 기판을 메인보드(혹은 마더보드)라고 부르며 부착된 각각의 부품들이 정보를 주고 받기 위한 통로를 버스라고 부른다.
- 버스는 다양한 종류가 있지만 핵심은 시스템 버스가 가장 중요하다.
위 내용을 정리하면 아래와 같은 구조를 띄게 된다.
컴퓨터 구조
├── 컴퓨터의 핵심부품
├── CPU
├── 주요 구성 요소
├── 빠른 명령어 처리를 위한 기술
├── 메모리
├── RAM
├── 엔디안(메모리가 데이터에 저장되는 순서)
├── 캐시 메모리
├── 보조기억장치 : RAID(안전하고 안정적으로 보조기억장치를 구성하는 기술)
└── 입출력장치 : 입출력 기법
├── 컴퓨터가 이해하는 정보
├── 데이터
├── 0과 1로 숫자 표현(실수, 정수)
├── 0과 1로 문자 표현
├── 명령어
├── 명령어 종류
├── 명령어 사이클
이제 위에서 정의한 내용을 정보부터 시작해서 하나하나 살펴보자.
2. 컴퓨터가 이해하는 정보
컴퓨터, 즉 CPU는 기본적으로 0과 1만을 이해할 수 있다. 여기서 이 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 하며, 1비트는 0 또는 1의 정보를 나타내므로 N개의 비트는 2^n개의 정보를 나타낼 수 있다.
다만 비트는 너무 작은 단위이므로 이 비트를 8개로 묶은 단위인 바이트(byte)를 일반적으로 사용하며, 그걸 1000개 단위로 묶어 우리가 아는 KB, MB, GB, TB 등의 단위로 환산해서 사용한다.
CPU가 한 번에 처리가능한 정보 단위를 워드(word)라고 하는데 현재 컴퓨터 대부분의 워드 크기는 32bit 혹은 64bit이다.
2-1 0과 1로 숫자 표현하기
CPU는 위에서 표현했던 것처럼 일반적으로 0과 1, 즉 2진법을 사용해서 표현한다. 다만 2진수, 10진수, 16진수에 대한 설명은 이미 알고 있다는 것을 전제하고 넘어가기로 한다.
문제는 컴퓨터 내부에서 2진수를 소수로 표현할 때 발생하는데, 표현하고자 하는 소수와 실제 저장된 소수에는 오차가 발생한다.
- 오차가 발생하는 원인은 부동 소수점 표현 방식을 사용하는데 있다.
- 예를 들어 123.123 이라는 소수를 컴퓨터는 1.23123 * * 10^2 의 형태를 사용해 저장한다.(앞의 1.23123을 가수, 뒤 10^2를 지수라고 한다)
- 1/3과 같은 무한소수를 위와 같은 부동소수점 형태로 표현하기에는 어려움이 있다. 따라서 일부 소수점을 생략하여 저장한다.
참고
[프로그래밍] 보수의 개념, 1의보수, 2의보수 정의 및 컴퓨터에서의 수의 표현
📢 컴퓨터에서의 수표현 ▼ 컴퓨터는 10진수가 아닌 2진수로 수를 표현한다. 일반적으로 컴퓨터에서 사용되는 정수형의 종류는 char (8bit,1byte) , short (16bit, 2byte) , int(32bit , 4byte) , long (64bit , 8byte)
dydals5678.tistory.com
IEEE 754 부동소수점(floating Point)
IEEE 754의 부동소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.예시−118.625(십진법)를 IEEE 754(32비
velog.io
2-2 0과 1로 문자 표현하기
컴퓨터가 이해할 수 있는 문자들의 집합은 문자 집합(character set)이라고 부른다. 그리고 이 문자 집합에 속한 문자를 컴퓨터가 이해 가능한 문자 코드로 변환하는 과정을 문자 인코딩이라고 한다. 반대의 과정은 문자 디코딩. 대표적인 문자 집합은 다음과 같다.
- 아스키 코드 : 초창기 사용하던 문자 집합으로 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한다.
- EUC-KR : 한글 표기가 가능한 문자 집합으로, 아스키 문자는 1바이트, 한글 글자는 2바이트 크기의 코드를 부여한다. 다만 모든 한글이 표현 가능한 것은 아니다.
- 유니코드 : 특수문자, 화살표, 이모티콘과 훨씬 많은 언어를 표현 가능한 통일된 문자 집합으로 현재 가장 많이 사용되는 표준 문자 집합이다. 인코딩방식에 따라 UTF-8, UTF-16, UTF-32 등을 가지고 있다.
- base64 : 문자 뿐만 아니라 이진 데이터까지 변환할 수 있는 인코딩 방식을 의미한다.
위에서 설명하는 모든 변환 방식을 안다기보다는 내용에 대해서 이해하고 필요하면 변환 방식에 대해서 찾아보는 것이 좋다.
2-3 명령어
명령어는 수행할 동작과 수행할 대상으로 이루어져 있으며 각각의 부분이 저장되는 영역을 필드라고 한다.
- 연산 코드(opcode) : 수행할 동작을 의미한다.
- CPU에 따라서 연산 코드의 구체적인 생김새가 조금씩 다르다.
- 대표적인 연산코드 유형은 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어 등이 있다.
- 오퍼랜드(operand) : 수행할 대상을 의미하며, 데이터 자체가 될 수도 있고 데이터가 저장된 위치가 될 수도 있다.
- 많은 경우 데이터 자체보다는 데이터가 저장된 위치, 즉 메모리 주소나 레지스터의 이름이 기재된다. 그렇기 때문에 오퍼랜드 필드를 주소 필드(address field)라고 부르기도 한다.
CPU가 이해가능하도록 0과 1로 표현된 정보를 있는 그대로 표현한 언어를 기계어라고 한다. 다만 그럴 경우 사람이 이해하기에는 문제가 있기 때문에 기계어를 한단계 번역한 언어를 어셈블리어라고 한다.
명령어 사이클 : CPU가 명령어를 처리하는 과정에서 프로그램 속 각각의 명령어는 일정한 주기를 반복하며 실행된다.
명령어 사이클은 크게 인출 -> 실행 사이클 순으로 실행되고 순환하지만, 메모리 주소에 접근하는 등 두 과정 사이에 있는 과정을 간접 사이클이라고 한다.
참고
명령어의 구조
명령어: 연산 코드 + 오퍼랜드연산 코드(operation code): 명령어가 수행할 연산(=연산자)오퍼랜드(operand): 연산에 사용할 데이터 또는 그것이 저장된 위치(=피연산자)연산 코드 필드: 명령어에서 연산
velog.io
'Computer Science' 카테고리의 다른 글
[CS] 3-3. 운영체제 - 가상 메모리, 파일 시스템 (0) | 2024.10.09 |
---|---|
[CS] 3-2. 운영체제 - 동기화와 교착 상태, CPU 스케줄링 (4) | 2024.10.05 |
[CS] 3-1. 운영체제 - 전체 개요, 프로세스 & 스레드 (3) | 2024.10.04 |
[CS] 2-3. 컴퓨터 구조 - 메모리, 보조기억장치, 입출력장치 (4) | 2024.09.27 |
[CS] 2-2. 컴퓨터 구조 - CPU, 레지스터, 인터럽트 (3) | 2024.09.25 |