Priv's Blog

1. 컴퓨터 시스템 본문

Dev. Study Note/OS Introduction

1. 컴퓨터 시스템

Priv 2021. 10. 4. 17:45


 

 

1. 하드웨어, 운영체제, 응용 프로그램

1.1) 운영체제

컴퓨터 시스템 효율성 향상, 사용자에게 편리한 환경을 제공하기 위한 SW.

컴퓨터 HW와 사용자 사이에 위치하며, HW와 SW 자원을 관리한다.

 

1.2) 컴퓨터 HW

프로세서, 메모리, 각종 주변 장치들로 구성되며, 이는 시스템 버스로 연결된다.

  • 프로세서: CPU, GPU 등
  • 메모리: RAM(주기억장치), ROM(보조기억장치)
  • 시스템 버스: 각종 주변 장치들을 연결
  • 주변 장치: 키보드, 마우스, 모니터 등

 

1.3) 응용 프로그램

사용자 또는 다른 응용 프로그램에게 특정한 기능을 직접 수행할 수 있도록 설계된 프로그램.

운영체제 위에서 동작하며, 사용자가 직접 제어할 수 있다.

 


 

2. 컴퓨터 HW 구성

운영체제의 원리를 이해하려면 컴퓨터 HW가 어떻게 구성되고 동작하는지 알아야 한다.

컴퓨터 HW를 이루는 다양한 구성요소들(프로세서, 메모리, 입출력 장치 등)은 시스템 버스를 통해 연결되어 상호작용한다.

 

2.1) 프로세서 (CPU: Central Processing Unit)

컴퓨터의 모든 장치의 동작을 제어, 명령을 실행하는 HW 장치.

 

2.2) 레지스터 (Register)

프로세서 내부에 위치한 고속/저용량 메모리이며, 컴퓨터의 구조에 따라 크기와 종류가 다양하다.

프로세서가 사용해야 하는 데이터를 바로 저장한다.

특수한 목적의 값을 저장 또는 연산을 수행하다가 중간 값을 저장하는 용도로 활용되기도 한다.

 

2.3) 사용자 가시 레지스터 (User-Visible Register)

사용자가 운영체제, 사용자 프로그램을 통해 정보를 변경할 수 있는 레지스터.

  • 데이터 레지스터: 함수 연산에 필요한 데이터를 저장한다. 값, 문자 등을 저장하므로, 산술 연산이나 논리 연산에 사용되며, 연산 결과로 플래그 값을 저장한다.
  • 주소 레지스터: 주소나 유효 주소를 계산하는 데 필요한 주소의 일부분을 저장한다. 주소 레지스터에 저장된 값(값 데이터)을 사용하여 산술 연산을 할 수 있다.

 

2.4) 사용자 불가시 레지스터 (User-Invisible Register)

사용자가 저장된 정보를 변경할 수 없는 레지스터.

프로세스 제어, 상태 관리에 사용된다.

  • 프로그램 카운터 (PC): 다음에 실행할 명령어의 주소를 저장하는 레지스터
  • 명령어 레지스터 (IR): 현재 실행하는 명령어를 저장하는 레지스터
  • 누산기 (ACC): 데이터를 일시적으로 저장하는 레지스터
  • 메모리 주소 레지스터 (MAR): 프로세서가 참조하려는 데이터의 주소를 명시, 메모리에 접근하는 버퍼 레지스터
  • 메모리 버퍼 레지스터 (MBR): 프로세서가 메모리에서 읽거나 저장할 데이터 자체를 보관하는 버퍼 레지스터

 

2.5) 프로세서의 기본 레지스터 구조

프로세서 내에는 다양한 레지스터와 산술 논리 연산장치(ALU: Arithmetic Logic Unit)가 존재한다.

레지스터에 저장된 값을 사용해 ALU로 프로세서가 연산을 처리한다.

메모리에는 각종 명령어와 데이터가 저장되어 있다.

시스템 보스를 통해 프로세서, 프로세스, 입출력 모듈과 통신하며 연산을 수행, 결과를 도출한다.

 

2.6) 프로세서가 명령어를 처리하는 과정

  • PC: 프로그램 카운터
  • IR: 명령어 레지스터
  • ALU: 산술/논리 연산 처리 장치
  • r1, r2, r3: 레지스터

메인 메모리 주소 100에 접근할 경우, 다음과 같다.

메인 메모리 주소 108에 접근할 경우, 다음과 같다.

메인 메모리 주소 112에 접근할 경우, 다음과 같다.

 


 

3. 메모리

3.1) 메모리 계층 구조

메모리의 종류에 따라 속도, 가격, 용량이 서로 다르다.

이로 인해 발생하는 성능 차이를 상호 보완할 수 있도록 메모리 구조는 계층 구조를 이룬다.

 

3.2) 메인 메모리

프로세서와 보조 기억 장치 사이에 위치하며, 속도 차이로 인해 발생하는 디스크 입출력 병목 현상을 해결하는 역할을 한다.

프로세서와 메인 메모리 사이의 속도 차이를 줄이기 위해 캐시를 구현하기도 한다.

로세서에서 수행할 프로그램 및 데이터, 프로세서가 처리한 결과를 저장한다.

주기억장치/1차 기억장치라고도 부르며 저장 밀도가 높고 가격이 싼 DRAM을 주로 사용한다.

프로그램을 실행하기 위해서는 프로그램 코드, 데이터 등이 메인 메모리에 저장되어 있어야 한다.

이는 즉, 명령어 실행 속도가 메인 메모리와 밀접한 관계를 지님을 의미한다.

메인 메모리는 용량에 제약이 있으며, 전원을 끄면 데이터가 사라지는 휘발성 메모리이다.

이 때문에 영구적, 대용량 데이터를 저장하기 위해서는 보조 기억장치가 필요하다.

메인 메모리의 구조는 다음과 같다.

메인 메모리는 다수의 셀들로 구성되어 있으며, 각각의 셀은 여러 비트로 구성된다.

1개의 셀이 kbit일 경우, (2^k)개의 값을 저장할 수 있다.

메인 메모리에 데이터를 저장할 때는 셀 1개나 n개에 나누어서 저장한다.

셀은 주소를 참조하며, 주소가 nbit일 경우, 주소 범위는 0~(2^n) - 1이다.

Ex) 3bit 주소 == 0 ~ (2^3) - 1 주소 범위 사용 가능

 

3.3) 메모리 매핑

논리적 주소를 물리적 주소로 변환하는 과정.

 

3.4) 메모리 속도

메모리 시간은 메모리 접근 시간과 메모리 사이클 시간으로 표현한다.

  • 메모리 접근 시간: 메모리에서 값을 읽어와 프로세서로 옮기는 시간
  • 메모리 사이클 시간: 이전 읽기 제어 신호부터 다음 읽기 제어 신호까지 걸리는 시간

메모리 접근 시간이 끝나고 다음 읽기 제어 신호까지의 시간 동안에는 데이터를 메모리 버퍼 레지스터에 저장하는 작업을 수행한다.

 

3.5) 캐시

프로세서 내부나 외부에 위치하는 저용량/고속 메모리.

처리 속도가 빠른 프로세서와 상대적으로 속도가 느린 메인 메모리 사이의 속도 차이를 보완한다.

자주 참조되는 프로그램과 데이터를 메인 메모리보다 속도가 빠른 캐시에 저장해 사용한다.

캐리를 통해 메인 메모리의 평균 접근 시간을 줄이고 시스템 성능을 향상할 수 있다.

 

3.6) 캐시의 기본 동작

프로세서가 메인 메모리 주소를 참조하고자 할 때, 태그 번호를 사용하여 값이 캐시에 존재하는지 검사.

캐시의 성능은 작은 용량의 캐시에 프로세서가 이후 참조할 정보가 얼마나 들어 있냐에 따라 달라진다.

  • 캐시 적중: 캐시 내에 태그 번호가 존재하여 참조하려는 정보가 있을 경우에 해당한다. 해당 데이터 라인에 저장된 주소를 참조하여 데이터를 불러와 연산에 사용한다.
  • 캐시 실패: 캐시 내에 태그 번호가 존재하지 않아 참조하려는 정보가 없을 경우에 해당한다. 메인 메모리로 다시 접근해 데이터를 불러와야 하므로, 속도가 더 느려질 수 있다.

 

3.7) 캐시의 지역성

캐시는 지역성을 가지고 있기 때문에 작은 용량으로도 성능 향상을 기대할 수 있다.

캐시/메인 메모리에 프로세서가 참조할 때, 무작위 한 방식으로 참조하지 않는다.

그 대신 공간적 지역성, 시간적 지역성을 바탕으로 참조한다.

  • 공간적 지역성: 참조한 주소와 인접한 주소를 참조하는 특성이다. 이전에 참조한 주소의 인근 주소는 다시 참조할 가능성이 높다.
  • 시간적 지역성: 1번 참조한 주소를 곧 다시 참조하는 특성이다. 1번 참조한 주소는 다시 참조할 가능성이 높다.

 

3.8) 보조 기억 장치

주변장치 중에서 프로그램과 데이터를 저장하는 HW.

2차 기억장치 또는 외부 기억장치라고도 부른다.

용량은 크지만, 속도가 느리다.

자기 디스크, 광디스크, 자기 테이프 등이 있다.

 


 

4. 시스템 버스

HW를 물리적으로 연결하여 서로 데이터를 주고받을 수 있도록 해주는 통로.

컴퓨터 내부의 다양한 신호(데이터 입출력, 프로세서 상태, 인터럽트 관리 등)를 시스템 버스로 전달한다.

기능에 따라 데이터 버스, 주소 버스, 제어 버스로 구분된다.

  • 데이터 버스: 프로세서, 메인 메모리, 주변 장치 사이에서 데이터를 전송하는 시스템 버스
    데이터 버스를 구성하는 배선 수 == 프로세서가 1번에 전송할 수 있는 비트 수 (워드)
  • 주소 버스: 프로세서가 시스템 구성 요소를 식별하는 주소 정보를 전송하는 시스템 버스
    주소 버스를 구성하는 배선 수 == 프로세서와 접속할 수 있는 메인 메모리 최대 용량
    주소 버스가 k개라면, 프로세서는 (2^k)개 만큼의 메모리 주소 참조 가능
  • 제어 버스: 프로세서가 시스템의 구성 요소를 제어하는 데 사용
    제어 신호로 연산 장치의 연산 종류, 메인 메모리 읽기나 쓰기 동작을 결정

데이터 버스와 주소 버스는 병렬 비트로 전송되며, 모든 회선이 동일한 역할을 수행한다.

제어 버스는 각 회선이 독립된 역할을 수행한다.

 


 

5. 주변 장치

프로세서와 메인 메모리를 제외한 나머지 HW 구성 요소들.

  • 입력 장치: 컴퓨터에서 처리할 데이터를 외부에서 입력하는 데 사용하는 장치
  • 출력 장치: 컴퓨터에서 처리한 데이터를 외부로 보내는 장치
  • 저장 장치: 메인 메모리와 달리 영구적으로 데이터를 저장하는 장치 (보조 기억 장치)

 


 

6. 컴퓨터 시스템의 동작

6.1) 컴퓨터 시스템의 작업 처리 순서

입력 장치를 통해 정보를 입력받아 메모리에 저장한다.

메모리에 저장된 정보를 프로그램의 제어에 따라 인출, 연산 장치에서 처리한다.

처리한 정보를 출력 장치에 표시하거나 보조 기억 장치에 저장한다.

 

6.2) 컴퓨터에 유입되는 정보

컴퓨터에 유입되는 정보는 명령어와 데이터로 구분된다.

  • 명령어: 실행할 산술/논리 연산 동작을 명시하는 문장.
  • 프로그램: 작업을 수행하기 위한 명령어들의 집합.

 


 

7. 명령어의 구조

7.1) 명령어의 기본 구조

  • 연산 부호 (OP code): 프로세서가 실행할 동작인 연산을 지정한다.
  • 피연산자 (Operand): 연산할 데이터 정보를 저장한다. 데이터는 레지스터, 메모리 등에 위치하는데, 피연산자는 보통 데이터 자체보다는 데이터의 위치를 저장한다.

메인 메모리에 저장된 명령어 예시는 다음과 같다.

 

7.2) 직접 주소와 간접 주소

  • 직접 주소: 피연산자에 데이터가 있는 레지스터, 메모리 주소를 지정한다. 피연산자 주소를 참조하면 피연산자 데이터에 바로 접근할 수 있다.
  • 간접 주소: 피연산자에 데이터가 있는 레지스터, 메모리 주소가 저장된 위치 정보를 지정한다. 피연산자의 주소의 주소를 참조한다. 파악한 피연산자의 주소를 다시 참조하여 데이터에 접근할 수 있다.

직접 주소와 간접 주소 여부는 모드 비트를 통해 구분한다.

모드 비트는 명령어 실행 과정에서 활용된다.

 

7.3) 직접 주소와 간접 주소 사용 예시

 


 

8. 명령어의 실행

8.1) 명령어의 실행 과정

 

8.2) 명령어의 실행 사이클

명령어의 실행 사이클은 일반적으로 시작 > 인출 > 실행 > 종료로 구성된다.

프로세서의 명령어 실행 순서는 명령어 인출 > 명령어 해석 > 피연산자 인출 > 명령어 실행 > 인터럽트 조사로 나눌 수 있다.

이를 세분화하면 시작 > 인출 사이클 > (인터럽트) + (간접) > 실행 사이클 > 종료로 구성된다.

  • 인터럽트: 프로세서가 프로그램을 실행하는 동안 컴퓨터 내부/외부에서 발생하는 예상 밖의 사건
  • 간접: 피연산자가 간접 주소 지정 방법으로 표현이 된 경우에 실행되는 사이클 (모드 비트로 구분)

 

8.3) 인출 사이클

인출 사이클의 목표는 PC가 가리키는 메모리 위치의 명령어를 IR로 가져오는 것이다.

  • PC -> MAR: PC에 저장된 주소를 프로세서 내부 버스를 통해 MAR로 전달
  • MAR -> MM: MAR에 저장된 값이 주소 버스를 통해 메인 메모리로 전달
  • MM -> MBR: 메인 메모리에서 인출한 명령어를 데이터 버스를 통해 MBR로 전달
  • MBR -> IR: MBR에 저장된 명령어 자체가 IR로 전달

제어 장치는 PC와 제어 버스에 연결되어 각각의 동작들을 제어한다.

 

8.4) 간접 사이클

간접 사이클의 목표는 메모리에 저장된 실제 피연산자의 메모리 주소를 가져오는 것이다.

명령어를 인출했을 때, 피연산자가 간접 주소 방식으로 저장되어 있을 경우 실제 주소를 읽고자 실행된다.
(간접 사이클은 인출 사이클을 1회 진행한 다음에 이루어짐)

메모리 직접 주소 방식으로 피연산자가 저장되어 있을 경우에는 실행되지 않는 사이클이다.

  • IR -> MAR: IR에 저장된 명령어의 피연산자(주소부)를 프로세서 내부 버스를 통해 MAR로 전달한다.
  • MAR -> MM: MAR에 저장된 값이 주소 버스를 통해 메인 메모리로 전달된다.
  • MM -> MBR: 메인 메모리에 저장된 값이 데이터 버스를 타고 MBR로 전달된다.
  • MBR -> IR: MBR에 저장된 값이 IR로 전달된다.

 

8.5) 인터럽트 사이클

인터럽트 사이클의 목표는 인터럽트 발생 시, 이를 처리한 뒤 기존 사이클로 복귀하는 것이다.

현재 실행 중인 주소(PC 값)를 메모리 특수 위치에 저장해야 복귀가 가능하다.

  • PC -> MBR: PC의 내용(실행 중이던 프로그램의 데이터)이 내부 버스를 통해 MBR에 저장된다.
  • PC -> MAR: PC의 중단된 위치(실행 중이던 프로그램의 중단 위치)가 내부 버스를 통해 MAR에 저장된다.
  • MAR -> MM: 실행 중이던 프로그램의 중단 위치가 주소 버스를 통해 메인 메모리에 전달된다.
  • MBR -> MM: MBR에 저장된 주소 값이 주소 버스를 통해 메인 메모리에 전달된다.

 

8.6) 인터럽트

  • 현재 실행 중인 프로그램을 중단하고, 다른 프로그램의 실행을 요구하는 명령: 단일 프로세서 시스템에서도 인터럽트를 사용하면 동시에 여러 프로그램을 교대로 수행할 수 있다.
  • 입출력 장치나 프로그램 등에서 프로세서로 보내는 하드웨어 신호: 예상치 못한 사용자 입력, 정전, 컴퓨터 시스템의 긴급 요청, 잘못된 명령어 수행 등의 상황을 시스템이 적절히 처리하는 데 필요하다.

인터럽트를 처리하기 위해서는 프로그램의 정상 실행을 일시 중단했다가 재개하는 과정이 필요하지만, 사용자가 별도로 조치를 취할 필요는 없고, 프로세서와 운영체제가 알아서 처리한다.

인터럽트 처리 순서는 운영체제가 제어권 획득 > 인터럽트를 받은 프로세스의 상태 저장 > 인터럽트 처리 > 인터럽트를 받은 프로세스의 상태 복구로 나눌 수 있다.

 

8.7) 인터럽트 요청 회선 (IRQ: Interrupt ReQuest Line)

인터럽트 목적으로 사용하는 제어 버스.

인터럽트를 이용하면 프로세서가 외부 장치의 상태를 직접 점검할 필요가 없다.

예를 들어, 키보드 입력이 발생했을 때만 프로세서에 신호를 보내서 처리하도록 제어하면, 프로세서가 키보드 입력 발생 여부를 실시간으로 확인하지 않아도 된다. (폴링보다는 인터럽트가 더 효율적)

인터럽트 요청 신호에 따라 인터럽트 처리 프로그램(인터럽트 서비스 루틴)을 실행한다.

인터럽트 요청 신호를 받으면 프로세스는 실행 중이던 명령을 멈추고 인터럽트를 먼저 실행한다.

인터럽트 요청 회선 연결 방법은 다음과 같다.

위 그림은 각 장치들을 1개의 회선에 모두 연결하는 단일 회선 연결 방식(직렬)을 나타낸다.

위 그림은 각 장치들을 여러 개의 회선에 각각 연결하는 다중 회선 연결 방식(병렬)을 나타낸다.

 

8.8) 인터럽트 처리 과정

  • 실행 중인 프로그램: '프로그램 A'
  • 인터럽트 처리 프로그램: '프로그램 B'

인터럽트가 발생하기 전 상태이다.

프로그램 A를 실행하는 도중이므로, PC는 현재 실행 중인 프로그램 A의 다음 명령어를 가리킨다.

인터럽트가 발생한 상태이다.

실행 중이던 프로그램 A를 종료, 레지스터 상의 모든 내용들을 스택 영역(또는 PCB: 프로세스 제어 블록)에 저장한다.

인터럽트 처리를 위해 프로그램 B의 시작 위치를 PC에 저장, 이를 실행한다.

인터럽트가 발생한 이후의 상태이다.

스택 영역에 있던 내용들을 레지스터에 다시 저장, 중단했던 프로그램 A로 복귀해 중단 지점부터 다시 실행한다.

 


 


수고하셨습니다!


'Dev. Study Note > OS Introduction' 카테고리의 다른 글

6. 프로세스 스케줄링  (0) 2021.11.04
5. 교착 상태와 기아 상태  (0) 2021.10.16
4. 병행 프로세스와 상호 배제  (0) 2021.10.12
3. 프로세스와 스레드  (0) 2021.10.12
2. 운영체제  (0) 2021.10.12
Comments