본문 바로가기

Information Technology

(114)
[운영체제] 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)의 아이디어를 사용한다는 걸 알 수 있습니..
[운영체제] Process Synchronization(1) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 1) 데이터가 저장된 위치 2) 저장된 데이터를 읽어와서 연산 3) 연산된 결과를 다시 원래 위치에 저장 보통 데이터를 읽기만 한다면, 누가 먼저 읽든 별로 상관이 없음. 하지만 데이터를 가져와서 연산하고 다시 저장하는 프로세스에서는 누가 먼저 데이터를 읽었느냐에 따라 연산의 결과가 변할 수 있음. 이를 해결하기 위한 방법이 Process Synchronization 여러 (연산)주체가 하나의 데이터에 접근하는 걸 race condition이라고 함. 경쟁 상태라고 보면 될 것 같습니다. 이러한 경쟁 상태에서 하나의 주체가 데이터를 가져와 연산하는 동안 다른 주체도 데이터를 가져가서 연산을 하게 되면 사용자의 의도에서 벗어나는..
[JAVA] 기본적인 정렬 알고리즘 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 프로그래밍에 있어 정렬(sort)은 정말 중요합니다. 데이터를 찾거나, 분류하거나, 추가하거나, 등등 대부분의 작업에서 정렬은 거의 필수로 가져가는 기능입니다. 이번 포스팅에서는 기본적인 정렬 알고리즘에 대해 알아보겠습니다. 가장 큰 값을 맨 끝에 위치한 데이터와 교체하는 게 selection sort의 기본적인 아이디어입니다. 가장 큰 값은 맨 끝자리에 오게 되고, 가장 큰 값은 다음 비교에서 제외합니다. selection sort는 모든 비교연산에 대해 n^2의 시간 복잡도를 가지게 됩니다. Bubble sort는 가장 큰 값을 맨 뒤에 위치시킨다는 점에서 Selection sort와 동일하지만, 가장 큰 값을 맨 뒤로 이..