[CS] 트렌젝션, Deadlock, Race condition

devAnderson·2022년 5월 26일
0

CS

목록 보기
4/5

🚍 0. 정리의 이유

최근 기술 면접들을 보는 중, 한 기업에서 자료구조와 알고리즘과 같은 기초 CS 지식을 물어보는 경우가 있었다. 슬프게도, 거진 대부분의 내용에 대해서 답변을 제대로 하지 못했다고 스스로 판단하고 있다. 차라리 아예 몰랐다면 모를까, 전에 한번 공부했다고 생각했는데 전부 다 까먹어서 대답하지 못한 건 큰 실책이다. 지식적 부끄러움의 경험을 다신 잊지 말자는 절치부심의 마음으로 항상 이 첫번째 헤더는 유지하면서 매일 CS 공부를 조금씩 정리하도록 한다.

🚍 1. 트렌젝션

트렌젝션이란 데이터베이스 상태를 변화시키는 논리적 작업단위를 뜻한다.
트렌젝션은 크게 데이터를 반영하는 commit과 반영을 다시 되돌리는 rollback으로 이루어진다.

트렌젝션의 중요한 성질 4가지는 아래와 같다

  • Atomicity(원자성) : 반영과 관련된 논리적 연산들은 모두 한번에 완벽하게 반영되야 하며, 하나라도 실패시 전부 취소되어야 한다.
  • Durability(영속성) : 반영된 데이터베이스의 변경사항은 지속적으로 유지되어야 한다.
  • Consistency(일관성) : 하나의 데이터베이스 변경과 관련된 로직은 마치 순수함수처럼 동일한 변경결과를 가져와야 한다.
  • Isonlation(독립성) : 서로다른 트렌젝션끼리는 서로의 연산을 방해하지 않고 독립적으로 연산되어야하며, 하나의 트렌젝션이 끝나기 전까지 다른 트렌젝션이 참조할 수 없다.

🚍 2. Dead lock

프로세스가 필요한 자원을 받지 못하여 다음 처리를 하지 못하는 상태를 뜻한다.

예를 들어, Process1과 Process2가 존재할 때, 두 프로세스가 서로 동일한 리소스를 가져야 하는 경우가 존재한다. 이때 Resource1은 Process1이 갖고있고, Resource2는 Process2가 보유하고 있는 경우, 두 프로세스가 작업처리를 위해 서로간의 자원을 무한정 기다리게 되는 상황이 벌어지는데 이것을 데드락 상태라고 한다.

이런 데드락 상태를 해결하는 방법은 원인부정법과 원인회피법이 있다.

원인 부정법

자원이 한 프로세스만 점유하게 되는 상호 배제를 부정하거나, 프로세스가 자원을 충분하게 점유하지 않으면 대기상태가 되는 것을 부정하고 실행 전 필요한 모든 자원을 할당하는 점유대기 부정등이 존재한다.

원인 회피법

은행원 알고리즘 : 모든 프로세스에 필요한 자원의 양을 미리 파악하고 있는 뒤, 현재 전달한 리소스를 제외한 운영체제에 남아있는 리소스를 가지고 프로세스들에게 분배했을 때 완료가 되지 않는 불완전 상태가 될 프로세스에게는 먼저 자원을 주지 않고 완전상태가 되는 프로세스 위주로 먼저 제공하는 방식. (자원수가 일정해야하고, 프로세스 수도 일정해야 하며 프로세스들의 자원 최대량을 미리 알고있어야하는 등 고정성이 너무 크기 때문에 현재는 사용되지 않는다)

교착 상태로부터 회복 : 교착 상태를 일으킨 프로세스를 파악해서, 실행 횟수가 적거나 우선순위가 낮은 프로세스 위주로 자원을 선점하여 해당 프로세스를 일시정지시키고 급한 프로세스를 먼저 처리한 후 자원을 회복하는 방식이다.

🚍 3. Race condition

공유 자원에 대해서 여러 프로세스들이 접근하게 되는 상황을 뜻한다. 이 때에 한 프로세스의 처리결과로 인해 공유 자원이 변경될 경우 자료의 일관성이 해쳐지게 되는 경우가 발생한다

보통 멀티 프로세서 환경에서 공유되는 메모리 내의 커널데이터에 접근하게 되는 경우, 해당 데이터에 대해서 lcok을 걸어두어 다른 프로세서가 해당 데이터에 접근해 처리하는 경우를 방지한다 (동시 변경을 방지하여 동기화를 이룬다)

profile
자라나라 프론트엔드 개발새싹!

0개의 댓글