과제 철학자들

wochae·2022년 8월 20일
0

이전 과제에 대해서 블로그를 써야하지만 지금 당장 시작하고 있는 과제부터 차근차근 적어 나갈 것이다.
이번 과제는 "Dining philosphers problem"이라는 유명한 개념에서 파생된 과제이다.

이렇게 유명한 단원이다. 덕분에 자료를 쉽게 찾아볼 수 있었다.

주로 운영체제에 쓰레드와 프로세스에 대한 개념을 짚고 넘어가는 게 주 목표이며

이를 해결하기 위해서 각각 뮤텍스와 세마포어라는 개념을 사용해야했다.

공통적인 주제로는 철학자들이 존재하며, 이들은 먹고 자고 생각하는 행위를 할 수 있다.
또한 그들의 상태를 표현할 수 있는 건 수명 시간이 존재해, 도달하면 죽는다.

그들의 수명 시간보다 먹고 자는 시간이 충분히 있어야 죽지 않을 수 있다.

철학자들은 필수 파트에선 쓰레드로 이해하면 되고, 보너스 파트에선 프로세스로 이해해야한다.

쓰레드로는 상호배제와 관련이 있는 뮤텍스를 사용해서 해결한다.
뮤텍스는 식당에 화장실에 가고 싶은 손님들이 있다고 가정하고, 화장실을 가기 위해선
카운터에서 하나 뿐인 열쇠를 가져가서 이용을 해야한다는 조건을 달아보자.

맨 처음 카운터에서 키를 받아서 화장실을 사용하는 동안 다른 손님들은 용무를 보기 위해선
현재 화장실을 사용하고 있는 사람이 볼 일을 마치고 카운터에 화장실 키를 돌려 놓지 않는 이상 대기를 할 수 밖에 없다.

키를 받고, 화장실을 사용하는 상황을 한 쓰레드가 제한 된 자원을 사용 중으로 lock 상태라고 표현한다.
그 키를 통해 용무를 마치고 카운터로 돌아와 키를 제자리에 두는 것을 unlock 이라고 표현 할 수 있고 그 상태이여야만 다른 사람이 처음 사용한 사람의 절차를 통해 화장실을 이용하는 것 처럼 자원을 소유할 수 있다.

자 다음엔 세마포어에 대한 설명이다.

이번에도 비유를 화장실로 들지만, 휴게소 화장실로 생각하면 편할 것 같다.

소변기는 3개가 있다.

용무를 보고 싶은 사람이 소변기보다 많다고 가정 했을 때,
소변기는 제한적으로 3개가 있다. 먼저 온 사람부터 사용을 하고 있을 때,
사용할 수 있는 소변기는 순차적으로 줄어든다.
사용이 끝나서 자리를 떠나면 사용할 수 있는 소변기 +1 이 되며,
이후에 사람이 사용하게 되면서 -1이 된다.

멀티 쓰레드는 각 스택을 가지고 있고 나머지 자원에 대해서 선점을 해서 사용을 하게 되는데
이를 통해서 사용 중인 상태에서 다른 쓰레드가 자원에 접근을 하게 되서 문제가 되는 걸
data race라고 한다. 이를 막기 위해서 rock 을 해서 다른 사람들의 접근을 제한한다.
주의할 점은 잘못된 조건식을 사용한다면 아무도 안 쓰고 있는데 다른 사람들로 하여금 접근이 제한되고
그 다른 사람은 그 사람으로 하여금 접근이 제한되어 서로 사용할 수 없는 상황 ( 이것을 뭐라고 부르더라? ) 이 발생할 수 있다.

그리고 철학자 컨셉으로 돌아가서 철학자들은 인원수 만큼의 테이블에 포크가 있는데,
꼭 두 개가 양 손에 각각 쥐어진 ( rock ) 상태로 식사를 할 수 있다.
또한 철학자들 ( 멀티 쓰레드 ) 가 생성되는 순간에 식사를 하지 못 하고 수명에 다달아서
죽는 오류 또한 확인해야한다.

eat rock unrock 사이에 어떤 처리를 해야 data race가 발생하지 않는 데 어떤 부분인지는 잘 모르겠다.
흥 나도 몰라

profile
자주 봅시다

0개의 댓글