관리 메뉴

드럼치는 프로그래머

[시스템프로그래밍] 3.8 프로세스 체인 구현 본문

★─Multi Media/☆─3학년 2학기

[시스템프로그래밍] 3.8 프로세스 체인 구현

드럼치는한동이 2009. 10. 12. 16:45

3.8 연습문제 : 프로세스 체인

이 장에서는 [프로그램 3.1]의 프로세스 체인(chain)을 확장할 것이다. 우리는 프로세스 체인을 통해 공유 장치와 wait 함수의 특징을 실험할 수 있다. [프로그램 3.1]을 통해 생성된 모든 프로세스들은 표준 입력, 표준 출력, 표준 에러를 공유한다. 표준 에러로 출력하는 fprintf 함수는 프로그램의 크리티컬 섹션이다. 이 예제에서 크리티컬 섹션이 내포하는 의미에 대해서 추가로 알아볼 것이다. 이후의 장에서는 다른 장치를 포함하는 크리티컬 섹션을 구현하기 위해 본 예제를 확장하고(6장), 토큰링 시뮬레이션(7장)을 위해 본 예제를 사용할 것이다.

[프로그램 3.1]은 프로세스 체인을 만든다. 프로그램은 생성할 프로세스의 개수를 커맨드라인 인자로 받는다. 각 프로세스들은 종료하기 전에 i값, 프로세스 ID, 부모 프로세스 ID, 자식 프로세스 ID 등을 출력한다. 부모 프로세스는 wait 함수를 호출하지 않는다. 부모가 자식 프로세스보다 먼저 종료하면, 자식 프로세스는 부모를 잃게 된다. 이 경우, 특별한 시스템 프로세스(전통적으로 프로세스 ID가 1인 init 프로세스)가 부모 프로세스로 된다.

1. 프로세스의 개수를 다양하게 변화시키면서 [프로그램 3.1]을 실행하고 결과를 관찰하라.

2. 커맨드라인 인자가 4로 주어질 경우 [그림 3.2] 다이어그램의 프로세스 ID를 실제 프로세스 ID로 채워라.

3. 프로그램이 생성할 수 있는 최대 프로세스의 개수를 얻기 위해 커맨드라인 인자의 값을 변경시키면서 실험하라. init 프로세스에 의해 처리되는 프로세스의 개수를 관찰하라.

4. [프로그램 3.1]에서 마지막 fprintf 구문 전에 sleep(10); 을 넣어라. 이 경우 생성되는 프로세스의 최대 개수는 얼마인가?

5. [프로그램 3.1]에서 마지막 fprintf 구문 주위에 루프를 넣어라. 루프는 k번 반복된다. 루프 내의 fprintf 구문 뒤에 sleep(m); 구문을 넣어라. k와 m을 커맨드라인 인자로 받아라. 여러 가지 n, k, m 값으로 프로그램을 실행하라. 결과를 관찰하여라.

6. [프로그램 3.1]에서 마지막 fprintf 구문 앞에서 wait 함수를 호출하여라. 이것이 결과에 어떤 영향을 주나?

7. [프로그램 3.1]에서 마지막 fprintf 구문을 네 개의 fprintf 구문으로 바꿔라. 각 fprintf 구문은 네 가지 정수를 출력하도록 한다. 마지막 구문은 개행 문자를 출력해야한다. 이 프로그램을 실행하면 어떤 결과가 발생하는가? 어떤 프로세스가 어떤 결과를 출력했는지를 설명할 수 있는가? 프로그램을 여러 번 실행하고 결과에서 다른 점이 있는지 살펴보아라.

ps. 과제물이기에 올릴 수 없습니다.
   궁금한 점 있으시면 메일이나 네이트온 친추해서 쪽지 주세요 rockdrumy@nate.com

Comments