IOT 6주차 -2

강준호·2024년 4월 11일
0

IOT

목록 보기
7/13

TCP/IP 컨텍스트에서 프로세스 생성 및 관리를 통해 여러 연결을 동시에 처리할 수 있는 강력한 서버를 생성하는 다양한 측면

프로세스 이해 및 활용

프로세스 정의: 프로세스를 관련 메모리 및 리소스를 포함하는 실행 중인 프로그램으로 설명합니다. 또한 운영 체제가 여러 프로세스를 동시에 관리할 수 있는 방법도 설명합니다.

프로세스 ID(PID): 운영 체제에서 생성된 모든 프로세스에는 프로세스 ID라는 고유 식별자가 할당됩니다.

다중 프로세스 서버 구현

다중 연결 서버: 이 서버는 둘 이상의 클라이언트에 대한 동시 연결 및 서비스를 허용합니다. 이 장에서는 이러한 서버를 효과적으로 구현하기 위한 전략을 간략하게 설명합니다.

fork()를 사용하여 프로세스 생성: fork() 함수는 호출 프로세스를 복제하는 데 사용되어 원본 프로세스와 새 프로세스 사이에 상위-하위 관계를 생성합니다. 하위 프로세스는 상위 포스트포킹과 독립적으로 실행됩니다.

프로세스 및 좀비 프로세스

좀비 프로세스 이해

  • 좀비 프로세스는 실행을 완료했지만 적절하게 정리되지 않아 여전히 시스템의 리소스를 점유하는 프로세스입니다.
  • 이는 일반적으로 부모가 자녀의 해고 상태를 수집하지 않았기 때문에 발생합니다.

좀비 프로세스 방지

wait()

  • child 프로세스가 종료되지 않은 상황에서는 반환하지 않고 블로킹 상태에 놓인다.

waitpid()

  • wait 함수는 블로킹 상태에 빠질 수 있지만, waitpid 는 블로킹 상태에 놓이지 않게 할 수 있다. 더유연!

  • 이는 0 을 리턴함. => 차일드 함수는

  • 이 장에서는 wait() 및 waitpid() 함수를 사용하여 부모 프로세스가 자식 프로세스의 종료를 적절하게 처리하고 리소스 사용을 정리하도록 하여 좀비 프로세스를 방지할 수 있는 방법에 대해 설명합니다.

10-3 시그널 핸들링(신호 처리)

시그널이란

  • 신호는 특정 이벤트가 발생했음을 나타내기 위해 운영 체제에서 프로세스로 보내는 알림입니다.

시그널 함수

  • signal() 및 sigaction()과 같은 함수는 프로세스가 다양한 신호에 응답하는 방법을 결정하는 신호 처리기를 등록하는 데 사용됩니다.

시그널 핸들링을 통한 좀비 프로세스의 소멸

  • SIGCHLD(하위 프로세스 종료를 상위 프로세스에 알림), SIGALRM(알람 신호) 및 SIGINT(키보드 중단)와 같은 특정 신호를 처리하는 방법을 포함한 실제 예 .

10-4 멀티 태스킹 기반 다중 연결 서버

프로세스 기반 다중 연결 서버 모델

  • 각각의 새로운 연결에 대해 클라이언트별 작업을 처리하기 위해 새로운 프로세스가 생성되어 다중 프로세스 서버의 일반적인 모델을 보여줍니다.

다중 프로세스 에코 서버 구현

  • 이 장에서는 코드 조각을 제공하고 새 하위 프로세스와의 각 클라이언트 연결을 처리하는 에코 서버를 설정하는 프로세스를 설명합니다.

TCP 입출력 루틴 구분

I/O 루틴 분할의 이점

  • 입력 및 출력 프로세스를 분할하여 동시 데이터 수신 및 전송이 가능하므로 서버의 성능과 응답성을 최적화할 수 있습니다.

구현 예

  • 이 텍스트는 TCP 서버-클라이언트 아키텍처에서 이러한 개념을 구현하는 방법을 보여주는 실제 코드 예를 제공합니다.

이 장에서는 Unix 계열 운영 체제에서 프로세스 관리를 사용하여 확장 가능한 네트워크 응용 프로그램을 개발하기 위한 필수적인 통찰력과 기술 전략을 제공합니다. 특히 여러 클라이언트 연결을 처리하고 프로세스 수명주기를 효율적으로 관리하여 시스템 안정성과 성능을 보장하는 데 중점을 둡니다.


IO 멀티플렉싱

  • 별도의 스레드나 프로세스를 지정하지 않고 서버가 여러 클라이언트 연결을 동시에 처리해야 하는 네트워크 프로그래밍에 특히 유용

소켓 I/O 모델

차단 및 비차단 소켓

블로킹 소켓(소켓이 준비될 때까지 스레드가 정지되는 위치)

  • 이거 수행하러 왔다가 안되면 다 sleep

논블로킹 소켓(데이터 준비 여부에 관계없이 소켓 작업이 즉시 반환되어 스레드 정지).

IO 멀티플렉싱

  • 프로세스 관리 오버헤드와 복잡한 구현으로 인해 효율성이 떨어질 수 있는 다중 프로세스 또는 다중 스레드 서버 모델에 대한 대안으로 제시됩니다.

  • OS 한테 물어보는데,

다중화 모델

select 모델

  • 어떤 소켓이 I/O 작업 준비가 되었는지 모니터링하여 단일 스레드가 여러 소켓 연결을 관리할 수 있도록 하는 'select()' 기능을 도입했습니다.

  • 관찰의 대상이 되는 디스크립터의 수는 maxfd이며, 두 번째, 세 번째, 네 번째 인자를 통해서 전달된
    관찰의 대상중에서 각각 입력, 출력, 또는 오류가 발생했을 때 select 함수는 반환을 한다. 단, timeout
    의 지정을 통해서 무조건 반환이 되는 시간을 결정할 수 있다.

epoll 모델

  • select에 대한 보다 효율적인 대안으로 epoll을 논의합니다. 특히 다수의 소켓에 적합합니다. 'epoll'은 이벤트 중심 I/O를 추적하여 모든 소켓을 반복적으로 확인해야 하는 'select()' 함수에서 나타나는 오버헤드를 줄입니다.

비교 분석

select vs epoll vs poll

  • 노트에서는 성능, 확장성 및 사용 편의성을 기준으로 이러한 모델을 대조합니다. select()는 다양한 운영 체제에서 보다 보편적으로 지원되므로 이식성이 뛰어나지만 파일 설명자 수에 실질적인 제한이 없는 epoll에 비해 소켓 수가 많으면 효율성이 떨어집니다. 핸들.
    실제 구현 단계: 자세한 코드 조각과 운영 워크플로에서는 이러한 모델을 사용하여 서버를 구현하는 방법, 서버 소켓('수신' 소켓) 설정 논의, 연결 요청 처리 및 데이터 전송 관리 방법을 보여줍니다.

서버 모델 기능

이상적인 소켓 I/O 모델 특성: 이상적인 모델을 차단을 최소화하고, 관리 가능한 스레드 수를 유지하며, CPU 사용량과 시스템 호출을 최적화하는 모델로 설명합니다.
선택 및 폴에 비해 epoll의 장점: Epoll의 주요 장점은 상태 변경에 대한 커널 수준 관리로 인해 많은 수의 연결을 처리하는 효율성이 뛰어나 사용자 모드에서 커널 모드로 자주 전환할 필요성이 줄어듭니다.

사용 예 및 코드 조각

예제 코드: epoll 및 select 기반 서버를 설정하는 방법과 이벤트 및 오류를 처리하는 방법에 대한 예가 포함되어 있습니다.
이 문서는 여러 클라이언트 연결을 효율적으로 처리하기 위해 서버 아키텍처를 최적화하는 데 중점을 두고 Linux의 네트워크 프로그래밍에 대한 깊은 이해를 원하는 학생과 전문가에게 귀중한 리소스인 것 같습니다.

0개의 댓글

관련 채용 정보