시스템 프로그래밍 - 프로세스 개념
1. 리눅스 시스템 프로세스 개념
1) 프로세스
- 실행중인 프로그램을 의미
- 일반적으로 프로그램이 메모리에 적재되면 프로세스라고 함.
(1) 프로세서(processor)
- 중앙처리장치 (CPU)
- 예) 펜티엄, 쿼드코어 등
(2) 프로그램(Program)
- 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합
(3)
- 고급언어로 작성한 프로그램은 기계어 프로그램으로 변환해야 실행이 가능
- 예) C언어로 작성한 프로그램
2) 프로세스의 부모 - 자식 관계
(1)
- 프로세스는 부모 - 자식 관계를 가지고 있음 (계층 구조)
(2)
- 필요에 따라 부모 프로세스(parent process)는 자식 프로세스(child process)를 생성하고,
자식 프로세스는 또 다른 자식 프로세스 생성 가능
(3)
- 부팅할 때 스케줄러가 실행한 프로세스인 systemd와 kthreadd 프로세르르 제외하면
모든 프로세스는 부모 프로세스를 가지고 있음.
(4)
- 자식 프로세스는 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료
3) 프로세스의 번호
4) 프로세스의 종류
(1) 데몬 프로세스
- 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행
- 웹(홈페이지) : ex) 아파치
(2) 고아 프로세스
- 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료된 자식 프로세스는 고아(orphan) 프로세스
- 1번 프로세스가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스의 작업 종료 지원
(3) 좀비 프로세스
- 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우
- 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함
- 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 일반 프로세스가 실행되지 않을 수도 있음
2. 리눅스 시스템 프로세스 구조
1) 프로세스의 구조
(1)
- 프로세스 실행 중 프로세스 생성 시스템 호출 이용
- 새로운 프로세스 생성 (부모 - 자식)
(2)
- 프로세스 생성 순서를 저장
- 부모-자식 관계 유지하여 계층적 생성
(3)
- 생성하는 프로세스는 부모 프로세스 parent process
- 생성되는 프로세스는 자식 프로세스 child process 또는 서브 프로세스 subprocess
(4)
- 부모 프로세스는 자식 프로세스를 생성 과정 반복하면서 계층 구조 형성
(5) 메모리에 적재된 프로세스의 구조
2) 프로세스 상태 변화
- 프로세스의 상태는 규칙에 따라 여러 상태로 변함
- 커널의 프로세스 관리 기능이 프로세스의 스케줄링 담당
- 프로세스는 먼저 사용자 모드에서 실행
- 사용자모드에서 시스템 호출을 하면 커널 모드로 전환
- 수면 중이던 프로세스가 깨어나 실행 대기 상태로 전환되면 실행 준비
- 커널 모드에서 실행 중 입출력을 기다릴 때 처럼 실행을 계속할 수 없으면 수면상태로 전환
댓글남기기