컴퓨터 프로그래밍 공부/컴퓨터 구조 + 운영체제

Introduction to Computer Systems - 컴퓨터 시스템 개요

게임 개발 2023. 10. 17. 19:05

 

 

 

개인용 컴퓨터

 

개인용 컴퓨터의 등장 ( = PC의 등장)은 새로운 컴퓨터 사용 방식을 의미한다.

VLSI 기술의 발전으로 1970년대 초 인텔에 의해 마이크로 프로세서가 등장하고,

이해 따라 컴퓨터가 소형화/저가화되면서 70년대 후반에 개인용 컴퓨터의 등장으로 이어지게 되었다.

개인용 컴퓨터의 등장으로 관련 시장이 급격하게 확대됨에 따라 이에 따른

소프트 웨어 및 하드웨어 관련 사업이 부흥하기 시작하였다.

 

모바일 컴퓨팅

 

모바일 컴퓨팅이 가능하기 위해서는 아래 3가지 기반 기술이 필요하다.

  1. 고속 네트워크 
    모바일 컴퓨팅이 가능하기 위한 고속의 네트워크 전송기술
  2. 모바일 하드웨어
    휴대성을 위한 초소형, 초경량의 하드웨어 제조기술
  3. 모바일 소프트웨어
    개인별 최적화된 소프트웨어 제작, 유통 기술

 

개인용, 모바일 모두 게임 개발에 있어서 밀접하게 관련되어 있어 간략하게 정리해 보았다.

 

 

병렬형 컴퓨터

 

하나의 CPU를 이용한 컴퓨팅 환경 구현의 한계로 인하여

1980년대에 병렬 컴퓨터 구조가 급속하게 나타나기 시작한다.

 

병렬 처리(parallel processing)는 처리 속도의  향상을 위해서

여러 개의 프로세서가 동시에 정보를 처리하는 기술을 말한다.

 

초직헙화가 진행되면서 발열로 인하여 더 이상 CPU의 소형화가 어렵게되고,

고가의 수퍼컴퓨터를 별도로 제작하는 것은 비용이 많이 드니

고안하게 된 것이 기존의 컴퓨터를 병렬로 운용함으로써 가격 절감을 이룰 수 있다는 장점에서

병렬 컴퓨터 구조가 급속하게 응용되었다.

 

이러한 병렬 컴퓨팅은 그 규모에 따라 크게 2가지로 나누어 설명할 수 있다.

 

1. 소규모 멀티코어(multicore) 환경

 

요즘 대부분의 개인용 컴퓨터가 멀티 코어 CPU를 사용하고 있고,

운영체제가 이를 지원하고 GPGP, CUDA, OpenMP 등의 소프트웨어 개발 환경이

지원 됨에 따라 과거에 비해 훨씬 쉽게 병렬 프로그래밍이 가능하게 되었다.

 

 

++ Plus ++

 

GPGPU ( = General Purpose Graphic Processing Unit )

고성능 그래픽 카드를 이용한 병렬 컴퓨팅 환경을 말한다.

그래픽 연산과 같은 병렬 연산에 효과적인

그래픽 카드를 과학 계산 등의 분야에 많이 사용한다.

 

CUDA ( = Compute Unified Device Architecture )

GPGPU를 이용한 NIVIDIA 사에서 제공하는 병렬 컴퓨팅 아키텍처

 

OpenMP ( = Open Multi-processing )

공유 메모리, 다중 처리 프로그래밍을 지원하는 API로써

C, C++, 포트란 등의 다양한 언어를 지원하는 플랫폼이다.

이를 이용하면 간편하게 병렬 프로그래밍을 할 수 있다.

 

++

 

2. 대규모 병렬 컴퓨팅 환경

 

다수의 GPU나 컴퓨터 등을 연결해서 구현된 시스템으로써

클러스터(Cluster)나 그리드 컴퓨팅(Grid Computing) 등이 있다.

 

++ Plus ++

 

클러스터 

근거리 네트워크(LAN)을 통해 연걸된 컴퓨터들이

하나의 대형 멀티 프로세서로 동작하는 시스템이다.

 

그리드

이종의(heterogeneous)리소스들로 구성되며

광역 네트워크 기반의 동적인 구조이다.

 

클러스터와 그리드 컴퓨팅은 완벽히 상호보완적 관계를 지닌다.

많은 그리드들이 그들이 관리하는 리소스들 사이에서 클러스트를 결합하는 방식이다.

 

++

 

병렬 구조는 프로그램의 실행 속도를 증가시키기 위한 방법으로

여러 개의 명령어 스트림(instruction stream)과 데이터 스트림(data stream)을 처리하는 방식에 따라서

아래와 같이 나눌 수 있다.

 

SIMD ( = Single Instruction Multiple Data )

모든 프로세서가 같은 프로그램 ( = 명령어, instruction)을 수행하며,

각 프로세서가 병렬적으로 다른 데이터를 처리하는 구조이다.

배열 프로세서와 파이프라인이 이 분류에 속한다.

일반적으로 배열과 벡터 데이터 연산에 유용하게 사용되는 예시로

2개의 1차원 배열의 요소들이 각각 더하는 프로그램이라고 할 때,

각 배열의 요소들이 모두 동시에 다른 프로세서드렝 의해서 더해지는 방법을 말한다.

여러 개의 프로세서들로 구성되고 ( = Multiple Data ),

프로세서들의 동작은 모두 하나의 제어장치에 의해 제어 되는 것이다

( = Single Instruction)

 

MIMD ( = Multiple Instruction Multiple Data)

각 프로세서가 서로 다른 프로그램을 수행하면서( = Multiple Instruction ),

또 다른 데이터를 처리하는 구조이다( = Multiple Data ).

모든 프로그램의 협력하여 큰, 통합적 목적을 이루도록 하는 구조이다.

각 프로세서가 자신의 지역 메모리를 가진 독립적인 컴퓨터 모듈로 구성되며,

프로세서들 간의 상호 작용 정도가 낮다.

대부분의 다중 프로세서 시스템과 다중 컴퓨터 시스템이 이 분류에 속한다.

여러 개의 프로세서들이 서로 다른 데이터를 처리하면서

밀결합, 소결합 시스템을 이룰 수 있다.

 

SISD (Single Instruction Single Data)

개인용 컴퓨터의 싱글 코어 CPU는 대부분 SISD를 사용한다.

제어 장치와 프로세서를 각각 하나씩 가지는 구조이며,

한 번에 한 개씩의 명령어와 데이터를 처리하는 단일 프로세서 시스템이다.

명령어가 순서대로 실행되지만 실행 과정은

여러 개의 단계들로 나누어 중첩시켜

실행 속도를 높이도록 파이프라인으로 되어 있는 것이 보통이다.

 

 

멀티 코어와 멀티 코어 프로세싱

 

멀티 코어

멀티 코어 프로세서는 아래 그림과 같다

https://donghoson.tistory.com/entry/멀티-코어-프로세서란 <출저>

위 그림과 같은 CPU 구성을 병렬형 컴퓨팅의 방안으로,

멀티 코어 또는 멀티 코어 프로세서 라고 부른다.

 

멀티 코어 CPU는 두 개 이상의 독립 코어를

단일 직접회로로 이루어진 하나의 패키지로 통합한 것을 말한다

칩 레벨 벌티프로세서 즉 CMP라고도 한다.

 

멀티 코어의 장점으로는

적은 비용으로 여러 개의 작업을 효율적으로 한 번에 처리할 수 있다.

 

하나의 코어로 여러 작업을 같은 시간 내에 처리하려면,

해당 코어의 기능이 좋아야 하는데 이는 비용이 많이 든다.

때문에 2개 이상의 프로세서가 붙어있는 직접 회로로 이를 처리하면,

듀얼 코어 프로세서가 싱글 코어 프로세서 보다 더욱 강력한 성능을 보인다.

 

일반적으로 2개라고 2배의 성능향상을 보이지는 않고, 1.5배의 성능향상을 보인다.

 

싱글코어 CPU4개, 듀얼 코어 CPU2개, 쿼드코어 CPU1개 모두 한 세트로 일하고 있다면

이것들믄 모두 멀티 코어 프로세서라고 부를 수 있다.

 

멀티 프로세싱

 

멀티코어와 멀티 프로세싱은 다르다.

그 차이를 설명하기 위해서는 멀티 코어를 알았으니,

멀티 프로세싱을 이해하면 이 말이 이해가 갈 것이다.

 

아래 그림이 확연한 차이다.

 

출저 위 그림 출저와 동일.

 

멀티 프로세싱은

복수 개의 프로세서들이 협력하여 작업을 처리하는 방식을 의미하다.

 

여기서 중요한 것은 협력이다.

 

왼쪽 그림은 협력하여 작업을 처리한다 라고 할 수 있지만.

오른쪽 그림은 각자의 프로세서 들이 각자의 일을 처리하고 있다.

하지만 모두 멀티 코어(= 듀얼 코어)프로세서이긴하다.

 

이처럼 멀티 코어 프로세싱 = 멀티 코어 프로세서 임은 맞지만,

모든 멀티 코어 프로세서는 멀티 코어 프로세싱이 아니다.

 

 

컴퓨터의 종류

컴퓨터를 크기와 성능, 용량, 사용 목적에 따라 여러 종류로 나눌 수 있다.

컴퓨터를 구분하는 기본 조건은 '연산 속도'와 '저장 용량'이다.

주로 CPU의 연산 속도와 메인 메모리나 디스크 저장장치의 저장 용량이

컴퓨터 선택의 기본 기준인데,

당연하게도 2가지 부품이 컴퓨터 하드웨어 가격의 대부분을 차지한다.

 

 

수퍼 컴퓨터

 

단어 뜻 그대로 아주 고속, 고용량의 컴퓨터를 말한다.

기상 해석, 핵 융합로의 시뮬레이션 등 대량의 데이터 고속처리를 목적으로 하는 컴퓨터이다.

수퍼 컴퓨터의 기준은 당시 컴퓨터 기술의 발전 속도에 따라 계속 향상된다.

 

 

대형 컴퓨터

 

연구소, 기업, 은행 등에서 대용량, 고속 처리를 주 목적으로 하는 컴퓨터이다.

대부분의 대형 컴퓨터는 하나의 컴퓨터에 여러 대의 단말기를 연결해서

동시에 다수의 사용자가 사용할 수 있도록 한다.

 

 

개인용 컴퓨터

 

개인이 사용하는 컴퓨터로써 일반적으로 하나의 컴퓨터를 한 명이 사용한다.

일반적으로는 책상 위에 둔다는 의미에서 Desktop Computer, 

또는 무릎 위에 둔다는 의미로 Laptop Computer도 개인용 컴퓨터의 일종이다.

최근에는 Tablet 이나 Smart Phone 등의 고성능화로 이들 역시 개인용 컴퓨터로 인식된다.

 

 

임베디드 컴퓨터

 

임베디드란 '내장형'이라는 의미로, GPS, 휴대폰, 자동차 등과 같은

심지어 전기 밥솥도 임베디드라고 할 수 있다.

특수한 시스템에 내장된 소형 컴퓨터를 의미한다.

임베디드 컴퓨터가 최근에 많이 사용되는 컴퓨터 종류임에도 불고하고

대부분의 경우 컴퓨터가 다른 하드웨어와 한 덩이리로 묶여서 단일 시스템의 형태로

공급되고 있기 때문에 일반 사용자들은 컴퓨터라고 인식하지 못하는 경우가 많다.

또한 요즘은 임베디드 보드의 고성능화로 인해,

PC와 임베디드 컴퓨터와의 차이를 규정하는 것이 무의미해지고 있다.

 

 

가상 머신 (Virtual machine)

 

컴퓨터 하드웨어의 성능 경쟁이 어느 정도 한계에 달하고,

하드웨어의 중요성에 비해 소프트웨어나 서비스, 콘텐츠가 더욱 중요해짐에 따라,

소프트웨어의 개발 환경도 변하고 있다.

다양한 기종의 컴퓨터 상에서 운영체제에 무관하게

수행 가능한 프로그램의 개발에 대한 요구가 점점 늘어나고 있기 때문이다.

이러한 요구는 가상 머신을 각광받게 하고있다.

 

 

 

추상화를 통한 컴퓨터 시스템 계층 구조 파악하기

 

 

컴퓨터 시스템의 계층 구조

컴퓨터 시스템의 계층 구조는 아주 복잡하지만

이를 추상화하면 복잡한 컴퓨터 구조에 대해서 이해하기 편리하다.

 

위 그림과 같이 나타내면 아주 간단히 이해되기 때문이다.

 

컴퓨터는 하드웨어와 소프트웨어로 이루어져 있다.

하드웨어는 각종 전자 회로와 물리적인 장치로 이루어진 기계 부분을 말한다.

 

소프트웨어는 하드웨어를 활용할 수 있도록 해주는 프로그램을 말한다

소프트웨어는 좀 더 세부적으로 시스템 소프트웨어와 응용 소프트웨어로 나눌 수 있다.

 

하드웨어는 눈에 보이고 만질 수 있는 부분을 의미하며,

소프트웨어는 기본적으로 하드웨어의 기능을 원할하게 수행하기 위한

'명령들의 묶음'이라고 생각할 수 있는데,

하드웨어와 소프트웨어 이 두 부분의 역할과 서로 간의 관계를 이해해야

프로그램을 잘 다룰 수 있다.

 

결국 서로 간의 관계를 잘 알고 이해하고 있어야

전체 시스템을 잘 알 수 있는 것이다.

 

DX12나 Vulkan 같은 경우에는 소프트웨어 프로그램이지만

하드웨어적인 부분과 소통을 원활히 할 수 있어야

그래픽을 제대로 띄울 수있다.

이는 프로그래머 역량에 따라 장점이 될 수도, 단점이 될 수도 있다.

 

OpenGL이나 DX11까지는 그 정도까지의 저수준 소통은 하지 않았지만,

점점 날이 갈수록 고수준 고기능의 그래픽을 요하게 되면서,

하드웨어의 부담을 소프트웨어에서 제어할 수 있어야한다.

기술의 발전에 따라 그 기술을 만지는 프로그래머 또한,

소프트웨어를 다루면서 하드웨어의 기능을 숙지하며,

해당 기능들을 응용할 줄 알아야한다.

 

위의 그림은 하드웨어에서 응용 소프트웨어까지의 순서적인 관계를 보이는 그림이다.

컴퓨터와 같은 복잡한 대상을 설명할 때에는 위 그림과 같이

앙파 껍질 처럼 계층적으로 추상화하여 설명하는 것이 용이하다.

 

하드웨어

 

다양한 기계, 전자 기기, 반도체 등이 사용되는 부분으로써,

만질 수 있고 눈에 보이는 외형을 가진 전기, 기계적인 장치를 말한다.

하드웨어는 소프트웨어와 다르게 한번 제작/설치되면 수정이나 변경이 쉽지 않다.

 

 

시스템 소프트웨어

 

컴퓨터를 관리하기 위한 소프트웨어 또는 사용자에게 편이 기능을 제공하는 소프트웨어를 포함하는

컴퓨터 사용에 필수적인 프로그램들을 의미한다.

일반적으로 대표적인 시스템 소프트웨어로는 OS나 compiler가 있다.

 

 

응용 소프트웨어

 

사용자가 직접 사용하는 워드 프로세서나, 웹 브라우저, 그림판 등등의 프로그램이다.

사용자가 직접 가시적으로 확인하며 실제 사용 체감을 가장 많이 느끼는 구간이다.

실제로 컴퓨터 사용자가 밀접하게 자주 사용한느 소프트웨어이다.

 

 

++ Plus ++

 

사실 시스템 소프트웨어나 응용 소프트웨어의

구분을 위한 명확한 기준이 있는 것은 아니다.

다만 시스템 내부와 관련이 더 많은 것을 시스템 소프트웨어라고 칭할 뿐이다.

 

++ Plus ++

 

펌웨어라는 용어도 자주 사용되는데,

이는 하드웨어를 제어하는 것과 아주 밀접한 관련이 있다.

소규모의 프로그램을 의미하는데,

하드웨어와 소프트웨어 사이에 위치하는 작은 프로그램이라고 생각하면 된다.

예를 들어 어떤 하드웨어를 만드는 경우,

이를 제어하는 모든 회로를 하드웨어로만 만들면 구조도 복잡해지고 구현하기도 어렵기 때문에,

이러한 부분을 펌웨어로 구현함으로써 향후 기능의 추가나 업그레이드가 쉬워지는 장점이 있다.

 

++

 

'컴퓨터 프로그래밍 공부 > 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

코어와 멀티코어, 스레드와 멀티스레드  (0) 2024.04.09
프로그래밍 개발 과정  (0) 2024.04.08
컴퓨터 구조  (0) 2024.04.08
레지스터  (1) 2024.01.01
ALU  (1) 2023.12.28