CS/Operating System

쉽게 배우는 운영체제: 프로세스와 스레드 심화문제

kkumta 2022. 7. 26. 17:17

01. 프로세스 상태도를 그리시오.

프로세스 상태도



02. 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오.
휴식 상태는 프로세스가 작업을 일시적으로 쉬고 있는 상태이며, 유닉스에서 프로그램을 실행하는 도중에 Ctrl + Z 키를 누르면 볼 수 있다. 휴식 상태의 경우 사용하던 데이터가 메모리에 그대로 있고 프로세스 제어 블록도 유지되므로 프로세스는 멈춘 지점에서부터 재시작할 수 있다.
만약 프로세스가 작업을 일시적으로 쉬는 것이 아닌, 프로그램 자체가 강제로 종료되면 프로세스가 종료되어 메모리에서 쫓겨나고 프로세스 제어 블록도 사라지기 때문에 사용하던 데이터를 잃어버린다. 이렇게 종료된 프로세스는 처음부터 다시 시작해야 한다.
보류 상태(일시 정지 상태)는 프로세스가 메모리에서 잠시 쫓겨난 상태이다. 프로세스는 메모리에 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때, 프로그램에 오류가 있어 실행을 미루어야 할 때, 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때, 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때, 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때 등에 보류 상태가 된다.

03. 프로세스 제어 블록의 구성에 대해 설명하시오.
프로세스 제어 블록은 포인터, 프로세스 상태, 프로세스 구분자, 프로그램 카운터, 프로세스 우선순위, 각종 레지스터 정보, 메모리 관리 정보, 할당된 자원 정보, 계정 정보, 부모 프로세스 구분자와 자식 프로세스 구분자로 구성된다.

04. 문맥 교환에 대해 설명하시오.
문맥 교환은 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다. 이때 두 프로세스 제어 블록의 내용이 변경된다. 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU가 다시 세팅된다.

05. 프로세스를 구성하는 코드 영역, 데이터 영역, 스택 영역에 대해 설명하시오.

프로세스는 크게 정적 할당 영역과 동적 할당 영역으로 구분할 수 있다.

정적 할당 영역에는 코드 영역과 데이터 영역이 있다. 정적 할당 영역은 프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않는다. 코드 영역은 코드가 있는 곳이고, 텍스트 영역이라고도 불린다. 데이터 영역은 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다. 데이터 영역의 대표적인 예로는 전역 변수, 문자열 리터럴, static이 있다.

동적 할당 영역에는 힙 영역과 스택 영역이 있다. 동적 할당 영역은 프로세스가 실행되는 동안 만들어지는 영역이다. 힙 영역은 동적으로 할당되는 변수 영역으로, 대표적으로 malloc() 함수를 사용한다. 스택 영역은 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다. 스택 영역의 대표적인 예로는 지역 변수, 매개 변수가 있으며, 함수가 시작될 때 메모리 공간에 할당되어, 함수를 빠져나올 때 소멸된다.


06. fork() 시스템 호출의 장점을 설명하시오.

프로세스의 생성 속도가 빠르다. 추가 작업 없이 자원을 상속할 수 있다. 시스템 관리를 효율적으로 할 수 있다.


07. exec() 시스템 호출을 사용하는 이유를 설명하시오.

exec() 시스템 호출은 기존의 프로세스를 새로운 프로세스로 전환할 때 사용한다. 이 시스템 호출을 사용하면 기존에 있는 프로세스의 구조체(프로세스 제어 블록, 메모리 영역, 부모-자식 관계)를 그대로 재사용하고, 새로운 코드 영역만 가져오면 되기 때문에 새로운 프로세스를 만드는 것보다 훨씬 수월하다. 

08. 프로세스 계층 구조의 장점을 설명하시오.

프로세스의 계층 구조는 동시에 여러 작업을 처리하고 종료된 프로세스의 자원을 회수하는 데 유용하다.

09. 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오.