CPU 명령어 집합 구조(Instruction Set Architecture)는 크게 두 가지로 나뉩니다. CISC와 RISC.

 

CISC(Complex Instruction Set Computer)

직역하자면 복잡한 명령어 집합 컴퓨터 입니다.

 

장점

컴파일러 작성이 간단합니다.

명령어들의 길이가 각자 다 다르기 때문에 CISC에서 2비트짜리 명령어도 RISC에서는 고정된 크기의 명령어가 되기 때문에 전체적인 프로그램의 용량이 줄어들게 됩니다.

 

복잡한 명령어를 쓸 때에는 CISC 가 RISC 에 비해서 코드를 하나만 입력해도 작동하기 때문에 직접 어셈블리어를 수정하는 사람의 입장에서는 생산성이 높으며, RISC는 여러 코드를 입력해야지 되는 것에 비해서 CISC는 한 코드로 수행이 가능하기 때문에 명령어의 길이가 줄어들며, 메모리에 접근하는 횟수도 줄어들게 됩니다.

 

RISC는 CPU 구조가 바뀌어 처리 비트 단위가 바뀌게 되면 기존의 명령어를 사용할 수 없지만, CISC 는 명령어의 길이가 다 달라서 CPU의 구조가 바뀐다 해도 예전 명령어들을 사용할 수 있습니다.

 

예전에 메모리 가격이 매우 비쌌던 시절에는 CISC가 메모리를 적게 쓰기 때문에 CISC를 먼저 쓰게 되었습니다.

단점

명령어가 복잡한 것이 많고 길이가 가변적이기 때문에 프로세서의 설계가 힘듭니다.

 

일정한 길이로 명령어가 나뉜 RISC와 다르게 CISC는 명령어의 길이가 가변적이며, 메모리를 소스 혹은 타겟으로 이용할 수 있어서 사이클 계산이 어렵고, 다중 사이클 명령어가 많아 파이프라이닝 구현이 매우 어렵습니다. CISC는 몇 클럭의 마이크로코드가 입력될지 알 수 없기 때문에 이를 적절하게 쪼개 파이프라인으로 전달해줘야 해, 파이프라이닝 구현이 RISC에 비해 난해해집니다. 그래도 지금은 인텔이 슈퍼스칼라를 고치면서 해결방법을 찾아서 파이프라이닝 구현 난이도가 많이 낮아졌습니다. 하지만 그래도 RISC 가 CISC에 비해서 파이프라이닝 효율도 좋고 확장도 편합니다.

 

해독이 어려워 디코더 설계가 까다로우며 디코더가 굉장히 커집니다.

 

CISC는 코드 길이를 가변적으로 입력할 수 있기에, 프로그래머의 실력이 떨어지면 코드를 필요 이상으로 길게 작성하는 일이 발생해 큰 퍼포먼스 저하를 유발할 수 있습니다.

 

기술이 발전해가면서 장점들이 의미가 없어지게 되었습니다.

 

더보기
  • 명령어 길이가 제각각이다. 따라서 명령어를 인출할 때 언제가 명령어 종료 시점인지 알 수 없으며 다중 사이클이 소요되는 명령어를 그대로 파이프라인 처리를 할 경우 파이프라인 버블이 발생하여 처리효율을 떨어뜨린다.
  • 명령어 포맷이 중구난방이다. 때문에 명령어 해석기에서 특정 내용을 액세스하려고 할 경우 그 명령어에 대한 인출과 해석이 완전이 끝나야 가능하다.
  • 명령어에 레지스터 대상이 아닌 메모리를 대상으로 한 연산이 섞여있다. 메모리를 대상으로 한 연산의 경우 메모리 액세스 사이클의 손실이 정확히 얼마일지 알 수 없기 때문에 파이프라인의 정확한 운용이 어려워진다.
  • 각 명령어들의 실행 사이클이 제각각이다. 어떤 명령어는 1사이클, 어떤 명령어는 3사이클 하는 식으로... 이러한 구조는 파이프라인의 효율성을 심각하게 저하시킨다.
  • 마이크로코드를 통해 구현된 복잡한 기능의 명령어는 처음 도입할 때는 타당성이 있었을지 모르지만 CPU 기술이 발전하면서 다른 방식으로 처리하는 게 더 빨라지는 사태가 발생했다.
  • 마이크로코드 방식 자체가 CPU의 명령어 해석기 고속화에 발목을 잡게 되었다.
  • 명령어의 구조가 어큐뮬레이터 구조를 유지하고 있다. 명령어가 2개의 레지스터/메모리만을 액세스 가능하므로 a+b의 연산을 c에 따로 저장하지 못하고 b의 내용에 덮어쓰면서 b의 내용을 재활용하지 못하게 된다.
  • 레지스터의 기능이 일정하지 못하고 특수기능이 포함된 경우가 많아 컴파일러의 복잡성을 증대시켰다.
  • 프로그램 코드와 데이터가 단일 캐시메모리 공간에 위치하고 있는 폰노이만 구조는 코드의 메모리 동작 특성과 데이터의 메모리 동작 특성이 크게 다르다는 사실을 반영하지 못하고 있다.
  • ROM 기반이던 마이크로코드 해석기는 수정이 불가능하고 유연성이 떨어지지만 속도가 상대적으로 빠르다는 장점이 있었는데 RAM 기술이 비약적으로 발달하면서 이런 장점도 퇴색되었다.

RISC(Reduced Instruction Set Computer)

직역하자면 줄어든 명령어 집합 컴퓨터입니다.

CISC보다 명령어가 줄어들었고, 명령어의 길이가 다 같아졌습니다.

 

장점

컴퓨터는 수행해야할 각 명령어 형태마다 트랜지스터와 회로들이 추가되어야 하기 때문에, 많은 수의 컴퓨터 명령어 셋을 갖춘 마이크로프로세서는 만들기도 복잡하고, 실행속도도 늦습니다. RISC는 명령어 셋이 CISC보다 적습니다.

 

메모리를 직접 소스, 타겟으로 이용할 수 없어서 사이클 계산이 쉽습니다.

 

명령어셋이 적기 때문에 하드웨어가 간단해지고 아키텍쳐를 설계하는데 어렵지 않습니다.

 

전력 소모가 적으며 속도가 빠르고 가격이 저렴합니다.

 

모든 명령어의 길이가 똑같고 명령어는 한 개당 하나의 동작만을 수행하게 되므로 메모리에서 데이터를 레지스터에 가져온 이후에 다른 명령어가 메모리 접근하지 않기 때문에 파이프라인이 끊기지 않고 수행될 수 있습니다. 그래서 파이프라인 구현이 쉽습니다.

 

단점

단순화를 위해 코드 밀도가 감소하여 같은 내용을 처리하는 데 더 많은 코드 용량이 필요하게 되었습니다.

- 항상 16bit 혹은 32bit를 차지하는 고정 길이 명령어는 상황에 따라 8~32bit를 오가는 CISC의 가변 길이 명령어에 비해 코드 밀도 면에서 불리합니다.
- 메모리를 대상으로 하는 연산 명령어의 경우 CISC에서는 1개 명령어로 표현 가능하지만 반면 RISC에서는 load-execute-store로 3개의 명령어가 필요합니다.
- 마이크로코드로 한 줄로 구현된 CISC 명령어를 몇 개, 혹은 수십 개의 RISC 명령어로 변환해야 합니다.
- 평균적으로 같은 역할을 수행하는 RISC의 코드 길이는 x86에 비교하면 2배나 길다.

 

메모리를 소스 혹은 타깃으로 쓸 수 없게 되면서 그 역할을 대체해야 하는 더 많은 레지스터가 필요하게 되었습니다.

 

명령어 길이가 제약되면서 분기 명령의 점프 범위가 제약되었다. CISC에서는 분기 명령의 점프 범위를 단순히 코드 길이를 늘리는 것으로 해결할 수 있지만 RISC 명령어는 불가능해졌습니다.

 

x86이 아니였기 때문에 Windows 를 돌릴 수 없다는게 가장 큰 단점이였습니다.

728x90

 

램은 메인보드에 램 슬롯이란 곳에 끼워서 사용하며 cpu와는 버스라는 시스템을 이용해서 통신하게 됩니다.

이 버스는 일반적으로 주소 버스, 제어 버스, 데이터 버스의 세 부분으로 구성되게 됩니다.

 

메모리에서 데이터를 읽어 들일 때 CPU는 주소 버스를 통해 메모리 위치를 지정하고, 주소 디코더에 의해 해당 메모리는 데이터 버스에 데이터를 보냅니다. 그리고 CPU는 데이터 버스의 데이터를 읽게 됩니다. 메모리에 데이터를 쓸 때에 CPU는 메모리의 위치를 주소 버스로 지정하고, 데이터 버스에 데이터를 보냅니다. 메모리는 데이터 버스의 데이터를 받아 저장하게 됩니다.

 

하지만 CPU와 메모리, IO장치는 데이터 버스를 통해 데이터를 통신하기 때문에, 장치가 여러 개 있으면 데이터 버스도 여러 개 필요하기 때문에 메모리와 IO장치는 버스를 공유하게 되고, 이 때문에 cpu는 동시에 한 개의 장치하고만 통신할 수 있습니다. 그래서 한 개의 데이터 버스로 여러 장치를 이용할 수 있게 원하는 장치랑 통신할 수 있도록 회로를 구성해 주는데 이것을 주소 디코딩이라 하며, 이 일을 수행하는 장치를 주소 디코더라 부릅니다.

 

캐시

CPU 칩 안이나 그 근처에 두는 SRAM으로 이루어진 매우 빠른 메모리입니다.

DRAM도 CPU의 동작속도에 비하면 느리기 때문에 병목현상을 또 줄이고자 만들어진 작은 메모리입니다.

프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템(MMU)이 내부적으로 제어하게 됩니다.

보통 L1, L2, L3의 캐시가 있으며 L3로 갈수록 크기가 커지며 L1으로 갈수록 크기가 작아집니다.

캐시의 용량이 크면 클수록 더 많은 데이터를 캐시에 캐싱해둘 수 있기 때문에 램에서 불러오는 횟수도 줄어들고 cpu의 처리 속도도 빨라져서 좋지만 비싸기 때문에 적당히 달게 됩니다.

그리고 데이터를 처음 접근할 때마다 불러오면 속도가 느려지게 되기 때문에, 시간적 지역성, 공간적 지역성을 이용하여 데이터를 미리 캐싱해두게 됩니다.

시간적 지역성

예전에 한번 접근했던 데이터는 나중에 다시 접근할 가능성이 높다.

공간적 지역성

가까운 주소에 연속적으로 접근된 데이터가 있으면 현재 데이터도 접근할 가능성이 높다.

한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.

 

레지스터

레지스터는 기본적으로 캐시와 같은 구조의 플립플롭 회로를 이용하여 저장하지만, CPU 바로 옆에 붙어있기 때문에 응답속도가 캐시에 비해서 빠릅니다.

32/64 비트 시스템이라 부르는 것이 하나의 레지스터에 저장할 수 있는 용량이 얼마인지 나타내는 것입니다.

32비트의 경우 한 번에 표현할 수 있는 메모리의 주소가 4GB 이기 때문에 인식할 수 있는 메모리의 크기도 4GB입니다.

64비트 레지스터
32비트 레지스터

앞에 붙어있는 E와 R은 E는 32비트, R은 64비트를 나타냅니다.

그리고 EAX, AX, AH, AL 모두 다른 레지스터가 아니라

32비트 레지스터 EAX 중 16비트가 AX, AX의 상위 8비트가 AH, 하위 8비트가 AL입니다.

즉 EAX레지스터가 AX를 포함하고, 이 AX가 AL, AH를 포함하고 있는 형태입니다.

 

레지스터의 종류는 여러 가지가 있습니다.

  • 데이터 레지스터 : 정수 값을 저장할 수 있는 레지스터.
  • 주소 레지스터 : 메모리 주소를 저장하여 메모리 접근에 사용되는 레지스터. 어떤 프로세서에서는, 주소를 저장하는 것이 아니라 조작하기 위한 목적으로 색인 레지스터를 사용하기도 한다.
  • 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터.
  • 부동소수점 레지스터 : 많은 시스템에서 부동소수점 값을 저장하기 위해 사용된다.
  • 상수 레지스터 : 0이나 1 등 고정된 값을 저장하고 있는 레지스터.
  • 특수 레지스터 : 프로그램의 상태를 저장한다. PC, SP, SR 등이 있다.
    • 명령 레지스터 : 현재 실행 중인 명령어를 저장한다.
    • 색인 레지스터 : 실행 중에 피연산자의 주소를 계산하는 데 사용된다.

 

CPU에는 여러 가지 종류의 레지스터가 들어있습니다.

 

범용 레지스터

AC (Accumulator) : 연산 결과 데이터를 일시적으로 저장하는 레지스터

 

명령 레지스터

PC (Program Counter) : 다음 인출(Fetch) 될 명령어의 주소를 가지고 있는 레지스터

IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터

 

데이터 레지스터(데이터 버스에 데이터를 읽고 쓰기 위해 잠시 저장해두는 버퍼 레지스터)

MBR (Memory Buffer Register) : 기억장치에 저장될 데이터 혹은 읽힌 데이터가 일시적으로 저장되는 버퍼 레지스터

 

주소 레지스터(주소 버스에 주소를 출력하기 전에 임시 저장하는 레지스터)

MAR (Memory Address Register) : PC에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되는 주소 레지스터

SP (Stack Pointer) : 스택의 데이터가 채워진 마지막 위치를 가리킵니다.

BP (Base Pointer) : 스택의 한 기준점을 가리킵니다.

IX (Index Pointer) : 배열을 순차적으로 액세스 하기 위한 레지스터입니다.

 

특수 레지스터

SR (Status Register) : 현재 CPU의 상태를 가지고 있는 레지스터

 

 

 

클럭

연산장치 또는 외부에 클럭 제네레이터가 클럭 펄스라는 것을 만들어 내부장치를 동기화시키는 데 사용합니다.

클럭에 따라서 명령어가 실행됩니다.

728x90

'해킹 > 과제' 카테고리의 다른 글

2. 명령어 구조, CPU 구성요소  (0) 2021.04.16
1. CPU 명령어 집합 구조  (0) 2021.04.16
2. 메모리들의 작동 방식 - RAM  (0) 2021.04.09
1. 메모리들의 작동 방식 - ROM  (0) 2021.04.06
2-1. 컴퓨터 부팅 과정 - UEFI  (0) 2021.04.06

RAM(Random Access Memory)

자유롭게 임의의 위치에 접근하여 내용을 읽고 쓸 수 있고, 어느 위치에나 똑같은 속도로 접근하고 쓸 수 있는 메모리로 주로 휘발성을 갖습니다.

ROM에 비해 읽고 쓰기가 자유롭고 속도도 훨씬 빠르기 때문에 보조기억장치와 중앙처리장치 사이의 병목을 줄여주는 역할로 주로 사용합니다.

1. SRAM(Static RAM)

SRAM은 내용을 한번 기록하면 전원이 공급되는 동안 내용을 그대로 갖고 있습니다. 그리고 DRAM의 100배 이상으로 접근 속도가 빠르지만 구조가 복잡하여 공간을 많이 차지하므로 집적도를 높이기 어려워 가격이 비싸고 대용량으로 제작하기가 어렵습니다. 속도를 대략 측정해보면 초당 수 백 GB/s를 넘는 정도로 매우 빠릅니다. 그래서 빠른 속도가 요구되는 캐시 메모리(Cache Memory)에 주로 사용됩니다.

2. DRAM(Dynamic RAM)

DRAM은 내용을 기록한 뒤에 그 내용을 유지하기 위해서 주기적으로 다시 써줘야 합니다. 캐패시터로 이루어져 있고, 캐패시터의 충전 상태로 내용을 기록하기 때문에 캐패시터가 방전이 될 때마다 다시 써줘야지 되는 것입니다.

DRAM은 속도가 SRAM보다는 느리지만 구조가 간단하여 집적도를 쉽게 높일 수 있습니다. SRAM에 비해 속도는 느리지만 가격이 싸고 집적도를 쉽게 높일 수 있기 때문에 캐시보다는 느린 주 기억 장치에 주로 쓰이게 됩니다.

보통 우리가 램이라고 부르는 것들은 대부분 DDR SRAM(Double Data Rate Synchronous Dynamic RAM) 혹은 LPDDR SDRAM(Low Power DDR SDRAM)을 지칭합니다.

728x90

'해킹 > 과제' 카테고리의 다른 글

1. CPU 명령어 집합 구조  (0) 2021.04.16
0. 레지스터, 캐시, 램, 클럭 설명  (0) 2021.04.16
1. 메모리들의 작동 방식 - ROM  (0) 2021.04.06
2-1. 컴퓨터 부팅 과정 - UEFI  (0) 2021.04.06
2. 컴퓨터 부팅 과정 - BIOS  (1) 2021.04.06

ROM(Read-Only Memory)는 전원을 꺼도 데이터가 날아가지 않고, 대량 생산에도 이점이 있기 때문에 여러 가지 분야에 굉장히 많이 쓰이며, 우리 주변에 있는 전자기기 대부분에는 ROM이 들어가 있습니다.

예전에는 한번 기록하면 바꿀 수 없어 read-only memory라 불렸지만 Read-Only라는 한계를 극복해가 나는 발전에 따라 롬 라이터(ROM Writer)로 기록 가능한 ROM이 나오고 롬 라이터 없이도 기록이 가능한 ROM 메모리들이 생겨서 더 여러 가지 방면에 사용하게 되었으며 USB에 들어가는 플래시 메모리도 EEPROM에서 발전한 형태의 메모리입니다.

 

> ROM의 종류

1. 마스크롬(Mask ROM)

처음 제조할 때 트랜지스터에 이온을 넣어서 물리적으로 기록하여 내용 수정이 불가능한 롬 메모리입니다.

Mask ROM

현재 읽는 셀의 Word 선의 전위를 GND(0V)로 한 뒤에

Bit 선의 전위를 Vcc로 전압을 인가하여 Word 선에 전류가 흐른다면 "1"로 판단합니다.

전류가 흐르지 않는다면 "0"으로 판단합니다.

 

ROM에 다시 기록할 필요가 없는 대부분의 가전제품에는 마스크롬을 사용합니다. 대량으로 찍어내기 때문에 가격이 싸고 ROM에 다시 기록할 수 없기 때문에 안정성이 매우 높지만, 기록을 잘못하거나 기록한 데이터에 문제가 있다면 폐기를 해야 합니다.

 

2. PROM(Programmable ROM)

퓨즈를 사용하여 제작하여 처음 한 번만 롬 라이터로 기록이 가능한 롬 메모리입니다.

PROM

위에 Mask ROM과 같은 원리이지만 이온 대신 퓨즈를 사용합니다.

퓨즈가 끊어져 있어서 전류가 흐르지 않는다면 "0"

퓨즈가 연결되어 있어서 전류가 흐른다면 "1"로 인식합니다.

 

롬 라이터를 이용해서 하나하나 기록을 해 줘야 하기 때문에 대량생산엔 부적합하며 마스크롬으로 생산하기엔 생산량이 적은 경우 PROM을 사용하지만 거의 사용하지 않습니다.

IBM이 개발한 eFUSE(삼성 휴대폰의 KNOX의 경우에도 eFUSE를 사용합니다)도 PROM 기술을 사용합니다.

 

3. EPROM(Erasable PROM)

자외선을 사용하여 기록된 내용을 지우고, 전류로 다시 기록할 수 있는 롬 메모리입니다.

EPROM

이산화규소(SiO₂)로 플로팅 게이트를 만들어서 플로팅 게이트 안에 전자를 저장하고 이산화규소를 통하여 자외선으로 광전류를 흘려 플로팅 게이트 안에 있는 전자를 방전시키며 저장과 삭제를 합니다.

자외선이 반도체에 닿아야 하므로 중간에 자외선이 들어갈 수 있도록 석영유리로 된 창이 나 있습니다.

태양빛이나 여러 가지 주변에 자외선이 나오는 광원들에 노출되면 서서히 지워질 수 있으므로 데이터를 다 지운 뒤에는 차광 씰 등을 붙여서 창을 가립니다.

EPROM의 원리

 

 

4. EEPROM(Electronically EPROM)

전류를 이용하여 기록된 내용을 지우고 다시 기록할 수 있는 롬 메모리입니다.

EEPROM의 구조

EEPROM은 FN 터널링 현상을 이용하여 지우고, 기록합니다. EEPROM의 한 비트에는 트랜지스터 2개로 구성되어 있습니다.

EPROM에서는 자외선을 이용하여 플로팅 게이트 안에 있는 전자를 삭제했지만 EEPROM에서는 선택 게이트를 이용하여 플로팅 게이트 안에 전자를 삭제하고 추가해주게 됩니다.

EEPROM의 데이터 쓰기

비트 선에 12V 전후의 강한 전류를 흘려보내게 되면 컨트롤 게이트와 비트 선 사이에 전압차가 생기게 되고 강한 전기장이 형성되게 되어 FN 터널링 현상에 따라서 플로팅 게이트 안에 있는 전자들이 비트 선으로 이동하게 되면서 플로팅 게이트 안에는 전자가 사라지게 됩니다.

EEPROM의 데이터 소거

컨트롤 게이트에 12V 전후의 강한 전류를 보내게 되면 터널링 현상으로 인해 플로팅 게이트로 전자가 들어가게 됩니다.

플래시 메모리(Flash Memory)

플래시 메모리는 기존 EEPROM에서 더 발전한 형태의 EEPROM입니다. NOR 플래시와 NAND 플래시가 있는데 NOR 기반 플래시는 지우기와 쓰기 시간이 긴 대신 어떤 위치에도 임의로 접근할 수 있게 주소/자료 인터페이스를 제공합니다. 자주 업데이트되지 않는 프로그램 코드를 저장하는 데에 좋습니다. NAND 플래시는 NOR 플래시에 비해 지우기와 쓰기 시간이 좀 더 빠르고 집적도가 높으며 비트다 제작비도 낮고 10배 정도 내구성이 강합니다. 하지만 입출력 인터페이스는 자료에 대한 순차 접근만을 지원합니다. 그래서 개인용 컴퓨터 카드와 다양한 메모리 카드와 같은 대용량 저장 장치에 주로 사용합니다.

여기선 NAND 플래시만 알아보도록 하겠습니다.

 

Flash Memory 구조
플래시 메모리의 데이터 쓰기

컨트롤 게이트에 전압을 인가하게 되면 기판과 컨트롤 게이트 사이에 전압의 차이가 발생하게 되고 FN 터널링 현상으로 인해 인가한 전압에 따라 일정량의 전자가 채워지게 됩니다.

플래시 메모리의 데이터 소거

플래시 메모리는 블록 단위로 묶인 기판에 전압을 인가하게 되면 FN 터널링 현상에 의해서 플로팅 게이트 안에 있던 전자들이 기판으로 이동하면서 블록 단위로 빠르게 데이터를 소거할 수 있습니다.

플래시 메모리의 데이터 읽기

Source와 Drain 사이에 전류를 흐르게 하고 컨트롤 게이트에 약하게 전압을 걸어주게 되면 플로팅 게이트 안에 전자가 있는지 없는지에 따라서 전기장이 영향을 받고 전자가 없다면 전기장이 Source와 Drain 간의 전자들로 만들어진 경로가 형성될 수 있게 합니다. Drain으로 전류가 잘 흐르는지 흐르지 못하는지에 따라서 0과 1을 구분하게 됩니다.

 

이를 이용하여 플로팅 게이트 안에 들어있는 전자 수가 적을수록 Drain으로 전자가 잘 흐르기 때문에 Drain으로 들어오는 전압을 여러 가지 단계로 구분하여 한 셀에 비트를 여러 개 구분할 수 있는 기술도 있습니다.

728x90

조금 전 글에 BIOS에 대한 설명이 있었는데, UEFI(Unified Extensible Firmware Interface)는 BIOS처럼 사용자가 컴퓨터를 켜면 시작되는 프로그램이며, BIOS와 많은 부분 비슷한 일을 합니다.

그리고 이제는 구형 BIOS는 거의 사라졌으며 UEFI에서 지원되던 CSM도 2020년부턴 CSM 모듈을 삭제한 UEFI Class 3가 표준이 되면서 새로 나오는 펌웨어들은 거의 다 BIOS가 사라졌습니다.

 

UEFI에서 달라진 점

1. 파티션 테이블

BIOS는 MBR(Master Boot Record)라는 방식으로 파티션 테이블을 만드는데, MBR 방식은 주 파티션을 4개까지밖에 잡지 못합니다. 그 이상은 논리 파티션을 사용해야 하는데 논리 파티션은 OS와 부트로더가 지원하지 않으면 주 파티션에 설치된 OS로만 부팅이 가능합니다. 전체 디스크 크기가 2.2TB를 넘어가면 넘어간 용량부터는 해당 공간을 사용하지 못합니다.

UEFI MBR대신 GPT(GUID Partition Table)를 사용합니다. GPT 방식은 파티션 정보를 기록하는 방식을 변경하여, 주 파티션과 논리 파티션의 구분을 없애고 2TB를 초과하는 디스크도 사용할 수 있게 되었습니다. GPT 방식은 최대 9.4ZB까지 지원하기 때문에 디스크 크기에 대한 걱정이 사라졌습니다. 하지만 기록하는 방식이 다르고 기록하는 양이 GPT가 더 많기 때문에 GPT MBR은 서로 호환되지 않고 파티션 테이블 구조를 변경하려면 디스크의 모든 파티션을 지워야지 되기 때문에 데이터가 손실됩니다.

2. Fastboot

Fastboot는 부팅 중에 USB 부팅 디스크그래픽 카드 등의 레거시 BIOS 코드의 로드를 생략하고 향상된 코드가 탑재된 전용 UEFI OpROM으로 주변 하드웨어의 펌웨어와 Fastboot 기능을 지원하는 운영 체제의 코드를 일부 가져와 메인보드 EFI 상에서 빠르게 부팅시켜 부팅 속도를 단축하는 기능입니다. UEFI도 64비트 주소 체계를 사용하면서 BIOS보다는 미세하게나마 부팅 속도가 더 빨라졌으며, Fastboot를 켜면 이름에 맞게 껐을 때보다 확연히 빨라집니다.


UEFI vs Fast Boot vs Fast Boot + Post Delay Zero

Fastboot 옵션이 켜져 있는 경우, 부팅 초기에 UEFI 펌웨어 진입 시간을 주지 않고 USB 부팅 디스크를 인식하지 않고 OS 부팅 단계로 바로 넘겨버리기 때문에 펌웨어에 진입하기 위해선 윈도우의 경우 설정의 복구 모드를 통하거나, 메인보드 제조사에서 제공하는 진입 도구를 사용하면 됩니다.

3. Secure Boot

UEFI Specification 2.2부터 지원하는 기능으로, OS 부트 로더가 검증된 인증서에 의해 디지털 서명이 되어 있는지를 검증하여 부팅 과정에서의 보안성을 높였습니다. 디지털 서명되지 않은 경우 또는 검증된 인증서에 의해 서명되지 않은 경우에는 부팅이 중단됩니다. 윈도우의 경우 드라이버의 서명 또한 펌웨어에 등록되어 있지 않은 인증서로 서명되어 있거나 서명되지 않은 드라이버의 로드를 중단시켜 변조된 드라이버의 실행을 방지합니다. 그래서 Secure Boot 가 켜진 상태로 나오는 Windows RT/Windows Phone OS 가 탑재 된 장비는 커스텀 펌웨어를 깔기 매우 어렵습니다.

4. UEFI Class

UEFI Class
  • UEFI Class 0
    • Legacy BIOS
    • UEFI가 없거나, UEFI PI 인터페이스 없음
  • UEFI Class 1
    • UEFI/PI 인터페이스 사용
    • 런타임이 legacy BIOS 인터페이스만 노출(UEFI 코드 사용 불가)
  • UEFI Class 2
    • UEFI/PI 인터페이스 사용
    • 런타임이 legacy BIOS, UEFI 인터페이스 모두 노출
  • UEFI Class 3
    • UEFI/PI 인터페이스 사용
    • 런타임이 UEFI 인터페이스만 노출(legacy BIOS 코드 사용 불가)

5. CSM(호환성 지원 모듈, Compatibility Support Module)

UEFI를 완전히 지원하지 않는 OS나 x86 레거시 모드, DOS 구동을 위해 기존 레거시 바이오스의 16비트 바이너리 및 그래픽 카드 BIOS, 네트워크 PXE 부팅 롬, 기타 PCI 장치 등 외부 장치의 Option ROM을 지원하는 기능입니다.

728x90

BIOS(Basic Input/Output System)는 펌웨어의 한 종류로서 사용자가 컴퓨터를 켜면 시작되는 프로그램으로 주변 장치와 컴퓨터 운영 체제 사이의 데이터의 흐름을 관리합니다. 그리고 부팅 절차에서 하드웨어 초기화를 수행하고, 운영체제나 응용 프로그램에 런타임 서비스를 제공합니다. 원래는 IBM의 소유였으나 많은 회사가 원본 프로그램을 분석하여

호환 프로그램을 개발했습니다. 시간이 흘러 지금의 BIOS는 하드웨어 부품을 초기화하고 검사하는 역할, 부트로더 또는 대용량 저장장치에 저장된 운영체제를 RAM으로 읽어오는 기능을 수행하게 되었습니다. BIOS는 이제는 거의 안 쓰게 되었고 UEFI 같은 다른 펌웨어가 대체하게 되었지만 바이오스라는 말이 익숙하기 때문에 아직도 바이오스라 부릅니다

BIOS를 저장하는 매체로 예전에는 ROM을 주로 썼지만, 현재는 플래시 메모리를 주로 사용하게 되었으며 플래시 메모리는 덮어쓰려면 롬 라이터(ROM Writer)가 필요한 ROM과 달리 별도의 writer 없이 덮어쓸 수 있어 BIOS를 업데이트하는 데에 편리해졌지만 BIOS가 컴퓨터가 켜지면 가장 먼저 시작되고 하드웨어 부품을 초기화하거나 부트로더 또는 OS를 불러오는 등 여러 가지 중요한 일을 하므로 BIOS를 망가트리는 바이러스도 생기기도 했으며 BIOS를 업데이트하는 도중 정전 등 예기치 않은 상황으로 인해서 BIOS 기록이 정상적으로 되지 않는다면 컴퓨터를 아예 켤 수 조차 없기 때문에 손상된 바이오스를 복구하는 방법은 바이오스가 탑재된 플래시 메모리를 교환하는 방법밖에 없습니다.

일부 플러그인 어댑터들(SCSINIC비디오 등)의 경우 BIOS 대신 독자적인 펌웨어를 장치에 포함해 그 장치용 펌웨어가 해당 장치를 제어하도록 하는데 이렇게 BIOS에서 호출하는 펌웨어를 옵션 롬이라고 부릅니다.

BIOS 가 저장된 롬

 

0. CPU가 정상적으로 작동하게 하기 위해 CPU를 초기화합니다.

1. CPU 레지스터에 하드 코딩된 JUMP 명령어를 실행합니다.

2. CPU가 ROM에 미리 정의된 BIOS가 위치한 메모리 위치로 이동합니다.

3. CPU가 ROM에서 BIOS를 직접 실행합니다.

4. BIOS가 POST(Power On Self Test)를 수행합니다.

4-1. POST의 주요 과정들

  • CPU 레지스터 확인
  • BIOS 코드 자체의 무결성 확인
  • DMA, timer, interrupt controller와 같은 일부 기본 구성 요소 확인
  • 시스템 메인 메모리의 초기화, 크기 측정, 검증
  • BIOS 초기화
  • 다른 특수 확장 BIOS에 제어권 전달 (설치된 경우)
  • 부팅에 사용할 수 있는 장치 식별, 구성 및 선택

4-2. 개선된 버전의 POST의 추가적인 작업

  • 칩셋 초기화
  • 모든 시스템 버스 및 장치 검색, 초기화 및 카탈로그화
  • 시스템 구성을 위한 사용자 인터페이스 제공
  • 운영체제에 필요한 모든 시스템 환경 구성

4-3. POST 중 발생한 오류

American Megatrends  International BIOS beep codes

5. 파티션 테이블을 RAM에 로드하고 첫 번째 파티션은 첫 번째 파티션의 부트로더를 실행합니다.

6. 부트로더가 OS를 Real Mode에서 커널을 조기 초기화합니다.

7. Protected Mode로 전환한 후 커널을 전체 초기화합니다.

8. 커널을 RAM에 로드하고 통제권을 커널로 넘깁니다.

 

OS로 통제권이 넘어가고 부팅(Bootstrapping) 끝!!!

728x90

1. 케이스의 전원 버튼을 누르면 메인보드의 파워 스위치 핀으로 전기가 흐르게 됩니다.

메인보드 핀

2. 파워 스위치 핀으로 들어간 전원은 SIO(Super I/O)에서 처리해서 메인보드와 파워를 연결해주고 있는 20(또는 20+4) 핀 케이블에 파워 서플라이 전원을 키라는 신호를 보냅니다. (PS_ON# 과 GND를 연결하면 파워 서플라이를 키라는 신호를 줄 수 있습니다.)

PS_ON# 으로 파워 서플라이를 키라는 입력이 갑니다.

3. 파워 서플라이가 아래 사진의 순서대로 교류를 직류로 변환하여 메인보드와 각종 전기가 필요한 컴퓨터 부품들에 전류를 보내줍니다.

파워 서플라이 내부 구조

 - EMI 필터부에선 들어오는 교류 전기의 노이즈와 나가는 노이즈를 제거해줍니다.

 - 교류/직류 정류부에선 교류 전기의 극성이 +와 -를 번갈아 오가는데 극성을 + 로 바꿔줍니다.

정류 회로

 - 정류 과정을 거치면 극성이 + 만 나타나 직류가 되지만 전류가 파동을 쳐서 이대로는 쓰기가 어렵습니다.(내부 부품에 그대로 전달하면 내부 부품이 손상되거나 전압 부족으로 꺼졌다 켜지는 걸 반복할 수 있습니다) 그래서 캐패시터를 이용하여 평활화 작업을 해줍니다.

 - 직류/직류 스위칭부에선 교류/직류 정류부에서 직류로 변환되어 나온 전기의 전압이 330V 가량 되기 때문에 변환된 전기의 전압을 부품에 필요한 크기(3.3V, 5V, 12V...) 만큼 내려줍니다.

 

4. 파워 서플라이에서 출력이 안정화되어 사용할 준비가 되었다면 PWR_OK로 신호를 보냅니다.

 

728x90

+ Recent posts