경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220421 2022/04/04~2022/12/13

Jinho Lee·2022년 4월 21일
0

경일 메타버스 20220421 3주차 4일 수업내용.

컴퓨터 공학 개론

https://docs.google.com/document/d/1ecFqrokNqys-9v8mV-8dUVDk130AOqbXXX62YPLMtXU/edit

간단 정리

#1 컴퓨터 동작 원리

  • Memory / IO / CPU
  • Memory : 데이터 저장 공간
  • Little Endian / Big Endian
  • Memory Hierarchy
  • IO : Input and Output
  • Input : User -> Computer
  • Output : Computer -> User
  • CPU : 계산
  • ALU : 계산
  • Register : 메모리
  • Control Unit : 나머지 부품 제어
  • Computer Architecture
  • Harvard / Von 노이만 구조
  • OS : 컴퓨터 자원을 관리
  • Process / Thread
  • Code / Data / Heap / Stack
  • OSI 7 Layer
  • Application : 프로그램 간 데이터 통신
  • Presentation : 데이터 암호화 / 복호화
  • Session : 세션 연결 및 해제
  • Transport : 데이터 전송
  • Network : 컴퓨터 식별
  • Data Link : 경로 식별
  • Physical : 비트 전송 방식

#2 프로그래밍 언어

  • 내 생각을 컴퓨터에게 전할 수 있는 도구 => 프로그래밍 언어
  • Type / Control Statement / Function
  • Core / Library

컴퓨터의 구성요소

  1. 메모리
  2. 입력과 출력 IO
  3. CPU

메모리 : 비트를 이용하여 저장

Endian

  • 메모리 접근 방식 : 차후에 구조체, Padding에 관련될 것이다.

비트에 저장하는 방식 - 엔디안 (Endian)

  1. 리틀 엔디안 : 가장 작은 바이트부터 순서대로 정렬. 먼저 쓰고 오른쪽으로. ex) 0001
  2. 빅 엔디안 : 가장 큰 바이트부터 순서대로 정렬. 먼저 쓰고 오른쪽으로. ex) 1000

메모리 계층 구조 (Memory Hierarchy)

순차적으로, 아래에서 위로 읽고 위에서 아래로 저장.
CPU register / cache / mainMemory / diskCache / hardDisk
Memory_Hierarchy

CPU는 레지스터(register)와만 관여(작업)

> - 나눈 이유 : 경제상 이유; 위로 갈수록 비싸다.

> - 소켓 프로그래밍 : 서버 프로그래머들이 사용함.
> - 계층대로만 로드 연산.

중앙 처리 장치 (CPU)

  • 산술 논리 유닛 (ALU) : 계산

  • 레지스터 (Register) : 저장

  • 제어장치 (Control Unit) : 나머지 부품 제어

    	> - 현재 컴퓨터의 한계 : 발열
    	> - CPU는 지금도 충분한 성능을 가지고 있다. 많은 병목 현상의 이유는 결국 메모리의 한계.

컴퓨터 아키텍처

  • 컴퓨터의 여러 구성요소를 배치하는 방법
    폰 노이만 구조, 하버드 구조

  • 운영체제(OS)의 역할 - 하드웨어 및 시스템 자원의 관리, 하드웨어 자원을 사용할 수 있도록 관리해주는 것

프로세스 : 실행되고 있는 프로그램

프로세스 어드레스 스페이스 (Process address space)

  • 스택 (Stack) : 정적 할당 영역. 지역 변수 등의 자주 호출되는 데이터가 할당된다.
  • 힙 (Heap) : 동적 할당 영역. 변동이 있는 데이터가 주로 할당된다.
  • 데이터 (Data) : 정적 데이터. 전역변수, static 변수 등 변동이 비교적 적은 데이터가 할당된다.
  • 코드 (Code) : 명령어. 말그대로 프로그램 코드. 기계어의 형태로 저장.
    • 정적 : 한번 정해놓으면 변하지 않고 계속 유지되는 성질
    • 동적 : 프로그램 실행 중, 끊임없이 변하는 성질

스레드 (Thread)

  • 코드가 실행되는 곳
    - 한 개의 프로세스는 반드시 하나의 스레드를 갖는다. -> 메인 스레드
    - 스레드는 서로 데이터를 공유한다 - 공유하는 데이터 : 힙 / 데이터 / 코드
  • 멀티 스레드의 문제 (Race Condition / Data Race)
    복수의 스레드가 같은 메모리에 동시 접근 (메모리의 공유), 오류가 발생한다.
    스레드 간의 경쟁이 문제이기에, Race Condition 혹은 Data Race라 불린다.
    - 해결을 위해 동기화가 필요하다
    - ex) mutex를 잠근다 : mutex(상호 배제 영역, mutual Exclusion)

네트워크

OSI 7 Layer : 컴퓨터 네트워크 프로토콜의 설명

OSI_7_Layer

  • Application Layer : 데이터를 어떻게 주고받을 것인가 / 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행
  • Presentation Layer : 데이터를 어떻게 암호화, 복호화할 것인가 / 코드 간의 번역, 인코딩, 디코딩
  • Session Layer : 세션의 성립 및 해제를 어떻게 할 것인가 / 응용 프로세스가 통신을 관리하기 위한 방법, 세션 : 데이터 간의 추상적인 파이프
  • Transport Layer : 데이터를 어떤 방식으로 전송할 것인가 / 데이터 전달의 유효성이나 효율성 결정
  • Network Layer : 컴퓨터의 식별을 어떻게 할 것인가 / 컴퓨터 간 연결망, 경로를 찾아주는 역할
  • Data Link Layer : 경로의 식별을 어떻게 할 것인가 / 오류 제어와 흐름 제어
  • Physical Layer : 실제 물리적인 전송을 어떻게 할 것인가 / 실제 전송 방법의 정의, 하드웨어 (광케이블 등)

프로그래밍 언어

  • 스파게티 코드 : 어셈블리어를 쓰면서 사람들이 JMP(jump)를 남용해서 코드의 순서가 많이 꼬이게 되었다. 그 꼬인 모습을 스파게티 코드라 불렀다.

  • 버그 : 컴퓨터가 매우 컸을 때, 나방이 컴퓨터에 들어가 고장이 났다. 이를 보고 버그로 인해 오류가 났다, 해서 오류를 버그라 부르기 시작했다.

  • 마거릿 헤밀턴 : 최초로 어셈블리어로 우주선을 쏘아 보낸 NASA의 프로그래머. 여성.

  • 데니스 리치 : C언어의 창시자.

Programming Paradigm

  • 프로그래밍 언어의 발전상

기계어
Assembly
C, C++ -<—여기까지 메모리 제어 가능 : Native language
Java, C#
javascript, python

  • JMP 등으로 인한 스파게티 코드를 막기 위한 언어 - 구조적 프로그래밍
    if, for등의 구문

  • 절차지향 프로그래밍 Procedural Programming
    함수 / 서브루틴 / 프로시저

  • C : 드라이버 등에 아직 많이 사용됨

언어 : 소통을 위한 것.

  • 가장 필요한 것 : Computational Thinking

    비트 bit : Binary Digit의 준말
    바이트 Byte : 8bit
    word : 16bit (일반적)
    Halfword : 32bit (”)
    Longword : 64bit (”)

프로그래밍 언어를 파악하는데 필수적인 세 가지

  1. Type 타입
    비트를 해석하는 방법 + 그에 적용할 수 있는 연산
    - Primitive Type / Built-in Type : 언어 자체가 기본적으로 제공하는 타입 ex) C++의 int, float 등
    - User-defined Type : 구조체 등, 사용자의 필요에 따라 정의하는 타입

  2. Control Statement 제어문

    • Conditional Statement 조건문

      if / else / switch

    • Iteration Statement 반복문

      for / while / do while

        ex)
            // c, c++, c#
            for (int i = 0; i < 5; ++i)
            {

            }

            // python
            for i in range(5):
  1. Function 함수
    정의역에 있는 어떤 값을 대입시켰을 때, 그에 대응되는 공역의 값이 나오는 것.
  • 함수의 return;
    실행의 오류 판별; 문제 없으면 0 반환, 있으면 다른 수를 코드로 반환
    ex) int a = 10/0; // 코드 -1242...
    int a = 10/1; // 코드 0

언어의 구성

  • Core
    언어의 핵심 ⇒ 문법
    변수, 조건문, 반복문, 함수,
    구조체, 열거형, 배열, 포인터,
    공용체, 매크로, 타입 재정의

  • Library
    함수의 모음

언어를 배울 때 가장 먼저 참고할 것 : Reference (영어 추천)
C++ → cppreference.com
언어는 계속 새로운 버전이 나온다.
프로그래머라면 주언어가 필요 - 계속 변화를 트래킹할 필요가 있다.

0개의 댓글