열렬히.뛰기

3장 연습문제

운영체제 > Part 2 : 프로세스 관리 > 3장 연습문제

  1. 다음 그림에 표시된 그림을 사용해 Line A에 출력되는 내용을 설명할 것

해당 부분은 부모 프로세스가 실행시키는 부분.

나오는 내용은 문자열 ⇒ “PARENT: value = 5”.

왜? 자식 프로세스는 부모 프로세스의 값을 들고 나오지만, 이후로는 각각의 메모리 영역을 가지고 있기 때문.

자식 프로세스가 부모 프로세스에게 값을 주지 않는 이상, 부모 프로세스의 value가 변하지는 않는다.

  1. 최초의 프로세스를 포함해 그림 속 프로그램에 의해 몇 개의 프로세스가 만들어지는가?

총 8개가 만들어진다.

  1. Apple iOS는 시간이 지나면서 병행처리를 추가했다.

    병행처리로 인해 운영체제에 추가되는 3가지 주요 문제는?

1. CPU는 여러 개의 프로세스에 대한 정보를 가지고, 각 프로세스에 대한 
스케줄링을 제공해야 한다.
2. 각 프로세스끼리 통신할 수 있도록 IPC method를 개발할 필요성이 있다.
3. 모바일 기기의 경우 메모리에 제한이 있기 때문에, 멀티 프로세싱을 
지원하기 위해 사용되는 메모리가 다른 프로세스의 실행에 영향을 미칠 
수 있다. 그러므로 메모리를 적절히 관리할 필요성이 있다.
  1. 일부 컴퓨터 시스템은 다수의 레지스터 집합을 사용한다.
    1. 새 문맥이 레지스터 집합 중 하나에 이미 적재된 경우 문맥 교환 시 어떠한 일이 벌어지는가?
    2. 새 문맥이 레지스터 집합이 아닌 메모리에 있고, 모든 레지스터 집합이 사용 중이면 어떤 일이 발생하는가?
a. CPU의 레지스터 포인터는 새로운 context를 포함한 레지스터를 가리킨다.
b. 만약 context가 메모리에 있는 경우, 레지스터에 있는 context 중 
하나는 반드시 선택되어, 메모리로 이동한다. 그리고 새로운 context를 
해당 위치에 로드된다.
  1. 프로세스가 fork() 연산을 사용하여 새 프로세스를 생성할 때 다음 중 어떤 상태가 부모 프로세스

    와 자식 프로세스 간에 공유되는가?

    A. 스택

    B. 힙

    C. 공유 메모리 세그먼트 → 정답

  2. RPC 메커니즘과 관련해 “정확히 한 번” 시멘틱(문맥)을 고려하자.

    1. 네트워크 문제로 인해 클라이언트로 전송된 ACK 메세지가 손실된 경우에도 이 시맨틱을 구현한 알고리즘이 올바르게 실행되는가?
    2. 메시지 전달 순서를 설명하고 “정확히 한 번”이 여전히 구현되는지 여부를 논의해보라.
"exactly once"의 경우 프로시저가 정확히 한번 실행될 수 있도록 하기 위한 장치로, 
일반적으로 Timestamp와 ACK(acknowledgment) 스키마를 이용한다. 이때 client는 timeout 
clock을 같이 사용하는데, timeout clock이 종료될 때까지 응답이 되돌아오지 않으면 
다시 요청을 보낸다.

client는 서버에게 요청을 보낼 때 client 는 서버에게서 remote procedure(프로시저)가 
수행되었다는 ACK 메시지를 받거나, timeout이 나게 된다.

timeout이 발생하는 경우, 두 가지의 상황을 예측해 볼 수 있다. 
(1) 원래의 RPC가 네트워크 문제 등으로 인해 서버에 도달하지 않은 경우
이 경우 timeout 이후에 client에서 다시 요청을 보내기 때문에, 
언젠가는 서버에서 RPC를 받고, 수행하게 된다.

(2) RPC가 서버에 제대로 도착했으나, 수행되었다는 ACK 메시지가 
네트워크 문제로 전달되지 않은 경우.
이 경우 timeout 이후에 client에서 다시 요청을 보내기 때문에 서버는 중복된 RPC를 받는다. 
그러나 요청에 포함된 timestamp를 이용해서 그것이 중복되었다는 것을 확인한 후 재실행하지 
않는다. 이후 서버는 두 번째 요청에 대한 ACK 메시지를 클라이언트에게 보낸다. 
(첫 번째 요청에 대한 메시지를 보내는 것이 아님)
  1. 분산 시스템이 서버 장애에 취약하다고 가정하자.

    RPC 실행을 위한 “정확히 한번” 시맨틱(문맥)을 보장하기 위해 어떤 기법이 필요한가?

The server should keep track in stable storage (such as a disk log) 
of information regarding what RPC operations were received, 
whether they were successfully performed, and the results associated 
with the operations. When a server crash takes place and an RPC message 
is received, the server can check whether the RPC has been previously 
performed and therefore guarantee “exactly once” semantics for the 
execution of RPCs.