컴퓨터의 하드웨어 구성
컴퓨터는 두 가지의 필수장치와 그 외 주변장치로 구성된다.
필수장치로는 중앙처리장치(CPU), 메인메모리
주변장치로는 입력장치, 출력장치, 저장장치가 존재한다.
입력장치 예시로는 키보드와 마우스
출력장치 예시로는 모니터와 스피커
저장장치 예시로는 HDD(하드디스크)와 SSD가 존재한다.
이러한 장치들은 메인보드(혹은 마더보드)라고 하는 커다란 회로 판을 통해 서로 연결되고 전원을 공급해준다.
메인보드에는 각종 부품들을 꽂을 수 있는 단자가 마련되어 있다.
메인보드에서 각 장치를 연결하여 데이터가 지나다니는 통로를 버스라고 한다.
폰노이만 구조 Von Neumann Architecture
오늘날 대부분의 컴퓨터는 모두 폰노이만 구조를 따른다.
폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 모두 버스에 연결되어 있는 구조를 의미한다.
폰노이만 구조의 등장 이전의 컴퓨터는 전선을 연결하여 회로를 구성하는 하드와이어링 형태로 이루어져 있었다.
대표적으로 ENIAC(에니악)의 경우 진공관을 전선으로 연결하여 진공관 소자가 켜지면 1, 꺼지면 0으로 판단하여 2진법을 통해 계산을 수행하는 최초의 컴퓨터였지만, 계산식을 변경하거나 다른 작업을 수행하려면 직접 전선을 변경하며 작업해야 하는 번거로움이 존재하였다.
폰 노이만은 이런 하드웨어를 직접 변경해야하는 번거로움을 해결하기 위하여 하드웨어는 변경하지 않고 작업을 위한 프로그램만을 교체하여 메모리에 올리는 방식의 구조를 제안하게 된다.
폰노이만 구조에서 가장 중요한 특징은 '모든 프로그램은 메모리에 올라와야 실행할 수 있다'는 것이다.
여느 파일이나 프로그램을 수정하거나 저장할 경우 해당 프로그램과 데이터는 저장장치에 저장되지만 실행되지는 않는다. 실행을 하려면 프로그램이 메모리에 올라와야하며, 운영체제 또한 프로그램이기에 메모리에 올라와야 실행될 수 있다.
시스템 버스와 CPU 버스
시스템 버스는 메모리와 주변장치를 연결하는 버스이며 메인보드의 동작 속도를 의미한다.
시스템 버스는 FSB(Front-side Bus) 혹은 전면 버스라고도 부른다.
CPU 버스는 CPU 내부의 여러 장치들을 연결하는 버스이며 해당 버스를 BSB(Back-side Bus) 혹은 후면 버스라고 부른다.
CPU 내부 버스의 속도는 CPU 클록과 같으며 시스템 버스보다 훨씬 빠르다.
시스템 버스는 제어 버스, 주소 버스, 데이터 버스 세 가지로 나뉜다.
- 제어 버스 Control Bus
다음에 어떤 작업을 할지 지시하는 제어 신호가 오고가는 버스이며 CPU, 메모리, 주변장치와 양방향으로 오고 간다. - 주소 버스 Address Bus
메모리의 데이터를 읽거나 쓸 때 작업할 위치에 대한 정보(주소)가 오고가는 버스이며 메모리 주소 레지스터와 연결되어 단방향으로 간다. 즉 CPU에서 메모리나 주변장치로 나가는 주소 정보는 있지만 CPU로 전달되는 정보는 없다. - 데이터 버스 Data Bus
데이터가 실질적으로 오고가는 버스이며 메모리 버퍼 레지스터와 연결되어 있고 양방향으로 오고간다.
CPU의 구성
CPU(Central Processing Unit)은 명령어를 해석하여 실행하는 장치이다.
CPU 또한 여러 장치들로 구성되어 있는데 산술논리 연산장치(ALU), 제어장치, 레지스터로 구성되어 있다.
- 산술논리 연산장치 Arithmetic and Logic Unit
데이터의 사칙연산 및 AND, OR과 같은 논리 연산을 수행하는 장치 - 제어장치 Control Unit
CPU에서 작업을 지시하는 장치 - 레지스터 Register
작업에 필요한 데이터를 CPU 내부에 보관, 저장하는 장치
CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장하고 산술논리 연산장치를 이용하여 연산한 후, 그 결과를 다시 레지스터에 저장했다가 메모리로 옮긴다.
이 때 사용되는 레지스터는 사용자 프로그램에 의해 변경되기 때문에 사용자 가시 레지스터라고 부른다.
사용자 가시 레지스터에는 데이터 레지스터와 주소 레지스터가 존재한다.
- 데이터 레지스터 Data Register
메모리에서 가져온 데이터를 임시로 보관할 때 사용한다. - 주소 레지스터 Address Register
데이터 또는 명령어가 저장된 메모리의 주소가 저장되어 있는 레지스터.
그 외에 특별한 용도로 사용되는 특수 레지스터들이 존재하는데 이들은 사용자가 임의로 변경할 수 없다.
이를 사용자 불가시 레지스터라고 부르며 다음과 같은 종류가 존재한다.
- 프로그램 카운터 Program Counter
다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에게 알려주는 역할 - 명령어 레지스터 Instruction Register
현재 실행중인 명령어를 저장하는 역할 - 메모리 주소 레지스터 Memory Address Register
메모리에서 데이터를 가져오거나 반대로 메모리에서 데이터를 보낼 때 주소를 지정하는 데 사용되는 레지스터 - 메모리 버퍼 레지스터 Memory Buffer Register
메모리에서 가져온 데이터나 메모리로 옮겨갈 데이터를 임시로 보관하는 레지스터
CPU 비트의 의미
운영체제 설치 시나 프로그램 설치 시 32bit, 64bit 혹은 x86, x64와 같은 용어를 본 적이 있을 것이다.
여기서 32bit, 64bit는 CPU가 한 번에 처리할 수 있는 데이터의 최대 크기를 의미한다.
데이터를 한 번에 처리하려면 데이터가 전달되는 통로(버스)도 그 크기만큼 커야한다.
또한 메모리에서 데이터를 읽거나 쓸 때에도 한 번에 같은 크기만큼 처리할 수 있어야 한다.
이는 레지스터에서 담당한다.
따라서 버스의 대역폭과 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기는 항상 같다.
이러한 CPU에서 한 번에 처리할 수 있는 데이터의 크기를 워드 word라고 한다.
즉, 32bit CPU에서의 1워드는 32bit, 64bit CPU에서 1워드는 64bit가 된다.
메모리의 종류
메모리는 읽거나 쓸 수 있는 램(RAM random access memory)과 읽기 전용인 롬(ROM read only memory)로 나뉜다.
램의 이름은 데이터를 무작위로 읽어도 저장된 위치와 상관없이 같은 속도로 읽을 수 있다는 의미에서 유래되었다.
램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 보관할 수 있는 비휘발성 메모리로 나뉜다.
- 휘발성 메모리
DRAM(Dynamic RAM 동적 램)과 SRAM(Static RAM 정적 램)으로 나뉜다.
DRAM은 저장된 0과 1의 데이터가 일정 시간마다 사라지기에 일정 시간마다 다시 재생이 필요하다.
SRAM은 전력이 공급되는 동안은 데이터를 보관할 수 있어 재생할 필요가 없다. 그렇기에 속도가 빠르지만 가격이 비싸다. 일반적으로 메인메모리에는 DRAM을 사용하고 캐시 같은 고속 메모리에 SRAM을 사용한다. - 비휘발성 메모리
플래시 메모리, FRAM, PRAM 등이 있는데 주로 플래시 메모리가 USB 드라이버나 MP3 플레이어 등에 많이 사용된다. 전력이 없어도 데이터를 보관할 수 있으나 메모리의 각 소자에 최대 사용 횟수가 제한 되어 있기에 오래 사용하면 성능 저하 혹은 데이터 유실의 문제점이 있다.
이 외에도 HDD를 대신하는 SSD 또한 비휘발성 메모리로 많이 사용되고 있다.
롬은 전력이 끊겨도 데이터를 보관할 수 있지만 데이터를 한 번 저장하면 바꿀 수 없다.
이러한 특성 때문에 바이오스(BIOS basic Input/Output system)를 롬에 저장한다.
부팅 Booting
컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅이라고 한다.
MBR과 BIOS 기반 부팅의 예시는 아래와 같다.
- 사용자가 컴퓨터 전원을 켜면 롬에 저장된 바이오스가 실행된다.
- 바이오스는 CPU, 메모리, HDD, 키보드, 마우스 등 주요 하드웨어가 제대로 작동하는지 확인한다.
- 점검이 완료되면 운영체제가 저장된 HDD나 SSD의 마스터 부트 레코드(MBR)에 저장된 작은 프로그램을 메모리로 가져와 실행한다.
MBR은 디스크의 첫 번째 섹터를 가리키며 운영체제를 실행하기 위한 작은 코드인 부트 스트랩이 저장되어 있다.
해당 부트 스트랩이 실행되면 저장된 운영체제를 메모리로 가져와 실행하게 된다.
참고
쉽게 배우는 운영체제 2판 - 조성호 (한빛아카데미)
'컴퓨터 과학(CS) > 운영체제' 카테고리의 다른 글
컴퓨터 과학_API와 SDK 정의와 차이 (0) | 2024.08.27 |
---|---|
컴퓨터 과학_운영체제(OS)의 구조 (0) | 2024.08.10 |
컴퓨터 과학_운영체제(OS)의 개념과 역할 (0) | 2024.08.07 |