
컴퓨터는 중앙처리장치(CPU), 메인메모리, 입력장치, 출력장치, 저장장치로 구성됩니다.
필수장치 : 중앙처리장치, 메인메모리
주변장치 : 입력장치, 출력장치, 저장장치
중앙처리장치(CPU)는 명령어를 해석하여 실행하는 장치로, 인간으로 치면 두뇌에 해당합니다. 메모리는 작업에 필요한 프로그램과 데이터를 저장하는 장소로, 바이트 단위로 분할되어 있으며 분할 공간마다 주소로 구분합니다.
메모리는 전자의 이동으로 데이터를 처리하기 때문에 속도가 빠르지만 하드디스크나 CD 같은 저장장치는 구동장치가 있는 기계라서 상대적으로 속도가 느립니다.
메인보드(main board)는 CPU와 메모리 등 다양한 부품을 연결하고 전원을 공급해주는 커다란 판입니다.
폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결된 구조를 말합니다. 폰노이만 구조가 등장하기 전의 컴퓨터는 전선을 연결하여 회로를 구성하는 하드와이어링 형태였기 때문에 다른 용도로 사용하려면 전선의 연결을 바꾸어야 했습니다.
폰노이만 구조에서 가장 중요한 특징은 모든 프로그램은 메모리에 올라와야 실행할 수 있다는 것입니다.
운영체제의 작업은 크게 프로세스 관리, 메모리 관리, 저장장치 관리로 나뉩니다.
기본적으로 데이터의 표시 단위는 비트(bit)이며, 8비트를 묶어서 바이트(Byte)라 부릅니다.
| 단위 | 표기 | 2진크기 | 10진 크기 |
|---|---|---|---|
| Byte(바이트) | B | 1 | 1 |
| Kilo Byte(킬로바이트) | KB | 210 | 103 |
| Mega Byte(메가바이트) | MB | 220 | 106 |
| Giga Byte(기가바이트) | GB | 230 | 109 |
| Tera Byte(테라바이트) | TB | 240 | 1012 |
| Peta Byte(페타바이트) | PB | 250 | 1015 |
클록 (clock) : 컴퓨터에서 일정한 박자를 만들어 내는 것
CPU도 제품에 따라 성능이 제각각이므로 CPU의 성능을 나타낼 수 있는 단위가 필요합니다. 이때 사용하는 것이 헤르츠(Hertz)로 표시 단위는 Hz 입니다.
헤르츠는 시간에 따라 변화가 일어날 때 사용하는 단위입니다. 컴퓨터에서 헤르츠 단위를 사용한다는 것은 1초 동안 몇 번의 작업이 이루어져서 몇 번의 펄스(클록 틱)가 발생하였는가를 의미합니다.
시스템 버스(system bus)는 메모리와 주변장치를 연결하는 버스이며 메인보드의 동작 속도를 의미합니다. 시스템 버스는 FSB(Front-Side Bus) 혹은 전면 버스라고 부릅니다.
기계어 (machine language) : 컴퓨터가 이해할 수 있는 언어
기계어를 사람들이 이해할 수 있는 문자 형태로 바꾼 것이 어셈블리어(assembly language) 입니다. 어셈블리어는 0과 1의 이진수를 문자 형태로 바꿔놓았을 뿐이므로 전문가만 사용할 수 있습니다.
기계어에 가깝지만 일반인이 사용하기엔 어려운 프로그래밍 언어를 저급언어(low level language)라 부릅니다.
저급언어와 달리 if나 for 같이 일반인이 이해할 수 있는 단어를 사용하여 만든 언어를 고급언어(high level language)라 부릅니다. 기계어와 어셈블리어를 제외한 대부분의 언어가 고급언어 입니다.
컴파일 (compile) : 소스코드를 기계어로 번역하는 작업
컴파일을 담당하는 프로그램을 컴파일러(compiler)라 부릅니다. C, C++, 자바와 같은 대부분의 고급 언어가 컴파일 방식을 사용합니다.
소스코드를 기계어로 번역하는 다른 방법으로 인터프리터(interpreter)가 있습니다.
인터프리터 방식에서는 소스코드를 한 번에 한 문장씩 번역하여 실행합니다. 자바스크립트가 대표적인 인터프리터 언어입니다.
큐와 달리 스택에서는 한쪽으로만 입출력이 이루어집니다.
큐 (queue) : First In, First Out
스택 (stack) : First In, Last Out
CPU는 산술논리 연산장치, 제어장치 레지스터로 구성됩니다.
산술논리 연산장치 (ALU, Arithmetic and Logic Unit) : CPU에서 데이터를 연산하는 장치
제어장치 (control unit) : CPU에서 작업을 지시하는 부분
레지스터 (register) : 작업에 필요한 데이터를 CPU 내부에 보관하는 곳
| 레지스터 | 의미 | 특징 | |
|---|---|---|---|
| 일반 레지스터 | 데이터 레지스터(DR) | data register | CPU가 명령어를 처리하는 데 필요한 데이터를 임시로 저장하는 범용 레지스터 |
| 주소 레지스터(AR) | address register | 데이터 또는 명령어가 저장된 메모리의 주소를 저장 | |
| 특수 레지스터 | 프로그램 카운터(PC) | program counter | 다음에 실행할 명령어의 위치(코드의 행 번호)를 저장 |
| 명령어 레지스터(IR) | instruction register | 현재 실행 중인 명령어를 저장 | |
| 메모리 주소 레지스터(MAR) | memory address resgister | 메모리 관리자가 접근해야 할 메모리의 주소를 저장 | |
| 메모리 버퍼 레지스터(MBR) | memory buffer register | 메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장 | |
| 프로그램 상태 레지스터(PSR) | program status register | 연산 결과(양수, 음수 등)를 저장 |
CPU와 메모리, 주변장치 간에 데이터를 주고받을 때는 시스템 버스를 사용합니다.
| 버스 | 특징 |
|---|---|
| 제어 버스 | 제어장치와 연결된 버스로, CPU가 메모리와 주변장치에 제어 신호를 보내기 위해 사용. 메모리와 주변장치에서도 작업이 완료되거나 오류가 발생하면 제어 신호를 보내기 때문에 양방향입니다. |
| 주소 버스 | 메모리 주소 레지스터와 연결된 버스로, 데이터를 읽거나 쓸 때 메모리나 주변장치에 위치 정보를 보내기 위해 사용하며 단방향입니다. |
| 데이터 버스 | 메모리 버퍼 레지스터와 연결된 버스로, 데이터의 이동이 양방향으로 이루어집니다. |
버스의 대역폭(bandwidth)은 한 번에 전달할 수 있는 데이터의 최대 크기입니다. 버스의 대역폭은 CPU가 한번에 처리할 수 있는 데이터의 크기와 같습니다. 32bit, 64bit는 CPU가 한 번에 처리할 수 있는 데이터의 최대 크기입니다. 버스의 대역폭, 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기는 항상 같습니다.
모든 프로그램은 메모리에 올라와야 실행될 수 있습니다. 컴퓨터가 발전함에 따라 많은 종류의 메모리가 개발되었습니다. 메모리는 읽거나 쓸 수 있는 램(RAM, Random Access Memory)과 읽기만 가능한 롬(ROM, Read Only Memory)으로 구분됩니다.램은 무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 의미에서 붙은 이름입니다.
램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉩니다.
휘발성 메모리(volatility memory)에는 DRAM(Dynamic RAM)과 SRAM(Static RAM)이 있습니다.
메인메모리를 비휘발성 메모리로 만들면 전력이 끊겨도 내용이 남기 때문에 편리할 수 있습니다. 하지만 전력이 끊겨도 데이터를 보관하기 위해 메모리 내부가 복잡하고 속도가 느리며 가격이 비쌉니다. 그래서 아직까지도 메인메모리는 휘발성 메모리를 사용하고 있습니다.
비휘발성 메모리(non-volatility memory)에는 플래시 메모리(flash memory), FRAM(Ferroelectric RAM), PRAM(Phase change RAM) 등이 있습니다.
플래시 메모리의 각 소자는 최대 사용 횟수가 제한되어 있어 보통 소자 하나당 몇 천 번에서 만 번 정도 사용하면 제 기능을 잃습니다.
메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터(bound register)에 저장한 후 작업합니다. 그리고 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터(limit register)에 저장합니다. 사용자 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어 측면에서 점검함으로써 메모리를 보호합니다.
부팅 (booting) : 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정
한 컴퓨터에 운영체제 2개를 설치해 보면 부트스트랩을 확인할 수 있습니다. 이 경우 바이오스가 하드웨어 점검을 마치고 마스터 부트 레코드에서 부트스트랩을 가져와 실행하면 어떤 운영체제를 사용할 것인지 물어보는 화면이 나타납니다.
부트스트랩 (bootstrap) : 운영체제를 실행하기 위한 코드
2편에 계속...