본문 바로가기

분류 전체보기

(127)
[C언어] MP3 관리프로그램(5) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 1) main.cpp #pragma warning (disable:4996) #include "string_tools.h" #include "library.h" #include #include #include #define BUFFER_LENGTH 200 void handle_add(); void process_command(); void handle_load(); void handle_search(); void handle_play(); void handle_save(); void handle_remove(); int main() { initialize();// Artist 배열을 초기화 handle_load(); proce..
[알고리즘] 힙(heap)의 응용: 우선순위 큐(priority queue) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 우선순위 큐 역시 힙과 같이 최대 우선순위 큐(maximum priority queue)와 최소 우선순위 큐(mininum priority queue)로 나눌 수 있습니다. 최대 우선순위 큐는 큐에 저장된 데이터들은 모두 우선순위를 가지고 있고, 이 우선순위가 최대한 데이터들이 큐를 먼저 나갈 수 있습니다. 큐에 데이터를 저장하는 INSERT(x) 연산에 대해서는 아무 데이터나 상관없지만, 큐를 빠져나가는 EXTRACT_MAX(x) 연산에 대해서는 함수의 이름에서 알 수 있듯이 우선순위가 MAX인 데이터만 이 연산을 진행할 수 있습니다. 우선순위 큐의 종류에는 FIFO 큐라는 종류의 큐도 존재합니다. FIFO 큐란 First ..
[운영체제] Deadlock 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) Deadlock: 일련의 프로세스들이 서로가 가진 자원을 기다리며 block 된 상태 Resource: 하드웨어 자원과 소프트웨어 자원을 모두 포함 프로세스가 자원을 사용하는 절차 1) 자원을 요청 2) 자원을 획득 3) 자원을 사용 4) 자원을 반납 Mutual exclusion(상호배제): 자원을 한 번 얻으면 독자적으로 사용함. 가지고 있는 동안 공유하지 않음 No preemptoin(비선점): 자원을 가지고 있는 동안 자원을 빼앗기지 않음 Hold and wait(보유대기): 자원을 놓지 않고 기다림 Circular wait(순환대기): 서로가 가진 자원을 기다리면서 사이클을 형성 자원 -> 프로세스 : 자원이 프로세스..
[운영체제] Process Synchronization(4) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) Process Synchronization, 프로세스 동기화를 또 다른 말로는 Concurrency Control 즉 병행 제어라고도 합니다. 프로그래머 입장에서 Concurrenct control을 관리하는 방법으로는 저번 포스팅에서 알아봤던 Semaphore 추상 자료형이 있었습니다. Semaphore란 자원을 얻는 P 연산과 자원을 반납하는 V 연산 과정을 통해 이뤄지는 자료형입니다. semaphore는 프로그래머가 P연산과 V연산의 순서를 실수로 잘못 배치한다면 문제가 발생할 수 있습니다. 이러한 문제역시 해결하고, 또 프로그래머의 부담을 줄여주기 위해 Monitor라는 방법이 등장했습니다. monitor 안에 공유 데..
[C언어] MP3 관리 프로그램(4) 1. add_artist Artist* create_artist_instance(char* name) // Artist 객체를 생성하는 함수 { Artist* ptr_artist = (Artist*)malloc(sizeof(Artist)); ptr_artist->name = name; ptr_artist->head = NULL; ptr_artist->tail = NULL; ptr_artist->next = NULL; return ptr_artist; } Artist* add_artist(char* name) { // Artist 객체를 만드는 일을 함수에게 맡김 Artist* ptr_artist = create_artist_instance(name); Artist* p = artist_directory[..
[운영체제] Process Synchronization(3) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) P연산: S의 값을 1 감소시키면서 자원을 획득하는 과정 V연산: 자원을 반납하는 과정 S값이 1이라면 자원이 단 하나이기 때문에 lock을 걸고 푸는 과정(mutex). S값이 1 이상이라면 자원의 개수를 나타냄. 현재 다른 프로세스가 자원을 사용하고 있다면 어차피 busy waiting이 발생하기 때문에, 차라리 기다리는 프로세스에 block을 걸어서 CPU를 빼앗음. 그리고 다른 프로세스가 자원을 반납하면 그때 block했던 프로세스를 wakeup. Producer생산자 프로세스와 Consumer소비자 프로세스가 존재. Producer 프로세스가 여러 개 있고, Consumer 프로세스가 여러 개 존재. Producer ..
[운영체제] Process Synchronization(2) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) critical section: 공유 데이터에 접근하는 코드 remainder section: 공유 데이터가 아닌 데이터에 접근하는 코드 아무나 공유 데이터에 접근하면 문제가 발생하기 때문에 ciritical section이 실행되기 이전에 entrt section을 넣어서 lock을 먼저 걸어줌. 이걸 통해 여러 프로세스들이 동시에 critical section에 접근하는 걸 막음. 그리고 프로세스가 끝나면 lock을 풀어줌 Mutual Exclusion: 하나의 프로세스가 critical section에 있으면 다른 프로세스들은 critical section에 접근x Progress: 아무도 critical section에..
[JAVA] 합병정렬(merge sort) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) merge sort는 분할 정복법(divide and conquer)이라는 방법을 사용하는 알고리즘입니다. 분할 정복법이란 예전에 로마 제국이 주변 나라들을 정복할 때, 통째로 정복하기보다는 분할을 해서 각각을 정했다는 것에서 착안한 이름이라고 합니다. 즉, 1) 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할해서 2) 각각의 작은 문제를 순환적으로 해결하고 3) 작은 문제의 해를 합하여(merge) 원래 문제의 해를 구하는 방법입니다. 여기서 핵임은 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할한다는 것인데, 이를 통해 합병정렬이 기본적으로 재귀(recursive)의 아이디어를 사용한다는 걸 알 수 있습니..