본문 바로가기
운영체제

OPERATING SYSTEM CONCEPTS 에센셜 연습문제 3장 #1

by 핫동경 2022. 4. 9.
반응형

오답이 있을 시 댓글 부탁드립니다.

 

[3.1] 그림에 보인 프로그램을 실행했을 때, A 행의 출력은 무엇인가?

#include<sys/types.h>
#inlcude<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;
        }
  }

새로운 프로세스는 fork() 시스템 호출로 생성되는데  이 때 새로우 프로세스는 원래 프로세스(부모)

의 주소 공간의 복사본으로 구성이 된다.

A라인은 부모 프로세스의 공간이므로 자식 프로세스의 value+=15가 적용되지 않는다.

따라서 A행의 출력은 "PARENT: value =5" 이다


[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;
}

fork() 시스템 호출은 현재 메모리에 있는 프로세스를 복사하여 자식프로세스를 생성하는 프로세스이다.

첫 번째 fork()를 통해 메모리에 있는 프로세스는 2개가 되었다.

 

두 번째 fork에서 메모리에 있는 프로세스의 개수는 2개이므로 복사본 2개가 더 생겨 4개의 프로세스가 생긴다.

 

세 번째 fork에서 메모리에 있는 프로세스의 개수는 4개이므로 복사본 4개가 더 생겨 총 8개의 프로세스가 생긴다.

 

쉽게 말하면 fork()는 자식 프로세스들을 생성하고 또 다시 fork를 한다면 전에 생성된 자식프로세스들도 자식을 낳는다.  즉 2의 3승 =2*2*2이 되는 것이다

따라서 총 8개의 프로세스가 생성되었다.


[3.3] Apple의 모바일 iOS 운영체제의 첫 버전은 병행 처리 기능을 제공하지 않았다. 병행 처리를 가능하게 만들기 위해 운영체제가 해결해야 하는 세 가지 주요 난관은 무엇인지 설명하시오

cpu 스케줄러는 서로 다른 프로세스들을 인식하고 있어야 하며 이 프로세스들을 스케줄 하는 적절한 알고리즘을 선택할 수 있어야 한다.

 

서로다른 프로세스들은 서로 통신할 수 있어야한다. 한 프로세스가 다른 프로세스의 자원을 요구할 수 있기때문에 운영체제는 프로세스간 통신을 할 수 있는 기법을 제공해야 한다.

 

모바일 운영체제는 메모리가 적기 때문에 메모리를 제대로 관리해줘야 한다. 운영체제는 여러 프로세스를 지원하도록 메모리를 관리해야 한다.

 

상호 배제 기법을 제공해야한다. A프로세스가 한 자원을 사용하고 있는 중에 B프로세스가 그 자원을 접근할 때 일어나는 공유 자원의 문제를 해결해야 한다.


[3.4] Sun UltraSPARC 프로세서는 여러 개의 레지스터 집합을 가진다. 교환해야 할 문맥이 레지스터 집합 중 하나에 이미 적재되어 있는 경우 문맥 교환은 어덯게 수행되는가? 새 문맥이 레지스터 집합이 아닌 메모리에 존재하고 모든 레지스터 집합이 사용 중이면 문맥 교환은 어덯게 수행되는가?

레지스터 집합에 존재한다면 해당 레지스터 집합을 그대로 사용한다.

 

레지스터중의 한 Context(문맥)를 메모리로 이동시키고 새 문맥은 메모리에로부터 레지스터에 로드된다.


[3.5] fork() 연산을 사용하여 새로운 프로세스를 생성할 때 부모 프로세스와 자식 프로세스가 공유하는 상태는 무엇인가?

a. 스택

b. 힙(메모리 동적할당)

c. 공유 메모리 세그먼트

 

답 : C

자식 프로세스는 부모 프로세스의 복사본을 갖는 것이지 공유하는 상태는 아니다. 생성 시점에는 똑같은 자원을 가지겠지만 태스크를 수행한다면 다른 자원을 가지게 될 것이다. 하지만 공유 메모리를 사용한다면 데이터가 공유될 수 있다.


2022.04.09 - [운영체제] - OPERATING SYSTEM CONCEPTS 에센셜 연습문제 3장 #2

 

OPERATING SYSTEM CONCEPTS 에센셜 연습문제 3장 #2

오답이 있을 시 댓글 부탁드립니다. [3.8] 단기, 중기, 장기 스케줄링의 차이점을 설명하시오 [단기] 다음 번에 실행될 프로세스를 선택한다,CPU를 할당할 프로세스를 선택한다. 매우 자주 호출되

dongkyung.tistory.com

 

 

반응형

댓글