C++의 개요인 컴퓨터 시스템에 대하여 알아보겠습니다.
"Problem solving with C++"에서 (P.2-9)까지를 커버합니다.
아래 링크를 통하여 원서를 확인하실 수 있습니다.
https://beelee.tistory.com/4?category=819200
Introduction
"C++을 위한 기본 지식" 챕터에서는 컴퓨터의 기본 구성 요소들과 프로그래밍을 하는데 있어서 기본적인 테크닉과 디자인을 간단한 예제를 통하여 알아볼 예정입니다.
구성은 아래와 같습니다:
[1.1 컴퓨터 시스템]
-하드웨어
-소프트웨어
-프로그래밍 언어
-컴파일러
[1.2 프로그래밍과 기본 원칙]
[1.3 C++에 대한 소개]
[1.1 컴퓨터 시스템]
-컴퓨터를 작동하게 하는 명령어들을 프로그램이라 부릅니다.
-여러 프로그램들이 모여 있는 것을 소프트웨어라고 부릅니다.
-그리고 물리적인 컴퓨터 기계들을 하드웨어라고 부릅니다.
하드웨어
컴퓨터는 3가지로 분류할 수 있습니다. PC, 워크스테이션, 메인프레임
-PC는 (Personal Computer)로, 개인이 사용할 수 있게 디자인된 작은 컴퓨터입니다. 가정에서와 비즈니스에서 자주 사용됩니다.
-워크스테이션은 PC보다는 더 큰 컴퓨터로, "Industria Strength" 가 있는 산업용 컴퓨터입니다.
-메인프레임은 워크스테이션보다 크고 강력한 컴퓨터로 관리자가 있으며, 여러명의 유저들이 동시다발적으로 사용하는 컴퓨터입니다.
PC, 워크스테이션, 메인프레임을 구분하는 명확한 정의는 없습니다만, 통상적으로 컴퓨터를 3가지 방법으로 구분합니다.
PC<<<워크스테이션<<<메인프레임 순으로 크기가 크고 컴퓨팅 파워가 강하다고 생각하시면 되겠습니다.
네트워크란 여러대의 컴퓨터가 연결되어 리소스(예.프린터)와 데이터를 공유하는 것을 의미합니다. 여러대의 pc 또는 메인프레임 또는 워크스테이션이 복합적으로 연결되어 있을 수도 있습니다.
하드웨어는 아래 그림과 같은 구성을 가집니다.
입력장치 (Input device)는 데이터를 컴퓨터에 입력할 수 있는 장치를 의미합니다. (예. 마우스, 키보드)
출력장치 (Output device)는 컴퓨터가 데이터를 출력하는 장치를 의미합니다 (예. 모니터, 스피커, 프린터)
CPU는 컴퓨터의 "뇌"로 불리며 복잡한 계산을 수행하는 곳입니다.
-간단한 사칙연산을 수행하는 ALU와 데이터를 임시적으로 올리는 register와 cache가 있습니다.
-CPU는 메인 메모리에서 명령어 (opcode) 와 데이터를 읽어와 수행한 뒤 다시 메인메모리에 전달합니다.
메인메모리 (Main memory)는 데이터를 임시적으로 올리는 저장소입니다.
-데이터를 임시적으로 보관하여 CPU에 전달해주고, CPU가 계산한 데이터를 다시 받아 올리는 임시 저장소입니다. (데이터의 영구적인 보존은 불가)
-우리가 아는 RAM(Random Access Memory)또는 ROM(Read Only Memory)가 메인메모리의 예입니다.
-메인메모리에는 "memory address(메모리 주소)" 라는 것이 있어, 필요한 데이터를 찾을 때 이 주소를 활용합니다.
-하나의 메모리 주소에는 1byte의 데이터가 올라가게됩니다.. (1byte = 8bit, 1bit = 0) (즉, 1byte 는 8자리의 0또는1) (예. 10101010)
-일반적으로 메모리 용량을 이야기할때 1gb등 기가바이트 단위로 이야기 하는데, 1gb는 2^30입니다. 즉, 2^30개의 메모리 주소가 있는 메모리라고 생각을 하면됩니다.
-메모리 주소는 아래 그림에서 보이듯이 0xFFFFFFF와 같은 형태입니다.
-이미지등 용량이 큰 데이터는 여러개의 메모리 주소에 나누어져 보관됨. 하나의 데이터를 표현하는 여러 메모리 주소의 묶음을 "memory location" 이라고 칭합니다.
보조기억장치 (secondary memory)는 데이터가 영구적으로 저장되는 메모리입니다.
-보조기억장치에서는 데이터가 파일 "File"의 단위로 저장됩니다.
-메인메모리에 비해 속도가 느리나 많은 양의 데이터를 저장할 수 있습니다.
-보조기억장치는 CD, 하드 드라이브, usb등 다양한 형태로 존재합니다.
https://www.youtube.com/watch?v=FZGugFqdr60&list=PL8dPuuaLjXtNlUrzyH5r6jN9ulIgZBpdo&index=8
위 영상을 통해, CPU가 어떻게 RAM에서 데이터를 꺼내어 계산하고 다시 올리는지 보실 수 있습니다.
메인메모리와 보조기억장치가 정확히 어떠한 원리로 작동되며 데이터가 저장되는지를 알기 위해선, 부울 연산과 논리게이트에 대한 이해도가 필요합니다. 그에 대한 정보는 아래 링크를 통하여 확인할 수 있습니다.
https://www.youtube.com/watch?v=gI-qXk7XojA&list=PL8dPuuaLjXtNlUrzyH5r6jN9ulIgZBpdo&index=4
결국이 CPU, 메인메모리, 보조기억장치, 입출력장치들이 복합적으로 작동하여 컴퓨터가 작동하게 됩니다.
작동하는 예는 아래와 같습니다.
(보조기억장치 --> 메인메모리 --> CPU --> 메인메모리 --> 출력장치)
1. 보조기억장치에 있는 파일을 메인메모리로 올립니다.
2. 보조기억장치에서 끌고온 데이터는 메모리의 여러 주소에 올려져 저장되게 됩니다.
3. CPU는 특정한 주소에있는 데이터를 계산하여 다시 특정 주소로 올립니다.
4. 계산된 데이터는 출력장치를 통하여 사용자에게 보여지게 됩니다.
소프트웨어
컴퓨터는 소프트웨어에 있어서 2가지 영역이 있습니다.
프로그램과 데이터입니다.
프로그램은 컴퓨터가 따르는 명령어이며, 데이터는 컴퓨터가 처리하는 정보입니다.
그래서 컴퓨터가 1+1이라는 계산을 한다면, 여기서 1은 처리하는 정보이며, +는 컴퓨터가 따르는 명령어입니다.
소프트웨어있어 또한 핵심적인 부분중 하나는 바로 운영체제(Operating System)입니다.
운영체제도 프로그램의 한 종류로써, 다른 프로그램들을 관리하는 역할을 합니다.
컴퓨터가 사용하고자하는 프로그램에 효율적으로 자원을 할당합니다.
그렇기 때문에, 대부분의 사용자는 이 운영체제를 통하여 다른 프로그램을 사용하게 됩니다.
운영체제라는 영역 하나로 보았을 때도 너무 광범위하기 때문에, 현재로서는 정의만 알고 넘어가는 것이 좋을것입니다.
운영체제에 대한 공부를 하고 싶으시다면 공룡책으로 불리는 "Operating System concepts"를 보시길 권합니다.
고급언어 (High Level Language)
프로그램을 만들기 위해선 프로그래밍 언어 (Programming Language)라는 것을 사용하게 됩니다.
말그대로 컴퓨터가 이해하는 언어입니다. 이 프로그래밍 언어는 목적별로, 용도별로 굉장히 다양하며, stack overflow에 의하면 700개가 넘는 프로그래밍 언어가 있다고 합니다.
기계는 기본적으로 언어를 "010101"처럼 이진법으로 작성되어 있습니다. 이러한 코드를 저희는 기계언어 "machine language"라고 부릅니다.
보실 수 있듯이, 만약 이러한 식으로 프로그래밍을 작성한다면, 굉장히 시간 소모적이고 비효율적일것입니다.
그렇기 때문에, 이 언어위에 레이어를 쌓아 비교적 쉽게 만들어놓은 언어인 어셈블리어 "Assembly language"가 1949년에 등장하게 됩니다.
시간이 지나 이 언어를 더욱 쉽게 만들기 위한 Cobol, Fotran, C, C++, Python등등의 언어들이 나오게 되어, 프로그래밍의 효율성을 높이게 됩니다.
그런 언어들을 저희는 고급 언어인 "High level language" 로 부르게 되면, 비교적 기계가 이해하기 쉬운 언어인 어셈블리어나 머신언어는 저급 언어인 "Low-level language"라 부르게 됩니다.
여기서 중요한 점은 고급언어는 머신언어로 변형되어야만 기계가 이해한다는 컨셉을 알고있으면 좋겠습니다.
컴파일러(Compiler)
고급 언어는 머신 언어로 변형되어야 합니다. 이를 변형시켜주는 프로그램을 컴파일러라 부릅니다.
컴파일러는 특이한 프로그램입니다.
하나의 프로그램을 입력받아
, 또 다른 프로그램으로 출력하게 됩니다.
변형되기전의 프로그램을 소스프로그램 "source program"또는 소스코드 "source code"라고 부르게 되며,
변형되어 출력된 프로그램을 오브젝트 프로그램 "object program" 또는 오브젝트 코드 "object code"라 부릅니다.
프로그램을 작성하면 위와 같은 순서로 작동되게 됩니다.
1. 사용자는 C++프로그램을 작성하여 컴퓨터에 입력
2. 컴퓨터안에 있는 컴파일러가 입력한 C++프로그램을 머신 언어로 변경.
3. 컴퓨터는 머신언어를 입력 데이터와 함께 실행.
이상
C++프로그래밍을 시작하기전에, 하드웨어, 소프트웨어, 프로그래밍 언어, 컴파일러등의 개념을 알아보았습니다.
'Tech, Tech, Tech > C++' 카테고리의 다른 글
C++ 기초 명령어 [2.2 데이터의 입력과 출력][cout을 통한 데이터 출력] (0) | 2019.12.16 |
---|---|
C++ 기초 명령어 [2.1 변수와 변수 선언] (0) | 2019.12.11 |
C++을 위한 기본 지식 [1.3 C++ 소개] [C++의 역사][C++예제][C++레이아웃] (0) | 2019.12.10 |
C++을 위한 기본 지식 [ 1.2 프로그래밍 기본 원칙][알고리즘, 프로그램 디자인, 객체지향] (0) | 2019.12.08 |
C++를 시작하기에 앞서 (1) | 2019.12.04 |
댓글