분류 전체보기 131

[ARCH]#Cache Memory, Meltdown & Spectre

지난 단락에서 CPU 내부 구성을 이루는 ALU, Control Unit, Register 에 대해서 알아보았다. 이번 단락에서는 캐시 메모리와 CPU 의 특성, 그에 따라 발생할 수 있는 위험을 알아보려한다. 먼저 캐시 메모리에 대해서 알아보자. * 캐시 메모리 ( Cache ) 캐시 메모리 ( 나무위키 ) 캐시 메모리는 보통 RAM 보다 CPU 가까운 곳에 위치한다. RAM 이 기억장치로서의 역할을 하고 있는데 굳이 옆에 따로 캐시 메모리를 놓아야하는 이유는 무엇일까 ?? RAM 에서 데이터를 가져오는 속도가 CPU 클럭를 못 따라가기 때문이다. 그렇다면 RAM 에서 데이터를 가져오는 속도를 높일 필요가 있는데 이는 비용과 다른 문제를 야기한다. 일반적으로 RAM 내부에서 bit 를 저장하는데 사용되..

[ARCH]#CPU ( Central Processing Unit )

* CPU ( 중앙 처리 장치, Central Processing Unit ) CPU 링크 ( 나무위키 ) CPU 구조와 원리 ( 나무위키 ) 컴퓨터의 두뇌라고 많이 불리는 CPU 는 실리콘으로 이루어진 반도체, 트랜지스터의 집합체이다. 머리카락보다 작은 트랜지스터들이 모여 만들어진다. CPU 를 이루는 주요 부품은 ALU, Control Unit, Ragister 가 있다. 대략적으로 CPU 가 하는 일을 살펴보면 메모리에 있는 실행될 프로그램의 코드를 읽어와 명령어를 해석하고 그에 필요한 계산이나 메모리에 적재하는 등의 일을 수행한다. 보통 이러한 작업이 한 번 수행되는 시간을 'CPU 클럭' 이라고 말하고 빠를수록 좋다. 더불어 'IPC ( Instruction Per Cycle )' 란 개념도 존..

@DLL 동적 라이브러리 만들기

컴파일, 링킹 과정을 정리하다가 동적 라이브러리를 만들어보는 예제가 있어서 만들어보고 간단히 정리해보고자 글을 쓴다. ( MSDN 연습 : 자체 동적 연결 라이브러리 만들기 및 사용 C++ 를 참고했다. ) 동적 라이브러리를 만드는 과정은 참고된 링크에 자세히 설명되어있다. 해당 동적 라이브러리 프로젝트 빌드 시, dll 파일이 생성된다. dll 파일은 '윈도우 운영체제' 에서 동적 라이브러리를 적용하기 위해 만든 파일의 확장자 명이다. 리눅스 환경에서는 .so 라는 확장자 명을 사용한다. * 동적 라이브러리 컴파일 시, 라이브러리가 프로그램 안에 내장되어지는 정적 라이브러리와는 달리, 동적 라이브러리는 프로그램 실행 후 운영체제에 부여받는 가상 메모리 위에 올려진다. 운영체제에 의해서 지정된 페이지로 ..

[ARCH]#트랜지스터

* 트랜지스터 트랜지스터 링크 ( 위키 ) CPU 를 알아보기에 앞서서 CPU 를 이루고 있는 수억개의 부품, 트랜지스터의 원리에 대해서 알아보고자 한다. 트랜지스터가 하는 가장 중요한 역할은 '전류를 흐르거나 흐르지 않게 할 수 있는 기능' 이다. 이 기능이 어떻게 수행되는지 간단하게 알아보자. 트랜지스터에는 BJT, MOSFET 등 다양한 종류가 있다. 그 중에서 우리는 먼저 간단하게 'BJT ( Bipolar junction Transistor )' 종류인 NPN, PNP 트랜지스터를 알아볼 것이다. 우선, 트랜지스터는 반도체 3개를 결합해 만들어진 요소이다. 반도체를 이루는 실리콘은 14족 원소로 최외각 전자가 4개라고 한다. 이것이 중요한 이유는 원자핵과의 결합력이 가장 약하기 때문에 원자핵의 ..

[Math]이항 정리

* 이항 정리 이항 정리 링크 ( 위키 ) 이항 정리란 이항식의 거듭제곱을 이항 계수로 일련의 단항식들의 합으로 전개하는 정리이다. 위 그림처럼, ( x + y ) 인 이항식을 연속적으로 곱할 때 몇 번 곱했는지 n 만 알 수 있으면 쉽게 해당 식을 전개할 수 있음을 의미한다. 자세히 들여다보면 어느 일정 규칙을 가진 패턴을 보임을 짐작할 수 있다. 이는 전개되는 식에서 n (시그마) k = 0 으로 ( n k ) 조합을 합한 수열로 나타낼 수 있는데 전개될 때의 계수들을 조합으로 알 수 있음을 뜻한다. ( 첫번째 그림에서 마치 열행렬을 나타내는 (n k) 기호는 조합을 의미한다. nCk 와 같은 의미이다. ) 이를 '이항 계수' 라고 한다. * 이항 계수 이항 계수 링크 ( 위키 ) 앞서 설명했듯이, ..

[Math]순열 & 조합

* 순열 순열 링크 ( 나무위키 ) 순열이란 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게선택하는 혹은 나열하는 것을 '순열(permutation)' 이라고 한다. 예시로 카드를 고르는 상황이 나와있다. 첫번째에서 A,B,C,D,E 중 하나를 고르고 두번째에선 고른 카드를 뺀 나머지를 다시 선택할 수 있을 것이다. 이 상황에서 경우의 수를 구해보면 첫번째 상황은 5 가지의 경우의 수, 두 번째 상황은 4가지의 경우의 수.... 결과로써 5 * 4 * 3 * 2 * 1 = 5! ( factorial ) 이 구해진다. 한 단계 더 나아가서 A,B,C,D,E 5장 카드를 모두 고르는 것이 아닌 2장의 카드만 고른다면 경우의수는 5*4 = 20 이 될 것이다. 카드의 개수를 n, 고르는 카드 개수를..

[DX]##. 애니메이션 ( Animation )

* 애니메이션 ( ANIMATION ) 게임에서의 애니메이션은 어떻게 표현될까 ?? 그전에 사람이 정점으로 3D 에서 어떻게 표현되는지 알아보자. 게임 엔진에서 애니메이션을 실행하거나 Mesh 를 보면 많은 점들로 이루어진 사람 모양의 형태를 볼 수 있다. 흔히 이런 골격 표현을 "Skeleton" 이라 부르고 뼈에 해당하는 부위를 "Bone" 이라 부른다. * Skeleton 위 그림처럼 흔히 대자로 뻗은 사람 모형 Skeleton 을 형상할 때, "T-Poze 혹은 Bind Poze" 라고 부른다. 이 모형을 기준으로 우리는 골격을 이루는 뼈마다 해당 부분을 정점이라 생각하고 이 점들을 움직임으로써 인간 형태의 애니메이션을 적용할 수 있다. 이것은 컴퓨터에 정점을 표현해 어떤 물체를 그려내야하는 우리..

DirectX/개념 2022.12.28

[DX]##3. 원근 투영 ( Perspective Projection )

*Clip Space 대표적인 투영 방법으로는 원근 투영 / 직교 투영 이 존재한다. 이번 단원에서 원근 투영에 대해서 알아보자. *원근 투영 ( Perspective projection ) 원근법 ( 위키 ) 원근법에 대한 기본적인 방식은 먼 거리에 있는 물체가 더 작게 보이게 2D 화면에 나타내는 방식이다. 일반적인 예시로 원근법을 적용한 그림들을 쉽게 찾아볼 수 있다. 원근법을 적용한 그림들의 공통점은 '소실점의 존재' 이다. 이 소실점을 기준으로 일정 각도만큼의 직선들을 나란히 그리게되면 실제로 소실점에 가까운 부분들은 멀어보이게 되는 시각적 효과를 가져온다. 하지만, 3D 컴퓨터 환경에서 원근법을 적용하기 위해선 실제 그림에서 적용되는 방식과는 조금 다르다. 결론은 3D Rendering 에서는..

DirectX/개념 2022.12.16

[NW]#13. TCP 혼잡 제어 ( TCP Congestion Control )

* TCP 혼잡 제어 TCP 혼잡 제어 ( 위키 ) TCP 혼잡 제어 ( 정보통신기술용어해설 ) TCP 에서의 제어 (=Control) 란 용어는 앞 단원에서 설명했듯이, 어떤 상황을 고려해 자신의 데이터를 통제한다는 의미이다. 한마디로 혼잡제어는 '전체 네트워크 상황을 고려한 통신 방식' 이라고 볼 수 있겠다. 여기까지만 들었을 때 궁금한 부분은 크게 2가지 정도일 것이다. 1. 어떻게 전체적인 네트워크 상황을 고려할 수 있을까 ?? 2. 상황이 나쁘다면 어떻게 자신의 데이터를 통제할까 ?? 1번 질문에 대한 답은 이제까지 배운 것으로 대답할 수 있겠다. 네트워크 상황을 감지하는 곳이 End-point 이라 가정할 때, 해당 종단 기준으로 패킷 전송을 보냈지만 전송 패킷이 유실되거나 상대 측에서 보낸 ..

네트워크/개념 2022.12.12