본문 바로가기

CS 기초22

Reliable UDP (RUDP)란? Reliable: 신뢰할 수 있는 TCP는 패킷 통신에 있어서 다음과 같은 특징 및 기능 제공 통해 신뢰성을 보장하는 프로토콜이다. 패킷 순서 보장: 송신한 순서대로 수신함을 보장 패킷 무결성 보장: 송신한 패킷과 수신한 패킷의 내용이 동일함을 보장 패킷 도착 보장: 송신 패킷은 꼭 상대에게 도착할 것을 보장(재전송 등을 통해 자체적으로) 혼잡 제어(congestion control): 패킷 송수신이 원활하게 발생할 수 없는 상황에 대한 자체적인 처리 흐름 제어(flow control): 혼잡 상황 혹은 수신측이 감당할 수 없는 양의 패킷 전송 등이 최대한 발생하지 않도록 패킷의 전송 흐름을 제어하는 기능 UDP는 위와 같은 기능을 제공하지 않는다. Reliable UDP는 신뢰될 수 있는 UDP 라는 .. 2023. 2. 6.
Sleep() 함수는 정확히 입력 시간만큼의 Sleep을 보장하진 못한다. C의 Sleep() 함수는 입력으로 받은 시간만큼 호출 스레드를 멈추게 한다. Sleep() 함수는 호출 스레드를 Running 상태에서 Suspend 상태로 만든다. 이 상태에선 cpu에 의해 스케줄링 될 수 없다. 입력 시간이 지나면 해당 스레드는 다시 cpu에 의해 스케줄링 되어 실행될 수 있는 상태(ready to run)상태가 된다. 스케줄링은 OS 상태, 스케줄링 우선순위에 따라 바로 될 수도 그렇지 않을 수도 있다. 간단하게 요약하면 Sleep 함수는 호출 스레드를 입력 시간동안 멈췄다가 곧바로 실행을 보장해주는 함수가 아닌, 말 그대로 입력 시간 동안 실행될 수 없는 상태로 만들고, 그 이후에 다시 실행될 수 있는 상태로 만들어 주는 함수이다. https://www.youtube.com/w.. 2023. 2. 4.
Lock 기반 알고리즘의 문제점 lock-free란 키워드가 궁금해서 찾아보던 도중 알아두어야 할 내용인 것 같아 메모 공유 자원이 여러 스레드에 의해 점유되는 현상을 막기 위해 mutex나 semaphore를 이용하여 lock을 걸어 사용할 수 있다. 고성능이 요구되지 않는 환경에선 좋은 방법일 수 있지만, 고성능이 필요한 환경에선 좋은 방법이 아닐 수 있다. 어떤 스레드가 lock을 얻으면 다른 스레드들은 lock을 가진 스레드가 unlock을 할 때까지 해당 자원에 접근하지 못한다. unlock 이후 lock을 얻더라도 스케줄러에 의해 CPU를 할당받지 못하면 lock을 소유한 채로 기다려야 한다. 심지어 스케줄링 우선 순위가 밀리게 되면 해야하는 동작을 하지 않고 있음에도 lock을 소유하고 있고, 다른 스레드 들은 계속해서 대.. 2021. 9. 29.
퀵 정렬(Quick Sort) 동작 - 까먹지 않도록 하기 위한 방법.. 퀵 정렬 동작을 까먹지 않도록 하기 위해 퀵정렬의 느낌과 동작을 정리를 해보았다. (오름 차순 기준) 퀵 정렬의 전체적인 그림은 배열에서 pivot이라는 기준을 정하고, 그 기준으로 왼쪽 영역은 pivot보다 더 작은(같거나) 원소들이 놓이도록, 오른쪽 영역은 더 큰(같거나) 원소들이 놓이도록 하는 것이다. 왼쪽 오른쪽 영역이 정렬되어 있을 필요는 없다. 그냥 pivot을 기준으로 크기가 작거나 크면된다. 이후엔 나뉜 왼쪽과 오른쪽 영역에 대해 다시 재귀적으로 quicksort를 진행한다. 그러면 왼쪽 영역에서 또 pivot을 정하고 영역을 나눌 것이고, 오른쪽 영역에 대해서도 마찬가지일 것이다. 이는 왼쪽 영역과 오른쪽 영역이 더 이상 나뉘지 않을 때, 즉 나누려는 영역이 1개이면 리턴한다. 이를 코드.. 2021. 5. 13.
[OS] 운영체제 연습 문제 풀이 (2) 책 이름: 개념 이해를 위한 운영체제 (21세기사) [프로세스의 정의를 "실행 중인 프로그램" 으로 함이 왜 충분하지 못한가? 그 부족함을 보완할 수 있는 더 좋은 정의를 제시하라] 오직 하나의 프로세스만을 실행하는 시스템 환경에선 해당 정의로 충분하다. 하지만 대부분의 시스템은 여러 프로세스를 번갈아 가며 실행하는 다중 프로그래밍 환경이다. 이를 위해선 실행할 프로그램이 프로세스 형태로 메모리에 존재해야 한다. 즉 메모리에 여러 개의 프로세스가 존재할 수 있다. 하지만 한 시점에서 실행되는 프로세스는 하나이다. 따라서 실행 중인 프로그램이란 의미는 부족할 수 있다. 프로세스란 "프로그램이 메모리 상에 실행 가능한 형태로 적재되어 있는 것" 이라고 정의하는 것이 더욱 디테일하다. [프로세스와 프로그램과의.. 2020. 11. 7.
논블로킹(Non-blocking) 소켓 만들기 | ioctlsocket, select Winsock을 기준으로 설명합니다. 혹시나 틀린 부분이 있을 수 있으니 맹신은 마시고 있다면 알려주세요~ 소켓 관련 함수에 타임 아웃을 지정하고 싶다면 비동기 소켓 + select 함수가 필요합니다. 해당 글을 전부 읽으시면 됩니다. 기본적으로 Winsock의 accept, connect, recv, send와 같은 대부분의 소켓 관련 함수들은 호출 스레드를 블로킹(blocking) 상태로 만듭니다. 블로킹 상태란 현재 스레드가 더 이상 코드를 진행하지 않고 block 상태로 멈춰 있는 상태를 말합니다. 블로킹 상태는 각 조건을 만족하거나 타임 아웃이 될 때까지 유지됩니다. 이해하기 어려우면 그냥 조건을 만족할 때까지 함수를 벗어나지 않고 기다린다고 생각하면 편합니다. accept 함수는 클라이언트의 .. 2020. 10. 22.