목록전체 글 (156)
승쨩개발공부
프레임 버퍼 그래픽 카드 VRAM에는 Frame Buffer라는 영역이 존재한다. Frame Buffer는 전면 버퍼(Front Buffer) 후면 버퍼(Back Buffer)가 존재한다. 그래픽 카드가 없다면 DirectX가 내부적으로 생성해서 사용한다. 전면 버퍼와 후면 버퍼가 서로 계속 교환되며 화면의 출력된다 후면 버퍼는 색상 버퍼, 깊이 버퍼, 스텐실 버퍼로 분류되는데 일반적으로 깊이 스텐실 버퍼는 하나로 묶어서 사용한다. 깊이 버퍼에 24비트, 스텐실 버퍼에 8비트를 주고 합해서 32비트를 사용한다. 물론 깊이 버퍼만 사용하는 것도 가능하다. 수직 동기화 수직 동기화가 뭐냐면 그래픽 카드의 렌더링 갱신 속도를 모니터의 출력 갱신 속도에 맞춘다는 의미이다. 더블 버퍼링이 모니터의 깜빡임을 방지하..
프로그램의 실행과정 실행파일의 생성 과정 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 1. 전처리기의 치환 작업 전처리기는 '#include' , '#define' 과 같이 '#'으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다. 2. 컴파일러에 의한 번역 전처리기에 의해 변경된 소스코드는 여전히 C언어로 구성되어 있다. 이 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다. 3. 어셈블러에 의한 바이너리 코드 생성 바이너리 코드는 1과 0으로만 구성되는 코드이다. 컴파일러에 의해 번역된 어셈블리 코드는 컴퓨터에 의해 실행되기 앞서서 바이너리 코드로 번역 되어야 한다. 컴퓨터는 1과 0만 이해하기 떄문이다. 이처럼 CPU가 이해할 수 있는 바이너리 코드로 바꾸어 주는 프..
컨텍스트 스위칭이 무엇인가? 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 떄 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)을 교체하는 작업을 컨텍스트 스위칭(Context Switching)라고 한다. 참고로 컨텍스트 스위칭 떄 해당 CPU는 아무런 일을 하지 못한다. 따라서 컨텍스트 스위칭이 잦아지면 오버헤드가 발생해 효율(성능)이 떨어진다. 컨텍스트는 무엇인가? 사용자와 다른 사용자, 사용자와 시스템 또는 디바이스간의 상호작용에 영향을 미치는 사람, 장소, 개체등 현재 상황(상태)을 규정하는 ..
커널 커널은 컴퓨터 시스템을 제어하는 일을 한다. 여기에는 메모리, 사운드카드, 키보드, 모니터와 같은 시스템자원을 포함한다. 이러한 시스템자원을 사용하는 것은 보통 응용 프로그램의 요청을 통해서 이루어지게 되므로 커널은 응용 프로그램을 관리하는 일도 한다. 응용 프로그램의 실행되는 순서라든지 응용 프로그램이 요구하는 시스템자원에 대한 관리가 그것이다. 커널 (Kernel, 핵심) - 소프트웨어적인 관점에서 프로그램의 뇌 - 시스템 데이터나 하드웨어를 직접 액세스 및 제어 프로세스와 쓰레드의 차이점 프로그램의 실행 관점에서 이해하는 것도 중요하지만, 메모리 관점에서 이 둘의 차이점을 이해하는 것 도 중요하다. 프로세스는 메모리를 공유하지 않지만, 프로세스 내에 존재하는 둘 이상의 쓰레드들은 스텍을 제외한..
오브젝트 풀 객체를 매번 할당, 해제하지 않고 고정 크기 풀에 들어있는 객체를 재사용함으로써 메모리 성능을 개선한다. 해제하지 않는데 어떻게 메모리 사용 성능이 개선된다는걸까? 게임에는 총을쏘거나 마법을쓰거나 검을 휘두를떄 빛이 생성이된다. 이 빛은 파티클 시스템이 필요하다. 검을 몇번 휘두르는것만 해도 수많은 파티클이 생성이되야한다. 그렇기에 이 파티클을 굉장히 빠르게 만들 수 있어야 한다. 더욱 중요한것은 파티클을 생성, 제거하는 과정에 메모리 단편화가 생겨서는 안 된다는 점 이다. 단편화를 막으면서도 메모리 할당 속도 떄문에 메모리를 언제 어떻게 관리할 지를 엄청 신경써야 한다. 이러한 문제는 게임이 실행될 떄 메모리를 미리 크게 잡아놓고 끝날 떄까지 들고 있는 것으로 해결할 수 있다. 하지만 이러..