강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이지민님의 프로필 이미지
이지민

작성한 질문수

그림으로 쉽게 배우는 운영체제

공유자원과 임계구역

공유자원과 동기화 문제에 관해서 질문이 있습니다.

해결된 질문

작성

·

118

·

수정됨

0

안녕하세요. 감자님.

강의 듣던 도중에 표현 상에서 어색한 부분(?)이 있는 것 같아 질문드립니다.

  1. 프로세스가 컨텍스트 스위칭으로 인해 시분할처리되면서 사용자 입장에서는 프로세스의 실행 순서를 예측하기가 어렵다. 따라서 연산 결과를 예측하기 힘들고 이를 동기화 문제라고 하셨는데

    연산 결과라기 보다는 공유 자원에 대한 접근 순서라고 하는 편이 더 정확하지 않을까요?

    연산 결과가 잘못된다는 것은 결국 프로세스 실행 순서가 잘못되어 해당 프로세스가 공유 자원에 접근할 순서가 아닌데 접근해서 처리되면서 그로 인해 예상했던 연산 결과값이 아니다 라고 생각을 합니다.

    뭔가 디테일한 설명이 생략된 것 같아서 질문드립니다.

 

  1. 운영체제는 프로세스의 실행 순서를 관리 및 결정하지만, 실행 결과에는 관여하지 않는다. 즉, 큐에서 프로세스를 꺼내 CPU를 통해 처리를 하도록 하는 것이지, 결과는 운영체제 알 바가 아니다. 라고 생각하는데 맞을까요? 이 부분은 강의에 나온 게 아니라 제가 따로 생각해 본 부분입니다.

     

답변 2

0

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 이지민님!
궁금증이 두 가지가 있으셔서 순서대로 설명드리겠습니다.

  1. 영상 초반부(0:26)에 "공유자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있습니다"라고 먼저 설명합니다.
    이후 게임 코드를 예시로 설명할 때(2:22) "결과가 이렇게 엉망으로 된 이유는 health라는 공유자원을 여러 프로세스가 동시에 사용했기 때문입니다"라고 다시 한 번 공유자원 접근 순서에 대한 언급이 있습니다.
    지민님께서 말씀하신 "연산 결과가 잘못된다는 것은 결국 프로세스 실행 순서가 잘못되어 해당 프로세스가 공유 자원에 접근할 순서가 아닌데 접근해서 처리되면서 그로 인해 예상했던 연산 결과값이 아니다 라고 생각을 합니다." 라는 내용과 다르지 않는 설명이라고 생각합니다.

  2. 맞습니다. 운영체제는 프로세스의 실행 결과를 컨트롤 하지는 않습니다.
    프로세스의 실행 결과는 프로세스의 코드와 데이터를 CPU가 직접 연산을 하면서 결과를 도출하는 것이기 때문입니다.

궁금증이 해결되셨나요?

이지민님의 프로필 이미지
이지민
질문자

예제를 통해 쉽게 풀어진 정의를 제 나름대로 다시 써보려다 보니 애매하고 어색한 부분이 있어서 질문드렸습니다.

제 나름대로 강의에서 나온 용어에 대한 정의를 써봤는데 확인 부탁드립니다.

  1. 공유자원: 프로세스/쓰레드 간 통신을 할때 여러 프로세스/쓰레드가 공동으로 이용하는 자원 (메모리, 변수, 파일, 데이터 등...)

  2. 동기화 문제: 프로세스/쓰레드의 올바르지 못한 공유 자원 접근 순서로 인해 예상치 못한 결과가 발생하는 것

  3. 임계구역: 여러 프로세스/쓰레드가 동시에 사용하면 안되는 영역. 공유자원을 수정하는 코드 부분이며 한 번에 하나의 프로세스/쓰레드만 접근해야 하는 영역

  4. 경쟁 조건: 여러 프로세스/쓰레드가 동일한 공유자원을 동시에 접근하려고 경쟁할 때 발생하는 문제

감자님의 프로필 이미지
감자
지식공유자

공유자원, 동기화 문제, 임계구역은 잘 이해하신 것 같습니다.

경쟁 조건은 여러 프로세스/쓰레드가 동일한 공유자원을 동시에 접근해 문제가 발생할 수 있는 상황을 말합니다.
(동기화 문제를 해결하지 않았다면 경쟁 조건에 빠지게 됩니다.)

이지민님의 프로필 이미지
이지민
질문자

이해했습니다! 확인 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

이지민님께서 공유 자원과 동기화 문제에 대해 질문을 주셨네요. 프로세스의 컨텍스트 스위칭과 관련된 동기화 문제는 운영체제에서 매우 중요한 주제입니다. 질문 주신 내용을 바탕으로 각각의 문제를 설명드릴게요.

  1. 프로세스 동기화와 공유 자원 접근

    • 이지민님께서 언급하신 대로 동기화 문제는 “연산 결과”보다는 “공유 자원에 대한 접근 순서”의 문제로 보는 것이 더 정확합니다. 시분할 처리를 통해 여러 프로세스가 동시에 실행되는 것처럼 보이지만, 실제로는 순차적으로 실행됩니다. 따라서 각 프로세스가 자원을 제때에 접근하지 못하면 예측하지 못한 연산 결과가 발생할 수 있습니다. 운영체제는 이러한 불확실성을 방지하기 위해 동기화 메커니즘(예: 세마포어, 뮤텍스 등)을 제공합니다.
  2. 운영체제의 역할

    • 운영체제는 프로세스 스케줄링을 통해 어떤 프로세스가 언제 실행될지를 결정합니다. 그러나 말씀하신 것처럼 실행 결과 자체에 직접 관여하지는 않습니다. 운영체제는 프로세스가 CPU에서 실행될 수 있도록 지원하는 기능을 제공할 뿐, 최종 연산 결과는 프로세스가 가진 코드와 로직에 따라 결정됩니다. 실행 순서의 관리 및 결정이 운영체제의 중요한 역할이지만, 최종 결과는 프로세스의 문제입니다.

참고할 수 있는 질문 링크를 먼저 소개드립니다:

  1. FIFO 알고리즘에 대한 질문입니다. - 연산과 자원 접근 문제에 대한 질의응답을 참고하세요.
  2. 프로세스와 알고리즘 등 관련 질문. - 프로세스 스케줄링과 운영체제의 역할에 대해 심도 깊은 논의가 진행된 답변입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이지민님의 프로필 이미지
이지민

작성한 질문수

질문하기