Skip to content

TCP IP Chapter10

John edited this page Jan 18, 2018 · 3 revisions

프로세스의 이해와 활용

프로세스란?

  • 실행중인 프로그램입니다.
  • 실행중인 프로그램에 관련된 메모리, 리소스 등을 총칭하는 의미이다.
  • 멀티프로세스 운영체제는 둘 이상의 프로세스를 동시에 생성 가능하다.

프로세스 ID(PID)

운영체제는 생성되는 모든 프로세스에 ID를 할당한다.

fork 함수

프로세스를 통체로 복사하여 똑같은 하나의 별개의 프로세스를 만들어 실행한다.

부모프로세스 fork 함수를 호출한 프로세스는 부모 프로세스 -> fork 함수의 반환 값은 자식 프로세스의 ID

자식프로세스 fork 함수의 호출을 통해서 생성된 프로세스는 자식 프로세스 -> fork 함수의 반환값은 0

실행을 위한 필요한것들

OS 관점 코드 메모리 [ 스택 / 힙 / 데이터 영역]

CPU 관점 연산장치 레지스터 = OS와 CPU의 중간 매게체 역할

멀티프로세스 운영체제

프로세스를 두개이상 만들 수 있다.

하나의 CPU는 번갈아[스위칭] 가면서 두개의 프로세스를 운영을 하고 그 순서는 OS영역에서 관리는 합니다.

SWAP 파일

번갈아 쓰는 파일

context switching

스레드와 프로세스의 차이점

프로세스의 생성과 소멸의 구조

  • 계층적 구조(실행 시키는 프로세스(부모 탐색기/커맨드 및 탐색기)) / 실행되는 프로세스(자식/프로그램)
  • 부모프로세스는 자식프로스세를 확인 후 종료시킨다.

좀비 프로세스

  • 부모프로세스가 자식프로세스의 반환값을 가져가지 않은 프로세스
  • 실행이 완료되었음에 불구하고 소멸되지 않은 프로세스
  • 프로세스도 main 함수가 반환되면 소멸되어야한다.
  • 소멸되지 않았다는 것은 프로세스가 사용한 리소스가 메모리 공간에 여전히 존재한다는 의미이다.

좀비 프로세스의 생성원인

  • 자식 프로세스가 종료 되면서 반환하는 상태 값이 부모 프로세스에게 전달죄 않으면 해당 프로세스는 소멸되지 않고 좀비가 된다.
  • 인자를 전달하면서 exit를 호출하는 경우
  • main 함수에서 return 문을 실행하면서 값을 반환하는 경우
  • 자식 프로세스의 종료 상태 값이 운영체제에 전달되는 경우

wait함수

  • wait함수의 경우 자식 프로세스가 종료되지 않는 상황에서는 반환되지 않고 블로킹 상상태에 놓인다는 특징이 있다.

WIFEXITED

  • 자식식프로세스가 정상 종료한 경우 참(true)을 반환한다.

WEXITSTATUS

자식프로세스의 전달 값을 반환한다.

Waitpid

  • 성공시 종료된 자식 프로세스의 id를 통하여 상태값을 확인
  • wait 함수는 블로킹 상태에 빠질 수 이있는 반면 waitpid 함수는 블로킹 상태에 놓이지 않게끔 할 수 있다.
  • 실패시 -1 을 반환한다.

시그널 핸들링

  • 자식 프로세스의 종료시점을 알수 있다.
  • OS가 자식프로세의 종료를 부모 프로세스에 알려준다.

시그널

  • 약속된 상황이라고 보며 OS와 프로세스의 약속

  • 특정 상황이 되었을때 운영체제가 프로스에게 해당 상황이 발생했 음을 알는 일종의 시지를 가리켜 시그널이라고 한다.

    • SIGALRM alarm 함수 호출을 통해서 등록된 시간이 된 상황
    • SIGINT CTRL + C가 입력된 상황
    • SIGCHLD 자식 프로세스가 종료된 상황

시그널 등록이란?

- 특정 상황에서 운영체제로 부터 프로세스가 시그널을 받기 위해서 해당
  상황에 대해서 등록의 과정을 거쳐야한다.

시그널이 등록되면 함께 등록되 함수의 호출을 통해서 운영체제는 시그널의 발생을 알린다.

sigaction 함수

시그널 함수와 다르게 표준함수이다.

핸들링

  • 처리

프로세스 기반 다중 접속 서버 모델

  • 에코 서버(부모 프로세스)는 accept 함수 호출을 통해서 연결 요청을 수락한다.
  • 이때 얻게 되는 소켓의 파일 디스크립터를 자식 프로세스를 생성해서 넘겨준다(복사한다).
  • 자식 프로세스는 전달 받은 파일 디스크립터를 바탕으로 서비스를 제공한다.

Clone this wiki locally