본문 바로가기

Cloud/Server

[Server] 하드웨어 구조와 동작 원리 (Mainboard, CPU, Memory)

 

하드웨어 (HWㆍHardware)

- 실체가 있는(시각적으로 보이면서도 만질 수 있는), 컴퓨터의 모든 물리적인 부품을 통틀어 의미한다.

예를 들어, Windows를 사용하기 위한 노트북 혹은 Android/iOS 사용을 위한 스마트폰, 그 외 모니터, 키보드 마우스 등이 모두 하드웨어

 

IT 기업은 대고객 서비스를 위한 엔터프라이즈 급의 고성능 하드웨어를 주로 사용한다.

하드웨어는 메인보드, 중앙처리장치, 기억장치, 입출력장치 등으로 구성된다.

 

 

 

 

 

01. 메인보드 (Mainboard / Motherboard)

- 컴퓨터(서버) 내 모든 장치들을 연결하기 위한 중심부 역할.

- CPU, Memory, Disk, 기타 포트 및 확장 카드 등이 모두 케이블을 통해 메인보드에 연결된다.

- CPU/Memory를 메인보드 슬롯에 장착해야 하며, 메인보드/CPU/Memory 전원부도 함께 내장되어 있다.

 

※ 메인보드에 문제가 생기면?

당연히 하드웨어에 설치된 운영체제도 이상을 감지(작동 불가)하거나 전원이 내려간다.

원인에 따라 다를 수 있지만, 하드웨어를 강제 재부팅하거나 메인보드 교체를 하면 된다.

 

 

 

 

 

02. 중앙처리장치 (CPUㆍCentral Processing Unit)

- 컴퓨터의 중앙에서 모든 데이터를 처리하는 핵심적인 장치.

- 사용자가 명령을 보내면, 명령어 해석 / 자료 처리(연산)를 통해 결과를 출력장치에게 보내준다.

- 대표적인 제조 회사로 Intel, AMD가 있다.

- CPU는 아래의 제어장치 / 연산장치 / 레지스터로 구성된다.

 

 

02-1. 제어장치 (CUㆍControl Unit)

컴퓨터에 있는 모든 장치들의 동작을 지시하고 제어한다.

명령어 레지스터에서 읽어들인 명령어(프로그램 코드)를 해석하고, 대상 장치에게 신호를 보내 동작을 수행하도록 지시한다.

 

 

02-2. 연산장치 (ALUㆍArithmetic & Logical Unit)

제어장치의 명령에 따라 실제 명령을 수행하는 장치.

명령을 수행하기 위해 산술연산, 논리연산, 관계연산, 이동(Shift) 등을 수행한다.

 

 

02-3. 레지스터 (Register)

CPU 내부에서 처리할 명령어, 연산 결과, 주소 등을 일시적으로 담아두는 임시 기억장소.

메모리 중 가장 빠르고, 연산을 더 빠르게 향상하기 위해서 사용된다.

새 데이터가 전송되면 기존의 내용은 지워지는 방식이다.

 

 

+

- CPU Core

CPU에 내장되어 각종 연산을 처리하는 핵심 부품.

싱글 코어(1 Core), 듀얼 코어(2 Cores), 쿼드 코어(4 Cores)처럼 갯수에 따라 명칭/스펙이 나뉘어진다.

 

코어 수의 갯수를 굳이 고려해야 하는 이유는 결국 CPU의 작업을 분담하기 위함이다.

듀얼 코어일 경우, 100의 일을 서로 분담하여 수행하므로 싱글 코어보다 일 처리가 빠르다고 볼 수 있다.

 

 

- CPU Clock

CPU의 연산 속도를 나타내는 단위.

코어 수 뿐 아니라, Clock의 속도를 통해서도 하드웨어 성능이 좌우된다.

 

CPU가 실행하는 사이클 수는 초당 기가 헤르츠(GHz) 단위로 측정된다.  (* 사이클은 명령어가 요구하는 동작들을 수행하는 단위)

Clock 속도가 3.2GHz인 CPU는 초당 32억 번의 사이클을 실행한다.

 

 

- CPU Socket

CPU와 메인보드가 결합되는 접촉부. (둘 간의 슬롯 혹은 커넥터 역할)

메인보드와 서로 호환이 되어야 하며, CPU 세대마다 소켓의 제조공정(전자 이동을 위한 회로의 굵기)도 다르다고 한다.

 

 

 

 

 

03. 기억장치 (Memory, Disk . .)

- 컴퓨터에 필요한 데이터, 정보를 저장하는 장치를 뜻하며 저장장치로도 명칭한다.

- 기억장치는 레지스터 / 캐시 메모리 / 주기억장치 / 보조기억장치로 구성되어 있다.

 

 

03-1. 레지스터 (Register)

- CPU 내부에 위치한 장치로, 위에 설명한 레지스터와 같다.

- 메모리 계층의 제일 윗단을 차지하고 있으며, CPU가 현재 처리하고 있는 데이터를 임시로 보유한다.

 

 

03-2. 캐시 메모리 (Cache Memory)

- CPU가 읽어들인 데이터 (명령, 프로그램 등)로 채워진 버퍼 형태의 고속 기억장치.

- CPU와 메모리 사이에 위치하고 있으며, 메모리 계층에서 레지스터 다음으로 빠르다.

- CPU가 메모리에 도달하기 전에, 캐시 메모리에 담긴 자주 사용하는 명령이나 데이터를 사용함으로써 속도를 향상할 수 있다.

 

 

03-3. RAM (Random Access Memory)

- 주기억장치에 속하며, 기억된 데이터를 Read/Write 가능한 장치.

- 재부팅 시 이전에 기억된 데이터가 날아가는 휘발성 메모리.

- 따라서, 수시로 보조기억장치에 저장한다. 특정 프로그램 실행 시, 보조기억장치에 기억된 데이터를 주기억장치로 불러와 CPU가 해당 데이터를 처리한다.

 

 

03-4. ROM (Read Only Memory)

- 주기억장치에 속하며, 기억된 데이터를 Read만 가능한 장치.

- 재부팅 시에도 이전에 기억된 데이터가 남아있는 비휘발성 메모리.

- 제조사 제작단계에서부터 시스템에 기억되어야 하고, 변화하면 안되는 BIOS 등의 데이터가 저장되어 온다.

 

 

03-5. HDD (Hard Disk Drive)

- 보조기억장치에 속한다.

- 물리적인 디스크를 고속으로 회전시켜 데이터를 저장한다.

- 물리적인 저장 방식이므로 충격에 약하고 소음이 강하다.

- 발전하는 CPU/RAM에 비해 속도가 느리다.

 

 

03-6. SSD (Solid State Drive)

- 보조기억장치에 속한다.

- 마찬가지로 실물이 있는 반도체 기반의 저장장치이지만, HDD처럼 물리적으로 저장하는 방식이 아닌 전기적으로 데이터를 저장한다.

- 따라서, 속도가 빠르고 소음이 없다. 하지만 가격이 HDD보다 비싸다.

 

 

 

 

 

04. 입출력장치

- 사용자가 명령을 넘기는 입력장치와 반대로 결과값을 보여주는 출력장치

- 흔히 우리가 아는 키보드, 모니터, 마우스, 스피커 등이 있다.

 

* 우리는 보통 키보드/마우스 등을 통해 명령을 입력하고, 모니터/스피커 등을 통해 결과값을 제공 받는다.

 

 

 


시스템 버스 (System Bus)

 

여기까지 각 장치들의 역할을 설명했으니, 이제는 전체적인 그림을 볼 차례다.

각 장치들은 Bus라는 통로를 통해 데이터를 주고받는다.

 

우리가 실제로 교통수단으로 이용하는 버스처럼, 버스가 손님(Data)를 태우고 각 정거장(CPU, Memory, I&O Deivce . .)에 들른다고 보면 된다.

 

그림에 보이는 것처럼 버스에도 여러 종류가 있다.

 

 

 

 

01. 데이터 버스 (Data Bus)

- 기억장치 & 입출력장치의 명령어를 CPU에게 전달하거나, 반대로 CPU의 결과값을 기억장치 & 입출력장치에게 전달하는 버스.

- 따라서 양방향 버스이며, 시스템의 전반적인 성능을 좌우한다.

- 여러 분리된 선으로 구성되어 있으며, 선의 수(32, 64, 128 ~)는 곧 CPU가 수용할 수 있는 데이터의 크기이자 한번에 이동할 수 있는 bits의 크기이다.

 

 

02. 주소 버스 (Address Bus)

- CPU가 기억장치 & 입출력장치에게 데이터를 보내기 위해 주소를 전달해주는 버스. (메모리의 주소나, I&O Device의 포트 번호)

- 따라서 단방향 버스이며, 입출력장치와는 양방향을 이용한다.

- 주소버스의 폭은 메모리의 용량과 밀접하다. ex) 32개의 주소 버스를 지닌 시스템은 2^32개의 메모리 위치를 할당 가능

 

 

03. 제어 버스 (Control Bus)

- 데이터 버스와 주소 버스를 제어하기 위해 신호를 주고받는 버스.

- CPU가 Memory를 Read할지, Write할지에 대한 정보를 전달한다.

 

 

 


Booting Up

비루한 PPT 그림들의 연속 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

더 깊게 들어가서, 시스템 부팅 절차를 보면 각 장치들의 역할을 좀 더 쉽게 이해할 수 있다.

 

 

01. 전원 기동

 

 

02. 전원 공급

- 하드웨어에는 기본적으로 전원 공급 장치(Power Supply)가 장착되어 있다.

- 서버 랙의 PDU와 연결되었다면, 사용자 전원 기동 시 전원 공급 장치가 메인보드에게 전력을 공급한다.

- 이제 메인보드를 거쳐 각 장치들이 동작을 수행하기 시작 !

 

 

03. 부트 프로그램 실행 및 하드웨어 검사

- 전원이 공급되면, 가장 먼저 CPU가 ROM에 있는 BIOS를 실행시킨다.

- BIOS는 POST라는 하드웨어 검사를 수행하는데, 이 때 하드웨어가 정상인지 전체적으로 검사한다.

 

 

04. 운영체제 로드

- 운영체제는 하나의 프로그램이자 데이터 형태이므로, DISK에 저장되어 있다가 RAM에게 넘어가는 방식이다.

- 따라서 하드웨어 검사 결과가 정상이라면, 이제 DISK에 있는 Boot Loader가 OS를 RAM에게 넘겨준다.

- 그럼 이제, OS가 실행된다.

 

 

05. 운영체제 사용

- OS가 실행되면, 이제 사용자가 입력하는 명령에 의해 CPU가 프로그램을 실행시키고 동작을 수행한다.

 

 

 

 

별 것 아닌 내용처럼 느껴지지만, 하드웨어 부팅이 실패하면 어느 부분이 문제인지 대략적인 짐작이 가능해진다.

 

 

 


NUMA (Non-Uniformed Memory Accessㆍ불균일 기억장치 접근)

 

NUMA NODE는 CPU 단위. 검색해보면 알겠지만 이건 매우 간단하게 표현한거~

한글로는 불균일 '기억장치 접근'으로 칭하지만, 영어 'Memory Access' 부분에 포인트를 잡으면 된다.

 

NUMA 구조는 멀티 프로세서 환경에서 사용할 수 있는 아키텍처로,

각 CPU가 메모리 공간의 일부를 자신의 독립적인 '지역 메모리 (Local Memory)'로 삼아 빠른 메모리 접근 속도를 보장해준다.

* Local Memory는 자신의 NUMA Node 내에서의 입장이고, 다른 NUMA Node의 메모리는 Remote Memory (원격 메모리)가 된다.

 

NUMA 구조는 속도 보장 뿐만 아니라, CPU가 작업을 수행할 때 같은 메모리 주소에 접근하려는 '병목 현상'을 막을 수 있다.

 

 

+ 모든 CPU에는 CPU 캐시라는 작은 영역이 있는데,

일반적인 NUMA 환경에서는 이 캐시 영역을 모든 노드에게 균등하게 나눠주는 캐시 일관성이 어렵다고 한다.

 

따라서 현대의 대부분 시스템은 ccNUMA (cache-coherence NUMA) 구조를 통해 캐시 일관성을 유지한다.

 

 

 

노드 내 메모리가 부족한 상황이 발생하면?

CPU는 원격 메모리 (다른 노드 내의 지역 메모리)에 접근하여 사용하게 된다.

하지만, 원격 메모리에 접근하는 것은 곧 속도 저하가 발생하는 상황이라고 보면 된다.

- 링크 타고 넘어가는 과정이 생기기 때문

 

 

 


 

 

새로 서버 운영 일을 시작하다보니 다시금 필요성을 느끼는 기초 스터디ㅠ

대학생 땐 막연하게 외워서 시험 치루고 금방 잊었는데, 다시 보니 기억도 새록새록 나고 그때랑 느낌이 다르다 ㅋㅋ

 

내 기억력은 왜 이렇게 똥인걸까.. 

 

마지막 부팅 과정에서 BIOS, POST, Boot Loader 등 또 새로운 용어가 나오는데, 이건 나중에 따로 포스팅 해보는걸로ㅎ

진짜 하나를 알면 새로운 내용이 계속 추가되어서 끝이 없다.