Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

tanficial 개발 일기

컴퓨터 시스템 구조 본문

운영체제

컴퓨터 시스템 구조

tanficial 2021. 7. 18. 11:14

이번 포스팅에서는 컴퓨터 시스템의 구조에 대해 알아보겠습니다. 대학 강의로 컴퓨터 시스템 구조라는 강의가 따로 있을 만큼 컴퓨터의 구조는 단순하지 않습니다. 컴퓨터 시스템 구조를 포스팅 하나로 다루기에는 당연히 너무너무 부족합니다. 이번 포스팅에서는 운영체제의 동작을 이해하기 위한 정도의 내용만 다루도록 하겠습니다. 운영체제를 공부하기 위해 제 글을 보시는 분들은 이번 포스팅을 보고 컴퓨터는 어떻게 구성되어 있으며 전체적인 컴퓨터의 동작 방식을 이해하고 넘어가시고 더욱 자세하고 세부적인 컴퓨터 시스템 구조는 언젠가 제가 다시 컴퓨터 구조 과목을 공부할 때까지 미루도록 하겠습니다.


1. 컴퓨터 시스템 구조

컴퓨터 시스템의 구조는 위의 사진과 같습니다.

프로세서, 메모리, 주변장치, 시스템 버스로 구성되어 동작합니다. 컴퓨터 내부에 프로세서와 메인 메모리가 있습니다. 프로세서는 메인 메모리에 올라온 데이터에 접근해 프로그램을 실행시킵니다. 프로그램 수행 도중 입력, 출력이 필요하거나 외부 디스크로부터 데이터를 가져와야 한다면 해당 프로그램을 중단시키고 주변 장치가 해당 입출력 작업을 수행합니다. 입출력 작업이 끝나면 프로세서는 다시 프로그램을 수행시킵니다. 그리고 모든 제어 신호와 데이터는 시스템 버스를 통해 이동하며 각각의 장치가 소통합니다.


2. 프로세서

프로세서는 연산을 수행합니다. 컴퓨터의 모든 장치의 동작을 제어합니다. CPU, 그래픽카드, 응용 전용 처리장치 등이 프로세서에 해당합니다.

CPU는 데이터가 저장되는 레지스터, 연산을 수행하는 연산 장치, 제어 명령을 보내는 제어장치로 구성되어 있습니다.

레지스터(Register)

프로세서 내부에 있는 메모리입니다. 프로세서가 사용할 데이터를 저장하며 연산에 필요한 데이터, 명령어가 저장된 주소 값, 연산 결과 값을 일시적으로 저장합니다. 컴퓨터에서 사용하는 메모리 중 속도가 가장 빠른 메모리입니다.

  1. 용도에 따른 분류
    • 전용 레지스터 : 특정 용도로만 사용되는 레지스터입니다.
    • 범용 레지스터 : 범용적으로 두루 사용되는 레지스터입니다.
  2. 사용자 정보 변경 가능 여부에 따른 분류
    • 사용자 가시 레지스터 : 데이터 레지스터, 주소 레지스터
    • 사용자 불가시 레지스터 : 프로그램 카운터, 명령어 레지스터
  3. 저장하는 정보의 종류에 따른 분류
    • 데이터 레지스터 : 함수 연산에 필요한 데이터를 저장한다. 값, 문자 등을 저장하므로 산술 연산이나 논리 연산에 사용하며, 연산 결과로 플래그 값을 저장한다.
    • 주소 레지스터 : 주소나 유효 주소를 계산하는 데 필요한 주소의 일부분을 저장한다. 주소 레지스터에 저장한 값(값 데이터)을 사용하여 산술 연산을 할 수 있다.
    • 상태 레지스터 : 프로세서의 상태나 연산 결과의 상태를 저장하기 위한 레지스터이다.

연산장치(ALU: Arithmetic Logic Unit, 산술/논리 연산장치)

CPU 내부에서 덧셈, 뺄셈 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱, 논리합 같은 논리 연산을 계산하는 디지털 회로입니다.

제어장치(CU: Control Unit)

컴퓨터 전체의 동작을 제어하는 장치입니다. 레지스터와 연산장치에 제어신호를 보내고 데이터 흐름을 감시합니다.


3. 메모리

데이터를 저장하는 장치입니다. 프로그램(os, sw), 사용자 데이터 등이 저장됩니다. 컴퓨터는 여러 가지 메모리를 사용합니다. 레지스터, 캐시, 주기억장치, 보조기억장치 등이 있습니다.

위 그림에서 위에 있을수록 속도가 빠르고 가격이 비쌉니다. 그리고 아래쪽에 있을수록 용량이 큽니다.

레지스터, 캐시, 메인 메모리에 있는 데이터는 프로세서가 직접 접근해 사용할 수 있습니다. 하지만 하드디스크 같은 보조기억장치는 데이터가 메인 메모리에 올라가야 프로세서가 메인 메모리에 접근해 해당 데이터를 사용할 수 있습니다.

위처럼 메모리가 계층적으로 구성되는 이유에는 메모리 간의 속도 차이에 있습니다. 자주 사용하는 데이터를 더 빠른 메모리에 저장하며 사용함으로써 메모리 간의 속도 차이를 완충하기 위해 계층적 메모리 구성을 사용합니다.

이렇게 계층적으로 구성된 메모리를 효율적으로 관리하는 것이 운영체제의 기능 중 하나입니다. 운영체제는 효과적으로 메모리를 사용하고 프로그램이 수행되도록 스케줄링을 해야 합니다.

레지스터

프로세서 내에 위치한 메모리입니다. 앞서 설명했듯이 가장 빠른 메모리이며, cpu의 연산에 필요한 데이터가 임시로 저장되는 메모리입니다.

캐시

CPU와 메인 메모리 사이에 위치한 메모리입니다. SRAM을 사용하며 속도가 빠르고, 가격이 비쌉니다.

캐시 메모리는 이유는 레지스터와 메인 메모리의 속도 차이에 의해 발생하는 데이터의 병목현상을 해결하기 위해 사용됩니다. 레지스터는 메모리 중 가장 속도가 빠르지만 용량이 적습니다. 메인 메모리는 레지스터보다 속도가 느려 메인 메모리에서 데이터를 가져오는 상황이 자주 발생한다면 병목현상이 발생하게 됩니다. 이때 레지스터와 메인 메모리 사이에 둬 두 메모리 사이의 속도 차이를 완충하는 역할을 하는 것이 캐시 메모리입니다.

실행 중인 프로그램의 데이터가 메인 메모리에 올라가 있으면 프로세서는 메인 메모리에 접근해 데이터를 사용합니다. 이때 자주 접근하는 위치의 데이터를 속도가 더 빠른 캐시 메모리에 올려놓고 사용합니다. 프로세서는 메인 메모리에 접근하기 전 먼저 캐시를 확인하고 필요로 하는 위치의 데이터가 캐시에 올라와 있는지 확인합니다. 이때 데이터가 캐시에 있으면 프로세서는 해당 데이터를 사용하고 메인 메모리까지 가지 않게 됩니다. 이를 캐시 히트라고 합니다. 만약 캐시에 해당 데이터가 없다면 프로세서는 메인 메모리에 접근해 데이터를 사용합니다. 이를 캐시 미스라고 합니다.

캐시 적중률, 즉 얼마나 캐시 히트가 발생하는지는 캐시의 지역성과 아주 밀접한 관계가 있습니다. 캐시의 지역성에는 두 가지가 있습니다. 먼저, 공간적 지역성이란, 참조한 주소와 인접한 주소를 참조하는 특성입니다. 데이터는 블록단위로 캐시에 올라가기 때문에 같이 사용되는 메모리가 인접한 주소에 있을 때 캐시 적중률이 높아집니다. 그리고 시간적 지역성이 있습니다. 이는 한번 참조한 주소를 곧 다시 참조하는 특성을 말합니다. 더 자주 사용하는 데이터를 캐시 했을 때 캐시 했을 때 적중률이 높아집니다.

공간적 지역성은 배열, 시간적 지역성은 반복문을 생각하면 이해가 쉽습니다. 배열은 인접한 주소에 데이터가 저장됩니다. 보통 배열은 참조할 때 배열의 데이터들을 같이 사용합니다. 때문에 배열의 인접한 데이터들을 한 번에 올렸을 때 캐시 적중률이 올라가는 걸 공간적 지역성이라고 생각하시면 됩니다. 반복문을 사용한다면 해당 주소에 저장되는 데이터를 반복적으로 참조합니다. 이때 이 데이터를 캐시 했을 때 캐시 적중률이 높아지는걸 시간적 지역성이라고 생각하면 됩니다.

  • 캐시 히트(Cache hit) : 필요한 데이터 블록이 캐시에 존재하는 경우
  • 캐시 미스(Cache miss) : 필요한 데이터가 캐시에 존재하지 않는 경우
  • 캐시 적중률(Cache hit ratio) : 캐시 히트가 얼마다 발생하는지를 말합니다.
  • 캐시의 지역성(Locality)
    • 공간적 지역성(Spacial Locality) : 참조한 주소와 인접한 주소를 참조하는 특성
    • 시간적 지역성(Temporal Locality) : 한번 참조한 주소를 곧 다시 참조하는 특성

CPU는 보통 캐시 메모리를 2~3개 정도를 사용합니다. 컴퓨터 메모리 구조처럼 캐시도 계층적 구조로 사용됩니다. L1, L2, L3 캐시 메모리가 사용되고 L1이 제일 빠르지만 용량이 제일 적습니다. 따라서 프로세서가 캐시를 이용할 때 L1에 먼저 접근해 데이터 유무를 확인하고 없으면 L2, L2에도 없으면 L3에 접근해 찾는 방식입니다.

메인 메모리(주기억장치)

프로세서가 수행할 프로그램과 데이터가 저장됩니다.

프로세서가 프로그램을 수행하기 위해서는 프로그램과 데이터를 주기억장치에 적재해야 합니다. 프로세서가 직접 접근할 수 있는 메모리가 메인 메모리까지이고, 디스크에는 접근하지 못합니다.

용량이 크고, 가격이 저렴한 DRAM을 주로 사용합니다.

디스크 성능이 낮아 디스크 입출력 시 데이터의 병목현상(I/O bottleneck)이 발생하게 됩니다. 디스크와 프로세서 사이에 메인 메모리를 사용하여 병목현상을 해소합니다.

보조기억장치

프로그램과 데이터를 저장합니다.

프로세서가 직접 접근할 수 없습니다. 따라서 주변장치로 분류됩니다. 보조기억장치에 있는 데이터는 주기억장치를 거쳐서 접근하게 됩니다.

프로그램을 실행하게 되면 보조기억장치에 있는 프로그램의 데이터가 메인 메모리에 올라가게 되고 프로세서는 메인 메모리에 접근해 명령어를 수행해 프로그램을 실행시킵니다.

프로그램의 데이터가 메인 메모리의 용량보다 큰 경우가 있습니다. 이런 경우 가상 메모리(Virtual memory)라는 기법을 사용하여 프로그램을 실행합니다. 하드디스크의 일부를 메모리처럼 사용하는 기술입니다. 이는 추후에 다뤄보도록 하겠습니다.


4. 시스템 버스

하드웨어들이 데이터 및 신호(제어 신호)를 주고받는 물리적인 통로입니다.

  • 데이터 버스 : 프로세서와 메인 메모리, 주변장치 사이에서 데이터를 전송합니다. 데이터 버스를 구성하는 배선 수는 프로세서가 한 번에 전송할 수 있는 비트 수를 결정하며, 이를 워드라고 합니다.
  • 주소 버스 : 프로세서가 시스템의 구성요소를 식별하기 위한 주소를 전송합니다. 주소 버스를 구성하는 배선 수는 프로세서와 접속할 수 있는 메인 메모리의 최대 용량을 결정합니다.
  • 제어 버스 : 프로세서가 시스템의 구성 요소를 제어하는 데 사용합니다. 제어 신호로 연산장치의 연산 종류와 메인 메모리의 읽기나 쓰기 동작을 결정합니다.

5. 주변 장치

프로세서와 메모리를 제외한 하드웨어들을 말합니다. 보조기억장치 및 외부 I/O 장치 등이 이에 해당합니다.

주변장치에도 전용의 작은 프로세서와 메모리가 존재합니다. 이를 device controller, memory buffer라고 합니다. 제어신호를 받아 주변장치의 device controller가 각각의 주변장치를 컨트롤해 momory buffer를 통해 데이터를 입/출력합니다. momory buffer에 올라온 데이터를 출력장치로 출력, 혹은 장치로부터 데이터를 읽어 memory buffer에 올리면 운영체제가 이를 메모리에 저장하고 프로세서가 메모리에 올라간 데이터를 사용합니다.

  • 입력장치 : 키보드, 마우스....
  • 출력장치 : 모니터, 프린트....
  • 저장장치 : 하드디스크, SSD, USB....

결론

이상으로 컴퓨터 시스템의 구조를 살펴보았습니다. 컴퓨터는 크게 프로세서, 메인 메모리, 주변장치, 시스템 버스가 있으며 프로세서는 메인 메모리까지만 접근이 가능하다, 각각의 메모리는 속도의 차이가 있고 운영체제는 이를 효과적으로 운영해야 한다, 제어신호와 데이터는 시스템 버스를 통해 주고받는다 정도의 큰 크림을 가지고 앞으로의 내용을 이해해가시면 좋을 것 같습니다.

앞서 드린 말씀대로 컴퓨터 시스템은 복잡합니다. 운영체제를 이해하기 위해 일단 이렇게만 알아두시고 추후 필요하시다면 컴퓨터 구조에 대해 따로 자세히 학습하길 권장드립니다.

다음 포스팅에서는 운영체제가 어떻게 동작하는지에 대해 조금 더 자세히 살펴보도록 하겠습니다.

궁금한 내용이 있거나, 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다.


Reference

'운영체제' 카테고리의 다른 글

Thread(스레드)  (1) 2021.08.01
프로세스  (1) 2021.08.01
인터럽트  (2) 2021.07.26
운영체제의 구조와 기능  (1) 2021.07.24
운영체제란 무엇일까  (7) 2021.07.16
Comments