일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DirectX12
- codility
- 알고리즘
- 렌더링 파이프라인
- 스케줄링
- 다이나믹 프로그래밍
- 컨디션 변수
- I/O장치
- 병행성 관련 오류
- 동적계획법
- 영속성
- 병행성
- 타입 객체
- 운영체제
- 파일시스템 구현
- 락
- directx
- 백준
- 멀티쓰레드
- 프로그래머스
- Direct12
- 다이나믹프로그래밍
- OS
- 자료구조
- 그리디 알고리즘
- 그리디알고리즘
- DirectX 12
- 디자인패턴
- 멀티프로세서
- 쓰레드
- Today
- Total
목록분류 전체보기 (500)
기록공간

이번 장에서는 프로세스를 위한 새로운 개념인 쓰레드(thread)를 소개한다. 프로그램에서 한 순간에 하나의 명령만을 실행하는 고전적인 관점에서 벗어나 멀티 쓰레드 프로그램은 하나 이상의 실행 지점(독립적으로 실행 가능한 Program Counter값)을 가지고 있다. 멀티 쓰레드와 프로세스의 차이가 있다면 주소 공간을 공유하기 때문에 동일한 값에 접근할 수 있다. 하나의 쓰레드 상태는 프로세스의 상태와 매우 유사하다. 쓰레드는 프로그램 카운터(PC)와 연산을 위한 레지스터들을 가지고 있다. 만약 두 개의 쓰레드(T1, T2)가 하나의 프로세서에서 실행 중이라면 실행하고자 하는 쓰레드(T1)는 반드시 문맥 교환(context switch)을 통해서 실행 중인 쓰레드(T2)와 교체되어야 한다. 문맥 교환은..

입력 조립기 단계(Input Assembler, IA) 입력 조립기 단계는 메모리에서 기하 자료(정점, 인덱스)를 읽어서 기본 도형(삼각형, 선분 등)을 조립한다. 정점(Vertex) 수학적으로, 한 삼각형의 정점은 두 변이 만나는 점이다. 선분의 경우 선분의 양 끝점이 정점이고, 하나의 점의 경우에는 그 점 자체가 정점이다. Direct3D의 정점은 본질적으로 공간적 위치 이외의 정보도 담을 수 있으며, 이를 통해 좀 더 복잡한 렌더링 효과를 낼 수 있다. 예를 들면, 조명을 구현하기 위해 정점에 법선 벡터(normal vector)를 추가하며, 텍스처 적용을 위해 정점에 텍스처 좌표를 추가한다. 또한 Direct3D는 응용 프로그램이 자신만의 정점 형식을 정의할 수 있는(성분들을 직접 정의할 수 있는..
이런저런 메모리 문제를 피하기 위해서는 기존 C언어 스타일의 일반 포인터 대신 스마트 포인터를 사용해야 한다. 스마트 포인터는 객체에 유효한 스코프가 더 이상 없을 때(함수의 리턴 등으로 스코프를 벗어날 때) 자동으로 메모리를 해제한다. C++ 스마트 포인터는 세 종류가 있다. std::unique_ptr, std::shared_tr, std::weak_ptr로 모두 헤더 파일에 정의되어 있다. unique_ptr은 보통의 포인터와 비슷하나 스코프를 벗어날 때 자동으로, 또는 명시적으로 delete가 수행될 때 메모리를 해제하는 것에 차이가 있다. unique_ptr을 이용하면 예외 상황이 발생하였을 때 메모리 해제를 단순하게 할 수 있다. unique_ptr은 객체뿐만 아니라 C 스타일 배열을 넣을 수..

우리가 사용하는 컴퓨터의 모니터는 평면이다. 홀로그램이 아닌 이상은 직접 3차원의 세계를 모니터에 그대로 구현할수 있는 방법은 없다. 카메라에 비친 3차원 장면을 2차원 이미지로 생성하는 데 필요한 일련의 단계들을 렌더링 파이프라인(rendering-pipeline)이라고 부른다. 위 그림에서 왼쪽 이미지는 3차원 세계에 배치된 물체들과 그것을 바라보는 카메라를 옆에서 본 모습이고, 중간 이미지는 위쪽에서 바라본 모습이다. 그리고 오른쪽 이미지는 카메라 시점에서 바라본 3차원 세계를 2차원으로 만들어낸 모습이다. 3차원의 환상 3차원 그래픽을 살펴보기 전에 간단하지만 중요한 질문 하나에 답할 필요가 있다. 바로, "3차원 세계의 깊이와 부피를 어떻게 평평한 2차원 모니터 화면에 나타낼 것인가?"라는 질문..

그래프란? 그래프(Graph)는 요소들이 서로 복잡하게 연결되어 있는 관계를 표현하는 자료구조이다. 예를 들어, 지하철 노선도는 많은 역들이 어떻게 연결되어 있는지를 알려주며, SNS의 인맥 지도는 사람들의 복잡한 친구 관계를 표현한다. 그래프로 표시된 지도를 이용해 어떤 도시에서 다른 도시로 갈 수 있는 가장 가까운 경로를 찾을 수도 있다. 그래프는 선형 자료구조들이나 트리보다 더 일반화 된 자료구조를 제공하고 많은 분야에서 널리 사용하고 있다. 이와 같은 예들은 공통적으로 다양한 객체들이 서로 연결되어 있는 구조를 갖는다. 그래프는 이런 구조를 표현할 수 있는 훌륭한 논리적인 도구이다. 그래프의 역사 그래프는 수학자 오일러(Euler)에 의해 처음 창안되었다. 오일러는 위 그림과 같은 지형에서 "모든..

빈 메모리 공간이 거의 없는 경우 운영체제는 메모리 압박을 해소하기 위해 다른 페이지들을 강제적으로 페이징 아웃(paging out)하여 활발히 사용 중인 페이지들을 위한 공간을 확보한다. 내보낼 페이지 선택은 운영체제의 교체 정책(replacement policy) 안에 집약되어 있다. 과거의 시스템들은 물리 메모리의 크기가 작았기 때문에 초기 가상 메모리 시스템의 가장 중요한 역할 중 하나가 교체 정책이었다. 다양한 교체 정책들을 통해 내보낼 페이지는 어떻게 결정하는지에 대해 알아보도록 하겠다. 캐시 관리 정책에 대해 설명하기에 앞서서 해결하고자 하는 문제에 대해서 좀 더 상세히 알아보자. 전체 페이지들 중 일부만이 메인 메모리에 존재하는 경우, 메인 메모리는 시스템의 가상 메모리 페이지를 가져다 놓..

"객체별로 한 프레임 단위의 작업을 진행하라고 알려줘서 전체를 시뮬레이션한다." 우리는 플레이어가 되어 보석을 훔치는 퀘스트를 진행하고 있다 가정해보자. 보석은 오래전에 죽은 왕의 유골에 놓여 있다. 플레이어는 왕의 장엄한 무덤 입구로 다가갔고, 함정이 있었지만 공격을 받지 않았다. 또한 언데드 전사는 입구를 지키고 있지 않았다. 그냥 무덤으로 들어가 보석을 가져왔다. 게임은 끝났고, 플레이어는 퀘스트를 완료했다. 뭔가 이상하지 않은가? 무덤에는 무찔러야 하는 경비병이 지키고 있어야 한다. 해골 병사를 되살려 문 주위를 순찰하게 만들자. 코드를 간단하게 만들면 다음과 같을 것이다. while(true) { // 오른쪽으로 간다. for(double x = 0; x < 100; ++x) { skeleton..

"게임 시간 진행을 유저 입력, 프로세서 속도와 디커플링한다." 게임 루프 패턴은 모든 게임에서 사용하며, 어느 것도 서로 똑같지 않고, 게임이 아닌 분야에서는 그다지 쓰이지 않는다는 점에서 전형적인 '게임 프로그래밍 패턴'이다. CPU와의 인터뷰 과거의 프로그램은 한참 기다려야 결과를 볼 수 있었다. 이를 배치 모드 프로그램이라고 한다. 프로그램은 모든 작업이 끝나면 멈췄다. 그렇기 때문에 과거 프로그래머들은 컴퓨터실에 가서 코드를 밀어 넣으면 결과가 나올 때 까지 몇 시간 기다리는 식으로 디버깅이 오래 걸렸다. 즉각적인 피드백을 원했던 프로그래머들은 대화형 프로그램을 만들었다. 초기 대화형 프로그램 중에는 게임도 있었다. 당신은 작은 벽돌 건물 앞 막다른 길에 서 있다. 주변에는 숲이 있다. 작은 물..