컴퓨터 시스템
컴퓨터 시스템
하드웨어, 소프트웨어 구성
컴퓨터 시스템은 크게 세 요소로 이루어진다. 하드웨어는 데이터를 처리하는 물리적인 기계 장치로, 프로세서(중앙처리장치), 버스, 메모리(RAM) 등 다양한 주변 장치로 구성된다. 소프트웨어는 특정 작업을 지시하기 위해 명령어로 작성한 프로그램이다. 그리고 운영체제는 이 하드웨어와 사용자 사이에 자리 잡고 하드웨어와 소프트웨어 자원을 관리하는 프로그램이다.
프로세서
프로세서는 운영체제와 가장 밀접하게 맞닿아 있는 하드웨어로, 각 부분의 동작을 제어하고 연산을 수행한다. 중앙처리장치(CPU)라고도 부르며, 레지스터(Register), 산술논리연산장치(ALU), 제어장치(CU)로 구성된다.
- 마이크로프로세서(Microprocessor): 주기억장치를 제외한 레지스터, 산술논리연산장치, 제어장치를 칩 하나에 담은 형태로, 개인용 컴퓨터(PC)에서 주로 쓰인다.
- 주기억장치(Computer Memory): 크게 RAM과 ROM으로 나뉘며, 컴퓨터에서 수치, 명령, 자료를 기억하는 하드웨어다.
버스
버스는 프로세서를 포함한 각 장치 또는 서브 시스템을 서로 연결해 정보를 주고받게 해주는 통로다. 컴퓨터 내부 각 요소가 주고받는 다양한 신호는 결국 이 공동 통신 채널, 즉 버스를 통해 전달된다.
버스는 위치에 따라 내부 버스와 외부 버스로 나뉜다.
- 내부 버스: 프로세서 내부에서 레지스터, 연산장치, 메모리 인터페이스 등을 연결하며, 시스템 버스 인터페이스 회로를 통해 외부 버스와 이어진다.
- 외부 버스: 프로세서와 메모리, 프로세서와 입출력장치, 입출력장치 사이를 연결한다. 시스템 버스라고도 부르며, 각 시스템 버스는 버스 제어기라는 제어 회로를 갖는다.
- 메모리 버스: 프로세서와 메모리, 캐시 메모리를 연결해 데이터를 교환하며, 입출력 버스와 비슷한 속도로 동작한다.
- 주변 버스: 입출력 버스라고도 하며, 프로세서와 주변 장치 사이의 데이터 전송을 담당한다.
기능에 따라서는 데이터 버스, 주소 버스, 제어 버스로 나뉜다.
- 데이터 버스: 데이터와 명령어 등의 정보를 교환하는 전송로. 프로세서가 메모리나 입출력장치로 데이터를 내보내거나 반대로 받아들일 때 쓰는 양방향 버스다.
- 주소 버스: 한 장치에서 다른 장치로 주소 정보를 전송한다. 신호(주소)선의 수에 따라 사용 가능한 메모리 용량이나 입출력장치 수의 한계가 정해진다.
- 제어 버스: 프로세서가 저장장치나 입출력장치에 데이터를 보낼 때, 현재 수행 중인 작업의 종류나 상태를 다른 장치에 알리는 단방향 버스다.
레지스터
프로세서 내부에 위치한 고속 메모리로, 프로세서가 곧바로 사용할 수 있는 데이터를 저장한다. 특수한 값 하나를 담는 기억 공간으로 쓰이며, 컴퓨터 구조에 따라 크기와 종류가 다양하다. 용도에 따라 전용 레지스터와 범용 레지스터로, 저장하는 정보의 종류에 따라 데이터 레지스터, 주소 레지스터, 상태 레지스터로 나뉜다. 또한 사용자가 저장된 정보를 바꿀 수 있는지에 따라 사용자 가시 레지스터와 사용자 불가시 레지스터로 구분한다.
- 사용자 가시 레지스터: 운영체제와 사용자 프로그램이 접근할 수 있는 데이터와 주소, 일부 조건 코드를 보관한다. 조건 코드는 관련 연산 결과로 발생하며, 제로, 자리넘침, 자리올림, 양수 비트 등 프로그램적으로 접근 가능한 값들이다.
- 데이터 레지스터: 함수 연산에 필요한 데이터를 저장한다. 수치나 문자를 담아 산술·논리 연산에 쓰이며, 연산 결과로 나온 플래그 값도 저장한다.
- 주소 레지스터: 주소나 유효 주소를 계산하는 데 필요한 주소의 일부분을 저장한다. 저장된 값을 이용해 산술 연산도 할 수 있다.
- 기준 주소 레지스터: 프로그램 실행 시 기준이 되는 주소값을 저장한다. 프로그램 하나나 그 일부처럼 서로 관련 있는 정보가 차지하는 연속된 저장 공간을 참조할 때 쓰인다.
- 인덱스 레지스터: 유효 주소를 계산하는 데 사용하는 주소 정보를 저장한다.
- 스택 포인터 레지스터: 메모리에 프로세서 스택을 구현하는 데 사용한다. 대개 반환 주소, 프로세서 상태 정보, 서브루틴의 임시 변수를 저장하며, 데이터 스택 포인터나 큐 포인터로도 쓰인다.
- 사용자 불가시 레지스터: 프로세서의 제어와 상태 관리를 담당한다. 프로그램 카운터(PC), 명령 레지스터(IR), 프로그램 상태 레지스터(PSR), 메모리 주소 레지스터(MAR)가 여기 속한다.
메모리
메모리 계층구조는 1950~1960년대 메인 메모리의 높은 가격 때문에 제안된 방식으로, 여러 레벨의 메모리를 연결해 비용, 속도, 용량, 접근 시간을 서로 보완한다. 메인 메모리를 중심으로 아래로는 자기 디스크, 광학 디스크, 자기 테이프가 있고, 위로는 캐시와 레지스터가 있다.
- 자기 디스크: 대용량 저장이 가능하다.
- 광학 디스크: 이동이 편리하다.
- 자기 테이프: 파일을 저장할 수 있지만 속도가 느리다.
- 캐시 메모리: 메인 메모리와 프로세서 사이의 속도 차이를 보완한다.
- 레지스터: 프로세서가 바로 사용할 자료를 보관하며, 계층 중 가장 빠르다.
지역성
지역성이란 실행 중인 프로세서가 메모리 전체를 균일하게 접근하지 않고, 특정 블록 일부만 집중적으로 참조하는 현상을 말한다. 여기에는 몇 가지 이유가 있다. 프로그램은 명령어를 순차적으로 실행하는 경향이 있어 명령어들이 특정 지역의 메모리에 인접해 있다. 프로그램의 순환 구조(단일 순환, 중첩된 순환)는 반복적이지만 메모리 참조 영역은 일부에 국한된다. 대부분의 컴파일러는 인접한 블록, 즉 배열 형태로 메모리에 저장하기 때문에 프로그램이 배열 원소를 순차적으로 자주 접근하게 되어 지역적인 접근 경향을 보인다. 이는 배열이 고유 주소를 가진 워드나 바이트로 구성된 대규모 구조이며, 주소를 읽거나 기록함으로써 상호작용한다는 특성에서 비롯된다.
메인 메모리 역할
- 프로세서: 메인 메모리에서 처리할 데이터를 가져오거나, 처리한 결과를 메인 메모리에 저장한다.
- 입출력 장치: 메인 메모리에서 데이터를 받거나 저장한다.
- 컴파일: 원시 프로그램을 기계 명령어로 변환하는 과정으로, 이때 컴파일러가 논리적 주소를 물리적 주소로 바꾼다.
가상 메모리
가상 메모리는 메인 메모리의 유효 크기를 늘리는 기법이다. 보조기억장치에 프로그램이나 데이터를 저장해두었다가 필요할 때 다시 메인 메모리로 옮기는 기술(Swap, 스왑)을 사용한다. 이 특징을 제대로 활용하려면 실행 중인 프로세스가 참조하는 주소와, 메인 메모리가 실제로 사용하는 주소를 분리해야 한다.
캐시 메모리
캐시 메모리는 처리 속도가 빠른 프로세서와 상대적으로 느린 메인 메모리 사이에서 데이터를 저장하는 고속 버퍼다. 메인 메모리에서 일정 블록의 데이터를 가져와 워드 단위로 프로세서에 전달함으로써 정보를 빠르게 제공하고, 데이터가 이동하는 통로(대역폭)를 넓혀 메인 메모리의 블록 크기와 같은 수준으로 맞춘다.

