• CPU
  • 메모리
  • 디스크
  • IO(입출력)
  • 운영체제(OS)



1. CPU

CPU(중앙처리 장치)는 기억장치(메모리)에 기억되어 있는 명령어들을 받아, 연산을 수행하는 컴퓨터 시스템의 핵심 부품입니다.

폰노이만 구조 컴퓨터 시스템을 이루는 3대 구성이 있다면 CPU, 메모리 그리고 디스크입니다. 여기에 I/O까지 추가 된다면 그것을 컴퓨터를 이루는 기본 골격이라고 할 수 있는데, 이것을 제안 한 것이 '폰 노이만'입니다.

'폰노이만 구조'란  중앙 처리 장치라는 것이 있고 이 중앙 처리 장치를 통해서 연산을 수행하는 구조입니다. 주요 특징으로는 명령어/데이터 로드/실행/저장을 순차적으로 수행하는 것과 데이터/프로그램 메모리를 하나의 버스로 접근하는 것 등이 있습니다.

CPU의 속도를 이야기할 때 헤르쯔 단위로 표현을 합니다. 2.9GHz에서 Hz는 진동수, 클럭수입니다. 

CPU 일정한 속도로 동작하기 위해서는 일정한 간격으로 전기적 펄스를 공급하는데, 이 전기적 신호가 초당 CPU에 공급되는 횟수라는 개념에서 Hz라는 단위를 씁니다. CPU에 전기적으로 공급되는 신호를 Clock이라고 하는데, 이것은 주기적으로 일정한 시그널을 보내주는 칩입니다. Clock에서는 주기적으로 신호를 발생시키고, CPU는 이 신호를 받고 데이터를 주거나 받는 등의 일을 처리하게 됩니다. 이 신호 한번에 의해서 CPU에서 한 개의 명령어가 처리됩니다. 신호가 들어올 때마다 명령어를 수행하기 때문에 빠르게 들어온다는 것은 결국 빠른 속도의 처리 능력을 갖는 시스템을 의미합니다. 하지만, 무조건 클럭수만 빠르다고 CPU가 계산을 할 수 있는 것은 아닙니다. 

CPU의 내부의 산술논리연산장치(ALU: Arithmetic Logic Unit)는 산술적인 연산과 논리적인 연산을 담당하는 장치로 가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등으로 구성됩니다. 

캐시나 메모리로부터 읽어 온 데이터는 레지스터(Register)라는 CPU 전용의 기억장소에 저장되며, ALU는 레지스터에 저장된 데이터를 이용하여 덧셈, 곰셈 등과 같은 산술 연산을 수행합니다. 

명령어는 시스템이 특정 동작을 수행시키는 작은 단위입니다. 명령어는 코드로 되어 있는데, 아래와 같이 동작코드(Op-code : Operational Code)와 오퍼랜드(Operand)로 구성되어 있습니다.
명령어(Instruction) = 동작 코드 + 오퍼랜드 (Operand) 
동작 코드 (Op-code) : 각 명령어의 실행 동작을 구분하여 표현 
오퍼랜드 (Operand) : 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치

명령어 처리 방식 RISC와 CISC
RISC(Reduced Instruction Set Computer)는 CPU명령어의 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식
CISC(Complex Instruction Set Computer)는 복잡한 명령어 집합을 갖는 CPU 구조


2. 메모리

메모리는 컴퓨터의 성능에 있어 매우 중요합니다. CPU가 일을 하려면 일의 내용이 CPU로 전달이 되어야 하는데, 이 명령어나 데이터는 파일에 일부로 담겨있고, 파일은 하드 디스크에 저장이 되어 있습니다. 파일의 일부 내용이 하드 디스크에서 CPU까지 전달하려면 데이터가 BUS를 타고 이동해야 합니다. (참고로, BUS는 컴퓨터 내부에서 데이터들을 싣어 날라주는 연결선입니다)

그런데, 문제는 버스가 상대적으로 느리다는 것입니다. 그래서, CPU는 빠른 처리를 하기 위해 하드디스크의 파일의 내용 일부를 메모리에 올려 놓고 수행을 합니다.

메모리는 하드디스크보다 훨씬 속도가 빠르기 때문에 CPU의 일거리를 바로 바로 줄 수 있습니다. 그래서 CPU가 일을 얼마나 빨리 처리하느냐도 중요하지만, 옆에서 제 때를 맞춰 공급해 수 있느냐도 중요한데, 메모리는 이 일을 하기 위해서 사용되는 임시 저장소라고 생각하시면 됩니다.

메모리가 컴퓨터의 성능을 많이 좌우하는 분야는 게임입니다. 최근 게임들을 보면 그래픽 사양은 물론, 용량이 엄청 큽니다. 그리고 여러개의 작업을 동시에 많이 하는 경우에도 메모리가 많이 필요합니다. 

메모리반도체는 RAM과 ROM으로 나누어지게 됩니다.

(메모리 반도체란 정보(DATA)를 저장하는 용도로 사용되는 반도체를 뜻합니다)

RAM(Random access memory)은 휘발성 메모리로 DRAM, SRAM으로 나누어지며, 삼성과 하이닉스는 주로 DRAM을 생산합니다. DRAM은 단기간에 메모리를 저장하고, 전원이 꺼지면 날라가기 때문에 휘발성 메모리입니다. (SRAM은 주로 시스템 반도체에서 사용합니다 속도가 빠르기 때문에 CPU, GPU에 주로 사용합니다.) 

ROM(Read only memory)은 비휘발성 메모리로  주로, Flash 메모리라고 부르며 현재는 NAND 사용하기 때문에 
ROM=NAND 라고 생각하셔도 무방합니다.
NAND는 메모리에 정보를 저장하고, 전원이 꺼져도 지속적으로 정보를 유지하기 때문에 비휘발성 메모리입니다.


RAM(Random Access Memory)는 주기억 장치에서 사용되며 자료 저장 방식, 형태별, 사용처에 따라서 메모리를 분류할 수 있다.

자료 저장 방식에 따른 분류 
정적인 방식과 동적인 방식으로 나눌 수 있다. 이는 SRAM(Static RAM)과 DRAM(Dynamic RAM)으로 나뉘는데, DRAM은 캐패시터에 전하를 충전하는 방식으로 데이터를 저장하는 기억 소자들로 이루어진 것이고 저장 내용을 기억하기 위해서는 주기적인 재충전이 필요한 방식이다. 정적인 방식은 플리플롭을 이용한 방식으로 고정된 값을 기억하는 방식으로 재충전이 필요하지 않은 방식이다.


사용처에 따른 분류 
EEPROM(Electrical Erasable Programmable ROM) 전기 신호를 사용하여 자료를 기록하고 수정할 수 있는 ROM이다. Flash Memory는 EEPROM을 변형한 것으로 전원 공급이 없어도 기록된 내용을 보존하는 ROM의 특성과 기록된 내용을 자유롭게 수정할 수 있는 RAM의 특성을 가지고 있다. EEPROM보다는 속도가 느리고, PC카드(PCMCIA)로서 하드디스크 대용으로 사용되기도 하기도 한다. SSD(Solid State Disk)개념의 하드 디스크로써의 형태의 제품화가 되고 있다.

Cache Memory 
캐시 메모리라고 하면 실제 메모리와 CPU 사이에서 빠르게 전달을 위해서 미리 데이터들을 저장해두는 좀더 빠른 메모리이다. 네트워크에서 캐시는 로컬에 파일을 미리 받아놓고, 그 내용을 보거나 웹서버에서도 매번 로딩을 해야 하는 파일들을 미리 로딩해두고, 응답을 주기도 한다. 데이터 베이스를 매번 확인해야 하는것도 캐시서버를 이용한다면 빠른 응답을 해줄 수 있다. 


(참고) 가상메모리

물리적 메모리보다 보다 많은 메모리를 프로그램에서 사용할 수 있도록 디스크의 일부를 메모리처럼 사용하는 논리적 메모리이다. 한계를 갖는 물리적 메모리 공간 환경에서 여러 개의 응용 프로그램이 동시에 수행되어야 한다. 이미 개념을 이해 했다면 설명을 위해서 사용된 ‘동시’라는 단어가 시분할 컴퓨터에서 갖는 의미를 알 수 있을 것이다. 열심히 번갈아 가면서 CPU가 수행하고 있는 것이다. 이때 CPU는 물리적 메모리를 접근하여 프로그램을 수행시킨다. 그 물리적 메모리를 한계가 있고 고가의 디바이스이다. 무조건 물리적 메모리를 늘려서 효율을 늘리는 것은 비용대비 한계가 있는 것이다. 이를 위해서 나온 개념이 ‘가상 메모리’이다. 사용자에게 주기억장치보다 더 큰 용량의 가상기억공간을 제공하는 기억장치관리기법이다. 디스크 상에 위치한 보다 큰 기억장치를 주기억장치처럼 사용한다.

 

3. 디스크(HDD)

디스크 내에 정보가 저장되어 있는 구역을 섹터라고 하는데, 이 섹터를 헤드라는 것이 움직이면서 데이터를 찾아다닌다. 저장된 위치는 고정되어 있기때문에 그 위치를 찾아서 섹터가 움직이는 것이다. 우리가 윈도우 탐색기에서 파일을 보고 폴더를 들어가보면 파일들이 여러개 있을 것이다. 우리가 윈도우가 제공해주는 아주 편리한 기능을 보는 것이다. 파일을 파일로 보고 어떤 특정 폴더에 저장되어 있다고 보여진다. 좀더 들여다보면 그 파일은 하드디스크에 저장이 되어 있는데, 물리적으로는 많은 조각으로 분리되어 이곳저곳에 저장되어 있다. 그리고 베드 섹터라는 말도 있었고, 그것은 그 부분의 위치에 저장할 수 없게 물리적 일부 고장이 난 것이다. 가끔 음악을 듣다가 판이 튀는 경우가 있는데, 그런식이다. 그 일부가 고장났다고 해서 하드디스크를 못쓰는게 아니다. 정상적인 공간에 쓰게 된다.

가끔 디스크 정리하면 빠를 수 있었던 것은 물리적으로 분산되어 있는 조각들을 모아서 파일의 접근성을 좋게 해주기 때문이다. 헤드가 여러 곳의 섹터를 오가며 데이터를 찾지 않고 한군데에서 가져오면 빠르기 때문이다. 과거 하드디스크가 전부인 당시는 그래서 가끔 윈도우에서 조각모음을 해줬던 것이다. 지금은 그 광경을 보기는 어렵다. 이는 SSD의 등장때문이다.

RAID(redundant array of independent disks )
보통 사람들에게는 익숙하지 않다. 그럴 수 있는 것은 보통 사람들은 하드디스크를 사용하고 과거 생각해보면 컴퓨터에 하드디스크를 2개 또는 그이상 달아서 사용했다. RAID라는 것은 이러한 하드디스크를 여러개 연결해서 쓰는 방식의 디스크를 말한다. 데이터를 분할해서 복수의 자기 디스크 장치에 대해 병렬로 데이터를 읽는 장치 또는 읽는 방식으로 여러 디스크를 병렬로 연결하여 사용하는 기법으로 접근 속도와 가용성이 증가되며 물리적 디스크 용량의 제약을 벗어나 하나 대용량 디스크처럼 사용 가능하도록 하는 기법이다. 저용량, 저성능, 저가용성인 디스크를 배열 구조로 중복 구성하여 크고 고가인 디스크 장비(SLED : Single Large Expensive Disk)를 대체하는 기술이다. 복수의 드라이브 집합을 하나의 저장장치처럼 다룰 수 있고 장애 발생시 데이터 무결성을 보장하고 디스크 각각이 독립적으로 동작할 수 있도록 구현된 저장장치 기술이다. 여분의 디스크(Redundant Disk)는 디스크 오류 발생시 데이터 복구를 보장하기 위한 패리티(Parity)정보를 저장하는데 사용된다.

RAID 1 Level – Mirroring and Duplexing
모든 디스크마다 하나의 중복 디스크를 설치하여 동일 데이터를 중복으로 저장하는 방식이다. 데이터를 Physical Disk에 복사하여 저장하므로 높은 데이터의 가용성을 보장하고 동시에 빠른 I/O성능을 보장한다. 디스크 고장 시 자동 전환 가능, 최소한의 Array 구성으로 되어 있다. 장애에 대한 대책 기능이 가장 안정적이다. 하지만 경제성을 고려하지 않은 구조이다. 가격이 고가, 이중 데이터 저장한다. 데이터 읽기에 대한 성능 향상을 시킨 구조이다. 1차 Disk가 Busy일 때 2차 Disk이용할 수 있다. 최소 2개의 드라이브로 구성된다. 가용 용량이 전체 용량의 50%이다. 고비용이지만 데이터의 이중화로 장애 시 안정성을 확보할 수 있다. 높은 신뢰도를 필요로 하는 고장 허용성(Fault Tolerant) 응용에 적합하다. 금융 기관 등 Mission Critical한 업무를 진행하는데 적합하다.


4. 입출력(IO)



5. 운영체제(OS)

운영 체제는 복잡한 하드웨어 내부를 일관되고 추상적으로 볼 수 있도록 인터페이스를 제공한다. 

운영체제는 CPU의 수행 시간을 나누는 ‘프로세스 관리’와 서로 다른 어플리케이션이 메모리를 사용하는데 있어서 문제가 없도록 해주는 ‘메모리 관리’ 그리고 파일이 저장되어 있는 ‘디스크 관리’를 해준다. 이렇게 운영체제는 3대 기능이 가지고 있다.

커널(Kernel)은 운영 체제의 일부로써 하드웨어와 프로세스의 운용을 위한 소프트웨어이다. 

커널은 디스크에 파일로써 존재하는 프로그램이며 시스템이 기동될 때boot 프로그램에 의해 구동되며 메모리에 상주된다. 기본적으로 프로세스와 파일 관리이며 그 밖에 입출력 장치관리, 메모리 관리 및 시스템 호출 인터페이스기능을 수행한다. 커널은 메모리, 디스크, 네트워크카드, 비디오 카드 등과 같은 모든 하드웨어를 관리한다. 그리고 응용 프로그램이 이러한 하드웨어를 접근하는 것을 가능하게 해주는 통로가 된다. 응용프로그램의 요청을 받아서 하드웨어 수행을 하고 그 결과를 다시 응용프로그램이 받게 된다.

동시 수행을 위한 멀티 스레드 멀티 스레드 프로그램은 스레드를 2개 이상 가지며 동시에 기능을 처리 할 수 있다. 동시 수행이라는 용어를 사용했지만, 여전히 엄밀히 말하면 멀티 스레드라고 해서 동시 수행은 아니다. 물론 최근 듀얼 코어라고 하면 동시에 명령어를 2개 수행할 수 있기 때문에 동시라는 말이 성립이 된다. 하지만 현재 멀티스레드를 말하는 개념은 여러 개의 스레드를 하나의 프로세스 내에서 수행한다는 의미이다. 프로세스는 반드시 하나의 이상의 스레드를 가지고 동작을 수행한다. 이 때 2개 이상도 갖게 되는데 그 목적은 프로그램내에 동시에 수행이 되어야 할 필요가 있거나 그러한 목적으로 사용하게 된다.

'프로세스'는 동작 중인 프로그램을 지칭하며,
'프로세서'는 프로그램이 동작하게끔 해주는 하드웨어입니다. (CPU)

세마포어(Semaphore) - 운영체제나 프로그램 내에서 공유 자원에 대한 접근을 제어하기 위해 사용되는 신호


아래 wikidocs의 내용을 바탕으로, 학습한 내용을 요약 정리한 것입니다.

wikidocs.net/book/2184

반응형

+ Recent posts