운영체제에서 프로세스 상태도에 대해 질문있습니다.

조회수 2257회

프로세스 상태도를 보면 new, ready, running, waiting 등등의 상태가 있습니다.

이때 프로세스는 입출력 이나 이벤트가 있을때 바로 ready로 안가고 waitng을 하다가 ready상태로 갑

니다. 여기서 질문은 running상태에서 바로 ready상태로 가지 않고 waiting상태로 가면 cpu의 이용률

을 높일 수 있다고 하던데 어떤거에 의해서 cpu의 이용률을 높일 수 있나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • Ready 상태는 OS 스케쥴러에 의해 CPU에 할당되길 기다리고 있는 상태이고 Waiting은 IO 완료 등 어떤 이벤트가 발생하길 기다리고 있는 상태입니다.

    만약 IO 완료를 기다리는 프로세스가 Ready 상태에 있다고 가정하면 해당 프로세스가 스케쥴되면 아직 끝나지 않은 IO 완료를 기다리면서 CPU가 연산을 수행하지 한고 놀기 때문에 CPU 이용률이 떨어지겠죠?

    요런 이유로 특정 이벤트를 기다려야 할 때 Ready가 아닌 Waiting 상태로 가게 되는 것입니다.

    (혹 제 답변이 틀렸거나, 보충 내용이 필요하다 생각되시면 댓글 부탁드려요)

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 질문의 의도를 잘 파악이 안되어 일단 서술하여 보았습니다.

    • Running 상태에서 Waiting으로 가는 것은 I/O 등 특정 자원에 접근하여, 해당 자원에 대한 요청을 한 후 그에 대한 응답을 기다리는 상태라고 볼 수 있습니다.

    • Running 상태에서 Ready로 가는 것은 스케줄러에 의해서 최대한의 CPU를 쓴 후에 강제로 다른 프로세스에게 양도한 경우입니다.

    관점에 따라 나누어 살펴보면 다음과 같습니다.

    특정 프로세스 입장

    다른 프로세스들이 Waiting으로 가는 것이, 독점적으로 CPU를 사용할 수 있을 확률을 높아짐으로 CPU의 이용률(Usage)가 높아질 수 밖에 없습니다.

    운영체제 입장

    모든 프로세스가 균일한 실행기회를 받고 있고, 운영체제가 개입하여 사용하게 되는 CPU의 이용율을 0이라고 가정하면, CPU 이용율은 다음과 같을 것입니다.

    • CPU 이용율 = 프로세스들의 CPU 이용율의 총합

    따라서 프로세스 하나가 독점하는 것이나, 여러개의 프로세스가 나누어 쓰는 것이나 다르지 않습니다.

    여기에서 프로세스의 상태를 변경하고, 스케줄링하면 컨텍스트 스위칭(Context Switching)이 일어나게 되는 데 이 비용이 0이 아닐 경우(이 논의에서 운영체제의 다른 비용은 무시합니다.), CPU 이용율은 다음과 같습니다.

    • CPU 이용율 = 컨텍스트 스위칭 비용 + 프로세스들의 이용율의 합

    여기에서 보면 컨텍스트 스위칭이 비용만큼, 프로세스들이 CPU를 사용하지 못함으로 손해가 발생합니다. 컨텍스트 스위칭은 Ready 상태 <-> Running 상태에 있는 프로세스들간에 일어나는 일임으로, Ready 상태인 프로세스가 많을 수록 자주 발생할 것이고, 이는 전체적으로 손해가 높아진다고 볼 수 있습니다.

    반대로 말하면 프로세스들이 Ready가 아닌 Waiting 상태로 전환되게 되면, 전체적인 컨텍스트 스위칭 비용이 감소하게 됨으로, 실제 프로세스들이 사용하는 CPU 이용율이 높아질 것입니다.

    정리하면, 컨텍스트 스위칭 비용이 전체에 차지하는 비용이 높을 수록 프로세스들의 이용율이 낮아짐으로, Ready 상태 프로세스가 적은게 확실히 유리합니다. 반대로 컨텍스트 스위칭 비용이 전체 차지하는 비용이 낮을 수록, Ready 상태 프로세스의 수에 영향을 덜 받게 됩니다.

    답변이 되었는지 모르겠습니다.

    • 답변 감사합니다! 바로 Ready가 아닌 Waiting 상태로 전환하게되면, 전체적인 컨텍스트 스위칭 비용이 감소하게 되서 손해가 높아진다고 하셨는데, 특정이벤트나 I/O 가 완료되면 Waiting 상태에서 다시 Ready 상태로 이동하게 되서 어차피 컨텍스트 스위칭 비용은 들 수밖에 없어서 손해나는건 똑같다고 생각합니다~ 알 수 없는 사용자 2016.4.6 09:58
    • 알 수 없는 사용자 2016.4.6 10:03
    • Waiting에 있는 시간이 짧은 경우는 똑같겠지만, Waiting에 있는 시간이 길게 되면, 비용이 차이가 많이 납니다. 가령 두개의 프로세스 A,B가 있는 데, B는 스케줄링 1틱 CPU를 사용하고, 2틱을 I/O에 소비한다고 가정하면, ABAABAA와 같이 스케줄링 됩니다. 이 경우는 컨텍스트 스위칭이 총 4번 일어납니다. 반대로 B가 스케줄링 1틱 CPU를 사용하고 1틱을 I/O에 소비한다고 하면, ABABABA와 같이 일어남으로, 같은 기간에 총 6번일어나게 되죠. 허대영(소프트웨어융합대학) 2016.4.6 14:38

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)