여기서 다중 프로그래밍에 대한 실용적인 경험을 나누고 싶습니다.공정성 : 어디에서 더 잘 처리 할 수 있습니까?
어제 저는 멀티 프로그램을 작성했습니다. P (뮤텍스)와 V (뮤텍스)로 보호되는 중요 섹션 아래에 공유 가능한 리소스에 대한 수정 사항을 넣었으며 이러한 중요한 섹션 코드는 공용 라이브러리에 저장되었습니다. 라이브러리는 (내 자신의) 동시 응용 프로그램에서 사용됩니다.
라이브러리의 공통 코드를 사용하고 독립적으로 작업을 수행 할 세 가지 응용 프로그램이 있습니다.
my library
---------
work_on_shared_resource
{
P(mutex)
get_shared_resource
work_with_it
V(mutex)
}
---------
my application
-----------
application1
{
*[
work_on_shared_resource
do_something_else_non_ctitical
]
}
application2
{
*[
work_on_shared_resource
do_something_else_non_ctitical
]
}
application3
{
*[
work_on_shared_resource
]
}
*[...] denote a loop.
------------
Linux OS에서 응용 프로그램을 실행해야했습니다. 나는 OS가 모든 공정성으로 그 밑에서 실행되는 모든 프로세스를 스케줄링해야한다는 생각을 수년간 생각해왔다. 즉, 모든 프로세스와 리소스 사용량을 동일하게 제공합니다.
처음 두 응용 프로그램이 작동되면 데드락없이 완벽하게 실행됩니다. 그러나 세 번째 응용 프로그램이 실행되기 시작하면 항상 세 번째 응용 프로그램이 자원을 확보하지만 비 핵심 영역에서는 아무 것도하지 않기 때문에 다른 작업이 다른 작업을 수행 할 때 공유 리소스를 더 자주 가져옵니다. 따라서 다른 두 응용 프로그램은 거의 완전히 중단되었습니다. 세 번째 응용 프로그램이 강제 종료 된 경우 이전 두 응용 프로그램은 이전과 마찬가지로 작업을 다시 시작합니다.
나는 이것이 기아의 사례라고 생각하는데, 처음 두 응용 프로그램은 굶어 야했다.
이제 공정성을 어떻게 보장 할 수 있습니까?
이제 OS 스케줄러가 결백하고 장님이라고 믿기 시작했습니다. 누가 레이스에서 우승 했느냐에 달렸습니다. 그는 CPU와 리소스의 최대 파이를 확보했습니다.
라이브러리의 중요 섹션 코드에서 리소스 사용자의 공정성을 보장합니까?
아니면 우리는 욕심이 아닌 자유 주의적으로 공정성을 보장하기 위해 신청서에 남겨 두어야합니까?
제 생각에 공통 라이브러리에 대한 공평성을 보장하는 코드를 추가하는 것은 압도적 인 작업입니다. 반면에 응용 프로그램을 믿는다면 결코 100 % 공정성을 보장 할 수 없습니다. 공유 자원으로 작업 한 후 아주 작은 작업을 수행하는 응용 프로그램은 공유 자원으로 작업 한 후 무거운 처리를하는 응용 프로그램이 항상 굶어야하는 경주에서 우승해야합니다.
이 경우 가장 좋은 방법은 무엇입니까? 공정성과 방법을 보장하는 곳은 어디입니까? 감사합니다
,스 리니 바스 나약