ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실습과 그림으로 배우는 리눅스 구조 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

    실습과 그림으로 배우는 리눅스 구조 

    반응형

    댓글

Designed by Tistory.