[CS] ~락

jableee·2022년 2월 24일
0

단기 락 구현

락을 구현하는 방법은 실제로는 하나뿐이지만, 이를 프로그램에 표현하는 방법은 여러 가지이다.
락을 구현하려면 잠금을 지원하는 특별한 명령어를 제공하는 하드웨어 지원이 필요하다.

여러 프로세서가 락에 사용하기 위한 검사 후 설정이라는 명령어를 제공한다. 이 명령어는 원자적 명령어로, 어떤 메모리 위치에 들어 있는 값을 1로 설정하고, 원래 그 위치에 들어 있던 값을 돌려준다. 처음에 이 메모리에는 0이 들어 있어야 한다. 이제 둘 이상의 프로세스가 이 명령어를 사용하면, 그중 한 프로세스의 검사 후 설정 명령어는 0을 반환하지만 나머지 프로세스의 검사 후 설정 명령어는 1을 반환한다. 이 명령이 원자적 명령어이기 때문에 어떤 츠로세스가 0을 반환 받았다면 이 프로세스에 의해 메모리 내용이 1로 바뀌고, 나머지 프로세스는 1을 반환받을 수밖에 없다. 따라서 이 명령어는 락을 직접 구현해준다.

장기 락 구현

우리는 대부분 가능한 한 짧은 시간 동안 소유할 락에 대해 이야기하고 있다. 하지만 때로는 아주 오랫동안 락을 소유하고 싶을 때도 있다. 이런 상황은 보통 여러 프로그램이 자원에 접근하면 안되는 경우에 해당된다. 예를 들어 여러 사용자가 같은 문서를 동시에 변경하는 것을 허용하지 않도록 설계된 워드 프로세서에서는 장기간 락을 사용할 수 있다.

장기간 락은 메모리보다 좀 더 영구적인 저장소에 저장돼야 한다. 이런 락은 파일을 사용해 구현되는 경우가 자주 있다.
배타적으로 사용할 수 있는 파일을 생성할 수 있고 가장 먼저 요청한 프로세스가 성공하게 되는 시스템 콜이 있다. 이는 락을 할당받는 것과 동등하다. 이런 시스템 콜은 내부에 숨겨진 원자적 연산을 더 높은 수준으로 추상화한 것이다.

profile
개발 공부

0개의 댓글