프로세스

이정민·2022년 4월 13일
0

운영체제

목록 보기
3/12

프로세스

  • 실행중인 프로그램
  • 자신의 주소공간 보유
    - 코드 영역
    - 프로세서가 실행하는 프로그램 코드 저장
    - 데이터 영역
    - 전역 변수 저장
    • 힙 영역
      • 동적 메모리 할당 영역, malloc()
    • 스택 영역
      • 임시 데이터(함수 매개변수, 반환주소, 지역변수)

프로세스 생명주기

  • 프로세스는 이산적인 상태간 전이
  • running (실행) 상태
    - 프로세서에서 명령어 실행 중
  • ready (준비) 상태
    - 프로세서의 할당 대기중
  • waiting (blocked) (대기) 상태
    - 특정 event (I/O완료, signal 수신 등) 대기
  • new (생성) 상태
    - 프로세스 생성 중
  • terminated (종료) 상태
    - 실행 종료

프로세스 상태

  • 디스패치
    - ready list에 있는 첫 번째 프로세스에 프로세서를 사용하게 할당하는 것
  • 운영체제는 일정 시간을 프로세서에 사용하도록 허용
  • 시간간격 타이머의 인터럽트를 이용하여 스케줄러를 실행
    - 시분할 처리

프로세스 제어 블록

프로세스 제어 블록(Process Control Block, PCB)

  • OS가 프로세스 관리를 위해 데이터를 보관하는 자료구조
    • 프로세스 식별 번호
    • 프로세스 상태
    • 프로그램 카운터
    • CPU 레지스터
    • CPU 스케쥴링 정보
    • 부모 프로세스 포인터
    • 자식 프로세스 포인터
    • 메모리 영역 정보
    • I/O 상태 정보
    • 사용통계 정보

프로세스 테이블

  • 프로세스 제어블록의 포인터를 관리하는 테이블
    • OS가 시스템 또는 사용자 별로 관리
    • 신속한 PCB 접근 지원
    • 프로세스 종료시
      • 프로세스 테이블에서 해당 프로세스를 제거하고, 할당된 자원 반납

프로세스 스케줄링

프로세서 스케줄러

  • CPU에서 실행할 프로세스를 선택

  • 여러 프로세스가 실행가능한 상태이면 우선순위 고려

  • 여러 대기열 구조 활용

    • 작업 대기열: 시스템의 모든 프로세스 관리
    • 준비 대기열: 실행가능한 준비상태의 프로세스 관리
    • 장치 대기열: I/O 장치의 작업처리 대기중인 프로세스 관리
  • 장기 스케줄러

    • ready queue에 집어넣을 프로세스 선택
    • UNIX 및 Windows OS는 장기 스케줄러 없음
  • 단기 스케줄러
    - CPU에서 다음 번에 실행할 프로세스 선택

프로세스 관리

프로세스 관련 서비스

  • 프로세스 생성
  • 프로세스 종료
  • 프로세스 일시중지
  • 프로세스 재시작
  • 프로세스 우선순위 변경
  • 프로세스 대기
  • 프로세스 깨우기
  • 프로세스 디스패치
  • 프로세스간 통신

프로세스 선점(preemption)

  • 실행중인 프로세스가 CPU 사용권한을 상실하게 되는 것
  • 실행중인 사용자 프로세스가 커널에 제어권을 양보하는 상황
    - 인터럽트, 트랩, 예외상황 발생시
    - 디바이스 인터럽트
    - 디스크 입출력, 네트워크 패킷 도착
    - 시스템콜, 페이지폴트
    - 불법명령어
    • 인터럽트 상황 처리 후 우선순위 고려한 스케줄링
  • 주기적 타이머 인터럽트
    - 프로세스에 할당된 시간이 경과하면 스케줄러가 호출되어 다른 프로세스에 CPU 할당

프로세스 생성

프로세스 생성 방법

  • 처음부터 새로 생성 (from scratch)
    • 프로그램 코드와 데이터를 메모리에 적재
    • 새로운 PCB 생성 및 초기화
    • 프로세스를 ready queue에 추가
  • 복제 생성 (cloning)
    • 현재 프로세스를 중지하고 상태 저장
    • PCB 복사하여 새로운 PCB 생성
    • 새로운 PCB를 ready queue에 추가
    • 기본 프로세스를 부모(parent), 새로운 프로세스는 자식(child) 관계 설정
      ex) fork() 함수 사용

프로세스 트리

  • 부모 프로세스
    - 새로운 프로세스를 생성한 프로세스
  • 자식 프로세스
    - 생성된 프로세스
  • 트리 형태의 구조 형성
  • 부모 프로세스 종료시 자식 프로세스 처리
    • 모든 자식 프로세스 종료, 또는
    • 부모 프로세스에 무관하게 자식 프로세스 진행

부모 및 자식 프로세스 간의 관계

  • 자원 공유 형태
    • 서로 모든 자원 공유
    • 자식 프로세스가 부모 자원의 일부만 공유
    • 서로 별개 자원 사용
  • 실행 형태
    • 부모와 자식 프로세스가 병행 실행
    • 부모 프로세스가 자식 프로세스가 종료할 때까지 대기

복제에 의한 프로세스 생성

  • 부모 프로세스의 주소공간의 내용 복사
  • 필요시 복사된 주소공간에 자식 프로세스의 프로그램 복사
  • UNIX 계열 시스템콜
    • fork(): 새로운 프로세스 복제 생성 (cloning)
    • exec(): 복제된 영역에 새로운 프로그램 복사

UNIX/LINUX 프로세스 생성

  • int fork()
    - fork()를 호출한 프로세스의 복사본 생성
    • 새로운 PCB 생성
    • PCB가 복사본의 주소공간을 가리키도록 초기화
    • 부모 프로세스의 자원을 가리키도록 설정 (현재 열린 파일 등)
    • 부모 프로세스에는 생성된 자식 프로세스의 PID 반환
    • 생성된 자식 프로세스에는 0 반환

UNIX/LINUX 프로세스 변환

  • int exec (char prog, char argv[])
    • 현재 프로세스 정지
    • prog에 해당하는 프로그램을 현재 프로세스의 주소 공간에 적재
    • 하드웨어 문맥 초기화
    • 새로운 프로그램에 대한 명령행 파라미터 argv의 초기화

프로세스 종료

  • 프로세스는 마지막 문장을 실행한 다음, OS에 프로세스 삭제 요청 (exit)

    • wait()를 통해 자식 프로세스에서 부모 프로세스로 데이터 전달
    • 프로세스의 자원은 OS에 의해 반납

  • 비정상적인 종료를 하게 하는 경우도 있음

    • abort() 사용
    • 시그널 SIGABRT를 발생시키고, 시그널 처리기가 있으면 호출하고, 없으면 비정상적인 종료 (일부 자원 반납 처리 부재)

  • 부모 프로세스는 kill()를 통해 자식 프로세스 종료 가능
    - 자식 프로세스가 배정된 자원보다 초과 사용하는 경우
    - 자식 프로세스에 할당된 작업이 필요 없어진 경우


  • 부모 프로세스가 종료되는 경우

    • 어떤 OS는 자식 프로세스 강제 종료
      - 모든 자식 프로세스들의 연쇄 종료

프로세스 일시중지와 재시작

프로세스 일시중지(suspend)

  • 종료시키지 않고 프로세서 사용을 위한 경쟁에서는 잠시 배제
    - 보안위험 감지, 소프트웨어 디버깅에 유용

  • 프로세서 자신이나 다른 프로세스가 일시중지 가능

  • 일시정지 상태인 프로세스는 다른 프로세스에 의해 재시작 가능

  • 일시중지 상태

    • 일시중지준비 상태
    • 일시중지대기 상태

프로세스 문맥교환

문맥교환 (context switching)

  • OS의 실행중인 프로세스를 중지시키고, 준비 상태의 프로세스를 시작시키는 과정
  • 실행중인 실행 문맥을 자신의 PCB에 저장
  • 준비 상태의 프로세스의 PCB 내용을 레지스터 등에 적재
  • 문맥교환 시간의 최소화 필요
    - 어떤 컴퓨터 구조는 하드웨어적으로 수행

프로세스간 통신

프로세스간 통신(interprocess communication, IPC)

  • 프로세스간에 데이터를 주고 받을 수 있도록 하는 것
    • 하나의 컴퓨터 내의 프로세스 간의 통신
    • 네트워크를 통한 다른 컴퓨터 상의 프로세스 간의 통신
  • 프로세스 간의 통신을 위해 서로 필요한 설정 필요
    • signal
    • pipe
    • message passing
    • shared memory
    • socket
    • Remote procedure call (RPC)

시그널

시그널(signal, 신호)

  • 사건 발생시 프로세스에 알려주는 소프트웨어 인터럽트
    - ex) CTRL-C: 실행중인 프로세스에 프로세스 종료 INT 시그널 전송
    kill(my_pid, SIGINT); // 프로세스 종료
    alarm(30); // 30초 후 알람 발생. 프로세스 종료
  • 시그널 발생 자체만 전송, 데이터의 전송은 불가
  • 프로세스는 시그널의 수신(catch), 무시(ignore), 마스킹(mask) 가능
    • 시그널 수신 지정
      • 신호를 전달할 때, OS가 호출할 루틴 지정
        signal(SIGINT,catch_int);
    • 시그널 무시
      • 시그널에 대한 OS의 기본 설정
    • 시그널 마스크
      • 설정이 되어 있으면, 해당 종류의 시그널은 OS가 함
        sigaddset(&mask_set,SIGINT);
        //시그널 집합 변수 mask_set에 시그널 번호 SIGINT을 추가

메시지 전달

메시지 전달(message passing) 기반 프로세스간 통신

  • 메시지 전송방향
    - 한번에 한 방향으로 메시지 전달
    • 양방향 메시지 전송
  • 전송 방식
    - 대기(blocking) 전송
    - 송신자가 수신자에게 메시지 수신 확인 요구
    • 비대기(non-blocking) 방식
      • 송신자가 일방적으로 전송

파이프

파이프(pipe)

  • 두 프로세스가 데이터를 교환할 수 있게 하는 버퍼 역할을 하는 OS가 관리하는 메모리 영역

$ cat foo | grep bar
- cat의 stdout을 grep의 stdio에 연결

  • 두 개의 끝을 갖는 채널(통로)
    - 커널의 메모리 공간을 구현
  • 시스템콜 pipe()
    • 파이프 생성
    • 2개 파일 디스크립터 생성
      • fd[0]: 파이프의 읽기용
      • fd[1]: 파이프의 쓰기용

소켓

소켓

  • 분산 시스템에서 프로세스간 통신 지원
  • IP 주소와 포트 번호로 식별되는 통신 단말(endpoint) 제공
  • 클라이언트-서버 구조 사용

메시지 전달

RPC (Remote Procedure Call, 원격 프로시저 호출)

  • 다른 컴퓨터에 있는 함수나 프로시저를 원격 사용을 위한 세세한 코딩없이 프로그램에서 실행할 수 있게 기술

  • Remote invocation (원격호출), remote method invocation(RMI, 원격 메소드 호출)이라고도 함

  • Java RMI
    - Java 프로그램이 원격 객체의 method를 호출하게 하는 기술

profile
으악

0개의 댓글