운영체제 3장 프로세스 - 연습문제 풀이
공룡책 (Operating System Concepts) 10th
개인적인 생각이므로 틀린 답변일 수 있습니다.
3.1 아래 표시된 프로그램을 이용하여 LINE A에서 출력되는 내용을 설명하라.
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int value = 5;
int main()
{
pid_t pid;
pid = fork();
if (pid == 0) { /* child process */
value += 15;
return 0;
}
else if (pid > 0) { /* parent process */
wait(NULL);
printf("PARENT: value = %d", value); /* LINE A */
return 0;
}
}
20
3.2 최초의 부모 프로세스를 포함하여 아래에 표시된 프로그램에 의해 몇 개의 프로세스가 생성되는가?
#include <stdio.h>
#include <unistd.h>
int main()
{
/* fork a child process */
fork();
/* fork another child process */
fork();
/* and fork another */
fork();
return 0;
}
8
3.3 APPLE 모바일 iOS 운영 체제의 원래 버전은 병행 처리 기법을 제공하지 않았다. 병행 처리로 인해 운영체제에 추가되는 세 가지 주요 문제에 대해 논의하라.
- 프로세스 스케쥴러 (concurrent 하게 처리)
- 프로세스간 통신
- 공유 리소스 동시 접근 방지
3.4 일부 컴퓨터 시스템은 다수의 레지스터 집합을 사용한다. 새 문맥이 레지스터 집합 중 하나에 이미 적재된 경우 문맥 교환 시 어떤 일이 발생하는지 설명하라. 새 문맥이 레지스터 집합이 아닌 메모리에 있고 모든 레지스터 집합이 사용중이면 어떤 일이 발생하는가?
( * 문맥 : context )
새 문맥이 이미 적재되어 있는경우, PC 레지스터 값만 변경하여 새 문맥을 가리키게 함. 모든 레지스터 집합이 사용중이고 새 문맥이 메모리에 있다면, 현재 있는 문맥 중 하나를 메모리로 보내고 필요한 문맥을 레지스터로 로드.
3.5 프로세스가 fork() 연산을 사용하여 새로운 프로세스를 생성할 때 다음 중 어떤 상태가 부모 프로세스와 자식 프로세스 간에 공유되는가?
A. 스택 B. 힙 C. 공유 메모리 세그먼트
C.
3.6 RPC 메커니즘과 관련하여 “정확히 한 번” 시맨틱을 고려하자. 네트워크 문제로 인해 클라이언트로 전송된 ACK 메시지가 손상된 경우에도 이 시맨틱을 구현한 알고리즘이 올바르게 실행되는가? 메시지 전달 순서를 설명하고 “정확한 한 번”이 여전히 보존되는지 여부를 논의하라.
서버로 부터 ACK가 오지 않았다면 클라이언트는 다시 전송해야 한다.
ACK는 요청이 수신되었고 실행이 되었다는 의미이다.
ACK가 손상 되었다는 것은. 일단 수신되었고 실행도 되었다는 뜻이다.따라서 다시 전송한다면 server 입장에서는 이미 처리한 메시지가 다시 온 것이므로 요청은 다시 처리하지 않는다.
서버는 이미 처리한 요청이라는 메시지를 반환해줘야 한다.
3.7 분산 시스템이 서버 장애에 취약하다고 가정하자. RPC 실행을 위한 “정확히 한 번” 시맨틱을 보장하기 위해 어떤 기법이 필요한가?
서버 장애 발생 전과 후의 요청에 대해서 이미 실행한 요청인지 아닌지 체크할 수 있는 방법이 필요하다. (로그 등)