2017-12-09 2 views
-1

안녕하십니까? 스택 오버플로 공동체

Silveschatz, Galvin 및 Gagne의 "Operating System Concepts (2012)"를 읽는 중입니다. "두 개의 test_and_set() 명령을 동시에 (각각 다른 CPU에) 실행하면 다음과 같이 표시됩니다. 임의의 순서로 순차적으로 실행됩니다. "210 페이지에서 왜 두 개의 기관이 멀티 프로세서에서도 을 순차적으로 실행하는지 이해할 수 없습니다. 각 명령어가 다른 프로세서에서 실행되면 어떻게 될까요? 내가 아는 한,이 두 기관은 동시에 을 처형합니다.

명령어의 원 자성에 대한 나의 이해와 멀티 프로세서는 아주 표면적 인 수준에 머물러있어 문제를 당연한 것으로 받아 들일 수 있습니다. 아무도 나를 도와 줄 수 없나요?test_and_set() 명령이 다중 프로세서에서 계속 작동 할 수 있습니까?

답변

1

테스트 세트의 핵심은 한 프로세서가 먼저 실행 한 다음 다른 프로세서가 실행하고 이 아니고이 동시에 수행한다는 것입니다.

이렇게하려면 두 프로세서간에 통신이 이루어져야합니다. 기본적으로 하나의 프로세서는 메모리 위치를 포함한 캐시 라인을 메모리에서로드하고 테스트 및 설정이 모두 완료 될 때까지 캐시 라인을 가질 수 없다고 다른 프로세서에 알립니다.

1

결과는 기계 명령에 따라 다릅니다.

http://www.ece.lsu.edu/ee4720/doc/vax.pdf

VAX는 BBSS있다 (비트에 지점을 설정하고 설정) 명령 및 비트 설정하고 설정에 BBSSI (지점 : 그것이 프로세서 이해하기 쉬운 나를 예로 들어 VAX를 사용하자 연동) 명령. 당신은 당신이 얻을 수있는 같은 명확한 비트에 BBSS을하고 2 개 프로세서가있는 경우

: 당신은 같은 비트에 BBSSI을 할 경우

P1 Tests Bit (Clear) 
P2 Tests Bit (Clear) 
P1 Sets Bit and does not branch 
P2 Sets Bit and dot not branch 

는, 프로세서는 메모리를 잠급니다. 당신은 얻는다

p1 locks the memory 
p1 Tests Bit (Clear)  
P2 Tests Bit and is Blocked 
P1 Sets Bit and does not branch 
p1 unlocks the memory 
P2 Tests Bit (SET) 
P2 Branches 

대부분의 경우 단일 단계로 실행되지 않으며 프로세서는 서로 독립적으로 작동 할 수 있습니다.

+0

고맙습니다! 정말 훌륭한 답변과 자료! 링크에서 BBSSI에 대한 설명을 읽었습니다. 나는 비트가 "메모리에 포함되어 있다면, 비트의 상태를 읽고 값을 새로운 상태로 설정하는 것은 연동 된 연산이다"라고 조금 혼돈 스럽습니다. 테스트 할 비트 세트는 메모리 또는 프로세서의 레지스터에 포함될 수 있습니까? 그것이 하나의 레지스터에 포함되어 있다면, 우리는 비트를 인터록 할 필요가 없지만 비트가 레지스터에 있기 때문에 BBSSI가 프로그래머에 의해 사용되는 방법은 무엇입니까? – Mark

+0

VAX는 직교 인스트럭션 세트를 가지고 있습니다. 즉, 레지스터를 사용하는 메모리의 이동 주소를 제외하고 모든 피연산자에 대해 모든 어드레싱 모드를 허용합니다. 따라서 BBSSI 명령어를 레지스터 피연산자와 함께 사용할 수 있습니다. 이 경우 실행은 연동되지 않으며 BBSS 명령처럼 작동합니다. 정말로 많은 의미를 갖지는 않을 것입니다. – user3344003

관련 문제