[운영체제] 프로세스 구조 - (6)

Yeongsan Son·2021년 6월 30일
0

IPC 기법처럼 활용할 수 있는 시그널과 소켓에 대해서 알아보자.

Signal

  • 시그널은 이벤트이다.
  • 특정 시그널은 커스텀이 가능하다
  • 유닉스에서 30년 이상 사용된 전통적인 기법
  • 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지 알림
  • 프로세스 관련 코드에 관련 시그널 핸들러를 등록해서 해당 시그널 처리 실행
    • 시그널 무시:
    • 시그널 블록: 일정 시간 동안 동작하지 않도록
    • 등록된 시그널 핸들러로 특정 동작 수행
    • 등록된 시그널 핸들러가 없다면, 커널에서 기본 동작 수행

주요 시그널

  • SIGKILL: 프로세스 죽이기(슈퍼 관리자가 사용하는 시그널)
  • SIGALARM: 알람 발생
  • SIGSTOP: 프로세스 중단(Ctrl + z)
  • SIGCONT: 멈춰진 프로세스 실행
  • SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽이기(Ctrl + c)
  • SIGSEGV: 프로세스가 다른 메모리 영억을 침범

kill -l

시그널 관련 코드 예

  • 시그널 핸들러 등록 및 핸들러 구현
static void signal_handler(int signo) {
  printf("Catch SIGINT!\n");
  exit(EXIT_SUCCESS);
}

int main (void) {
  if(signal(SIGINT, signal_handler) == SIG_ERR) {
    printf("Can't catch SIGINT!\n");
    exit(EXIT_FAILURE);
  }
  
  for(;;)
    pause();
  return 0;
}
  • 시그널 핸들러 무시(SIG_IGN)
int main(void) {
  if(signal(SIGINT, SIG_IGN) == SIG_ERR){
    printf("Can't catch SIGINT!\n");
    exit (EXIT_FAILURE);
  }
  
  for(;;)
    pause();
  return 0;
}

시그널과 프로세스

  • PCB에 해당 프로세스가 블록 또는 처리해야하는 시그널 관련 정보 관리
    • sigpending: 시그널이 오면 PCB에 처리해야할 시그널이 있다는 알림
    • pending: 시그널 대기 상태
    • blocked: blocked 상태인 시그널 알림
    • sig: 각각의 시그널에 대해 어떤 동작(action)을 수행해야할지 알림

Socket

  • 소켓은 네트워크 통신을 위한 기술
  • 기본적으로 클라언트와 서버 두 개의 다른 컴퓨터간의 네트워크 기반 통신을 위한 기술
    • 네트워크 기기를 이용을 할 수 있는 시스템콜로 생각해도 무방하다.

소켓과 IPC


이미지출처

  • 소켓을 하나의 컴퓨터 안에서, 두 개의 프로세스간에 통신 기법으로 사용 가능
profile
매몰되지 않는 개발자가 되자

0개의 댓글