컴퓨터의 동작 원리

JS·2023년 1월 5일
0

Tech Explanation

목록 보기
7/14
post-thumbnail

1. 컴퓨터의 동작 구조를 알아야 하는 이유

컴퓨터의 동작 과정은 매우 복잡하다. 하지만 이 과정을 우리는 스스로 피드백이 가능하고 발전 가능한 소프트웨어 엔지니어를 목표로 하기 때문에 이해해야 한다. 원리를 알아야 잘못된 점이 무엇인지 알고 피드백이 가능하기 때문에 컴퓨터공학기술자 자격증을 소지한 전문인력만큼 심오하지는 못하더라도 컴퓨터가 어떠한 방식으로 구성되어 동작하고 있으며 각 부품이 어떠한 역할을 하는지에 대한 거시적인 이해가 필요하다

2. 컴퓨터의 구성 요소

컴퓨터는 하드웨어적 관점으로 단순하게 세 가지로 나누어 볼 수 있다

메모리(Memory)

  • 메모리는 데이터를 저장하는 부품으로서 계층 구조를 지니고 있다
  • CPU가 정보를 처리하기 위해서는 데이터를 끌어 올려야하는데 이 때 과정을 건너 뛸 수 없고 절차를 밟아야 한다
    • 보조 기억 장치의 데이터는 주 기억장치를 거치고, 캐시를 거쳐 레지스터로 올라가게 되며 반대의 경우도 마찬가지다
  • 피라미드 구조로서 위에 위치할 수록 접근 빈도 수가 높으며 속도도 빠르지만 가격이 비싸고 용량이 작다. 아래로 내려갈 경우 반대의 성질을 지닌다
  • 계층의 가장 위쪽에 레지스터가 있는데, CPU가 직접 사용하는 메모리는 레지스터밖에 없다
  • 주 기억장치는 컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장하고 있는 기억장치
    • 비교적 용량이 크고 처리속도가 빠른 특징이 있다
    • 대표적인 예로 ROM과 RAM이 있다
      • ROM은 전원이 끊어져도 기록된 데이터들이 소멸되지 않는 비휘발성 메모리(Non-Volatile Memory)로 오직 기억된 데이터를 읽기만 가능한 장치이다. 데이터를 저장한 후 반영구적으로 사용할 수 있어서 시스템에 기억시키고 변화시키면 안 되는 BIOS와 같은 주요 데이터는 이 장치에 저장된다
      • RAM은 ROM과 달리 읽고 쓰기가 가능하며, 응용 프로그램, 운영체제 등을 불러와 CPU가 작업할 수 있도록 하는 기억장치이다. 데이터를 읽고 쓰는 속도가 같으며 프로그램을 로딩하거나 데이터를 임시 저장하거나 하는 곳에 사용된다. 대표적인 특징으로 전원이 끊어지면 데이터가 전부 지워지기 때문에 휘발성 메모리(Volatile Memory)라고 하는데 따라서 실행하고 있는 파일은 항상 보조기억장치에 저장을 해주어야 한다
  • 자주 사용하는 데이터를 매번 불러오다보면 자원의 낭비가 발생하게 되는데, 이때 데이터를 어딘가에 저장해둔다. 이러한 기능을 사용하기 위한 메모리가 캐시 메모리(Cache Memory)이다
    • 메모리 계층 구조에서 가장 빠른 메모리 소자를 지니며 두 가지 특성이 있다
    • 시간 지역성이란 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은데 예를 들어 For, While 반복문에 사용되는 데이터가 있다
    • 공간 지역성이란 액세스된 기억장소와 인접한 기억 장소가 액세스 될 가능성이 높다. 예를 들어 배열에서 연속 접근시, 참조된 데이터 근처에 있는 데이터가 참조 가능성이 높으므로 저장된다
  • 보조기억장치는 물리적인 디스크가 연결되어 있는 기억장치이다
    • 주기억장치보다는 느리지만 컴퓨터의 전원을 끄더라도 저장된 데이터가 사라지지 않고, 영구적으로 보관할 수 있는 장치인데 대표적으로 HDD와 SSD가 있다
  • 엔디안(Endian)의 이해
    • 엔디안은 비트를 저장하는 방식이며 데이터를 읽는 방향 규칙을 일컫는다
    • 읽는 순서를 바이트 오더(Byte Order)라고 하며 이 바이트 오더에는 크게 빅 엔디안 방식과 리틀 엔디안 방식이 있다
    • 빅 엔디안이란 큰 수부터 읽어나가는 것
      • 큰 자리수가 메모리의 가장 앞에 위치하기 때문에 숫자 비교에 장점
      • 사람이 읽고 쓰는 순서와 동일하게 저장되어 메모리값을 보기 편하기 때문에 소프트웨어의 디버그가 편하다는 장점
    • 리틀 엔디안이란 작은 수부터 읽어나가는 것
      • 통상적으로 계산을 하는 것과 같은 방식으로 계산을 진행하게 되어 리틀 엔디안을 사용했을 때 수학적 연산이 쉽다
      • 시작 주소에 값이 들어간다는 특징으로 인해 데이터의 주소가 상위주소에 들어가 타입을 읽는것이 빠르다

  • 중앙 처리 장치(Central Processing Unit)
    • 우리가 명령한 명령어의 처리를 담당하는 부품
    • 핵심 부품인 연산을 담당하는 산술 논리 장치(ALU)
      • ALU는 명령어를 이해할 수 없다. 때문에 이 해석하는 역할을 제어장치가 맡는다
      • CPU내부에서는 ALU가 명령코드와 피연산자를 가지고 결과를 산출하는데, 이 때 피연산자들을 조합하는 명령 코드의 집합을 명령어 집합
      • CISC는 이러한 명령어 집합을 사용하는 CPU(컴퓨터)를 말하는데 특징으로 명령어 개수가 매우 많고 복잡하다
      • RISC은 새로운 CPU 아키텍처 개념이며 용량은 CISC에 비해 작고 특징으로 명령어를 압축하고 포맷을 다듬는다
  • CPU내에 있는 메모리인 레지스터(Register)
  • 메모리에서 명령코드와 피연산자들을 가져와서 ALU에게 어떤 연산을 수행할지 알려주고, 결과를 메모리에 돌려주는 제어장치(Control Unit)
  • 버스 인터페이스(Bus Interface)가 다른 장치에서 오는 데이터를 받거나 보내는 역할을 맡는다
  • 모든 동작은 클럭 신호(Clock Pulse)에 맞추어 진행되는데 클럭 신호타이밍(Timing)을 제공하기 위해서 필요하다 참고 자료

  • 입출력 장치(I/O, Input and Output)
    • 컴퓨터에게 데이터를 주는 것을 입력(Input)이라고 하며 우리에게 보답으로 돌려주는 것을 출력(Output)이라한다
    • 컴퓨터는 폴링(Polling) 이라는 기법과 인터럽트(Interrupt)라는 기법을 사용하여 입력을 감지
      • 폴링이란 하드웨어의 변화를 지속적으로 읽어 들이며 이벤트의 수행 여부를 주기적으로 검사, 해당 신호를 받아들이면 이벤트를 실행하는 방식
      • 인터럽트는 하드웨어의 변화를 감지하여 외부로부터의 입력을 CPU가 알아채는 방식
  • 출력장치인 모니터에 전원과 CPU 처리된 신호가 들어오면 화면이 새로 그려지는데 이를 리프레시(Refresh)라고한다
    • 애니메이션은 부분 동작 그림들을 순서대로 빠르게 연속으로 보여주면서 만들어지는데 마찬가지로 컴퓨터는 특정 주기마다 새로운 화면을 그려주고 이 과정이 빠르게 넘어가며 화면을 출력한다

3. 컴퓨터 아키텍처

아키텍처의 사전적 의미는 건축학을 의미한다. 이걸 컴퓨터에 가져와서 생각하면 컴퓨터 아키텍처란 컴퓨터 구조를 짜는 일이다. 부품을 골라 상호적으로 연결하여 기능, 성능, 비용적인 목표를 충족하는 컴퓨터를 만들어 내는 과학과 기술로 정의할 수 있다

  • 하드웨어 아키텍처
    • CPU에서 산술논리연산장치(ALU)는 명령코드와 피연산자를 가지고 결과를 산출
    • 물리적으로 두 장치의 거리를 줄인다면 효율이 올라가기 때문에 CPU내에 탑재될 코어들의 위치 또는 캐시메모리 등 구성요소들을 배치하기 위한 설계
      • 이 과정에 사용되는 장치들을 프로세서(Processor)라고 하며 이 설계가 컴퓨터가 한 번에 얼마나 많은 정보를 수용할 수 있는지, 얼마나 빠르게 정보를 처리할 수 있는지를 결정
    • 혼동될 수 있는 ARM 아키텍처가 존재
      • ARM은 영국의 회사 이름으로 이 회사가 설계한 프로세서 코어가 CPU의 역할
      • 작은 다이(die)사이즈로 설계해 전력 소모를 줄여 배터리로 동작할 수 있게 설계되었습니다. 크기가 작아 주로 모바일 기기 위주로 사용
    • 가장 흔한 하드웨어 아키텍처의 종류로 폰 노이만(Von Neumann) 구조와 하버드(Harvard)구조가 존재한다
    • 폰 노이만 구조(Von Neumann Architecture)
      • 현대 컴퓨터에 사용되는 가장 많은 하드웨어 아키텍처 구조
      • 프로그램 내장 방식이라고도 불리는 이 구조는 CPU, Memory, Program 세 가지 요소로 구성
      • 범용 컴퓨터 구조의 확립에 큰 역할
      • 이 구조를 도입 한 후에는 하드웨어는 그대로 두고 작업의 목적이 될 소프트웨어만 교체하기 때문에 편의성과 범용성이 크게 향상
      • 입출력 장치에서 CPU가 입력을 받아들이고 Memory에서 필요한 Program과 Data를 가져오는 구조
      • 같은 메모리 속에 피연산자와 연산 도구가 따로 구분되지 않기 때문에 병목현상이 발생
      • 메모리 계층 구조나 NUMA, DMA 등의 기술들이 이러한 문제를 조금이나 완화시키기 위해 도입된 기술
    • 하버드 구조(Harvard Architecture)
      • 폰 노이만 구조의 문제를 인식하고 한계를 극복하기 위한 시도 중 하나
      • 명령용 버스와 데이터용 버스를 물리적으로 분할한 컴퓨터 아키텍처를 나타내는 용어
      • 병목현상이 일어나는 근본적 원인은 Program과 Data가 물리적 구분 없이 하나의 BUS를 통하여 CPU와 교류하기 때문
      • 폰 노이만 아키텍처는 CPU가 명령어와 데이터에 동시에 접근할 수 없었던 반면에 하버드 아키텍처는 명령을 메모리와 데이터에서 동시에 읽을 수 있다
      • 현재 명령의 처리를 끝냄과 동시에 다음 명령을 읽을 수 있어 더 빠른 속도를 낼 수 있지만, 이러한 처리 구조를 만들기 위해서는 더 많은 전기 회로가 필요
      • 두개의 버스와 메모리를 가지게 되므로 하드웨어적으로 차지하는 공간이 커지게 된다
    • 현대에는 CPU의 외부적으로는 폰 노이만 구조를, 내부적으로는 하버드 구조를 적용하여 속도를 향상시킨 것이 많다
      • 전체적인 구성으로 따지면 폰 노이만 구조가 기반이기 때문에 병목 현상만 어느 정도 해결이 될 뿐 근본적인 구조 자체는 변하지 않았다
  • 소프트웨어 아키텍처
    • 소프트웨어 아키텍처는 시스템이 요구되는 기능과 품질로부터 궁극적으로 갖도록 시스템을 용이하게 구축하고, 지속적인 사용과 개선을 위하여 진화성을 갖도록 하는 구조로 만드는 개발에 대한 중요한 결정 과정
    • 소프트웨어 아키텍처는 두 가지 성질을 가지고 있다
      • 시스템의 구축을 용이하게 해주는 성질을 구축 용이성
      • 시스템의 지속적인 사용과 개선을 용이하게 해주는 성질의 진화성
    • 제대로된 디자인(아키텍처)가 없다면 시간이 지날수록 이미 존재하는 소스코드를 계속 바꾸어야 해서 시간이 오래걸리고 기능을 추가하기 점점 어려워질 것
    • 좋은 디자인을 가져간다면 어디를 변경해야할지 더 잘 찾을 수 있고 그러면서 기능 개선에 가속도가 붙는다

4. 운영체제

  • 운영체제의 역할은 프로그램을 실행하기 위해서 메모리, CPU와 같은 여러 물리적인 자원을 관리
  • 사용자가 편리(Convenience)하게 컴퓨터를 사용할 수 있도록 환경을 제공하는 소프트웨어
  • 표적으로 프로세스 관리, 메모리 관리, 하드웨어 관리 등의 일을 한다
    • 프로세스 관리의 역할이란 CPU는 한 번에 한 프로세스만을 처리할 수 있는데 이를 동시에 하고 있다고 느낄 수 있는 이유는 운영체제에서 적절한 방식으로 프로세스들을 관리해주기 때문이다
    • 메모리 관리의 역할. 메모리 관리를 하지 않으면 프로그램끼리 메모리 침범 이슈와 같은 문제들이 생기게 되고, 때문에 운영체제에서 메모리를 관리해주어 이러한 일을 방지한다
      • 한정된 메모리 공간을 가지고 어떤 프로그램에 얼마만큼 메모리를 할당해줄 것인지도 판단한다
    • 하드웨어 관리란 운영체제는 사용자의 하드웨어에 대한 직접 접근을 막는다
      • 사용자가 하드디스크의 특정 영역에 데이터를 변경시키거나 악의적인 누군가의 공격으로인한 시스템 손상을 막는다
      • 하드 디스크의 많은 파일들을 효율적으로 저장하고 관리해준다
  • 공급되는 시장에 따라 크게 임베디드, 서버, 모바일, 데스크탑의 4개 시장으로 나뉘어져 있다
    • 임베디드 운영 체제는 임베디드 시스템의 기능적 효율성을 높이기 위해 개발된 OS
    • 서버 운영 체제는 서버 컴퓨터에 설치되어 사용되도록 설계된 운영 체제
    • 스마트폰, 태블릿 PC 및 기타 장치에서 프로그램을 설치 및 실행할 수 있게 해주는 소프트웨어
    • 우리의 컴퓨터를 관리해주는 OS이며 모든 소프트웨어와 하드웨어를 관리한다

5. 프로세스와 스레드

  • 프로세스(Process)란?
    • 어떤 작업을 위해 실행된 프로그램이 메모리에 올라와 운영체제로부터 시스템 자원을 할당받는 실행의 단위
    • 프로세스는 각각 독립된 메모리 영역을 할당받는다
    • 프로세스에는 명령어가 저장되는 코드(Code), 정적 데이터가 저장되는 데이터(Data), 동적 할당 영역의 힙(Heap), 정적 할당 영역의 스택(Stack)의 4가지 영역이 존재
      • 코드 영역은 실행 파일을 구성하는 명령어들이 올라가는 영역으로 코드가 들어가는 부분이며 읽기 전용으로 되어있다. 수정될 것이 없으므로 고정(Static)된 영역을 가진다
      • 데이터 영역은 전역변수와 정적변수들을 저장하는 영역. 실행 도중에 변수가 바뀔 수 있다
      • 힙 영역은 프로그래머가 필요할 때마다 사용하는 메모리 영역으로 크기가 고정되어 있지 않고 필요에 따라 영역의 크기가 커지거나 작아진다. 메모리 할당과 해제에 의해 관리된다
      • 스택 영역은 프로세스의 메모리 공간을 관리하기 위한 자료구조 중 하나인데 메모리 할당과 해제가 빨라 매우 빠른 액세스가 가능하지만 크기가 제한되어 있다
  • 스레드(Thread)란?
    • 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로서 프로세스가 작업을 수행하는 특정 경로
      • 프로세스는 CPU, 메모리 등의 자원을 할당받았는데 이 할당받은 자원을 이용하는 실행의 단위
    • 프로세스 내에서 각각 스택만 따로 할당받고 코드와 데이터, 힙 영역은 공유
  • 프로세스와 스레드의 차이
    • 프로세스는 독립성을 가지고 있다. 프로세스끼리 할당 받은 서로의 메모리를 침범할 수 없지만 그에 반해 스레드는 자신들의 스택영역을 제외하고는 모든 것을 공유한다
    • 이와 같은 특성을 이용하여 멀티 프로세스멀티 스레드라는 기술이 생겨남
      • 각각의 장단점이 있기 때문에 적용해야 하는 시스템에 따라 적합한지 부적합한지 구분할 수 있고, 시스템의 특징에 따라 알맞은 동작 방식을 적용해서 사용해야 한다
profile
게임 프로그래머 지망생

0개의 댓글