일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cell Look
- working set
- Specular
- Toon Shader
- AppSW
- 3d
- Private Bytes
- 작업 집합
- 개인 바이트
- Windows Build
- 가상 바이트
- Cell Shader
- OculusMotionVectorPass
- C언어
- 메모리 누수
- Three(Two) Tone Shading
- URP로 변경
- URP
- ASW(Application SpaceWarp)
- ColorGradingLutPass
- Rim Light
- Cartoon Rendering
- VR
- 프로그래밍 기초
- Virtual Byte
- 벡터
- 게임 수학
- Today
- Total
목록게임 프로그래밍(학습 내용 정리)/시스템 프로그래밍 (17)
WinCNT
동시성 어플리케이션의 설계 --> 어떤 작업을 어떻게 나눠서 스레드로 분배할 것인가 시스템(CPU, OS)의 설계 --> CPU 시간 자원을 각 스레드에 어떻게 할당할 것인가 CPU는 각각의 스레드를 시분할(Time Slice)과 작업의 상태로 관리한다 (작업의 상태를 확인해서 시분할로 작업을 맡기는 이미지) 다시 말해, 동시성의 기본은 상태와 시간!! 작업 데이터, 수행 코드 모두 메모리에 존재 CPU 안에도 메모리(레지스터)가 존재한다 윈도우 OS 윈도우 OS는 실시간 운영체제가 아니며, 선점형 운영체제이다 선점형 운영체제란 언제라도 특정 스레드를 정지하고 다른 스레드를 수행할 수 있다 즉, 선점형 운영체제는 어떤 스레드가 언제, 얼마만큼 스케줄링 될지를 결정하기 위한 알고리즘이 필요하다 (Windo..
참고 사이트) https://ozt88.tistory.com/48 Exception Filter Exception Filter Exception이란 내 생각엔 버그다. 프로세스가 정상적인 동작을 할 수 없을 때, 예외 이벤트가 발생하여 운영체제에서 프로세스를 강제 종료시켜버린다. 좀 규모가 있는 프로그램을 만 ozt88.tistory.com Exception Filter의 예제 코드 #include #include #include "dbghelp.h" #pragma comment(lib, "Dbghelp.lib") LONG WINAPI MyExceptionFilter(struct _EXCEPTION_POINTERS* pExceptionInfo); int main() { // 함수 포인터를 등록해준는 함수..
자신의 구분자 얻기 실제 핸들과 허위 핸들(Pseudo Handle) GetCurrentProcess()와 GetCurrentThread() 등의 함수는 특별하게도 해당 함수를 호출한 프로세스나 스레스의 실제 핸들을 얻어 오는 것이 아니라, 허위 핸들(Pseudo Handle)을 얻어온다 이러한 함수는 프로세스의 커널 오브젝트 핸들 테이블에 어떠한 영향도 미치치 않고 프로세스나 스레드 커널 오브젝트의 사용 카운트(Usage Count)에도 영향을 미치지 않는다 그리고 허위 핸들을 CloseHandle 하면 함수 호출 자체를 무시하고 FALSE를 반환한다 프로세스나 스레드의 핸들을 필요로 하는 윈도우 함수에 허위 핸들을 이용하면 현재 프로세스나 스레드에 대해 자신의 기능을 수행할 수 있다 (물론 실제 핸들..
실제 작업하는 것은 스레드 그래서 worker thread라는 용어가 존재한다 스레드는 왜 필요한가? 모든 프로세스는 적어도 하나 이상의 스레드를 사용한다 스레드는 프로세스의 주소 공간 내에 있는 코드를 수행한다 스레드는 프로세스와 유사하게 두 개의 요소로 구성되어 있다 운영체제가 스레드를 다루기 위해 사용하는 스레드 커널 오브젝트 스레드가 코드를 수행할 때 함수의 매개변수와 지역변수를 저장하기 위한 스레드 스택 실행 코드와 데이터는 한 세트 함수 스택, 콜 스택 - 스레드 스택 함수 내부가 실행되는 건 스레드가 기반 비동기를 구현하기 위해 만들어진 것은 스레드 이외에도 존재한다 Co-routine 등 본격적으로 스레드가 사용되기 시작한 것은 하드웨어(CPU)의 개수가 2개 이상이 될 때부터 하지만 CP..
커널 오브젝트 커널 오브젝트란 커널에 의해 할당된 간단한 메모리 블록!! 커널이 소유하며, 커널에 의해서만 접근 가능(사용 카운트로 관리함) API(여기서는 Windows가 제공)로 커널 오브젝트를 생성하면 커널 오브젝트의 핸들 값을 반환 핸들 값은 프로세스별로 독립적으로 유지 운영 프로세스는 하나이며, 하드웨어에 접근할 수 있는 것은 오직 운영 프로세스!! 사용자 프로세스는 하드웨어에 접근할 수 없다 프로세스란 실행 코드, 데이터의 조합, 즉 메모리가 필요하다 커널도 프로세스이므로 메모리가 필요하다 프로세스와 커널 오브젝트 프로세스의 커널 오브젝트: 프로세스가 소유한 커널 오브젝트(의 핸들 값) 프로세스 간의 커널 오브젝트: 프로세스 간에 공통적으로 접근이 가능한 커널 오브젝트(의 핸들 값) 프로세스 ..
(참고 서적) WINDOWS VIA C/C++의 3장 커널 오브젝트 커널 오브젝트란? WinObj 커널 오브젝트는 커널에 의해 할당된 간단한 메모리 블럭이다 커널 오브젝트의 데이터 구조체는 커널에서만 접근이 가능하기 때문에, 응용 프로그램에서 데이터 구조체가 저장되어 있는 메모리 위치를 직접 접근하여 그 내용을 변경하는 것은 불가능하다 MS사는 커널 오브젝트 구조체가 일관되게 유지될 수 있도록 제약 사항을 의도적으로 만들었다 (운영 체제를 견고하게 하기 위해) 직접 접근이 불가능한 대신 API를 통해 핸들 "값"을 통해서 제어할 수 있다 (유저는 핸들 값을 변수에 저장해 놓고 사용한다) 운영핸들 값은 프로세스 별로 독립적으로 유지한다 만일 프로세스간 통신 등을 통해서 다른 프로세스에 핸들 값을 전달했다고..
게임에서의 시스템 프로그래밍 기획 컨셉 기획자 - 세계관 등등 눈에 보임, 컨셉 담당 아트와 연관이 있음 시스템 기획자 - ?? 문서는 나오지만 눈에 보...이나? 컨텐츠 기획자 - 컨셉과 시스템을 아우르는 기획자, 재미를 추구하거나 잘 팔리는 아이템을 만들거나 한다 게임에서의 시스템 프로그래머는 시스템 기획을 가지고 기반을 만드는 작업을 한다! 퀘스트는 전형적인 컨텐츠 예시 용사가 초보자의 샘에서 슬라임을 10마리 잡으면 아이템과 경험치를 얻는다는 퀘스트 위의 시점은 플레이 기획 하지만 초보자의 샘(이동 시스템), 슬라임(AI 시스템), 경험치 획득(스탯 시스템), 아이템 획득(아이템 시스템) 등등 보이지 않는 시스템에 대한 기획도 필요하다 이러한 시스템에 대한 조합으로 퀘스트, 즉 컨텐츠가 만들어진다..