본문 바로가기

전체 글

(74)
[언리얼 엔진4] TEXT 재정의 문제 언리얼 엔진으로 프로그래밍할 때 Windows.h를 include를 해서 사용하는 경우가 있을 것이다. 이런 경우 TEXT 재정의 문제가 warning으로 뜨는 경우가 있는데 방치하는 경우 나중에 크나큰 error로 돌아오게 된다. 이런 문제를 막는 방법은 간단하다. 평소에 Windows.h를 사용하는 경우 다음과 같이 "Windows/AllowWindowsPlatformTypes.h"와 "Windows/HideWindowsPlatformTypes.h"를 같이 선언해준다. 하지만 이것만으로는 TEXT 매크로의 재정의 문제를 해결할 수 없다. 그렇기 때문에 두 헤더를 더 선언해줘야 한다. 다음과 같이 선언을 해주면 TEXT 매크로가 재정의되는 것을 방지할 수 있다.
[OS/Linux] 파일 디스크립터 OS에는 시스템 콜을 통해서 저 수준(Low-Level) 차원에서 파일 입출력을 지원을 할 수 있게 해준다. 즉 ANSI의 표준 함수가 아니라 OS차원에서 지원해주는 것이기 때문에 타 OS에 대한 호환성은 없다. 예로 들어 linux에서 제공하는 시스템 콜을 사용해서 개발을 한다면, windows에선 빌드가 되지 않을 가능성이 높다는 것이다. 리눅스는 네트워크에서 사용하는 소켓도 일종의 파일처럼 간주를 한다. 즉 소켓이 생성된 메모리 공간도 파일처럼 관리를 진행하는데, 리눅스에서는 프로그램이 파일을 사용할 때 파일 디스크립터라는 일종의 숫자를 이용해서 이를 관리한다. 대표적인 파일 디스크립터는 다음과 같다. 저 수준에서 입출력을 진행하려면 이 파일 디스크립터를 요구한다., 즉 저 수준 파일 입출력 함수는..
[OS/네트워크] 네트워크 프로그래밍 1. 네트워크 프로그래밍? 네트워크 프로그래밍은 네트워크를 통해서 연결된 둘 이상의 컴퓨터 사이에 데이터 송수신 프로그램 개발을 하는 것. 이때 소켓이라는 단위를 기반으로 프로그래밍 하는 것이기 때문에 소켓 프로그래밍이라고도 한다. 2. 소켓? 소켓은 네트워크에 연결하기 위한 연결 도구로써, OS가 제공하는 소프트웨어적인 디바이스라 보면 된다. 소켓을 이용하면 프로그래밍을 할 때 개발자가 데이터 송수신에 대해서 HW/SW적인 세세한 내용을 신경쓰지 않아도 된다는 장점이 있다. 소켓은 일종의 전화기로 비유가 가능하다. 먼저 프로그램은 socket 함수를 호출해서 이 소켓을 생성할 수 있다. 단 전화를 거는 용도와 받는 용도의 소켓 생성 방법은 다르다. 여기서 우리가 게임이나 그외 소프트웨어를 사용하다보면 ..
[DirectX 12] 렌더링 파이프라인 컴퓨터가 오브젝트 즉 도형을 표현하기 위해 사용하는 기본 단위 1. 점 2. 선 3. 삼각형(면) 특히 모든 면은 삼각형으로 표현이 가능하기 때문에, 이 삼각형이 많아질수록 연산이 많아지지만, 세밀한 표현이 가능하다. CPU와 GPU의 차이 CPU는 복잡한 연산을 잘하고 뛰어난 기억력을 가진 고급 인력(Control, ALU, Cache, DRAM), GPU는 ALU가 대부분을 차지하는 계산기가 단순히 병렬적으로 계산만을 위한 집단. 연결되는 연산, 연관성이 있는 연산은 CPU가 알맞다.(파이프라인), 그 외 단순히 연관성이 없는 단순 연산들은 GPU에 더 알맞다. 게임에서 오브젝트들은 독립적인 경우가 많기 때문에 병렬적인 특성을 가진 GPU가 연산을 하는 것이 좀 더 올바른 감이 있다. 먼저 GPU는 ..
[OS] CPU 스케쥴링 CPU 스케쥴링 멀티프로그래밍 상에서는 CPU는 순서에 대한 규칙을 가지는 것은 필수! 이러한 CPU의 이용률을 최대화하는 것이 목적! 메모리에 적재된 프로세스들 사이에서 프로세스를 선택하는 것 - 실행을 ready 단계에 있거나 CPU가 프로세스에 할당된 애들만! 다음 프로세스를 정하는 데 규칙을 어떻게 둘 것인가? - 프로세스들을 링크드리스트? 이진 트리 방식으로 순서를 처리할까? - FIFO(First In First Out) : 먼저 온 프로세스가 먼저 나간다. - 우선순위 큐 : 규칙?! 프로세스의 우선순위를 두는데 필요한 규칙을 정해줘야 한다. 선점 VS 비선점 방식 비선점 방식 스케쥴링 CPU가 대기 상태나 종료상태가 되기 전까지 실행중인 프로세스를 계속 유지하는 방식 선점 방식 스케쥴링 스..
[C#, OS] Monitor C#에는 다양한 Race condition을 막기 위한 도구들이 존재한다. 예로 들면 메모리 배리어나 Interlocked가 있다. 하지만 메모리 배리어는 데드락을 막을 수 없으며, Interlocked는 정수 타입만 막아줄 수 있다는 점이다. 그리고 코드는 점점 길어지면 이런 코드들에 임계 지역을 설정해주기 힘들어진다. 그렇기 때문에 나온 물건이 바로 Monitor이다. 사용법은 다음과 같다. 먼저 오브젝트를 하나 생성한다. object _obj = new object(); 그 다음에 atomic(원자성)을 요구하는 코드 블럭이 있다면 다음과 같이 코드를 작성한다. Monitor.Enter(_obj); // 임계지역 시작 ... 코드 블럭 ... Monitor.Exit(_obj); // 임계지역 끝 이..
[OS] 쓰레드 쓰레드 프로세스는 하나의 제어를 위한 쓰레드로 돌아가는 실행중인 프로그램 하지만 현대의 OS같은 경우에는 제어를 위해서 n개의 쓰레드로 돌아간다. 그럼 쓰레드가 뭔데? 경량화된 프로세스 -> CPU의 이용을 하는데 있어서 기본적인 단위! 쓰레드도 ID가 있고 PC(Program Counter), 레지스터 셋, 스택 메모리 공간을 할당받는다. 사용 예시)웹서버 멀티 스레딩 프로그래밍의 장점 1. 반응성이 높아진다. -> 실행을 지속시키는 것이 가능하다. 2. 자원의 공유성 -> 스레드는 프로세스의 자원 공간을 어느 정도 공유를 하기 때문에, 메모리-공유나 또는 메세지 패싱같은 것이 더 간단해진다. 3. 경제성 -> 컨텍스트 스위칭을 하는데 드는 값이 멀티 프로세싱보다 싸다. (오버헤드가 적다) 4. 확장성..
[OS] 프로세스 간 통신 프로세스 통신! 2개 이상의 프로세스가 동시에 실행중이라고 가정을 해봅시다. 동시에 이 프로세스들은 독립적인 프로세스 / 협력적인 프로세스 독립적인 프로세스 : 딱히 데이터를 주고받지 않는 즉 공유하지 않는 경우 협력적인 프로세스 : 데이터를 공유하는 프로세스 다른 프로세스의 영향을 받거나 반대로 영향을 줄 수 있다. 그리고 이 과정에서 다른 프로세스와 데이터를 공유를 할 것이다. IPC(Inter-Process Communication) : 프로세스 간 통신 협력적인 프로세스는 IPC 메커니즘이 필요하다! 즉 이 말은 데이터를 교환할 수 있게 해주고, 이 과정에서 수신 데이터와 송신 데이터가 생긴다는 뜻이다. IPC 방법으로는 크게 두가지 방법 1. shared memory : 메모리 공간을 따로 두고..