-
실습과 그림으로 배우는 리눅스 구조 3장 정리운영체제 2022. 10. 30. 14:29
프로세스 관리
프로세스 생성 목적
- 같은 프로그램의 처리를 여러 프로세스가 나눠서 처리하는 경우
- 웹서버에 요청이 들어왔을 때 동시에 처리해야 하는 경우
- fork() 함수를 사용한다.
- 전혀 다른 프로그램을 생성해야 하는 경우
- bash로부터 각 종 프로그램을 생성하는 경우
- execve() 함수를 사용한다.
fork()와 execve()
1. fork()
- 같은 프로그램의 처리를 여러 프로세스가 나눠서 처리해야 하는 경우 사용한다.
- fork() 실행시 새로운 프로세스가 생성된다.
- fork를 실행한 프로세스가 부모 프로세스가 되고, 새롭게 생성된 프로세스가 자식 프로세스가 된다.
- 프로세스 생성 순서
- 부모 프로세스의 메모리를 자식 프로세스 메모리 영역에 복사(새로운 메모리 영역을 할당)
- 이후 자식 프로세스와 부모 프로세스는 실행처리가 분기
- fork() 함수가 값을 반환하면서 종료
- 부모 프로세스는 자신의 프로세스 ID + 자식 프로세스의 프로세스 ID를 반환한다.
- 자식 프로세스는 0을 반환
2. execve()
- 전혀 다른 프로그램을 생성해야할 때 execve()를 사용한다.
- 기존의 프로세스를 다른 프로세스로 변경하는 방식으로 수행(새로운 메모리 영역을 할당하지 않음)
- 프로세스 생성 순서
- 실행 파일을 읽어 프로세스 메모리 맵에 필요한 정보를 읽음
- 현재 프로세스 메모리를 새로운 프로세스의 데이터로 덮어씀
- 새로운 프로세스의 첫 번째 명령어를 실행
- 실행 파일
- ELF 형식을 사용
- 코드 영역, 데이터 영역, 오프셋, 사이즈, 메모리 맵 시작 주소로 구성
- [readelf] 커맨드를 통해서 확인 가능
3. fork and exec
- 전혀 다른 프로세스를 생성하는 경우 사용
- 부모가 될 프로세스가 fork()를 통해서 자식 프로세스를 생성하고, 자식 프로세스에서 exec()를 실행하는 방식
프로세스 종료
- C 언어의 경우 exit() 함수를 호출하면, _exit() 시스템 콜이 호출되고 프로세스는 종료된다.
- 프로세스가 할당 받은 메모리를 회수한다.
Reference
실습과 그림으로 배우는 리눅스 구조
반응형'운영체제' 카테고리의 다른 글
실습과 그림으로 배우는 리눅스 구조 5장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 4장 정리 (2) 2022.10.30 실습과 그림으로 배우는 리눅스 구조 2장 정리 (2) 2022.10.30 실습과 그림으로 배우는 리눅스 구조 1장 정리 (0) 2022.10.29 스레드(Thread) 관리 (0) 2022.07.11 - 같은 프로그램의 처리를 여러 프로세스가 나눠서 처리하는 경우