본문 바로가기

학교 수업/전공 수업

[운영체제] 레지스터, 메인 메모리, 캐시, 보조기억장치, 명령어의 구조와 실행과정

안녕하세요 소프트웨어 공부하는 레오존입니다.

이번 포스팅에서는 레지스터, 메인 메모리, 캐시, 보조기억장치, 명령어의 구조와 실행과정에 대해 정리해 보도록 하겠습니다.











메모리 계층 구조에 따르면, 아래층에서부터 보조기억장치, 메인 메모리, 캐시, 레지스터 순서로 이루어져 있습니다.
메모리 계층 구조의 위에서 아래 순서로 하나씩 살펴보도로 하겠습니다.
 

레지스터
레지스터는 프로세서 내부에 존재하며, 프로세서가 사용할 데이터를 보관하는 가장 빠른 메모리라고 할 수 있습니다. 
 

메인 메모리
메인 메모리는 프로세서 외부에 존재하며 프로세서에서 수행할 프로그램과 데이터를 저장하거나 프로세서에서 처리한 결과를 저장하는 역할을 수행합니다. 또한, 메인 메모리를 주기억장치 또는 1차 기억장치라고 부르기도 합니다. 메인 메모리는 주로 저장 밀도가 높고 가격이 싼 DRAM으로 구성되어 있습니다.
메인 메모리는 다수의 셀로 구성되어 있으며, 각 셀은 비트로 구성되어 있습니다. 셀이 n비트라면 셀에 2의 n승 값을 저장할 수 있습니다. 메인 메모리에 데이터를 저장할 때는 셀 한 개나 여러 개에 나눠서 저장하게 됩니다. 각 셀은 고유한 주소를 지니고 이 주소는 열과 행의 번호로 구성되기 때문에 셀은 주소로 참조됩니다. 셀이 주소로 참조될 때 셀이 n비트라면 주소 범위는 0에서 2의 n-1승을 지닙니다. 또한, 메인 메모리는 프로세서와 보조기억장치 사이에 존재하며 이 사이에서 일어나는 디스크 입출력 병목 현상을 해결하는 역할을 수행합니다. 여기서 말하는 디스크 입출력 병목 현상이란  컴퓨터 시스템에서 발생하는 성능 저하 현상 중 하나로, 디스크 입출력 작업이 시스템의 다른 부분과 비교하여 상대적으로 느리기 때문에 발생합니다. 메인 메모리는 프로세서와 메인 메모리 간에 속도 차이의 부담을 줄이기 위해 프로세서 내부나 외부에 캐시를 구현하기도 합니다. 
메인 메모리는 컴파일을 통해 논리적 주소를 물리적 구소로 변환하는 과정을 거치게 됩니다. 이러한 과정을 메모리 매핑이라고 합니다. 참고로 논리적 주소는 프로그래밍으로 생성된 가상 주소이고, 물리적 주소는 메인 메모리에 있는 실제 주소입니다. 또 메모리에서 빠지면 안 되는 것이 메모리 속도인데, 메모리 속도는 메모리 접근시간과 메모리 사이클 시간으로 표현됩니다.
 




캐시

캐시는 프로세서 내부나 외부에 존재하며, 처리 속도가 빠른 프로세서와 상대적으로 느린 메인 메모리의 속도 차이를 보완하는 고속 버퍼입니다. 메인 메모리에서 데이터를 블록 단위로 가져와서 프로세서에 위드 단위로 전달하여 속도를 높여주는 역할을 수행합니다.
 
또한, 데이터가 이동하는 통로인 대역폭을 확대하여 프로세서와 메모리의 속도 차이를 줄이는 역할을 수행하기도 합니다. 캐시의 성능은 작은 용량의 캐시에 이후 프로세서가 참조할 정보가 얼마나 들어 있느냐로 좌우됩니다. 프로세서가 참조하려는 정보가 있을 때 캐시 적중이라고 이야기하며, 프로세서가 참조하려는 정보가 없을 때 캐시 실패라고 이야기합니다.
 
블록의 크기는 캐시의 성능으로 좌우되는데, 실제 프로그램을 실행할 때 참조한 메모리에 대한 공간적 지역성과 시간적 지역성이 존재하기 때문입니다. 여기서 공간적 지역성이란 대부분의 프로그램이 참조한 주소와 인접한 주소의 내용을 다시 참조하는 특성을 말하며, 시간적 지역성은 한 번 참조한 주소를 바로 다시 참조하는 특성을 말합니다.
 
공간적 지역성과 시간적 지역성이 발생되는 원인은 다양합니다. 첫 번째 이유는 프로그램이 명령어를 순차적으로 실행하는 경향이 있기 때문에 명령어가 특정 지역 메모리에 인접해 존재하기 때문입니다. 두 번째는 단일 순환, 중첩 순환과 같은 순환 때문에 프로그램을 반복하더라도 메모리는 일부 영역만 참조하기 때문입니다. 세 번째는 대부분의 컴파일러를 메모리에 인접한 블록에 배열로 저장하기 때문입니다. 
 

보조기억장치


보조기억장치는 주변장치 중 프로그램과 데이터를 저장하는 하드웨어로, 2차 기억장치 또는 외부기억장치라고 부르기도 합니다. 보조기억장치의 예시에는 자기 디스크,광디스크, 자기테이프 등이 존재합니다.







시스템버스
시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게 해주는 통로입니다. 컴퓨터 내부의 다양한 신호(데이터 입출력 신호, 프로세서 상태 신호, 인터럽트 요구와 허가 신호, 클럭 신호 등)를 시스템 버스로 전달하게 됩니다. 기능에 따라 데이터 버스, 주소 버스, 제어 버스로 구분할 수 있습니다.

먼저, 데이터 버스에 대해 알아보도록 하겠습니다. 데이터 버스는 프로세서와 메인 메모리, 주변 장치 사이에서 데이터를 전송하는 역할을 수행합니다. 데이터 버스를 구성하는 배선 수는 프로세서가 한 번에 전송할 수 있는 비트 수를 결정하는데, 이를 워드라고 합니다. 

주소버스는 프로세서가 시스템의 구성 요소를 식별하는 주소 정보를 전송하는 역할을 수행합니다. 주소 버스를 구성하는 배선 수는 프로세서와 접속할 수 있는 메인 메모리의 최대 용량을 결정합니다.

제어 버스는 프로세서가 시스템의 구성 요소를 제어하는 데 사용됩니다. 제어 신호로 연산장치의 연산 종류와 메인 메모리의 읽기나 쓰기 동작을 결정합니다. 





주변장치
주변 장치는 주변장치는 프로세서와 메인 메모리를 제외한 나머지 하드웨어 구성 요소입니다. 크게 입력장치, 출력장치, 저장장치로 구분할 수 있습니다. 입력 장치의 경우 컴퓨터에서 처리할 데이터를 외부에서 입력하는 장치입니다. 또한, 출력장치는 입력장치와 반대로 컴퓨터에서 처리한 데이터를 외부로 보내는 장치입니다. 저장장치는 메인 메모리와 달리 거의 영구적으로 데이터를 저장하는 장치로, 데이터를 입력하여 저장하며 저장한 데이터를 출력하는 공간이므로 입출력 장치에 포함하기도 합니다. 




컴퓨터 시스템의 동작


컴퓨터 시스템의 작업 처리 순서에 대해 알아보도록 하겠습니다. 첫 번째 단계에서는 인력장치로 정보를 입력받아 메모리에 저장하는 처리가 일어납니다. 두 번째 단계에서 메모리에 저장한 정보를 프로그램 제어에 따라 인출하여 연산장치에서 처리하게 됩니다. 마지막으로 처리한 정보를 출력장치에 표시하거나 보조기억장치에 저장하는 처리가 일어나게 됩니다.



명령어와 데이터
입력장치로 컴퓨터에 유입되는 정보들입니다. 명령어는 실행할 산술, 논리 연산의 동작을 명시하는 문장이고, 작업을 수행하는 명령어 집합이 프로그램입니다. 프로그램은 컴파일러 등을 이용하여 0과 1로 이루어진 기계 명령어로 변환해야 컴퓨터가 이해할 수 있게 됩니다.

명령어는 명령부와 주소부로 이루어져 있습니다. 명령부에는 연산부호가 들어가고, 주소부에는 피연산자가 들어갑니다.

연산부호는 프로세서가 실행할 동작인 연산을 지정해 주는 역할을 수행합니다. 산술연산, 논리연산, 시프트, 보수 등과 같은 연산을 정의하며 연산 부호가 n비트이면 최대 2의 n승 개의 연산이 가능합니다. 

피연산자는 연산할 데이터 정보를 저장하는 역할을 수행합니다. 데이터는 레지스터나 메모리, 가상 기억장치, 입출력장치 등에 위치할 수 있는데 피연산자는 보통 데이터 자체보다는 데이터의 위치를 저장합니다.

또한, 명령어에 피연산자의 위치를 명시하는 방법(직접 주소 또는 간접 주소)을 나타내는 모드 비트를 추가하거나, 다음 명령어의 위치를 나타내는 주소를 추가할 수 있습니다. 참고로 직접 주소란 피연산자에 데이터가 있는 레지스터나 메모리 주소를 지정합니다. 반면에 간접 주소는 레지스터나 메모리 주소 정보를 지정합니다.



명령어를 실행하는 과정은 다음과 같습니다. 

1. 명령어 인출 : 명령어 레지스터에 저장된 다음 명령어를 인출합니다. 

2. 명령어 해석, 프로그램 카운터 변경 : 인출한 명령어를 해석하고, 다음 명령어를 지정하기 위해 프로그램 카운터를 변경합니다.

3. 피연산자 인출 : 명령어가 사용 장소를 결정하여 피연산자를 인출하고, 필요하면 프로세서 레지스터로 보내도록 합니다.

4. 명령어 실행

5. 결과 저장

6. 다음 명령어로 이동



지금까지 레지스터, 메인 메모리, 캐시, 보조기억장치, 명령어의 구조와 실행과정에 대해 정리해 보았습니다.

감사합니다.