컴퓨터의 구조와 성능 향상
컴퓨터의 기본 구성
하드웨어의 구성
컴퓨터는 CPU, 메인메모리, 입력장치, 출력장치, 주변장치로 구성됩니다. 컴퓨터로 하는 작업은 대부분 CPU와 메인메모리의 협업으로 이루어지기 때문에 필수장치로 분류되고 그 외는 주변장치로 분류됩니다..
메인메모리는 휘발성이기 때문에 영구히 보관하기 위하여 하드디스크나 USB 메모리를 사용합니다. 그래서 메인메모리를 제1저장장치라 부르고 하드디스크나 USB 메모리가 같은 메모리를 제2저장장치 또는 보조저장장치라고 부릅니다.
CPU와 메인메모리
CPU는 명령어를 해석하여 실행하는 장치로 메인메모리는 작업에 필요한 프로그램과 데이터를 저장하는 장소로, 바이트 단위로 분할되어 있으며 분할 공간마다 주소로 구분합니다.
입출력장치
입력장치는 외부의 데이터를 컴퓨터에 입력하는 장치로 키보드 마우스 등이 있습니다. 출력장치는 컴퓨터에서 처리한 결과를 사용자가 원하는 형태로 출력하는 장치이며 프린터, 모니터, 스피커 등이 있습니다.
보조저장장치
메인메모리는 전자의 이동으로 데이터를 처리하기 때문에 속도가 빠르지만 하드디스크나 CD 같은 보조저장장치는 구동장치가 있는 기계라서 상대적으로 속도가 느립니다. 느리지만 보조저장장치를 사용하는 이유는 저장 용량에 비해 가격이 저렴하고 비휘발성이기 때문입니다.
- 자성을 이용 : 카세트테이프, 플로피디스크, 하드디스크
- 레이저를 이용 : CD, DVD, 블루레이디스크
- 메모리를 이용 : USB 드라이버, SD 카드, CF 카드, SSD
메인보드
메인보드는 CPU와 메인메모리 등 다양한 부품을 연결하고 전원을 공급해 주는 커다란 판입니다. 각 장치를 연결하여 데이터가 지나다니는 통로를 버스라고 합니다.
폰노이만 구조
오늘날의 컴퓨터는 대부분 폰노이만 구조를 따릅니다. 폰노이만 구조는 CPU, 메인메모리, 입출력장치, 저장장치가 버스로 연결된 구조를 말합니다. 이 전의 컴퓨터는 하드와이어링 형태였기 때문에 용도를 바꾸기 위해서는 전선의 연결을 바꾸어야 했습니다. 하지만 메인메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조, 즉 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메인메모리에 올리는 방식을 개척하였습니다.
폰노이만 구조에서 가장 중요한 특징은 '모든 프로그램은 메인메모리에 올라와야 실행할 수 있다' 는 것입니다.
기초 용어 정리
- 시스템 버스 : 메모리와 주변장치를 연결하는 버스이며 FSB 혹은 전면 버스라고 부릅니다.
- CPU 버스 : CPU 내부에 있는 장치를 연결하는 버스이며 BSB 혹은 후면 버스라 부릅니다. 시스템 버스보다 훨씬 빠릅니다.
프로그래밍
컴퓨터가 이해할 수 있는 언어는 기계어입니다. 이를 사람들이 이해할 수 있는 문자 형태로 바꾼 것이 어셈블리어입니다. 하지만 아직 일반인이 사용하기 어려우며 이를 저급언어라 부릅니다.
저급언어와 달리 일반인이 이해할 수 있는 단어를 사용하여 만든 언어를 고급언어라 부릅니다. 컴퓨터는 기계어만 인식하기 때문에 고급언어를 기계어로 번역하는 과정이 필요하며, 이러한 과정을 컴파일, 담당하는 프로그램을 컴파일러라 부릅니다.
CPU와 메모리
CPU의 구성과 동작
CPU는 명령어를 해석하여 실행하는 장치로 산술논리 연산장치, 제어장치, 레지스터로 구성되어 있습니다.
- 산술논리 연산장치 : CPU에서 데이터를 연산하는 장치로 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR 같은 논리 연산을 수행합니다.
- 제어장치 : CPU에서 작업을 지시하는 장치입니다.
- 레지스터 : 작업에 필요한 데이터를 CPU 내부에 보관하는 곳입니다..
레지스터의 종류
사용자 가시 레지스터 : 사용자 프로그램에 의해 변경
- 데이터 레지스터(DR) : CPU 내부에서 데이터를 처리하기 위해 임시로 보관할 때 사용합니다. 대부분의 레지스터가 데이터 레지스터이므로 일반 레지스터 또는 범용 레지스터라고 부릅니다.
- 주소 레지스터(AR) : 데이터 또는 명령어가 저장된 메모리의 주소를 저장합니다.
특수 레지스터(사용자 불가시 레지스터) : 위 외에 특별한 용도로 사용
- 프로그램 카운터(PC) : 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알립니다.
- 명령어 레지스터(IR) : 현재 실행 중인 명령어를 저장한다. 제어장치는 명령어 레지스터에 있는 명령을 해석한 후 외부 장치에 적절한 제어 신호를 보냅니다.
- 메모리 주소 레지스터(MAR) : 메모리에서 데이터를 가져오거나 메모리로 데이터를 보낼 때 주소를 지정하는데 사용됩니다.
- 메모리 버퍼 레지스터(MBR) : 메모리에서 가져온 데이터나 옮겨갈 데이터를 임시로 저장합니다. 항상 메모리 주소 레지스터와 함께 동작합니다.
- 프로그램 상태 레지스터(PSR) : 연산 결과를 저장하여 분기 문장에 이용합니다.
시스템 버스의 종류
- 제어 버스 : 제어장치와 연결된 버스로, CPU가 메모리와 주변장치에 제어 신호를 보내기 위해 사용합니다. 메모리와 주변장치에서도 작업이 완료되거나 오류가 발생하면 제어 신호를 보내기 때문에 양방향입니다.
- 주소 버스 : 메모리 주소 레지스터와 연결된 버스로, 데이터를 읽거나 쓸 때 메모리나 주변장치에 위치 정보를 보내기 위해 사용하며 단방향입니다.
- 데이터 버스 : 메모리 버퍼 레지스터와 연결된 버스로, 데이터의 이동이 양뱡향으로 이루어집니다.
메모리의 종류와 부팅
메모리의 종류
- 램(RAM) : 읽거나 쓸 수 있습니다. 램은 휘발성 메모리와 비휘발성 메모리로 나뉘어 집니다.
- 휘발성 메모리 : DRAM(동적 램), SRAM(정적 램), SDRAM
- 비휘발성 메모리 : 플래시 메모리, FRAM, PRAM, SSD
- 롬(ROM) : 읽기만 가능합니다. 바이오스. 마스크롬, PROM, EPROM
메모리 보호
시분할 기법에서는 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어 있습니다. 이러한 상황에서 어떤 작업이 다른 작업의 영역의 침범을 예방해야 합니다.
메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터에 저장한 후 작업합니다. 그리고 할당된 마지막 주소 까지의 차이를 한계 레지스터에 저장합니다.
작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어 측면에서 점검함으로써 메모리를 보호합니다.
부팅
운영체제도 프로그램이기 때문에 누군가 메모리에 올려서 실행을 해야합니다. 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅이라고 합니다.
사용자가 전원을 켜면 롬에 저장된 바이오스가 실행되고 바이오스는 주요 하드웨어를 점검을 한 후에 하드디스크의 마스터 부트 레코드에 저장된 프로그램을 실행합니다.
마스터 부트 레코드는 하드디스크의 첫 번째 섹터를 가리키며 운영체제를 실행하기 위한 코드인 부트스트랩이 저장되어 있습니다.
컴퓨터 성능 향상 기술
현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것입니다.
CPU 내 레지스터, 산술논리 연산장치, 제어장치는 CPU 내부 버스로 연결되어 있습니다. 메인보드 내 메모리와 주변장치는 시스템 버스로 연결되어 있습니다. 두 버스의 속도 차이가 있기 때문에 작업 속도의 차이가 발생합니다.
버퍼
버퍼
버퍼는 두 장치 사이의 속도 차이를 완화하는 역할을 합니다. 버퍼는 데이터를 전송할 때 하나씩 전송하는 방식을 일정량의 데이터를 모아 한꺼번에 전송하는 방식으로 적은 작업량으로도 많은 양의 데이터를 옮길 수 있습니다.
스풀
버퍼한 유사한 용어로 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼로, 대표적인 예는 프린터에 사용되는 스풀러입니다.
캐시
캐시는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해 두는 임시 장소입니다. 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓습니다.
캐시의 변경된 데이터를 메모리에 반영하는 방식
- 즉시 쓰기 : 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영합니다. 성능이 안좋지만 정합성이 높습니다.
- 지연 쓰기 : 변경된 내용을 모아서 주기적으로 반영합니다. 성능은 좋지만 정합성이 낮습니다.
캐시는 명령어와 데이터의 구분 없이 모든 자료를 가져오는 일반 캐시(L2), 명령어와 데이터를 구분하여 가져오는 특수 캐시(L1)라는 두 가지 레벨로 구분됩니다.
인터럽트
오늘날의 컴퓨터에는 주변장치가 많기 때문에 CPU가 모든 입출력에 관여하면 작업 효율이 현저하게 떨어집니다. 이러한 문제를 해결하기 위해 등장한 것이 인터럽트 방식입니다.
인터럽트 방식의 동작 과정은 다음과 같습니다.
- CPU가 입출력 관리자에게 입출력 명령을 보냅니다.
- 일출력 관리자는 명령받은 데이터를 메모리에 가져다 놓거나 메모리에 있는 데이터를 저장장치로 옮깁니다.
- 데이터 전송이 완료되면 입출력 관리자는 CPU에 완료 신호를 보냅니다. 여기서 완료신호를 인터럽트라고 합니다. CPU는 이 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리합니다. 이처럼 하던 작업을 중단하고 처리해야 하는 신호라는 의미에서 인터럽트라는 이름이 붙었습니다.
여기서 인터럽트가 자주 발생하면 성능이 떨어지기 때문에 인터럽트를 하나의 배열로 만든 인터럽트 벡터를 사용합니다.
직접 메모리 접근
입출력 관리자는 CPU가 요청한 데이터를 가져와야 하는데 접근 권한이 없어 불가합니다. 따라서 메모리에 접근할 수 있는 권한이 필요한데, 이것을 직접 메모리 접근이라고 합니다.
메모리 맵 입출력
직접 메모리 접근을 사용하면 메모리가 복잡해집니다. 기존에 CPU가 사용하는 데이터와 입출력장치가 사용하는 데이터가 섞여 있기 때문입니다. 이를 막기 위해 메모리를 나누어 사용하여 메모리의 일정 공간을 입출력에 할당하는 기법을 메모리 맵 입출력이라고 합니다.
사이클 훔치기
CPU와 직접 메모리 접근이 동시에 메모리에 접근하면 어떻게 될까? 이 경우에는 보통 CPU가 양보하게 되는 직접 메모리 접근의 속도가 느리기 때문에 CPU입장에서는 사이클을 훔쳐 간 것이라 사이클 훔치기라고 부릅니다.
멀티 프로세싱
멀티코어 시스템
과거에는 컴퓨터 한 대에 프로세서(CPU)가 하나 달린 시스템이었습니다. 이를 단일 프로세서 시스템이라 부릅니다. 이런 시스템에서 성능을 향상하는 방법은 CPU의 클록을 높이거나 캐시를 늘리는 것인데 이는 기술 및 비용 문제가 있었습니다.
그래서 프로세스를 여러 개 설치하여 사용하는 시스템이 등장하였고 이를 멀티 프로세서 시스템이라 부릅니다.
멀티 프로세스 시스템에서는 프로세서마다 레지스터와 캐시를 가지며, 메인메모리를 공유합니다. 장점으로는 많은 작업을 동시에 실행시킬 수 있다는 점이 있습니다.
하지만 멀티 프로세서 시스템은 보드의 설계 변경을 비롯해 많은 변경이 필요합니다. 그래서 기존 시스템을 유지한 채 CPU의 핵심이 되는 코어를 여러 개 만들어 처리하는 멀티코어 시스템이 등장하였습니다.
CPU 멀티스레드
위 방법 말고 하나의 코어에서 2개 이상의 명령어를 처리하는 방법도 있습니다. 이를 명령어 병렬 처리라고 합다. 이는 하나의 코어에 여러 개의 스레드를 이용하는 방식과 같습니다.
스레드란 CPU가 처리할 수 있는 작업의 단위를 나타냅니다. 여러 개의 스레드를 동시에 처리하는 방법을 CPU 멀티스레드라고 합니다. 명령어 병렬 처리를 사용하면 코어는 하나이지만 2개의 명령어가 거의 동시에 처리되기 때문에 마치 코어가 2개 있는 것처럼 보입니다.
'운영체제' 카테고리의 다른 글
[쉽게 배우는 운영체제] 운영체제의 개요 (28) | 2025.05.03 |
---|