프로세스 동기화 여러 개의 프로세스가 데이터를 공유할 때 무결성을 유지해야한다. 예를 들어 P1과 P2가 공유 데이터를 사용할 때 아래와 같은 명령을 번씩 실행한다면, +1 -1이기 때문에 count의 값은 변화가 없어야한다. 하지만 count의 초기값이 0이라고 가정했을 때, P1과 P2가 count가 0일 때 동시에 접근한다면? 3번 라인이 실행될 때 count는 1이 됐다가 P2에 의해 -1이 될 수 있다. 1번씩 실행됐음에도 실행 결과가 바뀌었다. 동기화란 멀티 프로세싱에서 이와 같은 문제를 해결하기 위해 동시에 여러 프로세스가 접근해야하는 공유 데이터를 동시가 아닌 순차적으로 접근하도록 만드는 방법이다. Race Condition 여러 개의 프로세스에서 동시에 같은 데이터에 접근하려고 하는 상황..
버블 정렬 배열의 값을 다음 인덱의 값과 하나씩 비교하며 배열 끝까지 순회한다. 이 과정을 모든 인덱스에 대해 진행하므로 n*n 즉, 시간 복잡도가 O(n^2)으로 최악의 정렬 알고리즘이다. 선택 정렬 배열의 가장 작은 요소부터 찾아서 앞에서부터 순서대로 정렬한다. O(n^2) 삽입 정렬 배열을 순차적으로 돌면서 현재 인덱스를 앞에 위치하는 인덱스들 중에서 비교하여 현재 인덱스가 들어가야할 위치에 삽입힌다. O(n^2) 버블 정렬 보다 빠르며, 배열의 크기가 작을 경우에는 효율적이다. 셸 정렬 길이가 n인 배열이 있을 때 간격을 n/2로 주어 i번 인덱스부터 n-1번 인덱스까지 간격에 해당하는 인덱스들 중에서 값을 비교해서 더 작은 값이 앞으로 이동한다. 이후 간격을 n/4로 더 좁혀 더 넓은 범위에 대..
Scheduling Ready 상태에 있는 프로세스들 중 언제, 어떤 프로세스에게 CPU를 할당시킬 것인지 정하는 것 Scheduling을 통해 여러 프로세스를 왔다갔다하며 CPU를 최대로 활용할 수 있다. scheduling은 Kernel Thread에서 실행된다. Preemptive vs Non-Preemptive (선점형, 비 선점형 ) Preemptive: 스케줄러에 의해 실행 중인 프로세스의 CPU 할당을 헤제할 수 있다. Non Preemptive: 프로세스가 작업을 마치고 릴리스될 때까지 CPU 할당을 유지한다. CPU 스케줄링 결정 Running -> waiting (I/O 발생) runnging -> ready (다른 프로세스 할당) waiting -> ready (I/O가 끝남) ter..
객체지향 프로그래밍 OOP코드를 객체 단위로 나누어 코딩하는 방식으로 다음과 같은 장점이 있다. 코드 재사용성이 높다.새로운 코드를 작성할 때 기존의 코드를 이용해서 쉽게 작성할 수 있다.코드 관리가 용이하다.코드 간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.신뢰성이 높은 프로그래밍이 가능하다.제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 한다.코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.OOP의 특징캡슐화필드 변수와 메서드를 클래스로 감싸는 것캡슐화로 인해 모듈화가 가능하여 유지보수성을 높힐 수 있다.정보은닉캡슐화로 인해 감싸진 데이터들에 접근 제어자 public, private 등을 활용해서 외부에서 접근하지 못하게 할 수 있다.외부 ..