observe_db

[OS] 3. 프로세스(Process)(1) 본문

학교 공부/운영체제(OS)(3-1)

[OS] 3. 프로세스(Process)(1)

쩡윤 2023. 3. 29. 23:44

3/20

 

프로세스(Process): 메모리에 적재되어있는 프로그램

어떻게 빠르고/공평하고/효율적으로 실행할 수 있을까.(운영체제의 일)

 

Part 1.

Process

  • 실행중인 프로그램
  • 자신의 주소공간(address space) 보유
    • code 영역: 프로세서가 실행하는 프로그램 코드 저장
    • data 영역: 전역 변수 저장
    • heap 영역: 동적 메모리 할당 영역(malloc(), calloc())[1]
    • stack 영역: 임시 데이터(함수의 매개변수/반환주소/지역변수 등)
  • Linux 프로세스에서는 가상 주소 공간(virtual address space)이 있음.

Process life cycle(생명 주기)

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

Linux의 life cycle

프로세스 상태

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

 

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

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

프로세스 테이블(process table)

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

 

Part 2.

프로세스 스케줄러(process scheduler)

  • CPU에서 실행할 프로세스를 선택
  • 여러 프로세스가 실행가능한(ready) 상태이면 우선순위 고려
  • 여러 큐(queue) 구조 활용
    • job queue(작업 대기열): 시스템의 모든 프로세스 관리
    • ready queue(준비 대기열): 실행 가능한 준빕상태의 프로세스 관리
    • device queue(장치 대기열): I/O 장치의 작업처리 대기중인 프로세스 관리
  • 장기 스케줄러(long-term scheduler, job scheduler)
    • 준비 대기열(ready queue)에 집어넣을 프로세스 선택
    • Unix 및 Windows는 장기 스케줄러 없음
  • 단기 스케줄러(short-term scheduler, CPU scheduler)
    • CPU에서 바로 다음에 실행할 프로세스 선택

동작 방식

 

프로세스 관련 서비스

  • 프로세스 생성(create)
  • 프로세스 종료(destroy)
  • 프로세스 일시중지(suspend)
  • 프로세스 재시작(resume)
  • 프로세스 우선순위 변경(priority)
  • 프로세스 대기(block)
  • 프로세스 깨우기(wake up)
  • 프로세스 디스패치(dispatch)
  • 프로세스 간 통신(Inter-process communication, IPC)

프로세스 선점(preemption)

  • 실행중인 프로세스가 CPU 사용권한을 상실하게 되는 것
  • 실행중인 사용자 프로세스가 커널에 제어권을 양보하는 상황
    • 인터럽트, 트랩, 예외사항 발생 시
      • 디바이스 인터럽트(device interrupt), 시스템콜(system call), 페이지 폴트(page fault), 불법 명령어(illegal instruction)
    • 인터럽트 상황 처리 후 우선순위 고려한 스케줄링
  • 주기적 타이머 인터럽트: 프로세스에 할당된 시간이 경과하면 스케줄러가 호출되어 다른 프로세스에 CPU 할당

 

프로세스 생성

  • 처음부터 새로 생성(from scrath)
    • 프로그램 코드와 데이터를 메모리에 적재
    • 새로운 PCB 생성 및 초기화
    • 프로세스를 준비대기열(ready queue)에 추가
  • 복제 생성(cloning)
    • 현재 프로세스를 중지하고 상태 저장
    • PCB 복사하여 새로운 PCB 생성
    • 새로운 PCB를 준비대기열(ready queue)에 추가
    • 기존 프로세스를 부모(parent), 새로운 프로세스는 자식(child) 관계 설정
    • fork() , exec()함수 이용 등.
      •  (fork())
      • fork를 호출한 프로세스의 복사본 생성
      • 새로운 PCB 생성
      • 복사본의 주소공간을 PCB가 가르키도록 초기화
      • 부모 프로세스의 자원을 가리키도록 설정
      • 부모는 생성된 자식 프로세스 PID를, 자식은 0 반환.(유일한 차이점)
      • (exec())
      • 현재 프로세스 정지
      • prog에 해당하는 프로그램을 현 프로세스의 주소 공간에 적재
      • 하드웨어 문맥(context) 초기화
      • 새로운 프로그램에 대한 명령행 파라미터 argv의 초기화
    • 부모 프로세스의 주소공간의 내용 복사
    • 필요시 복사된 주소 공간에 자식 프로세스의 프로그램 복사
  • 프로세스 트리(tree)
    • 부모: 새로운 프로세스를 생성한 프로세스
    • 자식: 생성된 프로세스
    • 트리 형태의 구조 생성
    • 부모 종료 시 자식 프로세스 처리(설계에 따라 다름)
  • 부모 자식 프로세스의 관계
    • 자원 공유(flag로 설정 가능)
      1. 서로 모든 자원 공유
      2. 일부만 공유
      3. 서로 별개 자원
    • 실행 형태
      • 병행 실행
      • 부모 프로세스가 자식 프로세스가 종료할 때까지 대기

[1] 여담으로 자료구조로의 heap은 배열인데 이진트리로 해석가능한 것. min heap/max heap 등.

 

Comments