diff --git "a/_posts/2023-05-09-\354\232\264\354\230\201\354\262\264\354\240\234-3\354\236\245-\355\224\204\353\241\234\354\204\270\354\212\244-\354\227\260\354\212\265\353\254\270\354\240\234-\355\222\200\354\235\264.md" "b/_posts/2023-05-09-\354\232\264\354\230\201\354\262\264\354\240\234-3\354\236\245-\355\224\204\353\241\234\354\204\270\354\212\244-\354\227\260\354\212\265\353\254\270\354\240\234-\355\222\200\354\235\264.md" new file mode 100644 index 0000000..eccd61b --- /dev/null +++ "b/_posts/2023-05-09-\354\232\264\354\230\201\354\262\264\354\240\234-3\354\236\245-\355\224\204\353\241\234\354\204\270\354\212\244-\354\227\260\354\212\265\353\254\270\354\240\234-\355\222\200\354\235\264.md" @@ -0,0 +1,101 @@ +--- +layout: post +title: 운영체제 3장 프로세스 - 연습문제 풀이 +categories: [스터디-운영체제] +tags: [운영체제, Operating System, 공룡책, 연습문제, 프로세스] +date: 2023-05-09 12:00:00 +0900 +--- + +공룡책 (Operating System Concepts) 10th + +개인적인 생각이므로 틀린 답변일 수 있습니다. + +--- + +## 3.1 아래 표시된 프로그램을 이용하여 LINE A에서 출력되는 내용을 설명하라. + +```c +#include +#include +#include + +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 최초의 부모 프로세스를 포함하여 아래에 표시된 프로그램에 의해 몇 개의 프로세스가 생성되는가? + +```c +#include +#include + +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 실행을 위한 “정확히 한 번” 시맨틱을 보장하기 위해 어떤 기법이 필요한가? + +> 서버 장애 발생 전과 후의 요청에 대해서 이미 실행한 요청인지 아닌지 체크할 수 있는 방법이 필요하다. (로그 등) diff --git a/_redirects/operating-system-concepts-3-process.html b/_redirects/operating-system-concepts-3-process.html new file mode 100644 index 0000000..eb02323 --- /dev/null +++ b/_redirects/operating-system-concepts-3-process.html @@ -0,0 +1,9 @@ + + + + + + diff --git "a/category/\354\212\244\355\204\260\353\224\224-\354\232\264\354\230\201\354\262\264\354\240\234.md" "b/category/\354\212\244\355\204\260\353\224\224-\354\232\264\354\230\201\354\262\264\354\240\234.md" new file mode 100644 index 0000000..7f9ea8f --- /dev/null +++ "b/category/\354\212\244\355\204\260\353\224\224-\354\232\264\354\230\201\354\262\264\354\240\234.md" @@ -0,0 +1,4 @@ +--- +layout: category +title: 스터디-운영체제 +---