12.1 이 장에서 설명한 SPMD 프로그래밍과 MPMD 프로그래밍을 비교하여 논하라
SPMD 프로그래밍은 현재의 프로세스를 두 개 이상의 프로세스로 분리하여 똑같은 프로그램의 사본을 계속해서 사용하도록 하는 것이다. 이 경우에 프로세스 하나를 부모 프로세스, 또 다른 하나를 자식 프로세스라고 구분한다. 이 프로세스들은 프로세스 식별자나 다른 조건의 검사에 의해서 다른 코드를 수행할 수 있는 프로그래밍이고 MPMD 프로그래밍은 프로세스 생성의 두 번째 방법에서는 한 코드의 세그먼트가 프로세스와 명시적으로 관련을 맺는다. 그래서 다른 프로세스는 각기 다른 코드를 가지며 이 방법을 MPMD라 한다.
12.2 이 장에서는 어떤 이유로 fork-join 대신에 MPMD라는 용어를 사용했는지 논하라
한 프로세스가 몇 개의 자식 프로세스를 생성하는데 각기 자신의 코드를 소유하며(a fork), 이 부모 프로세스는 모듈들의 프로세스가 끝나기를 기다린다(a join), 불행히도 UNIX 시스템 호출 fork()는 실제로 SPMD 프로세스 생성기이고 fork-join 생성기가 아니기 때문에 이름에 혼동이 생긴다. 그래서 fork-join 생성기라기 보다는 MPMD 프로세스 생성기라는 용어 사용을 더 좋아한다.
12.3 프로그램에서 병행성의 세가지 수준은 무엇이고, SIMD 컴퓨터에 의해 가장 잘 지원되는
프로그램 병행성의 수준은 무엇인가? 또, MIND 컴퓨터에 의해 가장 잘 지원되는 프로그램 병행성의 수준은 무엇인가?
명령어 수준의 병렬성- 작은 덩이
프로시저 수준의 병렬성- 중간덩이
프로그램 수준의 병렬성- 큰덩이
(작은덩이: 입상 프로세스 생성 유지 오버헤드)
(큰덩이: 병렬성 부여 기회 소멸)
12.4 세마포어를 위한 wait 연산과 release 연산을 서술하시오.
P(wait): 네덜란드어로 Proberen에 유래하며 test의 의미
12.5 세마포어는 busy-waiting 과 상호 배제 기법을 사용하여 구현 될 수 있다. 각 프로세스가 지역변수인 flag를 사용하여, s를 감소하고 비교할 때 testandset 명령을 사용하여 구현하였다고 가정하자. 그러면 아래와 같은 기법이 갖는 장단점을 논하라
wait(s) : flag :=true
while flag do
mutexbegin
if s > 0 then s := s - 1
flag := false
endif
mutexend
repeat
signal(s) : mutexbegin
s :=s+1
mutexend

분야