최근 기술 면접들을 보는 중, 한 기업에서 자료구조와 알고리즘과 같은 기초 CS 지식을 물어보는 경우가 있었다. 슬프게도, 거진 대부분의 내용에 대해서 답변을 제대로 하지 못했다고 스스로 판단하고 있다. 차라리 아예 몰랐다면 모를까, 전에 한번 공부했다고 생각했는데 전부 다 까먹어서 대답하지 못한 건 큰 실책이다. 지식적 부끄러움의 경험을 다신 잊지 말자는 절치부심의 마음으로 항상 이 첫번째 헤더는 유지하면서 매일 CS 공부를 조금씩 정리하도록 한다.
트렌젝션이란 데이터베이스 상태를 변화시키는 논리적 작업단위를 뜻한다.
트렌젝션은 크게 데이터를 반영하는 commit과 반영을 다시 되돌리는 rollback으로 이루어진다.
트렌젝션의 중요한 성질 4가지는 아래와 같다
프로세스가 필요한 자원을 받지 못하여 다음 처리를 하지 못하는 상태를 뜻한다.
예를 들어, Process1과 Process2가 존재할 때, 두 프로세스가 서로 동일한 리소스를 가져야 하는 경우가 존재한다. 이때 Resource1은 Process1이 갖고있고, Resource2는 Process2가 보유하고 있는 경우, 두 프로세스가 작업처리를 위해 서로간의 자원을 무한정 기다리게 되는 상황이 벌어지는데 이것을 데드락 상태라고 한다.
이런 데드락 상태를 해결하는 방법은 원인부정법과 원인회피법이 있다.
자원이 한 프로세스만 점유하게 되는 상호 배제를 부정하거나, 프로세스가 자원을 충분하게 점유하지 않으면 대기상태가 되는 것을 부정하고 실행 전 필요한 모든 자원을 할당하는 점유대기 부정등이 존재한다.
은행원 알고리즘 : 모든 프로세스에 필요한 자원의 양을 미리 파악하고 있는 뒤, 현재 전달한 리소스를 제외한 운영체제에 남아있는 리소스를 가지고 프로세스들에게 분배했을 때 완료가 되지 않는 불완전 상태가 될 프로세스에게는 먼저 자원을 주지 않고 완전상태가 되는 프로세스 위주로 먼저 제공하는 방식. (자원수가 일정해야하고, 프로세스 수도 일정해야 하며 프로세스들의 자원 최대량을 미리 알고있어야하는 등 고정성이 너무 크기 때문에 현재는 사용되지 않는다)
교착 상태로부터 회복 : 교착 상태를 일으킨 프로세스를 파악해서, 실행 횟수가 적거나 우선순위가 낮은 프로세스 위주로 자원을 선점하여 해당 프로세스를 일시정지시키고 급한 프로세스를 먼저 처리한 후 자원을 회복하는 방식이다.
공유 자원에 대해서 여러 프로세스들이 접근하게 되는 상황을 뜻한다. 이 때에 한 프로세스의 처리결과로 인해 공유 자원이 변경될 경우 자료의 일관성이 해쳐지게 되는 경우가 발생한다
보통 멀티 프로세서 환경에서 공유되는 메모리 내의 커널데이터에 접근하게 되는 경우, 해당 데이터에 대해서 lcok을 걸어두어 다른 프로세서가 해당 데이터에 접근해 처리하는 경우를 방지한다 (동시 변경을 방지하여 동기화를 이룬다)