Loading [MathJax]/jax/output/CommonHTML/jax.js
반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 3를 읽고 정리한 내용입니다.

 

03-1 소스 코드와 명령어

고급 언어와 저급 언어

고급 언어: 사람이 이해하고 작성하기 쉽게 만들어진 언어

저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어

⇒ 컴퓨터가 이해하기 위해서는 우리가 작성하는 고급 언어가 저급 언어로 변환되어야 함

 

저급 언어 종류

  • 기계어: 0과 1의 명령어 비트로 이루어진 언어
  • 어셈블리어: 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 번역한 언어
 

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

고급 언어가 저급 언어로 변환되는 방식

  • 컴파일 방식
  • 인터프리터 방식

 

컴파일 언어

컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어 (C언어)

소스 코드를 처음부터 끝까지 저급 언어로 컴파일하고 이 과정에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패

소스 코드는 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 함
 

인터프리터 언어

소스 코드가 한줄씩 실행되는 고급 언어 (Python)

  • 인터프리터: 소스 코드를 한줄씩 조급 언어로 변환하여 실행해주는 도구
  • N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 코드가 수행됨

 

 

 

03-2 명령어의 구조

연산 코드와 오퍼랜드

명령어는 연산 코드와 오퍼랜드(operand)로 구성되어 있음

  • 연산 코드 : 명령어가 수행할 연산 (연산자)
  • 오퍼랜드 : 연산에 사용할 데이터가 저장된 위치 (피연산자)

명령어 예시

연산코드 오퍼랜드
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1

 

오퍼랜드(주소 필드)

연산에 사용할 데이터 또는 데이터가 저장된 위치

주로 메모리 주소나 레지스터 이름이 담김

mov eax, 0 ---> 오퍼랜드가 두 개인 경우
pop rbp    ---> 오퍼랜드가 한 개인 경우
ret        ---> 오퍼랜드가 없는 경우
  • 2-주소 명령어: 오퍼랜드가 두 개인 명령어
  • 1-주소 명령어: 오퍼랜드가 한 개인 명령어
  • 0-주소 명령어: 오퍼랜드가 하나도 없는 경우

 

연산 코드

명령어가 수행할 연산을 의미하고 크게 4가지 유형이 있음

  1. 데이터 전송: MOVE, STORE, LOAD(FETCH), PUSH, POP
  2. 산술/논리 연산: ADD/SUBTRACT, INCREMENT, AND, COMPARE
  3. 제어 흐름 변경: JUMP, HALT, CALL
  4. 입출력 제어: READ, WRITE, START IO, TETS IO

 

주소 지정 방식

오퍼랜드 필드에 데이터를 담게 되면 오퍼랜드 필드로 표현할 수 있는 정보의 크기가 제한되기 때문에 메모리 주소를 주로 사용

EX) 명령어(연산코드+오퍼랜드)의 크기가 16비트일 때, 연산 코드 필드가 4비트인 2-주소 명령어

  • 연산코드 4비트
  • 오퍼랜드는 필드당 (16-4)/2 = 6비트, 표현할 수 있는 정보의 가짓수가 26=64밖에 되지 않음

 

오퍼랜드 필드 안에 메모리 주소가 담긴다면, (예를 들어 한 주소에 16비트를 저장) 표현할 수 있는 정보는 216으로 확 커짐

  • 유효주소 : 연산 코드에 사용할 데이터가 저장된 위치
  • 주소 지정 방식: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법으로 5가지 방법 소개

 

즉시 주소 지정 방식

연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식

표현할 수 있는 데이터의 크기는 작아지지만 데이터를 메모리나 레지스터에서 찾는 과정이 없기때문에 빠름

직접 주소 지정 방식

오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식

유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수 만큼 줄어듦

간접 주소 지정 방식

유효 주소의 주소를 필드에 명시

직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어짐

다만 두 번의 메모리 접근이 필요하기 때문에 좀 더 느림

레지스터 주소 지정 방식

연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시 (직접 주소 지정 방식과 비슷)

CPU 내부에 있는 레지스터에 접근하므로 직접 주소 지정 방식보다 빠름

레지스터 간접 주소 지정 방식

연산에 사용할 데이터를 메모리에 저장하고 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시

메모리 접근하는 횟수가 한번으로 줄어듬

 

참고

 


1. 책 "혼자 공부하는 컴퓨터 구조+운영체제"
2. 유튜브 "혼자 공부하는 컴퓨터 구조 + 운영체제"

 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
CPU 성능 향상 기법  (0) 2024.07.02
데이터  (0) 2024.06.27
컴퓨터 구조  (0) 2024.06.25
반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 2를 읽고 정리한 내용입니다.

 

02-1 0과 1로 숫자를 표현하는 방법

정보 단위
  • bit: 0과 1을 나타내는 가장 작은 정보 단위
  • byte: 8개의 bit를 묶은 단위 (28=256 개의 정보를 표현)
  • 1 kilobyte: 1000bytes
  • 1 gigabyte: 1000 kilobytes

1kB는 1024byte라고 표현하는 것은 잘못된 관습. 1024개를 묶어 표현한 단위는 KiB(키비), MiB, GiB

워드(word) : CPU가 한번에 처리할 수 있는 데이터 크기

  • CPU마다 다르지만 워드 크기는 대부분 32비트 아니면 64비트
  • 인텔이 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU

 

이진법

수학에서 0과 1만으로 모든 숫자를 표현하는 방법

일상에서 우리는 십진수를 사용하지만 컴퓨터는 2진수를 이해할 수 있기 때문에 변환해서 알려줘야 함

2진수 표기법

ex) 10진수에서 8을 2진수로 표기

  • 1000(2)
  • 0b1000

이진수의 음수 표현

컴퓨터는 0과 1만 이해할 수 있기 때문에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 함

⇒ 2의 보수를 구해 이 값을 음수로 간주하는 방법 사용

2의 보수 구하는 방법

  • 모든 0과 1을 뒤집고 거기에 1을 더한 값
  • 예)
    • 11(2)의 보수는 01(2)
    • 11(2)00(2)01(2)

실제로 2진수 자체만 봐서는 음수인지 양수인지 구별하기 어려워서 컴퓨터 내부에서는 플래그(Flag)라는 부가정보를 사용

 

16진법

2진수만으로 숫자를 표현하기에 숫자의 길이가 너무 길어진다는 단점이 있음.

⇒ 16진법 사용

 

표기법 (10진수 15을 16진수로 표기)

  • 15(16)
  • 0x15

굳이 16진수를 사용하는 이유는 2진수와 16진수 간의 변환이 쉽기 때문

16진수 → 2진수

1A2B(16)

⇒ 0001 1010 0010 1011

2진수 → 16진수

11010101(2)

D5(16)

02-2. 0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

문자집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음

문자 인코딩 : 문자 집합에 속한 문자를 0과 1로 변환하는 과정

문자 디코딩 : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

아스키코드

  • ASCII: American Standard Code for Information Interchange
  • 문자집합 중 하나로 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함
  • 문자들은 각각 7비트로 표현되는데 27=128 개의 문자 표현 가능
    • 실제로는 8비트로 표현되지만 1비트는 parity bit 라고 불리는 오류 검출을 위해 사용됨

아스키 코드 표

아스키 코드표를 이용해 표현하고자 하는 문자를 0과 1로 표현할 수 있음

하지만 128개의 문자밖에 표현하지 못하고 특히 한글을 포함한 영어권 외의 나라들은 자신들의 언어를 0과 1로 표현할 수 없음

⇒ EUC-KR 인코딩 등장

 

EUC-KR

한글은 초성, 중성, 종성의 조합으로 이루어져 있어 2가지 인코딩 방식 존재

  1. 한글 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
  2. 한글 조합형 인코딩: 초성, 중성, 종성 각각을 위한 비트열을 할당하여 조합으로 하나의 글자 코드를 완성하는 인코딩 방식

 

EUC-KR은 완성형 인코딩 방식으로 2바이트 크기의 코드를 부여
EX) ‘가’ 는 b0a0으로 표현되는데 2진수로 변환해보면 1011 0000 1010 0000 으로 16bits → 2바이트

더보기

EUC-KR 코드표 (일부)

총 2350개 정도의 한글 단어를 표현할 수 있음

  • 아스키 코드보다 표현할 수 있는 문자가 많아졌지만 모든 한글 조합을 표현할 수 있을 정도로 많은 양은 아님
  • 쀍, 쀓 믜 같은 글자는 EUC-KR로 표현할 수 없음

⇒ EUC-KR의 확장된 버전으로 CP949 가 등장했고 8822자가 추가됨

 

유니코드와 UTF-8

유니코드 : EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수 문자, 이모티콘까지도 코드로 표현할 수 있는 통일된 문자집합

유니코드 문자집합

https://www.unicode.org/charts/PDF/UAC00.pdf

“한”과 “글”이라는 단어를 찾아보면,

  • 한: D55C(16)
  • 글: AE00(16)

아스키코드나 EUC-KR과 다르게 문자집합에서 찾은 고유한 값을 다시 인코딩

  • UTF-8, UTF-16, UTF-32등이 있음 (Unicode Transformation Format)
  • UTF-8 이 가장 대중적

UTF-8

  • 통상 1바이트에서 4바이트까지의 인코딩 결과를 만들어냄

  • 첫 코드 포인트와 마지막 코드 포인트 값의 범위를 통해 인코딩된 글자가 몇바이트로 구성되는지 알 수 있음
  • “한”과 “글”의 유니코드 값은 각각 D55C, AE00으로 0800~FFFF 사이에 속한다. 그러므로 각각 3바이트로 표현될 수 있음

 

  • D55C는 1101 0101 0101 1100 으로 이를 위에 X로 표시된 자리수에 순차적으로 넣어주면 된다
  • 한: 11101101 10010101 10011100

 

참고


1. 책 "혼자 공부하는 컴퓨터 구조+운영체제"
2. 유튜브 "혼자 공부하는 컴퓨터 구조 + 운영체제"

 
 
 
 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
CPU 성능 향상 기법  (0) 2024.07.02
명령어  (0) 2024.06.30
컴퓨터 구조  (0) 2024.06.25
반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 을 읽고 정리한 내용입니다.

컴퓨터 구조를 공부해야 하는 이유가 뭘까?

  • 컴퓨터 구조를 이해하면 문제 해결 능력이 향상됨
  • 프로그래밍 언어 문법만으로 알기 어려운 성능/용량/비용을 고려하며 개발할 수 있음

 

컴퓨터 구조의 큰 그림


컴퓨터 구조 지식은 크게 2가지

  • 컴퓨터가 이해하는 정보
  • 컴퓨터의 4가지 핵심 부품
컴퓨터가 이해하는 정보
  • 0과 1로 표현된 정보만을 이해하는데 크게 2가지 종류
    • 데이터
    • 명령어

컴퓨터의 4가지 핵심 부품

  • 중앙처리장치 (CPU: Central Processing Unit)
  • 주기억장치 (Main memory, RAM)
  • 보조기억장치 (Secondary storage)
  • 입출력장치(input/output(I/O) device)

  1. 가장 큰 사각형이 메인보드
  2. 메인 보드 안에 시스템 버스(양방항 수직 화살표)가 있음
  3. CPU 내부에는 산술논리연산 장치(ALU), 제어장치 와 여러 레지스터가 있음
    • CPU는 메인보드 내 시스템 버스와 연결되어 있음
  4. 메모리는 메인보드 내 시스템 버스와 연결되어 있음
  5. 보조기억장치는 메인 보드 내 시스템 버스와 연결되어 있음
  6. 모니터, 키보드, 마우스 등은 메인보드 내 시스템 버스와 연결되어있고 이들을 입출력장치라고 부름

⇒ 컴퓨터의 4가지 핵심 부품은 메인보드 내의 시스템 버스를 통해 모두 연결되어 있음

메모리

  • 현재 실행되는 명령어와 데이터를 저장하는 부품
    • 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 함
  • 컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터가 중구난방으로 저장되어 있으면 안되고 정돈되어있어야 함

→ 주소라는 개념이 사용됨

  • 1/2번지에 명령어
  • 3/4번지에 데이터
  • 5/6번지에 아무것도 저장되어 있지 않음

CPU

  • 메모리에 저장된 명령어를 읽어 들이고, 해석하고 실행
  • 내부 구성요소는 크게 3가지
    • 산술논리연산장치(ALU, Arithmetic Logic Unit) : 쉽게 말해 계산기
    • 레지스터 (Register): 내부의 작은 임시 저장 장치
    • 제어장치 (CU, Control Unit)
      • Control signal이라는 전기 신호를 내보고 명령어를 해석하는 장치
      ex) CPU가 메모리에 저장된 값을 읽고 싶을 때 메모리를 향해 메모리 읽기라는 제어 신호를 보냄
      ex) CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어 신호를 보냄

 

예시를 통한 CPU를 구성하는 세가지 부품의 역할

  1. 제어장치는 1번지에 저장된 명령어를 읽어 들이기 위해 메모리에 “메모리 읽기” 제어 신호 전송

 


2. 메모리는 1번지에 저장된 명령어를 CPU에 건네주고 이 명령어는 레지스터에 저장됨.
제어 장치는 읽어 들인 명령어를 해석한 뒤 3번지와 4번지에 저장된 데이터가 필요하다고 판단.
제어장치는 3/4번지에 저장된 데이터를 읽어 들이기 위해 메모리에 “메모리 읽기” 제어 진호를 전송

3. 메모리는 3/4 번지에 저장된 데이터를 CPU에 건내주고 각각 다른 레지스터에 저장됨.
ALU는 읽어 들인 데이터로 연산을 수행. 계산의 결과값을 레지스터에 저장. 계산이 끝났다면 첫번째 명령어의 실행은 끝남

4. 제어장치는 2번지에 저장된 다음 명령어를 읽어 들이기 위해 메모리에 “메모리 읽기”제어 신호를 보냄

5. 메모리는 2번지에 저장된 명령어를 CPU에 건네주고, 이 명령어는 레지스터에 저장됨. 제어장치는 이 명령어를 해석한 뒤 메모리에 계산 결과를 저장해야 한다고 판단

 

6. 제어 장치는 계산 결과를 저장하기 위해 메모리에 “메모리 쓰기” 제어 신호와 함께 220을 보냄. 메모리가 계산 결과를 저장하면 두번째 명령어의 실행도 끝남.

정리

  • CPU는 메모리에 저장된 값을 읽고/해석/실행하는 장치
  • CPU 내부에는 ALU, 레지스터, Control Unit이 있음
    • ALU : 계산하는 장치
    • 레지스터 : 임시 저장 자잋
    • Control Unit: 제어 신호를 발생시키고 명령어를 해석하는 장치

보조기억장치

  • 메모리는 프로그램의 명령어와 데이터를 저장하지만 2가지 치명적인 단점 존재
    • 가격이 비싸 저장 용량이 적음
    • 전원이 꺼지면 저장된 내용을 잃음

⇒ 보조기억장치의 필요. 보관할 프로그램을 저장

종류

  • SSD, HDD, USB 메모리

입출력장치

  • 마이크, 스피커, 프린터, 마우스, 키보드 처럼 컴퓨터 외부에 연결되어 내부와 정보를 교환

메인보드와 시스템 버스

메인보드

  • 컴퓨터의 핵심 부품들은 모두 메인보드 판에 연결됨
  • 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 연결단자가 있음

시스템버스

  • 메인보드에 연결된 부품들은 버스라는 통로를 통해 정보를 주고 받음
  • 컴퓨터의 4가지 핵심 부품을 연결하는 가장 중요한 버스

시스템버스 구성

  • 주소 버스: 주소를 주고 받는 통로
  • 데이터 버스: 명령어와 데이터를 주고 받는 통로
  • 제어 버스: 제어 신호를 주고 받는 통로
    • CPU 구성요소 중 제어 장치(Control Unit)는 제어 버스를 통해 제어 신호를 보냄

CPU 작동 예시를 통한 시스템 버스 이해

  • CPU가 메모리 속 명령어를 읽어 들이기 위해 제어장치에서 “메모리 읽기”라는 신호를 보낼 때
    • 실제로는 제어버스로 “메모리 읽기” 제어 신호
    • 주소 버스로 읽고자 하는 주소를 보냄
    ⇒ 메모리는 데이터 버스로 CPU가 요청한 주소에 있는 내용을 보내줌

메모리에 어떤 값을 저장하는 경우

  • CPU는 데이터 버스를 통해 메모리에 저장할 값
  • 주소버스를 통해 저장할 주소
  • 제어 버스를 통해 “메모리 쓰기” 제어 신호를 보냄

 

참고


1. 책 "혼자 공부하는 컴퓨터 구조+운영체제"
2. 유튜브 "혼자 공부하는 컴퓨터 구조 + 운영체제"

 
 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
CPU 성능 향상 기법  (0) 2024.07.02
명령어  (0) 2024.06.30
데이터  (0) 2024.06.27

+ Recent posts