해결된 질문
작성
·
157
1
안녕하세요! 강의 정말 유익하게 잘 듣고 있습니다.
이번에 동기화 단원을 듣게 되면서, 몇가지 궁금증이 생겨서 질문을 하게 되었습니다.
A 프로세스 혹은 쓰레드가 임계구역에서 작업을 수행하고 있었다고 가정을 하겠습니다. 이때 cpu가 지정한 타임 슬라이스를 초과하여 cpu를 사용하였고, 임계 구역에서의 진행이 완료되지 않은 상태로 타이머 인터럽트가 발생하였다고 가정을 하겠습니다. 이러한 상황에서 만약 새로운 프로세스 B가 해당 임계구역에 접근을 하게 된다면, 이에 대한 부분은 어떻게 처리가 되는 것인지 궁금합니다. 기존의 공유 자원이 업데이트 되지 않은 상태로 진행이 되게 되면, 분명히 레이스 컨디션이 발생할 수 도 있다고 생각이 듭니다.
세마포의 경우에는 임계 구역에 진입할 수 있는 프로세스의 개수, 즉 사용 가능한 공유 자원의 개수를 전역변수로 설정하여 여러 개의 공유자원을 관리할 수 있다고 하셨습니다. 그렇다면 세마포의 경우에는 각 공유자원의 종류에 따라 구분하여 관리는 할 수 없는 것인지 여쭤보고 싶습니다. 이것이 세마포의 단점? 이 되는 것인지 궁금합니다.
운영체제는 처음 공부해 보는 것이라서 질문이 좀 난잡하고 불명확할 수 있다는 점 죄송합니다.
열정적인 강의 덕분에 재미있게 공부를 할 수 있는 것 같습니다!
항상 감사합니다.
답변 2
1
안녕하세요!
강의를 좋게 들어주셔서 감사드립니다 :)
하나씩 답변드리겠습니다.
1번 질문
좋은 질문입니다. 실제로 타임아웃으로 인한 문맥 교환으로 인해 레이스 컨디션이 발생하는 경우가 많습니다.
가정하신 상황에서의 A는 이미 임계구역으로 진입을 해 있는 상태입니다.
('A 프로세스 혹은 쓰레드가 임계구역에서 작업을 수행하고 있었다'고 가정하셨으니까요)
이때 작업이 끝나지 않았다는 것은 A가 아직 임계구역을 빠져나가지 못했다는 의미이니,
이 상태에서 B가 실행되면 임계 구역을 두 프로세스 혹은 쓰레드가 실행하게 딥니다.
즉 레이스 컨디션이 발생할 수 있게 됩니다.
2번 질문
일반적으로 세마포를 프로그래밍 언어에서 사용할 때에는
세마포로 관리할 공유자원의 개수만큼 세마포를 만들게됩니다.
예를 들어 A, B, C 자원이 각각 2, 3, 4개 있을 경우
세마포 세 개를 만들고 각 공유자원의 개수를 2, 3, 4개로 설정하는 식이지요.
새해복 많이 받으세요~!
1
안녕하세요, 인프런 AI 인턴입니다.
1번 질문에 대한 답변입니다. 만약 프로세스 A가 타임 슬라이스를 초과하여 CPU 사용 중 타이머 인터럽트가 발생하고 임계 구역의 작업이 완료되지 않았다면, 운영체제의 스케줄러는 프로세스 A를 이루는 임계 구역에서 중단시키고 상태를 저장합니다. 그 후 다른 프로세스 B가 해당 임계 구역에 접근하려 할 때, 이미 임계 구역에 있는 프로세스 A 때문에 접근할 수 없도록 동기화 메커니즘(예: 뮤텍스, 세마포)에 의해 그 접근이 차단되어야 합니다. 이러한 메커니즘은 레이스 컨디션을 방지하여 프로세스 간 안전하게 공유 자원을 사용할 수 있게 도와줍니다.
2번 질문에 대한 답변입니다. 세마포는 한 번에 하나의 단위로 공유 자원의 접근을 제어하기 위해 사용되는 변수입니다. 공유 자원의 종류에 따라 따로 세마포를 할당하여 관리할 수도 있습니다. 다만, 각각의 공유 자원을 개별적으로 구분하여 관리해야 하는 복잡성이 증가한다는 점이 단점이 될 수 있습니다. 세마포는 하나의 자원에 대한 접근을 제어하는 것이 기본적인 용도이므로, 공유 자원의 종류별로 세밀하게 제어가 필요할 경우 세마포를 종류별로 관리해야 할 필요가 있습니다.
운영체제 공부에 도움이 되기를 바라며, 궁금한 점이 더 있으시다면 언제든지 질문해 주세요. 열정적으로 공부하고 계신 모습이 인상적입니다. 학습에 성공적이길 바랍니다!
감사합니다.
열정적인 답변 감사드립니다.
강사님도 새해 복 많이 받으세요~