프로세스 개념(2)

개복치·2023년 5월 13일

운영체제

목록 보기
3/3

3. 프로세스에 대한 연산

3.1 프로세스 생성

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

    - pid=1
    	: systemd 프로세스
        : 모든 사용자 프로세스의 루트 부모 프로세스 역할을 수행
        : 시스템이 부트될 때 생성되는 첫 번째 사용자 프로세스
        : 시스템이 부팅되면 systemd 프로세스는 다양한 사용자 프로세스 생성
        : ex) 웹, 프린트 서버, ssh 서버 등
    - ps 명령어
    	: ex) ps -el (프로세스 목록을 얻는 명령어)
3) 부모 프로세스와 자식 프로세스
	- 부모 프로세스
    	: 자원을 분할하여 자식 프로세스들에게 나누어 주거나 메모리나 파일과 같은 몇몇 자원들은 자식프로세스들이 같이 사용하게 할 수도 있음
        : 자식 프로세스에 초기화 데이터(입력)을 전달 받을 수 있음
    - 자식 프로세스
    	: 자원을 운영체제로부터 직접 얻거나, 부모 프로세스가 가진 자원의 부분 집합만을 사용하도록 제한될 수 있음
    - 자식 프로세스가 부모 프로세스 자원의 일부만을 사용하도록 제한하여, 자식 프로세스들을 많이 생성하는 경우 시스템을 과부하 상태로 만드는 것을 방지할 수 있음
    - 어떤 운영체제는 자식 프로세스에 자원을 전달함
4) 프로세스가 새로운 프로세스 생성시, 두 프로세스를 실행시키는 방안
	- 부모는 자식과 병행하게 실행을 계속함
    - 부모는 일부 또는 모든 자식이 실행을 종료할 때까지 기다림
5) 새로운 프로세세들의 주소 공간 측면에서 보는 경우
	- 자식 프로세스는 부모 프로세스의 복사본 (자식 프로세스의 프로그램과 데이터 = 부모 프로세스의 포로그램과 데이터)
    - 자식 프로세스가 자신에게 적재될 새로운 프로그램을 가지고 있음

3.2 프로세스 종료

1) 프로세스 종료 발생 경우
	- 운영체제에 자신의 삭제를 요청하면서 종료
    	: 자신을 기다리는 부모 프로세스에 상태 값을 반환
        : 모든 자원이 할당 해제되고 운영체제로 반납
    - 프로세스가 적당한 시스템 콜을 통해 다른 프로세스의 종료를 유발할 수 있음
    	: 통상적으로는 종료될 프로세스의 부모만이 시스템 콜을 호출함
        : 사용자 또는 오작동하는 프로세스가 다른 사용자의 프로세스를 임의로 중단 시킬 수 있음
    - 부모 프로세스가 자식 프로세스를 종료시키기 위해서는 자식의 pid를 알아야함
    - 한 프로세스가 새로운 프로세스를 만들 때, 새로 만들어진 프로세스의 신원이 부모에게 전달
2) 부모 프로세스가 자식 프로세스를 종료시키는 경우
	- 자식이 자신에게 할당된 자원을 초과하여 사용할 때, 부모가 자식들의 상태를 검사할 수 있는 방편이 주어져야 함
    - 자식에게 할당된 태스크가 더 이상 필요 없을 때
    - 부모가 exit를 하는데, 운영체제는 부모가 exit 한 후에 자식이 실행을 계속하는 것을 허용하지 않음
3) 연쇄적 종료
	- 몇몇 시스템에서는 부모 프로세스가 종료한 이후에 자식 프로세스가 존재할 수 없고 프로세스가 종료되면 그로부터 비롯된 모든 자식 프로세스들도 종료되어야 함
4) 좀비 프로세스
	- 종료되었지만 부모프로세스가 아직 wait() 호출을 하지 않은 프로세스
5) Android 프로세스 계층
	- 임의의 프로세스를 종료하지 않고 프로세스의 중요도 계층을 식별
    - 자원 확보를 위해 중요도가 낮은 프로세스부터 종료
    - 중요도 순서 (높은 순-> 낮은 순)
    	: 전경 프로세스 -> 가시적 프로세스 -> 서비스 프로세스 -> 백그라운드 프로세스 -> 빈 프로세스
    - 전경 프로세스
    	: 사용자가 현재 상호 작용하고 있는 응용 프로그램
        : 화면에 보이는 현재 프로세스
    - 가시적 프로세스
    	: 전경에서 직접 볼 수 없지만 전경 프로세스가 참조하는 활동을 수행하는 프로세스
    - 서비스 프로세스
    	: 백그라운드 프로세스와 유사하지만 사용자가 인지할 수 있는 활동을 수행하는 프로세스
    - 백그라운드 프로세스
    	: 활동을 수행하고 있지만 사용자가 인식하지 못하는 프로세스
    - 빈 프로세스
    	: 응용 프로그램과 관련되 활성 구성요소가 없는 프로세스

4. 프로세스 간 통신

4.1 프로세스 간 통신

1) 운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 또는 협력적인 프로세스들
2) 독립적인 프로세스
	- 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않음
3) 협력적인 프로세스
	- 프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받음
4) 상호 협력적인 프로세스
	- 다른 프로세스들과 자료를 공유하는 프로세스
5) 프로세스 협력을 허용하는 환경을 제공하는 이유
	- 정보 공유
    	: 여러 응용 프로그램이 동일한 정보에 접근 할 수 있으므로 정보를 병행적으로 접근 할 수있는 환경이 제공되어야함
    - 계산 가속화
    	: 특정 작업을 빨리 실행하려고 할 때, 그것을 하위 작업으로 나누어 이를 각각 다른 하위 작업들과 병렬로 실행하게 해야함
        : 가속화는 여러 개의 처리 코어가 있는 경우만 가능
    - 모듈성
    	: 시스템 기능을 별도의 프로스스들 또는 스레드들로 나누어, 모듈식 형테로 시스템을 구성해야함
6) 프로세스 간 통신 기법 (interprocess communication, IPC)
	- 협력적 프로세스들이 서로 데이터를 교환 할 수있는 기법
7) 프로세스 간 통신 모델

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

0개의 댓글