본문 바로가기

Computer Science

(23)
[Network] UDP UDP(User Datagram Protocol) 트랜스포트 계층의 통신 프로토콜 TCP UDP 신뢰성이 낮은 프로토콜로서, 완전성을 보장하지 않는다. 가상회선을 확립할 필요가 없고, 유연하며 효율적인 데이터 전송에 적용된다. UDP 주요 기능과 특징 비연결성 / 비신뢰성 순서화되지 않는 Datagram 제공 ACK 없음 > 메시지가 올바르게 도착했는지 알 수 없다. 순서제어 없음 > 수신된 메시지의 순서를 보장하지 않는다. 흐름제어 없음 > check sum을 제외한 오류 검출 및 제어 없음 논리적인 가상회선 연결이 필요없음 > 데이터그램 지향의 전송계층용 프로토콜 실시간 응용 및 멀티캐스팅 가능 빠른 요청과 응답으로 실시간 통신에 적합 다수의 지점에 전송 가능 헤더가 단순하다. 헤더의 고정크기는 8바..
[OS] IPC 프로세스 간 통신 IPC IPC IPC 설비들 IPC (Interprocess Communication) 리눅스 커널의 구조를 보면 process는 완전히 독립된 실행 객체이다. 서로 독립되어있다는 것은 다른 프로세스의 영향을 받지 않는다는 장점이 있다. 그러나 서로 간의 통신이 어렵다는 문제가 존재한다. 이를 위해서 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하고, 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스 간 통신을 한다. IPC설비들 PIPE(익명 PIPE) 파이프로 두 개의 프로세스를 연결하고 하나의 프로세스는 데이터를 Write 다른 하나는 데이터를 Read만 한다. 한쪽 방향으로만 통신이 가능하기 때문에 Half-Duplex(반 이중 통신)이라고 부른다. 송/수신을 ..
[OS] 스케줄링 종류 목차 비선점 스케줄링 FCFS SJF HRN 우선순위 선점 스케줄링 SRTF 선점 우선순위 스케줄링 라운드로빈 스케줄링 비선점스케줄링 이미 할당된 CPU를 다른 프로세스가 강제로 뺏을 수 없는 정책 프로세스가 자원 할당 받으면, 스스로 반납할 때 까지 사용을 허용한다. 특징 일괄 처리 방식의 스케줄링 응답 시간 예측이 용이 공정한 자원의 할당 단점 중요한 작업을 먼저 수행할 수 없다. FCFS (선입 선처리 스케줄링) First Come First Service 큐에 도착한 순서에 따라 CPU를 할당한다. 호위 효과(convoy effect): 모든 다른 프로세스들이 하나의 긴 프로세스가 CPU를 양도하기를 기다리는 것 SJF (최단 작업 우선 스케줄링) Shortest Job First 버스트 시간( ..
[OS] 스케줄러 스케줄링 운영체제에서 프로세서(CPU)를 프로그램에게 할당하는 과정 시스템에 여러 개의 실행 가능한 프로세스들이 존재하고, OS는 이런 프로세스 중 하나를 선택해 CPU를 할당한다. 실행 준비 완료 된 프로세스들은 준비 큐에 들어가서 CPU를 할당 받을 때까지 대기한다. 실행 중인 프로세스가 인터럽트를 받았을 경우? 다시 준비 큐에 들어가게 되고, 이후에 다시 실행된다. 이 과정에서 프로세스들은 상태를 변화시키면서 큐 사이를 왔다갔다하는데, OS는 적절한 스케줄링을 통해 큐에서 작업들을 관리해야 한다. 이 작업을 하는 것이 스케줄러 장기 스케줄러 / 단기 스케줄러 - 일괄 처리 시스템 장기 스케줄러 디스크 내의 작업들을 어떤 순서로 메모리에 적재할지 결정한다. 디스크와 같은 저장장치에 작업들을 저장해 놓..
[OS] 멀티 스레드 멀티 스레드 하나의 프로세스 내에서 여러 개의 스레드를 이용하여 동시에 처리한다. (병렬 처리) 다수의 스레드는 하나의 데이터 자원을 공유하기 때문에 메모리 효율성이 높다. Q. 멀티 프로세스 대신에 멀티 스레드를 사용하는 이유? 자원의 효율성 증대 프로세스 간의 문맥 교환은 CPU 레지스터 교체, RAM과 CPU 사이의 캐시 메모리 초기화까지 진행된다. 따라서 자원을 공유하는 멀티 스레드는 처리 비용의 감소와 응답 시간이 단축된다. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어든다. (오버헤드 감소) 단점 프로세스 외부에서 스레드 제어가 어렵다. 동기화 문제 하나의 스레드에서 문제가 발생하면 프로세스 전체에 영향을 준다. 스레드 풀 (Thread Pool) 프로세스를 시작할 때 일정한 수의 스레..
[OS] 프로세스와 스레드 쓰레드란? 프로세스 실행 단위 하나의 프로세스는 여러 개의 쓰레드로 구성 되어있다. 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다. 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며, 실행 상태가 변할 때마다 쓰레드 문맥 교환(context switching)을 수행한다. 각 쓰레드는 자신만의 스택과 레지스터를 가진다. 한 순간에는 하나의 스레드만 실행이 가능하다. (독립적인 수행 단위) 쓰레드의 장점 쓰레드는 프로세스보다 생성 및 종료 시간, 문맥교환 시간이 짧다. 쓰레드는 프로세스의 메모리, 자원 등을 공유하므로, 커널의 도움 없이 상호간의 통신이 가능하다. 쓰레드 동기화 방법의 종류 Mutex Semaphore Monitor 뮤텍스 (Mutex) 쓰레..
[자료구조] 삽입정렬(Insertion Sort) 구현하기 #include #include //삽입정렬 using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int arr[10]; for (int i = 0; i = 0 && arr[j] > pivot) { arr[j+1] = arr[j]; j--; } arr[j+1] = pivot; } for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return..
[자료구조] qsort, quick sort 구현하기 *stdlib.h에 있는 qsort는 compare 함수만 구현하면 손쉽게 사용할 수 있다. compare에 넘기는 void* 포인터는 상수 포인터이므로 변경이 불가능하다. [qsort] #include #include int compare(const void *a, const void *b) { int n1 = *(int *)a; int n2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 if (n1 < n2) return -1; else if (n1 == n2) return 0; else return 1; } int main() { int num[10]; for (int i = 0; i