본문 바로가기

공부 기록/OS

[OS/공룡책] Chapter 3. 프로세스 - 연습 문제

 

1. 그림 3.30에 표시된 프로그램을 사용하여 LINE A에서 출력되는 내용을 설명하라.

- 자식 프로세스가 값 복사본을 업데이트하므로 5를 출력한다. 제어가 부모 프로세스에 반환되면 값은 5로 유지된다.


2. 최초의 부모 프로세스를 포함하여 그림 3.31에 표시된 프로그램에 의해 몇 개의 프로세스가 생성되는가?

- 8개의 프로세스가 생성된다.


3. Apple 모바일 iOS 운영 체제의 원래 버전은 병행 처리 기법을 제공하지 않았다. 병행 처리로 인해 운영체제에 추가되는 세 가지 주요 문제에 대해 논의하라.

- CPU 스케줄러는 서로 다른 동시 프로세스를 인식해야 하며 동시 프로세스를 스케줄링하는 적절한 알고리즘을 선택해야 한다. / 동시 프로세스는 서로 통신해야 할 수도 있다. 그러므로 운영 체제는 프로세스 간 통신을 제공하기 위한 하나 이상의 방법을 개발해야 한다. / 모바일 장치는 보통 메모리가 제한되어 있기 때문에 메모리를 제대로 관리하지 않는 프로세스는 다른 동시 프로세스에 전반적으로 부정적인 영향을 미친다. 따라서 운영 체제는 여러 동시 프로세스를 지원하기 위해 메모리를 관리해야만 한다.


4. 일부 컴퓨터 시스템은 다수의 레지스터 집합을 제공한다. 새 문맥이 레지스터 집합 중 하나에 이미 적재된 경우 문맥 교환 시 어떤 일이 발생하는지 설명하라. 새 문맥이 레지스터 집합 아닌 메모리에 있고 모든 레지스터 집합이 사용 중이면 어떤 일이 발생하는가?

- CPU current-register-set 포인터는 새로운 컨텍스트를 포함하는 집합을 가리키도록 변경되며, 이는 매우 적은 시간이 소요된다. 컨텍스트가 메모리에 있는 경우, 레지스터 집합의 컨텍스트 중 하나를 선택하여 메모리로 이동하고 새로운 컨텍스트를 메모리로부터 집합으로 로드해야 한다. 이 프로세스는 대체 희생자를 선택하는 방법에 따라 레지스터 집합이 하나인 시스템보다 약간 더 많은 시간이 소요된다.


5. 프로세스가 fork() 연산을 사용하여 새로운 프로세스를 생성할 때 다음 중 어떤 상태가 부모 프로세스와 자식 프로세스 간에 공유되는가? A. 스택, B. 힙, C. 공유 메모리 세그먼트

- C, 부모 프로세스와 새로 분기된 자식 프로세스 간에는 공유된 메모리 세그먼트만 공유된다. 스택과 힙의 복사본은 새로 생성된 프로세스에 대해 만들어진다.


6. RPC 메커니즘과 관련하여 "정확히 한 번" 시맨틱을 고려하자. 네트워크 문제로 인해 클라이언트로 전송된 ACK 메시지가 손실된 경우에도 이 시맨틱을 구현한 알고리즘이 올바르게 실행되는가? 메시지 전달 순서를 설명하고 "정확히 한 번"이 여전히 보존되는지 여부를 논의하라.

- "정확히 한 번" 시맨틱은 원격 프로시저가 정확히 한 번만 실행되도록 보장한다. 이를 보장하기 위한 일반적인 알고리즘은 타임스탬프와 결합된 ACK(또는 서버가 중복된 메시지를 구별할 수 있도록 하는 다른 증분 카운터) 방식을 결합한다.

일반적인 전략은 클라이언트가 RPC를 타임스탬프와 함께 서버로 전송하는 것이다. 또한 클라이언트는 타임아웃 클록을 시작한다. 클라이언트는 다음 두 가지 경우 중 하나를 기다린다. (1) 원격 프로시저가 수행되었음을 나타내는 ACK를 서버로부터 수신하거나 (2) 타임아웃한다. 클라이언트가 타임아웃하면 서버가 원격 프로시저를 수행할 수 없었다고 가정하므로 클라이언트는 두 번째로 RPC를 호출하여 나중에 타임스탬프를 전송한다. 클라이언트는 다음 두 가지 이유 중 하나로 ACK를 수신하지 못할 수도 있다. (1) 애초에 RPC가 서버에 의해 수신되지 않았거나, (2) RPC가 서버에 의해 정확하게 수신 및 수행되었지만 ACK가 손실된 것이다. 상황 (1)에서 ACK를 사용하면 궁극적으로 서버가 RPC를 수신 및 수행할 수 있다. 상황 (2)에서 서버는 중복 RPC를 수신하고, 타임스탬프를 사용하여 중복된 RPC로 식별하여 RPC를 두 번 수행하지 않도록 한다. 서버는 클라이언트에게 RPC가 수행되었음을 알리기 위해 두 번째 ACK를 다시 클라이언트로 전송해야 한다.


7. 분산 시스템이 서버 장애에 취약하다고 가정하자. RPC 실행을 위한 "정확히 한 번" 시맨틱을 보장하기 위해 어떤 기법이 필요한가?

- 서버는 어떤 RPC 작업이 수신되었는지, 성공적으로 수행되었는지 여부 및 작업과 관련된 결과에 대한 정보를 디스크 로그와 같은 안정적인 저장소에서 추적해야 한다. 서버 충돌이 발생하고 RPC 메시지가 수신되면 서버는 RPC가 이전에 수행되었는지를 확인할 수 있으므로 RPC의 실행을 위한 "정확히 한 번" 시맨틱을 보장할 수 있다.


해답 PDF

https://codex.cs.yale.edu/avi/os-book/OS10/practice-exercises/PDF-practice-solu-dir/3.pdf

 

오역이 있다면 댓글로 알려주세요.