semget 을 통해 세마포어 ID 를 얻었습니다.
프로세스에서 이제 한동안 사용할 필여가 없어서
semget 으로 얻은걸 잠시 프로세스에서 분리 할려고 하는데요
어떻게 해야하는거죠?
세마포어 뿐만 아니라 공유메모리도 궁금하네요.
semctl 로 IPC_RMID 하는 건 삭제이지 detach 는 아닌 것 같던데...
처음 semget 으로 세마포어 id 를 얻어 올 때 UNDO 기능을 활성화하면 커널이 해당 프로세스를 감시하고 있다가 unlock 를 하지 않고 종료하면 자동으로 unlock 을 해주는 기능이죠. (이 반대의 경우도 있겠죠)
만약 lock 상태에서 프로세스가 kill 로 죽거나 세크먼트폴트로 죽게 됐을 때 커널이 알아서 unlock 을 해주는 건데요.
그렇기 때문에 undo 를 하기 위한 기존 상태등의 정보를 커널이 프로세스가 죽기전까지 계속 갖고 있습니다.
근데 이게 솔라리스의 경우 동일한 키의 세마포어에 대해 30개 프로세스가 undo 등록을 할 수 있는게 기본 값이더군요.
시스템 컨피그 파일을 수정해서 그 갯수를 늘리는 방향 보다, 그 프로세스를 감시하지 않도록 하고 다시 필요할때 감시를 부탁하는 방법을 사용할려고 합니다.
세마포어에서 detach란 개념이 없는것으로 아는데
학교다닐때 공부한거 밖에 없어서... 100%자신감으로 말씀드리는 것은 아니지만.. ^^
세마포어가 생성될때
커널에 의해서 시스템 영역의 세마포어 객체(구조체)가 생성되고
각 사용자 프로세스는 semget()으로 시스템영역의 세마포어객체를 식별할 수 있는 ID를 부여받고..............
세마포어 값을 올렸다 내렸다 합니다.
도저히 detach라는 용어를 붙일만한 구석이 없는거 같은데요
세마포어를 사용안하려면 안하면 그만입니다.
참고로....
attach/detach는 공유메모리에서 사용하는 개념인거 같은데.
공유메모리를 프로세스 영역에 붙였다 떼었다 하는 것입니다.
세마포어는 프로세스 영역에 붙였다 떼었다 할게 없는것 같은데요
@.@
세마포어도 연결이 됩니다.처음 semget 으로 세마포어 id 를
세마포어도 연결이 됩니다.
처음 semget 으로 세마포어 id 를 얻어 올 때 UNDO 기능을 활성화하면 커널이 해당 프로세스를 감시하고 있다가 unlock 를 하지 않고 종료하면 자동으로 unlock 을 해주는 기능이죠. (이 반대의 경우도 있겠죠)
만약 lock 상태에서 프로세스가 kill 로 죽거나 세크먼트폴트로 죽게 됐을 때 커널이 알아서 unlock 을 해주는 건데요.
그렇기 때문에 undo 를 하기 위한 기존 상태등의 정보를 커널이 프로세스가 죽기전까지 계속 갖고 있습니다.
근데 이게 솔라리스의 경우 동일한 키의 세마포어에 대해 30개 프로세스가 undo 등록을 할 수 있는게 기본 값이더군요.
시스템 컨피그 파일을 수정해서 그 갯수를 늘리는 방향 보다, 그 프로세스를 감시하지 않도록 하고 다시 필요할때 감시를 부탁하는 방법을 사용할려고 합니다.
하하하 attach/detach 는 제가 개인적으로 붙인거라 다른 분들이
하하하 attach/detach 는 제가 개인적으로 붙인거라 다른 분들이 이해를 못 하셔서 답변이 없었나 보군요.
여기에 대한 용어를 몰라서 공유메모리와 비슷한 느낌의 용어를 사용했던건데 다른 분들이 공감을 못 하셨나 보군요. :oops:
원래 용어는 모르겠고, 제가 의미하는바는 UNDO 에 대한 감시를 의미하는 것있었습니다.
댓글 달기