리그캣의 개발놀이터

네트워크 - 프로세스 본문

프로그래밍 기본/네트워크 프로그래밍

네트워크 - 프로세스

리그캣 2018. 1. 25. 19:30

3장. 프로세스

프로세스

실행중인 프로그램, cpu가 서비스를 제공해 주는 단위

프로세스의 모드

사용자모드

사용자의 권한으로 명령이 실행

커널모드

커널의 권한으로 실행, 하드디스크를 읽기 위한 read() 함수, 입출력 상태일때는 커널 모드로 바뀐다.

프로세스의 상태

  • 실행(running) 상태 - 현재 cpu에서 서비스를 받고 있는 상태 / 사용자 모드에서 작동

  • 블록(waiting) 상태 -  실행 가능상태임에도 불구하고 순서문제로 기다리는 상태. 내 프로그래밍의 의해서 stop 시킨 것.

  • 중단(stopped) 상태 - 블록상태랑 같음.  프로세스 의지와 관계없이 외부에서 stop 시킨 것.

  • 좀비(zombie) 상태 - 프로세스가 이미 실행이 끝났지만 프로세스가 종료가 안 된 상태.

p.87~88에 자세히 설명 되었으니 읽어보기 바람.


운영체제에서 소개가 되었던 내용 들임.

프로세스의 메모리 배치

스택 - 프로그램 실행시에만 엑세스 할 수 있는 값들

힙 - malloc()이 할당한 공간으로 프로그램 실행 후에도 엑세스 가능 하다.


스택과 힙 - ppt 한번 보기

fork

  • 새로운 프로세스를 만들기 위해 주로 사용

  • fork()를 호출한 프로세스의 이미지를 복사하여 새로운 프로세스를 생성

  • 부모 / 자식 프로세스

    • 부모 프로세스 : fork()를 호출한 프로세스

      • fork()의 리턴값 : 자식프로세스의 PID

    • 자식 프로세스 : fork()에 의해 새로 생성된 프롯스

      • fork()의 리턴값 : 0

  • 프로세스의 공유

    • 부모와 자식 프로세스는 변수를 서로 공유하지 않음

    • 개설한 파일이나 소켓은 프로세스 이미지 외부에 존재하므로 공유(파일 디스크립터는 공유된다.)

부모프로세스의 기능을 자식프로세스가 갖게된다.

p92 3-2를 보셈.

fork() 사용 예

부모와 자식 프로세스가 같은 이름의 변수 값을 각각 증가시키고 그 결과를 확인해 보는 프로그램 fork_test.c

토크 서버/클라이언트 프로그램

서버

  • listen()

  • accept()&fork()

  • send(),recv()

클라이언트

  • connect();

  • send(), recv()


Comments