WinCNT

키워드 정리 본문

게임 프로그래밍(학습 내용 정리)/컴퓨터 개론

키워드 정리

WinCNT_SSS 2021. 11. 8. 16:34

Variables and Values

Keyword - 메모리와 주소, 주소의 이름, 코드 블록과 데이터 블록

변수(Variables) - 메모리에 값을 저장하고 그곳으로 접근하기 위해 이름을 부여함

값(Values) - 메모리에 저장되는 값

PowerShell의 format-hex로 보면 값을 볼 수 있다

 

Constant and Literal

Keyword - 변수, , 이름이 없는 주소, 이름이 있는 주소

상수(Constant) - 변하지 않는 변수

리터럴(Literal)  - 변하지 않는 데이터

 

상수는 변수명을 가지고 있기에, 즉 주소에 이름이 있기 때문에, 변수명으로 접근하여 사용할 수 있다

반면, 리터럴은 데이터 그 자체이므로, 즉 주소에 이름이 없기 때문에, 접근할 수단이 없다

 

Class, Object, Instance

Keyword - 멤버 변수와 멤버 함수, 객체의 라이프 타임

클래스: 클래스는 코드의 영역, 구조체와 같이 TYPE(멤버 함수도 있음)

오브젝트: 클래스에 기초해 만들어진 객체(메모리 적재 여부는 상관 없음), 변수라고 안 하고 객체라고 함

인스턴스: 메모리에 올라간 오브젝트

 

오브젝트가 선언되서 실제로 메모리에 올라가는 것을 객체의 라이프 타임(의 시작)이라고 한다

 

Function, Interface, Method

Keyword - 클래스, 모듈의 기능

함수: 기능을 구현

인터페이스: 유저가 사용하기 위해 외부에 노출되어 있는 함수(Windows API 등)

메소드: 클래스의 멤버 함수를 구분하기 위한 단어

 

함수 중에는 모듈이 있는데 이건 기능을 담당한다.

 

Procedural Programming

Keyword - 순서도

절차 지향 프로그래밍

 

Object-Oriented Programming

Keyword - 모듈화, 클래스 다이어그램

객체 지향 프로그래밍

단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존성 역전 원칙

 

Functional Programming

함수형 프로그래밍

 

Component Based Design

컴포넌트 기반 설계

최근 상용 게임 엔진은 컴포넌트 기반의 설계가 대부분이다

 

Preemptive vs Non-preemptive

Keyword - OS, CPU, 프로세스, 작업 스케줄링

 

Blochking, Non-Blocking

Keyword - 시스템 콜

블로킹 vs 논블로킹은 처리되어야 하는 작업이, 전체적인 작업의 흐름을

막느냐(Blocking), 안 막느냐(Non-Blocking)에 대한 관점이다

이는 I/O작업에서도 주로 볼 수 있다

 

I/O 작업은 User Level(어플리케이션)에서 직접 수행할 수 없다

실제 I/O작업Kernel Level(운영 체제)에서 일어나는 과정이다

 

따라서 유저 프로세스(어플리케이션)커널(운영 체제)에게 I/O 작업에 대한 요청을 해야 하며,

이를 위해 어플리케이션은 시스템 함수를 호출(Sytem Call)한다

 

이 때, 어플리케이션의 대기 여부에 따라 2가지의 모델이 존재한다.

 

Blocking I/O Model

요청한 I/O 작업이 끝날 때까지 어플리케이션이 대기하는 모델

Non-Blocking I/O Model

시스템 콜을 하자마자 바로 결과를 반환하여, 어플리케이션이 다른 처리를 하게 하는 모델

 

※시스템 호출(System Call, 간단하게는 syscall)

운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스

 

Synchronous vs Asynchronous

Keyword - 리턴 시점, 리턴 결과

동기란 작업이 동시에 수행되거나 어떠한 작업이 끝나자마자 다른 작업이 수행되는 것을 말한다.

반대로 비동기란 각각의 작업이 별도의 시작, 종료 시간을 갖는 것을 말한다.

 

동기-논블로킹으로 A라는 작업에서 B 작업에 작업 결과를 요청했다면,

A는 B의 작업이 끝났는지 수시로 작업 결과를 조회할 것이다.

 

한편 비동기-논블로킹에서는 A가 B를 수시로 조회하는 대신

(주로 콜백을 설정해서)B의 작업이 끝났다면 A에 그 사실을 알려서

작업 결과를 한 번만 조회하도록 할 것이다

 

Non-blocking vs Asynchronous

Keyword - 메시지 기반의 비동기 아키텍처

 

넌블로킹, 비동기

넌블로킹 - 숙제를 시키고 한다고 대답을 함(실제 하는지 안 하는지는 모름)

비동기 - 숙제가 끝나고 완료 여부를 알려줌

 

SendMessage, PostMessage

메시지에 대한 관리는 OS가 한다

 

SendMessage는 윈도우 프로시저(WinProc)으로 바로 보낸다

Dispatch 불필요, 바로 실행, WinProc를 바로 실행시키는 것은 아님

PostMessage는 호출된 메시지가 메시지 큐에 들어가고, 윈도우 프로시저에서 이 메시지를 처리함

 

WM_DESTROY는 OS가 발생시킴

WM_QUIT는 유저가 제어 가능

 

참고 사이트

https://docs.microsoft.com/en-us/windows/win32/winmsg/using-messages-and-message-queues

 

Using Messages and Message Queues - Win32 apps

The following code examples demonstrate how to perform the following tasks associated with Windows messages and message queues.

docs.microsoft.com

https://asfirstalways.tistory.com/348

 

blocking, non-blocking and Async

blocking, non-blocking and Async Blocking I/O Model 일단 I/O작업은 User Level(application)에서 직접 수행할 수 없다. 실제 I/O작업은 Kernel Level(OS)에서 일어나는 과정이다. 따라서 유저 프로세스(app..

asfirstalways.tistory.com

 

SSS