KOCW 사이트를 이용하여 듣게 된 반효경 교수님의 운영체제 강의 내용을 간단히 정리하여 포스팅합니다.
윈도우에서 ctrl + shift + esc 를 누르면 작업 관리자가 뜨고, 프로세스 항목에서 실행되고 있는 프로세스들을 볼 수 있다. 이 때, 아래 크롬 애플리케이션이 여러 항목으로 나뉘어 각자의 메모리를 가지고 분리되어 있는 것을 볼 수 있다. 이는 처음의 크롬 프로세스에서 여러 개의 프로세스가 생성된 것이며, 이를 부모 프로세스에서 자식 프로세스가 생성되었다고 표현할 수 있다.
부모 프로세스는 "복제"를 통해 자식 프로세스를 생성할 수 있다. 이 때 운영체제가 이 복제를 수행하는데, fork와 exec의 2가지 방식으로 수행한다.
먼저 fork는 해당 명령어가 수행된 시점의 부모 프로세스의 컨텍스트들을 모두 복제하여 자식 프로세스를 만듦으로, 부모 프로세스와 같은 흐름을 가진 자식 프로세스를 만들도록 한다. 따라서 코드 상으로 보았을 때도 자식 프로세스는 fork 명령이 수행된 바로 다음의 코드로 부터 프로세스를 시작하게 된다.
두번째로는 exec를 통한 방식이 있다. 이는 fork가 부모 프로세스의 흐름을 동일하게 따라간 것과는 달리 새로운 프로세스를 생성한 것이다. 부모 프로세스와의 연결이 완전히 끊긴 새로운 프로세스를 만든 것이므로 한 번 실행 시 부모 프로세스에 다시 연결될 수 없다.
부모와 자식 프로세스가 있을 때, 부모 프로세스를 sleep 시킨 후에 자식 프로세스가 task를 완료시킨 후 부모 프로세스를 다시 깨우는 식의 동작이 수행될 수 있다. 이는 wait를 통해 수행될 수 있다.
간단한 예로, shell 창에서 어떤 프로그램을 켰을 때 프로그램이 실행되고 종료된 후에 다시 쉘의 커맨드 창이 작동하는 것을 그 예로 들 수 있다.
위 사진과 같이 echo를 실행시킬 때 shell은 잠시 sleep이 되었다가, echo가 종료되고 난 뒤 다시 깨어나 작동하게 된다.
원칙상 프로세스는 독립적인 주소 공간을 가지게 되므로 협력할 수 없지만, 특정 매커니즘을 통하여 협력할 수 있다. 이처럼 프로세스 간 협력하는 매커니즘을 IPC(Interprocess Communication) 라고 한다. IPC의 2가지 방식을 살펴본다.
1) Message Passing
2) Shared Memory
강의 | 운영체제(2014, 이화여대), 반효경