1) 프로세스 트리
- 실행되는 동안 프로세스는 여러 개의 새로운 프로세스들을 생성 할 수 있고 트리 구조를 이룸
- 부모 프로세스 = 생성하는 프로세스
- 자식 프로세스 = 새로운 프로세스(생성된 프로세스)
-
2) 프로세스 식별자(pid)
- 유일한 식별자로 프로세스를 구분
- 보통 정수
- 시스템의 각 프로세스에 고유한 값을 가지도록 할당
- 식별자를 통하여 커널이 유지하고 있는 프로세스의 다양한 속성에 접근하기 위한 인덱스(index)로 사용
3) 보편적인 Linux 시스템의 프로세스 트리

- pid=1
: systemd 프로세스
: 모든 사용자 프로세스의 루트 부모 프로세스 역할을 수행
: 시스템이 부트될 때 생성되는 첫 번째 사용자 프로세스
: 시스템이 부팅되면 systemd 프로세스는 다양한 사용자 프로세스 생성
: ex) 웹, 프린트 서버, ssh 서버 등
- ps 명령어
: ex) ps -el (프로세스 목록을 얻는 명령어)
3) 부모 프로세스와 자식 프로세스
- 부모 프로세스
: 자원을 분할하여 자식 프로세스들에게 나누어 주거나 메모리나 파일과 같은 몇몇 자원들은 자식프로세스들이 같이 사용하게 할 수도 있음
: 자식 프로세스에 초기화 데이터(입력)을 전달 받을 수 있음
- 자식 프로세스
: 자원을 운영체제로부터 직접 얻거나, 부모 프로세스가 가진 자원의 부분 집합만을 사용하도록 제한될 수 있음
- 자식 프로세스가 부모 프로세스 자원의 일부만을 사용하도록 제한하여, 자식 프로세스들을 많이 생성하는 경우 시스템을 과부하 상태로 만드는 것을 방지할 수 있음
- 어떤 운영체제는 자식 프로세스에 자원을 전달함
4) 프로세스가 새로운 프로세스 생성시, 두 프로세스를 실행시키는 방안
- 부모는 자식과 병행하게 실행을 계속함
- 부모는 일부 또는 모든 자식이 실행을 종료할 때까지 기다림
5) 새로운 프로세세들의 주소 공간 측면에서 보는 경우
- 자식 프로세스는 부모 프로세스의 복사본 (자식 프로세스의 프로그램과 데이터 = 부모 프로세스의 포로그램과 데이터)
- 자식 프로세스가 자신에게 적재될 새로운 프로그램을 가지고 있음
1) 프로세스 종료 발생 경우
- 운영체제에 자신의 삭제를 요청하면서 종료
: 자신을 기다리는 부모 프로세스에 상태 값을 반환
: 모든 자원이 할당 해제되고 운영체제로 반납
- 프로세스가 적당한 시스템 콜을 통해 다른 프로세스의 종료를 유발할 수 있음
: 통상적으로는 종료될 프로세스의 부모만이 시스템 콜을 호출함
: 사용자 또는 오작동하는 프로세스가 다른 사용자의 프로세스를 임의로 중단 시킬 수 있음
- 부모 프로세스가 자식 프로세스를 종료시키기 위해서는 자식의 pid를 알아야함
- 한 프로세스가 새로운 프로세스를 만들 때, 새로 만들어진 프로세스의 신원이 부모에게 전달
2) 부모 프로세스가 자식 프로세스를 종료시키는 경우
- 자식이 자신에게 할당된 자원을 초과하여 사용할 때, 부모가 자식들의 상태를 검사할 수 있는 방편이 주어져야 함
- 자식에게 할당된 태스크가 더 이상 필요 없을 때
- 부모가 exit를 하는데, 운영체제는 부모가 exit 한 후에 자식이 실행을 계속하는 것을 허용하지 않음
3) 연쇄적 종료
- 몇몇 시스템에서는 부모 프로세스가 종료한 이후에 자식 프로세스가 존재할 수 없고 프로세스가 종료되면 그로부터 비롯된 모든 자식 프로세스들도 종료되어야 함
4) 좀비 프로세스
- 종료되었지만 부모프로세스가 아직 wait() 호출을 하지 않은 프로세스
5) Android 프로세스 계층
- 임의의 프로세스를 종료하지 않고 프로세스의 중요도 계층을 식별
- 자원 확보를 위해 중요도가 낮은 프로세스부터 종료
- 중요도 순서 (높은 순-> 낮은 순)
: 전경 프로세스 -> 가시적 프로세스 -> 서비스 프로세스 -> 백그라운드 프로세스 -> 빈 프로세스
- 전경 프로세스
: 사용자가 현재 상호 작용하고 있는 응용 프로그램
: 화면에 보이는 현재 프로세스
- 가시적 프로세스
: 전경에서 직접 볼 수 없지만 전경 프로세스가 참조하는 활동을 수행하는 프로세스
- 서비스 프로세스
: 백그라운드 프로세스와 유사하지만 사용자가 인지할 수 있는 활동을 수행하는 프로세스
- 백그라운드 프로세스
: 활동을 수행하고 있지만 사용자가 인식하지 못하는 프로세스
- 빈 프로세스
: 응용 프로그램과 관련되 활성 구성요소가 없는 프로세스
1) 운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 또는 협력적인 프로세스들
2) 독립적인 프로세스
- 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않음
3) 협력적인 프로세스
- 프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받음
4) 상호 협력적인 프로세스
- 다른 프로세스들과 자료를 공유하는 프로세스
5) 프로세스 협력을 허용하는 환경을 제공하는 이유
- 정보 공유
: 여러 응용 프로그램이 동일한 정보에 접근 할 수 있으므로 정보를 병행적으로 접근 할 수있는 환경이 제공되어야함
- 계산 가속화
: 특정 작업을 빨리 실행하려고 할 때, 그것을 하위 작업으로 나누어 이를 각각 다른 하위 작업들과 병렬로 실행하게 해야함
: 가속화는 여러 개의 처리 코어가 있는 경우만 가능
- 모듈성
: 시스템 기능을 별도의 프로스스들 또는 스레드들로 나누어, 모듈식 형테로 시스템을 구성해야함
6) 프로세스 간 통신 기법 (interprocess communication, IPC)
- 협력적 프로세스들이 서로 데이터를 교환 할 수있는 기법
7) 프로세스 간 통신 모델

- 공유 메모리
: 협력 프로세스들에 의해 공유되는 메모리의 영역이 구축
: 프로세스들은 그 영역에 데이터를 읽고 씀으로써 정보를 교환
- 메시지 전달
: 통신이 협력 프로세스들 사이에 교환되는 메시지를 통하여 이루어짐
- 공유 메모리와 메시지 전달 비교
| 메시지 전달 | 공유 메모리 |
|---|---|
| 적은 양의 데이터를 교환하는데 유용 | 속도가 빠르기 때문에 많은 양의 데이터를 전달하는데 유용 |
| 별도의 동기화 로직 필요 없음 | 동기화 기술 필요 |
| 통상 시스템 콜을 사용하여 구현되므로 커널 간섭 등의 부가적인 시간 소비 작업 필요하여 느림 | 공유 메모리 영역을 구축할 때만 시스템 콜이 필요하고 공유 메모리 영역이 구축되면 모든 접근은 일반적인 메모리 접근으로 취급되어 커널의 도움이 필요 없음 |