프로그래밍 공부

전체 글 700

카테고리 설명
프로그래밍 공부하는 블로그
  • 정의소켓(Socket)은 OS커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스 이다.장치 파일의 일종 으로 이해할 수 있다.일반파일에 대한 개념이 대부분 적용된다. 소켓과 파일의 유사성소켓 = 파일이다 라고 생각하면 된다. 소켓은 파일과 같은 방식으로 취급될 수 있다. 소켓은 프로세스를 주체로 하여 다음과 같은 작업을 수행할 수 있다.일반적으로 우리가 파일에 사용하는 행위들인 열기, 쓰기, 생성, 삭제 등을 할 수 있다. 이러한 대상체 파일에 TCP소켓에 대한 추상화된 인터페이스를 제공하면, 이를 TCP소켓이라고 할 수 있다.이때, TCP상에서는 파일과 다르게 쓰기와 읽기를 다음과 같이 표현한다. Write -> SendRead -> Receive 데이터 단위와 스트림소켓에서 데이터를 Sen..

    Win32서버

    Socket NEW

    2024.07.25
    댓글
  • 개념스레드 란? CPU의 1개당 실행단위 를 이야기한다. 한개의 프로세스(프로그램... 이라고 표현하면 잘못된 것 이긴 하지만, 대략적으로) 마다 최소 1개 이상의 Thread를 가질 수 있다. 작업을 시작하려면 작업공간과 인부를 가져야 한다고 이해하자. 여기서 작업공간은 메모리(램또는 SSD같은것) 이고,인부는 CPU라고 생각하면 된다. 정리하면 다음과 같다.한 Process는 최소 1개 이상의 Thread를 갖는다.( Memory 와 함께 )즉, 한 Process는 [ CPU + Memory ] ( VMS 버추얼 메모리 ) 를 가진다.Thread는 개별화된 흐름(문맥)이다. int main()함수가 n개(스레드 개수만큼) 있다고 생각하면 된다.전용 스택을 갖는 실행의 단위이다.1MB가량의 콜스택 메모..

    Win32서버

    Win32 스레드 NEW

    2024.07.22
    댓글 3
  • 개요두개 이상의 프로세스 , 스레드가 공유자원을 동시에 사용하려고 진행하려고 할 때 발생하는 현상을 말한다.예시 T1과 T2가 동시에 Input에 접근한다고 가정하자. 우리는 항상 일정한 결과를 얻고싶지만, T1과 T2가 동시에 메모리에 접근해서 1이나 2를 때려박는 상황이다. T2는 뭐가있던 2로 바꿔버리고, T2는 뭐가있던 1로 바꿔버리는 상황일 때. 누가먼저 데이터를 집어넣는지 알 수 없을 때 우리는 Out이 뭐가 나타날지 알 수가 없다. 또, 메모리를 처리하고 종료 할 때 비정상적으로 종료된다면 메모리의 데이터영역관리가 엉망진창이 되어버릴것이다. 이렇게 공유메모리를 동시에 접근하려고 하는 문제가 레이스컨디션 문제이다.

  • ImageAiCon PP진행중Unreal ImageRetargeting 코드제작TCP방식으로 데이터 통신처리를 진행1. 서버커넥팅을 위한 TCP프로토콜 제작중...테스트 진행중.클라이언트 접속 프로그램 제작중  서버 Open성공이제 Connect 용 클라이언트 제작만 하면된다!진행 예정 작업Unreal ImageRetargeting 코드제작언리얼 함수 상으로 지정된 카메라의 타겟뷰를 이미지값으로 저장 반환하는 방식이 존재함.TCP방식으로 데이터 통신처리를 진행TensorFlow를 사용하여 전달받은 이미지로 학습 알고리즘 연산.연산결과를 다시 언리얼로 전달하여 학습된 데이터를 갱신.4번과 3번을 반복학습결과확인 후 재학습 5와 6을 원하는 AI행동패턴이 나타날때까지 반복목표TensorFlow를 사용하여 알..

  • https://youtu.be/ttw--9QFiw4

카테고리
작성일
2024. 7. 25. 17:02
작성자
WDmil
728x90

정의

소켓(Socket)은 OS커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스 이다.

장치 파일의 일종 으로 이해할 수 있다.

일반파일에 대한 개념이 대부분 적용된다.

 

소켓과 파일의 유사성

소켓 = 파일이다 라고 생각하면 된다.

 

소켓은 파일과 같은 방식으로 취급될 수 있다. 소켓은 프로세스를 주체로 하여 다음과 같은 작업을 수행할 수 있다.

일반적으로 우리가 파일에 사용하는 행위들인 열기, 쓰기, 생성, 삭제 등을 할 수 있다.

 

이러한 대상체 파일에 TCP소켓에 대한 추상화된 인터페이스를 제공하면, 이를 TCP소켓이라고 할 수 있다.

이때, TCP상에서는 파일과 다르게 쓰기와 읽기를 다음과 같이 표현한다.

 

Write -> Send

Read -> Receive

 

데이터 단위와 스트림

소켓에서 데이터를 Send와 Receive하는 과정에서 정의되는 단위를 데이터단위, 스트림 이라고 표현하는데, 이 설명은 다음과 같다.

 

계층별 데이터 단위

  • L4 : Segment
  • L3 : Packet

스트림과 세그멘테이션

 

네트워크상에서 데이터를 보낼 때 Steam과 Sagmentation으로 구분할 수 있는데, 이는 다음과 같이 이해하면 된다.

  • 정보 한조각 = 패킷

  • 조각단위 가 여러개 길게 묶여있는것 = 스트림
    여러개의 세그먼트로 구성된 데이터 흐름을 의미

  • Segmentation 세그멘테이션 : 데이터의 긴 열을 일정단위로 자르는걸 의미한다.
  • Sagmentation 세그먼트 : 그러한 잘려진 조각을 의미한다.

이러한 한개한개 나뉘어진 세그먼트를 잘 포장해서 네트워크로 보내는것 이 패킷이라고 한다.

 

세그먼트 와 패킷의 차이

1. 세그먼트(Segment)

  • 정의: 세그먼트는 전송 계층(Layer 4)에서 다루는 데이터 단위

  • 내용물: 애플리케이션 계층(Layer 7)에서 전달된 데이터를 포함하고 있으며,
    전송 계층의 헤더(예: TCP 헤더, UDP 헤더)가 추가

  • 비유: 세그먼트는 택배 상자 안에 넣을 물건 묶음과 같다. 이 묶음은 아직 주소나 배송 정보가 없는 상태

2. 패킷(Packet)

  • 정의: 패킷은 네트워크 계층(Layer 3)에서 다루는 데이터 단위

  • 내용물: 세그먼트에 네트워크 계층의 헤더(IP 헤더)가 추가된 것.
    IP 헤더는 발신지와 목적지 IP 주소 등 네트워크 경로를 결정하는 데 필요한 정보를 포함.

  • 비유: 패킷은 IP 주소가 첨부된 택배 상자와 같다.
    이 상자는 발신지와 목적지 주소가 명확히 기재되어 있어 네트워크를 통해 올바른 경로로 전달될 수 있다.
728x90

'Win32서버' 카테고리의 다른 글

Win32 스레드  (3) 2024.07.22
카테고리
작성일
2024. 7. 22. 21:43
작성자
WDmil
728x90

개념

스레드 란? CPU의 1개당 실행단위 를 이야기한다.

 

한개의 프로세스(프로그램... 이라고 표현하면 잘못된 것 이긴 하지만, 대략적으로) 마다 최소 1개 이상의 Thread를 가질 수 있다.

 

작업을 시작하려면 작업공간과 인부를 가져야 한다고 이해하자. 여기서 작업공간은 메모리(램또는 SSD같은것) 이고,

인부는 CPU라고 생각하면 된다.

 

정리하면 다음과 같다.

  • 한 Process는 최소 1개 이상의 Thread를 갖는다.( Memory 와 함께 )
    • 즉, 한 Process는 [ CPU + Memory ] ( VMS 버추얼 메모리 ) 를 가진다.
  • Thread는 개별화된 흐름(문맥)이다. 
    • int main()함수가 n개(스레드 개수만큼) 있다고 생각하면 된다.
  • 전용 스택을 갖는 실행의 단위이다.
    • 1MB가량의 콜스택 메모리를 가진다. 입력, 반환되는 최대단위를 말함.
  • 모든 Thread는 자신이 속한 Process의 가상 메모리 공간을 공유한다.
    • 자신이 속한 프로세스에 속한 메모리에 항상 별도의 권한허가 없이 접근할 수 있다.

스레드 상태값

위와 같은 느낌으로 돌아간다.

Run으로 실행되었을 때, 스레드의 내부함수 값에 따라 Suspended상태에서 Resum으로 돌아가. Run으로 돌아가게 진행되는데,

 

이 Suspended와 Resum을 합쳐서 생각해도 되는것이 Sleep과 Alertable Wait이다.

 

Alertable Wait은, Sleep상태를 외부에서 사용하기 위해 깨우기 위해 사용하는 다른종류의 Sleep이라고 이해하면 된다.


다중 스레드의 동작원리 예시

MainProcess가 실행되면, CraeteThread()가 동시에 실행된다.

 

  1.  Run으로 T1이 실행됨.
  2. T1 에서 CraeteThread()가 실행. T2 로 분리됨
  3. T2에서 Event가 종료될 때 까지. T1에서는 Wait에서 대기.
  4. T2에서 Event가 반환되고, End로 소멸. T1은 진행

이러한, 데이터의 인풋 아웃풋은 보통 Queue로 진입을 제어하게 된다.

 

그러나, 스레드가 n개 이상일 때, 동시에 같은 메모리 영역에 접근하려고 진행할 경우,

레이스컨디션 문제가 발생하게 된다.

 

이러한 문제를 방지하기 위해 Creitical Section을 사용해서 병목지점을 통제할수 있다.

 

또는 시점으로 관리할 수 있다.

(T1에서 T2의 Event를 감지해서, 감지되었을 경우 Wait으로 대기해주는 방식으로 처리할 수도 있다.)


스레드 동기화

 

위에서 말한 레이스 컨디션을 방지하기 위한 방법이다.

임계구간 코드가 여러 스레드에서 동시에 실행되는 일을 막는 것

 

간단한 예시를 통해 알아본다.

DWORD dwThreadID = 0;
// 새로운 스레드를 생성.
HANDLE hThread = ::CreateThread(
					NULL,	// 보안속성은 상속
                    0,		// 스택 메모리는 기본크기(1MB)
                    ThreadFunction,	// 스레드로 실행할 함수이름.
                    NULL,		// 함수에 전달할 매개변수.
                    0,		// 생성 플래그는 기본값 사용.
                    &dwThreadID);		// 생성된 스레드 ID 저장.
                    
// 작업자 스레드 생성 API
HANDLE CreateThread(
 [in, optional]		LPSECURITY_ATTRIBUTES			lpThreadAttributes,
 [in]			SIZE_T					dwStackSize,
 [in]			LPTHREAD_START_ROUTINE			lpStartAddress,
 [in, optional]		__drv_aliasesMem LPVOID			lpParameter,
 [in]			DWORD					dwCreateionFlags,
 [out, optional]	LPDWORD					lpThreadID
);

 

 

스레드의 작업이 종료된것을 확인하려면, hEvent객체를 생성해서 이벤트 핸들을 스레드 함수에 전달해야 한다.

	//이벤트 객체를 생성한다.
	HANDLE hEvent = ::CreateEvent(
		NULL,	//디폴트 보안 속성 적용.
		FALSE,	//자동으로 상태 전환.
		FALSE,	//초기상태는 FALSE.
		NULL);	//이름 없음.
        
        CreateEventW(
    _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
    _In_ BOOL bManualReset,
    _In_ BOOL bInitialState,
    _In_opt_ LPCWSTR lpName
    );

위와같이 이벤트 객체를 생성해서, 다음과 같이 스레드를 실행할 때 전달한다.

	HANDLE hThread = ::CreateThread(NULL, 0,
		ThreadFunction,
		hEvent,		//이벤트 핸들을 스레드 함수에 전달한다.
		0, &dwThreadID);

 

이러한 스레드의 이벤트를 다음과 같이 검사할 수 있다.

		if (::WaitForSingleObject(hEvent, INFINITE) == WAIT_OBJECT_0)
		{
			puts("종료 이벤트를 감지했습니다!");
			::CloseHandle(hEvent);
			hEvent = NULL;
		}
        
//WAIT_OBJECT_0 (0x00000000L):
//지정된 개체가 신호 상태가 되어 대기에서 벗어난 경우 반환됩니다.
//WAIT_ABANDONED (0x00000080L):
//대기 중인 쓰레드가 소유한 뮤텍스 개체가 소유권이 해제되지 않은 상태로 소멸된 경우 반환됩니다. 이 반환 값은 주로 뮤텍스에 대한 대기에서 발생합니다.
//WAIT_TIMEOUT (0x00000102L):
//대기 시간이 만료되어 대기에서 벗어난 경우 반환됩니다. 이 경우 dwMilliseconds 파라미터가 0이 아니어야 합니다.
//WAIT_FAILED ((DWORD)0xFFFFFFFF):
//함수가 실패한 경우 반환됩니다. GetLastError 함수를 호출하여 구체적인 오류 코드를 가져올 수 있습니다.

 

728x90

'Win32서버' 카테고리의 다른 글

Socket  (0) 2024.07.25
작성일
2024. 7. 22. 20:22
작성자
WDmil
728x90

개요

두개 이상의 프로세스 , 스레드가 공유자원을 동시에 사용하려고 진행하려고 할 때 발생하는 현상을 말한다.

예시

 

T1과 T2가 동시에 Input에 접근한다고 가정하자.

 

우리는 항상 일정한 결과를 얻고싶지만, T1과 T2가 동시에 메모리에 접근해서 1이나 2를 때려박는 상황이다.

 

T2는 뭐가있던 2로 바꿔버리고, T2는 뭐가있던 1로 바꿔버리는 상황일 때. 누가먼저 데이터를 집어넣는지 알 수 없을 때 우리는 Out이 뭐가 나타날지 알 수가 없다.

 

또, 메모리를 처리하고 종료 할 때 비정상적으로 종료된다면 메모리의 데이터영역관리가 엉망진창이 되어버릴것이다.

 

이렇게 공유메모리를 동시에 접근하려고 하는 문제가 레이스컨디션 문제이다.

 

 

 

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

Inverse Kinematics(IK)  (0) 2024.05.14
Forward Kinematics(FK)  (0) 2024.05.14
Big-O 표기법  (0) 2024.01.23
메모리 누수(Memory leak)  (0) 2024.01.09
Dijkstra Alogithm  (0) 2023.12.21
작성일
2024. 7. 12. 00:09
작성자
WDmil
728x90

ImageAiCon PP

진행중

  1. Unreal ImageRetargeting 코드제작
    1. TCP방식으로 데이터 통신처리를 진행
      1. 1. 서버커넥팅을 위한 TCP프로토콜 제작중...
      2. 테스트 진행중.
        1. 클라이언트 접속 프로그램 제작중

 

 

서버 Open성공

이제 Connect 용 클라이언트 제작만 하면된다!


진행 예정 작업

  1. Unreal ImageRetargeting 코드제작
    1. 언리얼 함수 상으로 지정된 카메라의 타겟뷰를 이미지값으로 저장 반환하는 방식이 존재함.
    2. TCP방식으로 데이터 통신처리를 진행
    3. TensorFlow를 사용하여 전달받은 이미지로 학습 알고리즘 연산.
    4. 연산결과를 다시 언리얼로 전달하여 학습된 데이터를 갱신.
    5. 4번과 3번을 반복
  2. 학습결과확인 후 재학습
  3.  5와 6을 원하는 AI행동패턴이 나타날때까지 반복

목표

  1. TensorFlow를 사용하여 알고리즘이 동작하는지 직접적인 확인을 진행.
  2. TensorFlow 를 사용하지 않고, 스스로의 C++코드로 알고리즘 함수 구현부를 직접 제작하여 사용하는것
    (파이썬만으로 k means clustering를 구현하였을 때, 구현객체가 C++의 연산처리속도를 따라잡지 못하는 상황이 있었음)
  3. UI관련 제작방식은 C#으로, 함수부는 DLL파일로 포팅하여 언리얼 엔진에 집어넣기.

완료된 작업

 

  1. Unreal의 ImageAI공부하기
    1. CNN알고리즘 다시 복기하기
    2. 알고리즘 선별(DQN)
    3. 알고리즘 관련 강의 학습
  1. Unreal ImageRetargeting 코드제작
    1. TCP방식으로 데이터 통신처리를 진행
      1. 1. 서버커넥팅을 위한 TCP프로토콜 제작
      2. 테스트 진행중.
        1. 서버생성 프로그램제작
728x90

'작업사항 정리 > UnrealC++' 카테고리의 다른 글

UnrealC++ PP 20240705_13  (0) 2024.07.05
UnrealC++ PP 20240703_12  (0) 2024.07.03
UnrealC++ PP 20240701_11  (1) 2024.07.01
UnrealC++ PP 20240628_10  (0) 2024.06.28
UnrealC++ PP 20240626_9  (0) 2024.06.26
작성일
2024. 7. 9. 02:15
작성자
WDmil
728x90

https://youtu.be/ttw--9QFiw4

게임클라이언트_오승빈.pdf
6.80MB

728x90

'작업사항 정리 > Unreal' 카테고리의 다른 글

Table_War 240708_26 포트폴리오 소개영상 제작  (0) 2024.07.08
Table_War 240605_25  (0) 2024.06.05
Table_War 240603_24  (1) 2024.06.03
Table_War 240531_23  (0) 2024.05.31
Talbe_War 디테일작업만 남은 포트폴리오 PPT  (0) 2024.05.28
작성일
2024. 7. 8. 04:28
작성자
WDmil
728x90

 

 

728x90

'작업사항 정리 > Unreal' 카테고리의 다른 글

Unreal Talbe War 포트폴리오 최종본  (0) 2024.07.09
Table_War 240605_25  (0) 2024.06.05
Table_War 240603_24  (1) 2024.06.03
Table_War 240531_23  (0) 2024.05.31
Talbe_War 디테일작업만 남은 포트폴리오 PPT  (0) 2024.05.28