[OS]운영체제론 연습문제 3장 - 문제 및 해설
[OS]운영체제론 연습문제 3장 - 문제 및 해설
01 프로세스에 대한 몇 가지 정의를 내려라. 모두가 인정할 만한 정의가 없는 이유가 무엇이라 생각하는가?
프로세스란 ‘실행 중인 프로그램’으로, 현재 사용하는 컴퓨터 시스템이 여러 병행 작업을 실행하고 관리하는 방법을 이해하는 데 필요한 핵심 개념이다. 프로세스는 너무나 다양한 정의가 있기 때문에 모두가 인정할 만한 정의가 없는 것이라고 생각한다.
[교수님 답]
- 실행중인 프로그램, 비동기적 행위를 일으키는 주체, 프로시저에 생명을 불어넣는 것, 실행중인 프로시저의 통제소재 등
-프로세스가 표현하기에 어려운 추상화 개념이기 때문일 수 있고, 정의도 사용 환경에 따라 달라질 수 있기 때문이다.
04 한 프로세스가 새 프로세스를 생성하는 것은 중요한 기능이지만 위험성이 없는 것은 아니다. 사용자가 다음과 같은 프로세스를 실행할 수 있게 허용한다면 어떤 결과가 발생하는가? 여기서 fork()는 자식 프로세스를 생성할 수 있는 시스템 호출이다.
01 int main() {
02
03 while(true) {
04 fork();
05 }
06 }
a. 시스템이 그러한 프로세스를 실행하도록 허용했다고 가정할 때 결과는 어떠할 것인가?
부모 프로세스로부터 자식 프로세스가 생성되고, 그 자식 프로세스가 또 다른 자식 프로세스를 무한히 생성한다. 이 경우 모든 리소스는 소모되고, 마침내 시스템은 다운될 것이다. 또한 다른 프로세스의 진행에도 영향을 줄 수도 있을 것이다.
b. 여러분이 운영체제 설계자며 이러한 프로세스들로부터 안전하게 보호받는 시스템을 만들도록 요청받았다고 가정해보자. (계산 이론의 정지 문제 때문에) 대부분은 프로그램이 취할 경로를 예측하는 것이 불가능함을 안다. 컴퓨터 과학의 이런 근본적인 결과를 놓고 볼 때, 여러분이 운영체제 설계자라면 위와 같은 프로세스들이 실행되는 것을 왜 방지해야 하는가?
위와 같은 프로세스가 실행되면, 그 결과 리소스가 소모되고 시스템이 다운될 것이기 때문이다. 또한 다른 프로세스를 진행하는 데에도 영향을 준다.
c. 어떤 프로세스들을 거절하는 것이 부적절하다고 판단했다고 가정하자. 또한 최선의 방법은 프로세스들에 런타임 제어를 두는 것이라고 결정했다고 하자. 실행 시 위와 같은 프로세스들을 탐지하려면 운영체제는 어떤 방법을 사용할 수 있는가?
운영체제는, 만일 어떠한 프로세스가 시스템에 과부하가 걸릴 정도로 많은 자식 프로세스를 생성하려고 한다면 이를 금지시켜야 한다.
d. 여러분이 제안한 제어가 프로세스에서 자식 프로세스를 생성하는 데 방해가 되는가?
과부하가 걸리지 않을 정도로만 생성한다면 방해가 되지 않는다.
e. 여러분이 제안한 제어 구현은 시스템의 프로세스 처리 메커니즘에 어떤 영향을 주는가?
프로세스가 처리될 때 과부하 여부를 확인해야 하므로 처리가 조금
늦어질 것이다.
[교수님 답]
a. 위의 프로그램은 시스템을 새로운 프로세스들로 가득 차게 만들어, 시스템이 동작되지 않도록 만든다. 이 프로그램은 지금은 전설이 된 1988년 11월 인터넷 웜(19장 참조)에서 발견한 내용과 같다.
b. 일반적으로 프로그램이 취할 실행경로를 예측하는 프로그램을 만들지 못한다. 그러므로 자동으로 그러한 프로그램을 감지할 수 없다. 그러나 메모리 혹은 디스크, 컴퓨팅 자원 등을 파괴하는(사용자들이 사용 못하게 하는) 특정 프로그램을 감지하는 프로그램을 만들 수 있다. 이러한 프로그램은 안티-바이러스 SW라고 한다. 물론 이 방식은 상당한 프로세서 시간을 사용한다.
c. 일반적으로 그러한 프로그램을 감지할 수 없다는 것은 알고 있다. 전체 시간 혹은 일정시간동안 각 프로세스가 만들 수 있는 (자식) 프로세스의 최대 수를 제한할 수 있다. 이 최대 수를 초과하면 시스템은 프로세스를 중지(terminate)시키거나 시스템 관리자에게 알려 그 프로세스에 대해 알맞은 동작(중지 혹은 수행)을 하게 한다. 시스템 관리자가 계속 수행하게 한다는 의미는 그 프로세스가 시스템상 유효한 프로세스라는 것은 관리자도 알고 있다는 것을 의미한다.
d. 방해된다. 많은 수의 프로세스를 생성하기를 원하는 프로세스들은 운영체제 혹은 시스템 관리자에게 미리 알려주어 허락을 얻어야 하기 때문이다.
e. 프로세스 생성은 제안된 매커니즘의 파라메터내에서 일어난다는 것을 결정할 수 있어야 한다. 운영체제에는 사용자당 프로세스 테이블이 무한정 증가하지 않도록 약간의 제한요소가 있도록 설계되어 있다. 이러한 시스템들은 제한된 개수보다 많은 프로세스를 생성하려고 하는 프로세스에게 에러 코드 혹은 예외를 보낸다.
06 퀀텀 크기를 잘 정하는 일은 효율적인 운영체제를 만드는 데 매우 중요하다. 이 책의 후반부에서 퀀텀 크기 결정에 관해 자세히 다룰 것이다. 그러나 지금 단계에서 몇 가지 문제점을 예상해보자.
가령, 다수의 대화식 사용자들을 지원하는 단일 프로세서 시분할 시스템이 있다고 가정해보자. 프로세스가 프로세서를 차지할 때마다 인터럽팅 클록이 설정되어 퀀텀만큼 시간이 지나면 인터럽트를 발생하게 될 것이다. 이렇게 해서 운영체제는 어떤 한 프로세스가 프로세서를 독점하는 일을 방지하고 대화식 프로세스에 신속하게 응답할 수 있을 것이다. 시스템의 모든 프로세스들에 한 가지 크기의 퀀텀을 적용했다고 가정해보자.
a. 퀀텀을 매우 긴 시간, 예를 들면 10분으로 정한다면 어떤 영향을 줄 것인가?
퀀텀이 매우 길다면 병렬 프로세서 진행이 어려울 것이다. 두 가지 이상의 작업을 진행할 경우, 동시에 처리하기에 어려움이 따른다.
b. 퀀텀을 매우 짧은 시간, 예를 들면 몇 프로세서 사이클 정도로 정한다면 어떻게 될 것인가?
퀀텀이 매우 짧다면 문맥 교환 시간이 퀀텀 대비 상대적으로 늘어나므로 작업이 비효율적으로 진행될 것이다.
c. 분명히 적절한 퀀텀은 (a)와 (b) 사이의 값이 될 것이다. 다이얼 장치를 돌려 퀀텀의 크기를 조절할 수 있다고 가정해보자. 작은 값에서 시작해서 점차 증가할 때, ‘적절한’ 값을 골랐다는 사실을 어떻게 알 수 있는가?
d. 사용자 관점에서 볼 때 어떤 요인들이 이 값을 올바른 값이 되게 하는가?
e. 시스템 관점에서 볼 때 어떤 요인들이 이 값을 올바른 값이 되게 하는가?
[교수님 답]
a. 한 프로그램이 퀀텀동안 시스템을 독점하여 다른 프로세스들에게 빠른 응답을 하지 못하게 된다.
b. 운영체제가 매우 많은 수의 문맥 교환을 하기 때문에 실제 프로그램 실행은 매우 더디게 된다. 즉, 한 퀀텀의 사용 시간을 비교하면 문맥 교환의 시간이 실제 프로그램 수행 시간보다 길 수 있기 때문에 효율적이지 못하고 실제 프로그램 수행 완료까지 오래 걸린다.
c. 프로세스가 매우 효율적으로 수행될 때 이상적이다. 즉, 프로세스가 잘 수행되면서 요구시 응답이 빠르게 진행되는 경우에 적당한 값이라고 할 수 있다. 즉, 작은 퀀텀 값에서 시작해서 증가하다보면 사용자 응답 시간이 계속하여 줄어들다가(빨라지다가) 늘어나는(늦어지는) 시점이 있을 것이다. 이 시점이 최적 퀀텀 시간이다.
d. 사용자에게 빠른 요구-응답 시간을 제공하거나 사용자 프로그램의 수행 결과가 빨리 나오는 경우
e. 오버헤드 시간을 최소화하고 자원 이용률을 최대화하고 사용자에게 컴퓨팅 자원의 대부분을 활용할 수 있게 하는 경우
08 퀀텀을 사용해 ‘적정’ 시간 후에 실행 중인 프로세스를 인터럽트하는 것은 운영체제가 프로세서를 다시 얻어 새로운 프로세스에 할당할 수 있게 하기 위함이다. 인터럽팅 클록이 없이 프로세스가 프로세서를 잃는 유일한 방법은 자발적으로 프로세서를 반환하는 것이라고 가정하자. 또한 운영체제에 디스패치 메커니즘이 없다고 가정하자.
a. 사용자 제어 디스패치 메커니즘 효과를 내기 위해서 한 그룹의 사용자 프로세스들이 어떻게 서로 협력할 수 있을지 기술하라.
사용자 프로세스끼리 우선순위를 정하여 프로세서를 할당받음으로써 디스패치 메커니즘 효과를 낼 수 있다.
b. 이러한 구조에서는 근본적으로 어떤 위험이 잠재되어 있는가?
하나의 프로세스가 프로세서를 반환하지 않고 지속적으로 사용하여, 다른 프로세스가 진행되지 않을 위험이 있다.
c. 이런 방법이 사용자들에게 시스템 제어 디스패치 메커니즘보다 이로운 점이 무엇인가?
디스패치 메커니즘을 이용할 때 필요한 리소스를 절약할 수 있다.
[교수님 답]
a. 각 사용자는 적당한 양의 프로세서 시간을 사용하고 다음 사용자에게 제어를 넘긴다. 이
방법은 각 사용자 프로그램에서 작성된 코드 혹은 시스템 호출을 통해 만들 수 있다.
b. 이 구조는 우발적 혹은 악의적인 프로세서 독점에 취약하다. 무한 루프를 수행하는 프로
그램은 시스템은 다운시킨다. 이는 프로그램이 다음 사용자에게 프로세서 제어권을 넘기
지 않고 계속 프로세서를 사용하기 때문이다.
c. 시스템 제어 디스패치 매커니즘의 문제는 개인 사용자가 시스템의 모든 사용자들의 더
큰 이익을 위해 발생하는 디스패치를 감수해야 한다는 것이다. 즉, 자신이 수행하여야 할
시간임에도 불구하고 다른 급한 사용자에게 프로세서 사용권을 넘겨주는 경우도 많다.
(a)에서 제안한 그룹내 협력 시스템은 하나의 프로세스 그룹이 동작 중에 더 정확한 제
어를 가질 수 있는 환경에서 더 효과적이다. (8장의 스케쥴링 참조)
09 어떤 시스템에서는 부모 프로세스가 소멸될 때 자식 프로세스들이 자동적으로 소멸된다. 다른 시스템에서는 자식 프로세스들이 부모 프로세스에 독립적으로 진행되므로, 부모 프로세스의 종료가 자식 프로세스에 전혀 영향을 미치지 않는다.
a. 두 가지 접근법의 장점과 단점을 논하라.
부모 프로세스가 소멸될 때 자식 프로세스들도 소멸되는 경우, 관련된 프로세스들을 한꺼번에 관리할 수 있으므로 편리하다. 그렇지 않은 경우, 리소스의 낭비 없이 필요한 자식 프로세스만을 진행할 수 있다.
b. 부모 프로세스가 종료되었다고 자식 프로세스까지 종료되면 안 되는 상황의 예를 들어보라.
자식 프로세스가 아직 진행 중인 상황.
[교수님 답]
a. 이것은 수행되는 응용의 특성에 매우 민감하다. 부모 프로세스가 모든 자식 프로세스들을
제어할 수 있는 프로세스라고 가정하자. 부모 프로세스는 동작을 표현한다. 부모 프로세스가
많은 자식 프로세스를 생성한다면 그리고 부모 프로세스에 의해 표현된 마스터 동작이 종료
되었다면 단순하게 부모 프로세스가 종료되어 모든 자식프로세스가 자동적으로 종료될 것이
라고 생각하는 것이 적절하다. b의 답이 이러한 자동 종료가 알맞지 않는 상황을 설명하고,
이러한 상황이 2번째 방법의 답이다.
따라서 장단점은 다음과 같다.
자식 프로세스 및 그들의 자원들을 따로 관리 필요가 없음. 소멸시 자원들이 모두 운영체제로 반환됨.
자식 프로세스가 자원을 사용하고 있는 중에 소멸될 경우 해당 자원에 데이터가 부적절한 값으로 설정되거나 자원을 사용한 상태로 소멸되어 해당 자원을 사용하지 못하는 상태가 될 수 있음
|
장점 |
단점 |
부모프로세스에 독립적 |
자원을 모두 사용한 후 소멸되기 때문에 연속적으로 자원을 사용할 수 있음. |
자식 프로세스들을 소멸하는 데 있어서 자원(시간 포함)의 낭비가 있음 |
부모프로세스에 종속적 |
자식 프로세스 및 그들의 자원들을 따로 관리 필요가 없음. 소멸시 자원들이 모두 운영체제로 반환됨. |
자식 프로세스가 자원을 사용하고 있는 중에 소멸될 경우 해당 자원에 데이터가 부적절한 값으로 설정되거나 자원을 사용한 상태로 소멸되어 해당 자원을 사용하지 못하는 상태가 될 수 있음. |
b. 부모 프로세스가 종료될 때, 자식 프로세스 중 하나가 파일에 데이터를 수정하고 있을
수 있다. 그 자식 프로세스가 그냥 종료된다면 파일에 저장된 데이터는 적절한 값으로 저장
되지 않을 수 있다. 자식 프로세스가 종료되는 시점에 따라 데이터의 분실 혹은 적절하지
않은 값이 생길 수 있다. 이 경우에 있어서 자식 프로세스는 파일이 완전무결할 때까지 동작을 계속하게 하는 것이 더 좋다.
13 단일 프로세서 시스템이 준비 상태 프로세스나 실행 상태 프로세스를 모두 포함하지 않을 수도 있는가? 이 시스템은 죽은 시스템인가? 왜 그런지 답과 관련해 설명하라.
단일 프로세서 시스템은 일시 정지 상태 프로세스를 포함할 수도 있다. 이 프로세스는 이벤트가 발생할경우 언제든지 활성 상태가 될 수 있으므로, 죽은 시스템이라 할 수 없다.
[교수님 답]
- 이론적으로는 입출력 완료를 기다리는 단일 블록된 프로세스를 가질 수 있다. 입출력이
완료되면 블록된 프로세스는 준비 상태로 이동하여 실행 상태로 가게 된다. 그러난 실제
로는 대부분의 운영체제들은 시간내내 수행하는 적절한 프로세스를 요구한다. 그러므로
많은 운영체제들은 어떠한 다른 프로세스가 준비되어 있지 않을 때 수행할 수 있는 프로
세스를 가지고 있다. 이러한 프로세스를 일반적으로 idle 프로세스라고 한다.
- 이 시스템이 어떠한 것도 수행하지 않는 것처럼 보이더라도 입출력이 완료되면 시스템이
바로 동작을 재재한다는 점에서 죽은 시스템은 아니다.
16 신호와 메시지 교환을 사용해 IPC를 비교, 대조하라.
IPC란 프로세스 간 통신을 말한다. 신호는 프로세스에 이벤트가 발생했음을 알리는 소프트웨어 인터럽트다. 프로세서는 신호를 잡아내거나 무시하거나 마스크할 수 있다. 메시지 전달은 단방향 혹은 양방향으로 진행되며, 동기 통신이나 비동기 통신을 할 수 있다. 신호와 메시지 교환의 커다란 차이점은, 신호는 프로세스 사이의 데이터 교환을 지원하지 않는 반면에 메시지 교환은 프로세스 사이의 데이터 교환을 전문적으로 지원한다.
[교수님 답]
신호는 이벤트가 발생하였다는 것을 다른 프로세스에게 알려주는 단순하고 효율적인 방법이
다. 그러나 신호는 데이터를 보낼 수 없기 때문에 신호가 다른 프로세스에게 보낼 수 있는
정보의 양에 따라 프로세스에서 신호 사용이 제한된다. 또한 신호는 한 운영체제 내의 IPC
에 제한된다.
메시지 교환은 하나의 프로세스가 많은 데이터를 다른 프로세스에게 전달하게 한다. 그러나
이 방법은 신호와 비교하면 상당한 오버헤드를 가진다. 즉 메시지를 위하여 메모리를 할당
하고 송신자와 수신자의 이름과 위치를 알아야 하는 등의 오버헤드가 존재한다.