전체 글

개발은 좋은데 뭘로 개발할까
CS/컴퓨터 네트워크

[컴퓨터 네트워크] 17. Transport Layer (3) : rdt의 개념과 발전 (rdt 2.0 ~ rdt 2.2)

rdt 개념TCP는 신뢰성을 보장하는 프로토콜이다.TCP에 대해 정리하기 전에 사전 개념으로서 rdt에 대해 정리한다. rdt는 reliable data transfer 의 줄임말이다.즉, 신뢰성있는 데이터 전송을 어떻게 할 수 있는지에 대한 개념이다.  이 그림을 보자.어플리케이션에서 데이터를 만들어 transport 계층으로 보낸다.그러면 transport 계층에 있는 프로토콜을 거쳐 네트워크 계층을 통해 데이터가 전송된 후 receiver 가 transport 계층을 거쳐 데이터를 받는다. 그런데 네트워크 계층을 포함한 그 밑의 데이터 전송 과정은 unreliable 하다.unreliable 하다는 말은 보내는 중간에 데이터가 사라지거나(loss), 훼손되거나(corrupt..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 18. Transformation (6) - View Change (VCS)

이번 글에서는 시점 변환에 대해 정리하려고 한다. 시점 변환은 주어진 그림에서 카메라의 위치를 이리저리 옮기는 것을 말한다. 카메라의 위치 정보를 설정하는 좌표계는 View Coordinate System (VCS, 시점좌표계) 이다. 따라서 시점을 옮기는 행위는 VCS이 변환되는 것을 의미한다. 이를 위해 사용하는 행렬이 뷰 행렬이다. (그런데 GL에서는 Model 행렬과 View 행렬을 합해서 하나의 행렬로 취급한다고 한다.) 그렇다면 뷰 행렬은 어떻게 구할까? 위 이미지에서 보는 것이 뷰 행렬을 구하는 것과 관련되어 있다. 결국 우리가 원하는 것은 VCS를 구하는 것이다. 즉, VCS의 x, y, z 축을 결정하고, 이 축을 기준으로 기존 정점을 새롭게 표현하는 것이다. 이는 아래와 같은 방식으로 ..

CS/컴퓨터 구조

[컴퓨터 구조] 14. Single Cycle MIPS - 회로 정리 & ALU

앞에서 Fetch - Decode - Execute 순으로 회로를 점차 개선하는 과정을 보였었다. 이번에는 이를 한번에 정리해서 명령어별로 어떤 데이터 패스를 통해 실행되는지 정리하려고 한다. 그리고 ALU 가 연산자별로 연산을 택하는 그 구체적인 과정도 함께 정리한다. lw 명령어 실행하기 fetch lw 명령어를 실행하는 과정을 하나씩 그려보자. 먼저 명령어를 가져올 메모리와, PC 레지스터가 필요하다. 다음과 같이 그렸다. 이제 메모리에서 읽어온 명령어를 decode 해야한다. decode 읽어온 명령어의 31:26 비트를 보고 opcode를 파악해서 lw 명령어임을 파악한다. 25:21 비트를 reg file 의 ra에 전달해서 base address 주소를 가져온다. 다음으로는 15:0 비트를 ..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 17. Transformation (5) - Projection & Perspective Normalization

투상 (Projection) 3D 물체를 2D 평면에 사상하는 것을 말한다. 지난 글까지 각종 행렬 변환을 통해 ' Model 좌표계 → World 좌표계 → View 좌표계 ' 까지 변환했다면 이렇게 변환된 좌표계 위에 놓인 3D 물체를 2차원 화면에 사상하는 과정이다. 먼저 용어부터 정리하자. 1. 투상면, View Plane = Projection Plane 화면에 그리기 전 최종 변환된 좌표계 위 3D 물체를 투상하는 2D 화면을 의미한다. 물체 영상이 이 곳에 맺힌다. 2. 관찰자 위치, View Point, Eye Position, Camera Position 투상의 기준은 관찰자의 위치로부터 결정된다. 이 위치를 '시점 좌표' 라고 한다. 3. 투상 중심 (COP = Center Of Pro..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 16. Transport Layer (2) : UDP

UDP user datagram protocol RFC 768 에 정의된 매우 오래된 프로토콜이다. 트랜스포트 계층이지만, 네트워크 계층에서 포트만 더해주기 때문에, 데이터그램이라는 네트워크 계층 전송단위를 그대로 사용하기도 한다. 네트워크 계층과 동일한 서비스 모델을 제공한다. 따라서 UDP 세그먼트는 중간에 유실되더라도 복구하거나 재전송하는 서비스는 없다. send 순서와 receive 순서가 동일하다는 보장도 하지 않는다. UDP 장점 1. connectionless 미리 연결을 설정할 필요가 없어서 오버헤드 시간이 절약된다 연결 설정이 없다는 말은, 같은 목적지로 보내는 같은 내용의 세그먼트도 모두 독립적으로 여긴다는 특징이 있다. TCP와 달리 RTT 딜레이가 없다. 2. stateless se..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 15. Transport Layer (1) : 트랜스포트 계층 개요

Transport Layer가 제공하는 서비스 트랜스포트 계층은 어플리케이션 계층과 네트워크 계층 사이에 존재한다. 1장에서 공부했던 레이어 개념을 다시 생각해보면, 트랜스포트 계층은 네트워크 계층이 제공하는 서비스를 이용하여 어플리케이션 계층에 서비스를 제공한다고 볼 수 있다. 그렇다면 트랜스포트 계층은 어떤 서비스를 제공해야 할까? 간단히 말해서 process to process 커뮤니케이션 기능을 제공한다. 프로세스와 프로세스가 통신하기 위해서는 그 프로세스가 실행되는 컴퓨터와 컴퓨터 사이 통신이 제공되어야 하는데, 이 서비스는 네트워크 계층에서 제공한다. 또는 이 서비스를 logical communication 이라고도 한다. 서로 다른 두 호스트 사이에 어플리케이션 프로세스가 존재하는데, 그 프..

CS/컴퓨터 구조

[컴퓨터 구조] 13. Single Cycle MIPS - Execute

MIPS CPU의 Execute 단계가 어떻게 실행되는지 명령어의 기능에 따라 구분하여 정리하였다. 산술/논리 연산자 실행 add, sub, addi, or, and 와 같은 명령어를 실행하는 과정을 먼저 생각해보자. 우선 위 연산을 실질적으로 실행하는 유닛은 ALU 라는 유닛이 수행한다. 산술 연산과 직접적으로 관련된 명령어 포맷은 R 포맷과 I 포맷 밖에 없다. R 포맷은 모든 피연산자가 레지스터고, 연산 결과가 레지스터로 들어간다. I 포맷은 피연산자가 하나는 레지스터, 하나는 상수고, 연산 결과가 레지스터로 들어간다. 우선 피연산자 하나는 반드시 레지스터에서 오고, 연산 결과는 레지스터로 들어가는 것이 동일하므로 아래와 같이 그릴 수 있다. 이제 결정해야 하는 것은 R 포맷이면 레지스터로부터 AL..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 14. Application Layer (7) : Socket Programming

소켓 소켓은 인터넷 어플리케이션을 개발할 때, 4계층이 제공하는 서비스를 이용할 수 있는 일종의 API 이다. 소켓을 이용하면 클라이언트 / 서버 어플리케이션을 만들 수 있다. 그리고 멀리 떨어진 두 프로세스는 소켓을 이용해서 서로 통신할 수 있다. 소켓을 사용하면 어플리케이션 계층에서 짤 비즈니스 로직에만 집중하고, 데이터가 어떻게 전송되는지는 신경쓰지 않아도 된다. 소켓에는 크게 UDP 소켓과 TCP 소켓이 있다. UDP, TCP는 4계층의 프로토콜로, UDP는 신뢰성을 보장하지 않지만, 빠르고 가벼운 프로토콜이고 TCP는 경우에 따라 느려지기도 하고 무겁지만, 신뢰성을 보장해주는 byte stream-oriented (바이트 단위 전송) 프로토콜이다. 바이트 단위 전송이라는 뜻은 TCP가 어플리케이..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 16. Transformation (4) - 셰이더에 행렬 변환 적용하기

이번 글에서는 셰이더에 행렬 변환을 적용해보려고 한다. 이 예제로 한번 사람의 팔과 비슷하게 동작하는 프로그램을 작성해보려고 한다. 키보드를 눌러 각도를 조작하면 팔이 회전할 수 있다. 팔의 회전은 상박따로, 하박 따로 회전한다. 기본 코드 틀 #include #include #include "Shader.h" #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #include #include #include float vertice[] { -0.3, -0.2, 1.0, // left - bottom +0.3, -0.2, 1.0, // right - bottom -0.3, +0.0, 1.0, // left - top +0.3, +0.0, 1.0, // ri..

CS/컴퓨터 구조

[컴퓨터 구조] 12. Single Cycle MIPS - Decode

MIPS Decode 회로 지난 글에 이어 MIPS의 Decode 회로를 설계해보자. Decode 과정은 명령어를 해석하는 과정이다. 명령어를 실행하려면 크게 2가지 정보를 알아야 한다. 1. 무슨 명령어인가? ( = 연산자 정보) 2. 무엇을 가지고 실행하는가? ( = 피연산자 정보) MIPS 명령어는 포맷별로 아래와 같은 형태를 갖추고 있다. 3가지 포맷은 모두 공통적으로 6bit 크기의 opcode 필드를 갖고 있다. 이 opcode를 통해서 지금 주어진 명령어가 어떤 명령어인지 식별한다. R 포맷은 opcode 에 더해 function 필드 정보를 조합하여 실행할 명령어를 식별한다. 그리고 opcode 와 funct 를 제외한 나머지 필드가 모두 피연산자로서 활용하는 필드가 된다. 우선 J 포맷은..

에버듀
Blog. 에버듀