반응형

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

06-1 RAM의 특징과 종류

RAM의 특징

  • 실행할 프로그램의 명령어와 데이터가 저장되는 곳
  • 전원을 끄면 저장된 명령어와 데이터가 모두 날아감 → 휘발성 저장 장치(volatile memory)
  • 비휘발성 저장장치(non-volatile memory): 전원이 꺼져도 저장된 내용이 유지되는 저장 장치로하드디스크, SSD, USB 메모리 등과 같은 보조기억장치가 있음
  • 보조기억장치는 전원을 꺼도 내용을 유지하지만 CPU가 직접 접근하지 못함

⇒ 보조기억장치에는 보관할 대상을 저장하고 RAM에는 실행할 대상을 저장

 

RAM의 용량과 성능

  • CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 가져와야 함
  • RAM의 용량이 적다면 보조기억장치에서 RAM으로 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어짐

RAM의 용량이 적은 경우
RAM용량이 프로그램 A,B,C를 모두 저장할 정도로 충분히 큰 경우

 

RAM의 종류

DRAM

  • Dynamic RAM
  • 저장된 데이터가 동적으로 변하는(사라지는) RAM을 의미
    • 시간이 지나면 저장된 데이터가 점차 사라지는 RAM으로 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장) 해야 함
  • 위 단점에도 불구하고 아래 장점들 때문에 가장 많이 쓰임
    • 소비 전력이 비교적 낮음
    • 저렴
    • 집적도가 높아 대용량 설계 용이 (더 작고 빽빽하게 만들 수 있다는 의미)

SRAM

  • Static RAM
  • 저장된 데이터가 변하지 않는 RAM으로 일반적으로 DRAM보다 빠름
  • 대용량으로 만들어질 필요는 없지만 속도가 빨라야하는 곳에 쓰임 (ex) 캐시 메모리)

 

SDRAM

  • Synchronous Dynamic RAM
  • 클럭 신호와 동기화된 발전된 형태의 DRAM
    • 클럭에 맞춰 동작하며 클럭마다 CPU와 정보를 주고받을 수 있는 DRAM

DDR SDRAM

  • Double Data Rate SDRAM 으로 최근 가장 흔히 사용됨
  • 대역폭을 넓혀 속도를 빠르게 만든 SDRAM

* 대역폭(Data rate): 데이터를 주고받는 길의 너비

SDRAM을 SDR(Single Data Rate) SDRAM라고도 부름

  • DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 넓은 SDRAM (SDR SDRAM 보다 4배 넓음)
  • DDR3 SDRAM : DDR2 SDRAM보다 대역폭이 2배 넓음 (SDR SDRAM보다 8배)
  • DDR4 SDRAM : DDR3 SDRAM보다 대역폭이 2배 넓음 (SDR SDRAM보다 16배)

 

06-2 메모리의 주소 공간

메모리에 저장된 정보의 위치를 나타내는 주소는 두 종류가 있음

  • 물리주소: 메모리 하드웨어가 사용하는 주소
  • 논리주소: CPU와 실행중인 프로그램이 사용하는 주소

물리주소와 논리주소

  • CPU가 이해하는 주소가 논리 주소라고는 해도 CPU가 메모리와 상호작용하려면 논리주소와 물리주소 간의 변환의 이루어져야 함
    • 아래 그림에서 인터넷 브라우저의 0번지와 게임의 0번지는 CPU가 이해하기는 다르지만 실제 물리주소로 변환되지 않으면 메모리가 이해할 수 없음

⇒ CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU, Memory Management Unit)라는 하드웨어에 의해 논리주소 ↔ 물리주소 변환이 수행됨

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터(프로그램의 기준 주소) 값을 더하여 논리주소→물리주소로 변환

  • 베이스 레지스터: 프로그램의 가장 작은 물리 주소로 프로그램의 첫 물리 주소를 저장하는 셈

  • CPU가 "프로그램 A의 100번지 데이터"를 삭제하라고 명령하면, MMU를 통해 베이스 레지스터 값을 찾고 논리주소 값을 더해 실제 물리 주소 값을 얻은 다음 메모리에 접근하여 데이터 삭제

  • CPU가 "프로그램 C의 100번지 데이터"를 삭제하라고 명령하면, MMU를 통해 해당 프로그램의 베이스 레지스터 값을 찾고 논리 주소 값을 더해 실제 물리주소 값을 얻은 다음, 메모리에 접근하여 데이터 삭제

 

메모리 보호 기법

  • 아래 CPU의 명령어는 안전할까?

메모장 1500번지에 숫자 100을 저장하라고 CPU가 명령했지만 메모장은 논리주소 범위가 0~999로 범위를 벗어남

  • 안전하지 않고 실행되어서는 안됨
  • 프로그램의 논리 주소 영역을 벗어났기 때문
  • 위 명령어가 실행된다면 메모장 프로그램은 애꿏은 인터넷 브라우저 프로그램에 숫자 100을 저장

 

  • 인터넷 브라우저 프로그램의 명령어가 자신과 전혀 관련없는 게임 프로그램 정보를 삭제하게 됨
  • 다른 프로그램의 영역을 침범할 수 있는 명령어는 위험하기 때문에 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호할 방법이 필요

한계 레지스터 (limit register)

  • 베이스 레지스터가 실행중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장
    • 베이스 레지스터 값 ≤ 프로그램의 물리 주소 범위 < 베이스 레지스터 값 + 한계 레지스터 값

CPU가 접근하려는 논리 주소는 한계 레지스터가 저장한 값보다 커서는 안됨

  • 프로그램 A의 크기, 즉 한계 레지스터가 150인 상황
  • CPU가 200번지를 삭제하라는 명령어를 보내면 논리 주소가 한계 레지스터 값보다 커 실행될 수 없음

⇒ CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사

CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트(트랩)을 발생시켜 실행을 중단시킴

 

참고

 


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

 
반응형

'OS' 카테고리의 다른 글

운영체제를 공부해야하는 이유와 커널  (0) 2024.07.14
캐시메모리  (0) 2024.07.07
CPU 성능 향상 기법  (0) 2024.07.02
명령어  (0) 2024.06.30
데이터  (0) 2024.06.27
반응형

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

 

05-1 빠른 CPU를 위한 설계 기법

클럭(Clock)

  • 컴퓨터 부품들은 ‘클럭 신호’에 맞춰 움직이는데 실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋음
  • 단위: Hz 로 초당 반복되는 클럭 수
    • 실제 CPU 클럭 속도 표현 예시: Base 2.5GHz, Max 4.9GHz 등으로 표시되어있음
    • 의미: 초당 25억번, 순간적으로 최대 49억번 반복된다는 의미

오버클럭킹(Overclocking) : 최대 클럭 속도를 강제로 끌어올리는 기법

Q. 클럭 속도를 무지막지하게 높이면 무조건 CPU가 빨라질까?
A. 발열 문제가 심해지고,클럭 속도만으로 cpu의 성능을 올리는 것에는 한계가 있음

코어와 멀티코어

코어란?

  • 명령어를 실행하는 부품으로, CPU가 기술적으로 많은 발전을 거듭하면서 단순히 “명령어를 실행하는 부품” → “명령어를 실행하는 부품을 여러 개 포함하는 부품”으로 확장됨

 
  • 코어를 여러개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 부름
  • 코어의 개수가 연산 처리 속도와 연관이 있지만 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐에 따라 연산 속도가 크게 달라짐

스레드와 멀티스레드

  • 스레드: “실행 흐름의 단위”라는 사전적 의미를 가지고 2가지로 나뉨
    • 하드웨어적 스레드
    • 소프트웨어적 스레드

하드웨어적 스레드

  • 하나의 코어가 동시에 처리하는 명령어 단위
  • 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있음
    • 2코어 4스레드 CPU: 아래 그림처럼 명령어를 실행하는 부품 2개, 한번에 4개의 명령어를 처리할 수 있는 CPU를 의미 (멀티스레드 프로세서, 멀티스레드 CPU)

*하이퍼스레딩: 인텔의 멀티스레드 기술을 의미

 

소프트웨어적 스레드

  • 하나의 프로그램에서 독립적으로 실행하는 단위
  • 아래의 기능들을 동시에 수행되길 원할 때 각각의 스레드로 만들어 동시 실행할 수 있음

 

멀티스레드 프로세서

  • 하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러개 가지고 있으면 됨
  • 레지스터세트: 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 부르기 위한 세트
  • 레지스터 세트가 2개인 CPU는 두 개의 명령어를 처리하기 위한 정보들을 기억할 수 있음

  • 하드웨어 스레드를 이용해 하나의 코어로도 여러 명령어를 동시에 처리할 수 있다고 했음
  • 그러나 메모리 속 프로그램 입장에서는 하드웨어 스레드는 마치 ‘한번에 하나의 명령어를 처리하는 CPU’나 다름 없음 ⇒ 하드웨어 스레드를 논리 프로세서(logical processor)라고 부르기도 함

 

05-2 명령어 병렬처리 기법

  • 빠른 CPU를 만들려면 높은 클럭 속도, 멀티코어, 멀티 쓰레드를 지원하는 CPU를 만드는 것도 중요하지만 CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 것도 중요

명령어 병렬 처리 기법(ILP: Instruction-Level Parallelism)

  • 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법
    • 명령어 파이프 라이닝
    • 슈퍼스칼라
    • 비순차적 명령어 처리

명령어 파이프라인

하나의 명령어가 처리되는 전체 과정을 클럭 단위로 나누면

  1. 명령어 인출 (Instruction Fetch)
  2. 명령어 해석 (Instruction Decode)
  3. 명령어 실행 (Execute Instruction)
  4. 결과 저장 (Write Back)

같은 단계가 겹치지만 않는다면 CPU는 ‘각 단계를 동시에 실행할 수 있다’
명령어 파이프라인에 넣고 동시에 처리하는 기법을 명령어 파이프라이닝이라고 함

명령어 파이프라인을 사용하지 않고 모든 명령어를 순차적으로만 처리하면 아래와 같이 비효율적으로 처리됨

 

파이프라이닝이 높은 성능을 가져오기는 하지만, 성능 향상에 실패하는 경우도 있음 → 파이프라인 위험

파이프라인 위험 3가지 종류

  • 데이터 위험 (Data hazard)
  • 제어 위험 (Control hazard)
  • 구조적 위험

 

데이터 위험

  • 명령어 간의 의존성때문에 발생하는 위험
  • 모든 명령어를 동시에 처리할 수 없는 경우도 있기 때문
명령어 1: R1 <- R2 + R3
명령어 2: R4 <- R1 + R5 

명령어 1을 실행 후에 명령어 2에서 명령어 1의 결과를 인출해야 하기때문에 병렬적으로 처리할 수 없음

제어 위험

  • 기본적으로 프로그램 카운터는 ‘현재 실행 중인 명령어의 다음 주소’로 갱신됨
  • 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화가 생기면 명령어 파이프라인에 가지고 와서 처리 중(ex) 인출, 해석)이던 명령어들이 쓸모 없어짐

분기 예측을 통해 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술을 사용

 

구조적 위험

  • 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용하려고 할 때 발생 ⇒ 자원 위험이라고도 부름

 

슈퍼스칼라

  • 여러개의 파이프라인을 이용해서 한번에 두가지의 명령어를 인출/해석/실행/저장

  • 이론적으로는 파이프라인 개수에 비례하여 처리속도 증가, but 파이프라인 위험도 증가하기 때문에 고도로 설계 되어야 함

비순차적 명령어 처리

  • OoOE: Out-of-order execution

  • M(N): N 번지의 메모리
  • M(N) ← 100: N 번지에 100을 저장

 

3번째 명령어 (M(102) <- M(100) + M(101)) 에서 1, 2번째 명령어의 결과가 필요하기 때문에 이상적인 성능 향상을 이끌 수 없음

여기서 의존성이 없는 명령어의 순서를 바꿔본다면?

  • 순차적으로 명령어를 처리할 때 보다 더 효율적으로 처리될 수 있고 이렇게 명령어 파이프라인을 멈추는 것을 방지하는 기법을 비순차적 명령어 처리 기법이라고 함

* 물론 아무 명령어나 순서를 바꿔서 수행할 수는 없고 최적화 필요

 

05-3 CISC 와 RISC

  • CPU 성능을 향상시키기 위해서 명령어 파이프라이닝, 슈퍼 스칼라 기법등을 적용하기 위해서는 명령어가 파이프라이닝 하기 쉽게 생겨야 함

CPU는 명령어를 실행한다 ⇒ 모든 CPU가 똑같이 생긴 명령어를 실행할까? NO!

명령어의 세세한 생김새, 연산, 주소 지정 방식은 CPU마다 다름

명령어 집합 (Instruction set, Instruction set architecture, ISA)

  • CPU가 이해할 수 있는 명령어들의 모음
  • 인텔의 CPU가 이해할 수 있는 명령어 집합과 아이폰의 CPU가 이해할 수 있는 명령어 집합은 다름

명령어 병렬 처리 기법들을 도입하기 유리한 ISA는 크게 2가지가 있음

  • CISC
  • RISC

CISC

  • Complex Instruction Set Computer
  • 복잡한 명령어 집합을 활용하는 컴퓨터(CPU)
  • Intel, AMD 기반 cpu (x64, x86-64)
  • 복잡하고 다양한 명령어 활용
  • 명령어의 형태와 크기가 다양한 가변 길이 명령어 활용

  • 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음 ⇒메모리를 최대한 아끼며 개발해야했던 시절에 인기가 높았음
  • 명령어 파이프라이닝이 불리하다는 치명적인 단점이 있음
    • 명령어가 워낙 복잡하고 다양한 기능을 제공해 명령어의 크기와 실행되기까지의 시간이 일정하지 않음
    • 명령어 실행하는데 여러 클럭 주기 필요

CISC 파이프라인 예시

⇒ CISC 명령어 집합은 복잡하고 다양한 기능을 제공하기에 적은 수의 명령어로 프로그램을 동작시키고 메모리를 절약할 수 있지만, 명령어의 규격화가 어려워 파이프라이닝이 어려움

RISC

  • Reduced Instruction Set Computer
  • 명령어의 종류가 적고, 짧고 규격화된 명령어 사용 (되도록 1클럭 내외로 실행되는 명령어를 지향) ⇒ 고정 길이 명령어 사용
  • 메모리에 직접 접근 명령어를 load, store 두개로 제한할 만큼 메모리 접근을 단순화 및 최소화
    • 레지스터를 십분 활용 → 범용 레지스터 수가 더 많음
  • 다만 명령어 종류가 CISC 보다 적기에 더 많은 명령어로 프로그램을 동작시킴

 

참고

 


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

 

 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
명령어  (0) 2024.06.30
데이터  (0) 2024.06.27
컴퓨터 구조  (0) 2024.06.25
반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 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비트, 표현할 수 있는 정보의 가짓수가 $2^6$=64밖에 되지 않음

 

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

  • 유효주소 : 연산 코드에 사용할 데이터가 저장된 위치
  • 주소 지정 방식: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법으로 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를 묶은 단위 ($2^8=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비트로 표현되는데 $2^7=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