본문 바로가기
학부공부/OS_운영체제

PE2. Practice Exercises_3.1 ~ 3.7_Text book p.154~p.155

by sonpang 2022. 7. 10.
반응형

OS_운영체제 카테고리의 PE Series는

2021.10.20 - [학부공부/OS_운영체제] - 00. 운영체제 STUDY 시작

 

00. 운영체제 STUDY 시작

안녕하세요! 제가 티스토리 페이지를 만든 후 처음으로 작성하는 글입니다... 복학하기 전 개인적인 공부를 정리하자는 취지로 시작하는 글이라 가독성이 떨어지고 부족한 부분이 있을 수 있으

ku320121.tistory.com

포스팅에서 소개한 text book의 연습문제를 풀이한 것을 정리한 것입니다. 해설을 참고하지 않았기 때문에 풀이에 오류가 있을 수 있습니다. 또한 운영체제 교과목 내용을 벗어나는 내용과 사견이 풀이에 포함되어 있을 수 있습니다.

 

 

3.1. Using the program shown in Figure 3.30, explain what the output will be at LINE A.

PARENT: value = 5

 

System call fork()를 통해 duplicate된 child process는 parent process의 메모리 복사본으로 구성된다. 즉, 별도의 메모리 공간을 갖게 되는 것이다. 따라서 parent process에서 value의 값은 child process의 value update에 영향을 받지 않으므로 5를 그대로 출력한다.

 

 

 

3.2 Including the initial parent process, how many processes are created by the program shown in Figure 3.31?

최대 8개의 processes가 생성된다.

 

Parent process를 복사하는 for()를 실행 후 text, data, bss size, heap, stack pointer 초기화 등을 수행하는 exec()이 없기 때문에 생성된 child process는 parent process와 code가 동일하다. 첫 번째 fork()가 성공하면 process 2개가 각각 동작하게 되고 이 두 개의 process는 다시 fork()를 각각 실행하여 child process를 생성하게 된다. 이렇게 각각 실행되는 4개의 process는 마지막 fork()가 성공한다면 최종적으로 0을 return하는 process의 수는 8개이다. 물론 memory가 부족할 경우 새로운 process를 만드는 것에 실패(fork()의 return 값이 음수)하겠지만 Fig. 3.31의 code는 memory leak을 일으킬 만큼 무거운 process를 생성하진 않는다.

 

 

 

3.3 Original versions of Apple’s mobile iOS operating system provided no means of concurrent processing. Discuss three major complications that concurrent processing adds to an operating system.

Data consistency, Scheduling, IPC, throughput 문제가 있을 수 있다.

 

Cache coherence protocol에 따라 data consistency를 보장해야 한다. 아직 배우진 않았지만 concurrent processing를 하려면 동기화에 관한 문제를 해결해 주어야 한다. I/O를 할 때와 같이 running state에서 waiting state로 바뀌거나 timer interrupt에 의해 running state에서 ready state로 바뀔 때 scheduler는 결정해야 한다. Concurrent processing을 지원한다면 CPU utilization, throughput, response time 등을 고려하여 scheduler를 다시 design 해야 한다. 예를 들어 multi core로 concurrent processing을 지원한다면 core간 load balancing도 고려해야 할 것이다. 또한 core별로 scheduling queue를 각각 둘 것인지 등 policy를 결정해야 한다. 만약 core마다 ready queue를 둔다면 scalability 측면에서는 유리하지만 throughput이 이상적인 예측치보다 낮을 수 있다. 반대로 전체에 하나의 ready queue를 사용한다면 core에 순서대로 process를 할당할 수 있다는 점에서 관리는 쉽지만 process의 수가 늘어난다면 queue에 동시에 접근하는 동기화 문제가 발생할 수 있다. 마지막으로 IPC도 concurrent processing을 지원하기 적합하게 제공되어야 한다. 메모리 공유 모델과 같은 경우에는 앞서 언급한 동기화 이슈를 해결해야 한다. 메시지 전달 모델과 같은 경우에도 send와 receive가 동시에 이루어지기 위해서는 kernel의 도움이 필요하다. 즉, B process가 받아야 하는데 A process가 아직 보내지 않았을 때 kernel의 도움이 필요하다.

 

 

 

 

3.4 Some computer systems provide multiple register sets. Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets. What happens if the new context is in memory rather than in a register set and all the register sets are in use?

이미 register set에 있다면 pointer가 해당 위치를 가리키면 된다. 만약 register sets이 모두 사용 중이고 memory에 존재한다면 register sets 중 set를 policy에 따라 memory로 보내 registers를 비우고 비워진 registers에 switching 된 context를 load한다.

 

여기서 policy의 한 예는 locality를 이용하여 다시 사용할 가능성이 낮은 register set을 memory로 보내는 것이다. Memory에서 다시 load 해오는 것은 storage에서 load해 오는 것에 비해서 시간이 그렇게 많이 소요되지 않기 때문에 loss가 크진 않다.

 

 

 

3.5 When a process creates a new process using the fork() operation, which of the following states is shared between the parent process and the child process?

a. Stack

b. Heap

c. Shared memory segments

c. Shared memory segments만 공유 된다.

 

새로 생성된 child process에 대해 a. Stack과 b. Heap은 copy만 될 뿐이다. 다만 exec()을 실행하지 않는다면 값 자체는 fork()한 시점의 parent에서 갖는 값과 동일하다. 사실, exec()을 실행하더라도 pointer만 초기화하기 때문에 heap과 stack영역의 memory를 초기화하진 않는다. 즉 덮어 쓰이지만 않는다면 값은 동일한 값을 가질 수는 있다. 하지만 같은 값을 가진다는 것이 공유를 의미하지는 않는다.

 

 

 

3.6 Consider the “exactly once”semantic with respect to the RPC mechanism. Does the algorithm for implementing this semantic execute correctly even if the ACK message sent back to the client is lost due to a network problem? Describe the sequence of messages, and discuss whether “exactly once” is still preserved.

Exactly once를 위해 ACK message와 id(auto increment와 같이 time에 따라 unique하게 결정되는 값)를 사용할 수 있다. Client는 server로부터 ACK message를 받거나 정해진 시간을 초과할 경우 다시 요청할 수 있다. 만약 ACK message가 손실되었다면 client는 RPC를 다시 호출할 것이고 server는 id에 따라 request구분하여 실행여부를 결정한다. Server는 이전에 실행한 요청이더라도 다시 ACK message를 client에 보냄으로써 “exactly once”를 보장할 수 있다.

 

 

 

3.7 Assume that a distributed system is susceptible to server failure. What mechanisms would be required to guarantee the “exactly once” semantic for execution of RPCs?

문제 3.6.에서 이야기 한 일련의 과정들을 trace할 log를 저장한다면 해결할 수 있다. 데이터 센터의 한곳에 RPC 작업 등을 포함한 log를 저장하는 storage를 두거나 모든 request와 reply message를 trace할 수 있는 통합 server를 둘 수도 있다.

 

 

 

반응형

댓글