◎ 프로세스의 구조
-
코드 영역
- 프로그램의 본문이 기술, 탑재된 코드는 읽기 전용으로 처리됨
-
데이터 영역
- 코드가 실행되면서 사용하는 변수나 파일등의 각종 데이터를 모아놓은 곳
- 읽기와 쓰기 모두 가능
-
스택 영역
- 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳
- 프로세스 내에서 함수를 호출하면 함수를 수행하고 원래 프로그램으로 되돌아올 위치를 저장
- 사용자에게는 보이지 않음
◎ 프로세스의 생성과 복사
-
fork()
- 실행중인 프로세스로부터 새로운 프로세스를 복사하는 함수
- 장점 : 프로세스 생성 속도 빠르고 추가 작업 없이 자원 상속이 가능
→ 시스템 관리를 효율적으로 할 수 있다.
-
동작 과정
- 프로세스 제어 블록을 포함한 부모 프로세스 영역 대부분이 자식 프로세스에 복사되어 똑같은 프로세스가 만들어짐
- 프로세스 구분자, 메모리 관련 정보, PPID, CPID는 달라짐
◎ 프로세스의 전환
- exec() 호출 과정
- 기존의 내용을 지우고 새로운 코드로 바꿔버림
- 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋됨
- 프로그램 카운터 레지스터를 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋됨
- PID, PPID, CPID, 메모리 관련 사항은 변하지 않음
- exec()로 실행해도 PPID값은 변하지 않기 때문에 해당 프로세스가 끝나면 부모 프로세스에게 값 전달
◎ 프로세스의 계층 구조
-
유닉스의 프로세스 계층구조
- 유닉스의 모든 프로세스는 init 프로세스의 자식이 되어 트리 구조를 이룸
- 장점1 : 여러 작업을 동시에 처리할 수 있다.
- 장점2 : 프로세스 재사용이 용이함
- 장점3 : 자원 회수가 쉽다. (책임 관계가 명확해 시스템을 관리하기 수월함)
-
미아 프로세스
- 프로세스가 종료된 후에도 비정상적으로 남아 있는 프로세스
- ex. C 언어의 return, exit() : 자식 프로세스가 작업이 끝났음을 부모 프로세스에게 알리는 것으로 미아 프로세스 발생을 방지함