///////
Search
2️⃣

연습문제 6 ~ 9

6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가

문맥 교환은 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다.
실행 상태에서 빠져나가는 PCB를 정리하고 실행 상태로 들어오는 PCB를 세팅하는 과정이다.

7. 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가

fork()
실행 중인 프로세스로 부터 새로운 프로세스를 복사하는 함수이다.
매번 새로 만드는 것 보다 실행중인 프로세스를 또 요청하게 되는 경우에는 복사하는 방법이 더 효율적이기 때문이다.
프로세스를 복사하게 되면, 복사된 프로세스는 부모 프로세스가 되고, 새로 생긴 프로세스는 자식 프로세스가 되어 부모-자식 관계로 연결된다.

8. 프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가 (사용하는 이유는 심화)

exec()
각 프로세스의 PID PPID CPID만 남겨두고 새로운 것으로 바꾼다. 코드 영역이 새로운 코드로 채워지고, 또한 데이터 영역이 새로운 데이터로 채워지며 스택 영역이 리셋된다.
코드 영역 : 프로그램의 본문이 기술된 곳으로 읽기 전용으로 처리된다. 데이터 영역 : 데이터 영역은 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다. 이곳의 내용은 읽기와 쓰기가 가능하다. 스택 영역 : 스택 영역은 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다.

9. 부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아있는 프로세스는 무엇인가?

고아 프로세스 또는 좀비 프로세스라고 한다.
고아 프로세스는 부모 프로세스가 자식보다 먼저 죽는 경우에 발생한다.
그래서 wait() 함수를 호출하여 자식 프로세스가 종료될때까지 기다린 후 자식 프로세스가 종료되었는지 확인한다. 덕분에 부모 프로세스가 먼저 죽는 경우를 방지할 수 있다.
좀비 프로세스는 자식 프로세스가 종료 했지만, 부모 프로세스가 자원을 회수하지 않을 때 발생한다.
따라서, 운영체제는 반환되지 못한 자원을 회수하는 자원 회수를 주기적으로 해야한다.