- 프로세스의 구조
- 코드 영역
프로그램의 본문이 기술된 곳
읽기 전용으로 처리됨
- 데이터 영역
코드가 실행되면서 사용하는 변수가 파일 등의 각종 데이터
읽기 쓰기 가능
- 스택 영역
운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터
- 프로세스의 생성과 복사
- 생성
운영체제는 프로그램을 메모리로 가져와 코드 영역에 넣고 PCB 생성
메모리에 데이터 영역과 스택 영역 확보한 후 프로세스 실행
- fork() 시스템 호출
- 개념
새로운 프로세스를 복사하는 함수
커널에서 제공하는 일종의 시스템 호출
기존의 프로세스는 부모 프로세스가 되고 새로 생긴 프로세스는 자식 프로세스가 되어 부모-자식 관계로 연결됨
- 동작 과정
PCB 포함한 부모 프로세스 영역의 대부분이 자식 프로세스에 복사됨
프로세스 구분자, 메모리의 위치가 바뀜
부모/자식 프로세스는 자식/부모 프로세스 구분자를 가짐
- 장점
저장장치에서 새로 가져오기 않고 기존 메모리에서 복사하기 때문에 생성 속도 빠름
부모 프로세서의 자원을 추가 작업 없이 자식이 상속할 수 있음
자식 프로그램이 종료 시 부모 프로세스가 자원을 정리하기 때문에 시스템 관리 효율적
- 프로세스의 전환
기존 프로세스를 새로운 프로세스로 전환
- exec() 시스템 호출
- 개념
기존의 프로세스를 새로운 프로세스로 전환하는 함수
PCB 구조체 재활용을 통해 새로운 코드 영역만 가져오면 되기 때문에 운영체제의 작업이 수월함
- 동작 과정
코드 영역에 있는 기존 내용을 지우고 새로운 코드로 바꿈
데이터 영역, 스택 영역, 각종 레지스터와 사용한 파일 정보등이 프로세스를 처음 시작하는 것 처럼 내용이 정리됨
- 프로세스의 계층 구조
OOP 와 비슷함
- 유닉스의 계층 구조
커널이 처음 메모리에 올라와 부팅될 시 init 프로세스 생성 후 나머지 프로세스를 init 프로세스의 자식을 만듦
- 계층 구조의 장점
자식 프로세스들을 만들어서 여러 작업을 동시에 처리할 수 있음
부모 자식관의 책임 관계가 분명해져 자원 회수가 편리해짐
- 고아 프로세스
부모 프로세스가 자식 프로세스의 자원 회수 전에 종료되는 것
자식 프로세스가 종료되지 않거나 종료되어도 사용하던 자원 그대로 남음
효율적 운영에 방해됨
- 좀비 프로세스
자식 프로세스가 종료했음에도 부모가 뒤처리 하지 않은 경우
- 컴퓨터가 느려지는 현상
각종 프로세스와 고아/좀비 프로세스가 메모리를 차지하기 때문