02.Linux 프로세스 관리

김명래·2022년 11월 15일
0

Process 생성의 목적

Linux에서는 두가지 목적으로 process 가 생성됩니다.

1.같은 프로그램을 여러개의 프로세스가 나눠서 처리합니다.

(ex. web서버처럼 리퀘스트가 여러 개 들어왔을 때 동시에 처리.)

2.전혀 다른 프로그램을 생성할때


그리고 위의 생성 목적에 fork()와 execve() 함수를 사용한다.

시스템내부에서는 clone()과 execve() 시스템콜을 호출한다.

fork 함수란 ?

같은 프로그램의 처리를 여러 개의 프로세스가 나눠서 처리한다(1번 목표)에는 fork() 함수가 사용된다. fork() 함수를 실행하면 실행한 프로세스와 함께 새로운 프로세스가 1개 생성된다.
생성전의 프로세스를 부모프로세스라고 하며 생성된 프로세스는 자식 프로세스라고 합니다.

프로세스를 생성하는 순서는 다음과 같다.

1.자식 프로세스의 메모리 영역을 작성하고 거기에 부모프로세스의 메모리를 복사한다.

2.fork()함수의 리턴값이 각기 다른 것을 이용하여 부모 프로세스와 자식 프로세스가 서로 다른 코드를 실행하도록 분기한다.

execve 함수

전혀 다른 프로그램을 생성할때는 execve() 함수를 이용한다.

  1. 새로운 프로세스를 실행하게 되면 새로운 프로세스에 필요한 메모리 맵에 정보를 읽어들인다.
  2. 현재 프로세스에 새로 불러들인 프로세스 메모리를 덮어씌운다.
  3. 새로운 프로세스를 실행한다.

즉, 프로세스 숫자가 증가하는것이 아니라. 기존의 프로세스를 별도의 프로세스로 변경하는 방식이다.

실행파일을 읽고 프로세스의 메모리 맵에 필요한 정보들을 읽어온다. 실행 파일은 프로세스의 실행중 코드와 데이터 이외에도 데이터 영역에 offset size, 메모리 맵 시작주소, 변수 등에서의 데이터 영역 정보, 최초로 실행할 명령의 메모리주소

메모리 맵 시작주소가 필요한 이유는 cpu에서 사용하는 기계언어는 메모리 맵 시작주소가 필요하기 때문이다.

전혀 다른 프로세스를 생성할 경우 fork and exec 방식을 주로 사용합니다.

profile
독자보다 필자를 위해 포스팅합니다

0개의 댓글