[study: OS] — 2. Process

uriyang
IOXIO
Published in
4 min readMay 12, 2020
Photo by Michael Dziedzic on Unsplash

# 프로세스

  • OS가 사용자에게 제공하는 추상화 중 하나
  • 정의: 실행중인 프로그램 [루틴] (동시에 둘 이상의 프로그램 — ID로 식별)
  • 구성 요소
    - CPU context (registers)
    - Program counter — 명령어 주소 레지스터 / Stack pointer — 스택 위치를 가리키는 레지스터
    - OS resources (address space, open files, etc)
    - 다른 정보 (PID, 상태, 소유자 등

# 가상화

  • 제한적인 물리적 CPU로, OS는 어떻게 제한없는 CPU 공급을 제공할 수 있을까?
  • 물리적 CPU를 시분할 방식을 통해 프로세스 처리 (ex: 자바 Thread)

# 프로세스 API

  • OS가 Application에게 제공하는 Interface
  • Create (생성)
    - 사용자가 실행할 새 프로세스를 만든다.
  • Destroy (종료)
    - 완료에 의한 종료가 아닌 강제 종료
  • Wait (대기)
    - 다른 프로세스가 중단될때까지 대기
  • Miscellaneous Control
    - “일시 중단 후 재개” 등의 기타 제어
  • Status (상태)
    - 상태 정보를 얻을 수 있다.

## Process Creation

  1. 프로그램 코드정적 데이터memory의 프로세스의 주소 공간에 로드
    - 프로그램은 처음에 실행 가능한 형식으로 디스크에 상주
    - OS가 lazy loading: 프로그램 실행 시 코드 또는 데이터 로드
  2. 프로그램의 런타임 스택을 할당
    - 주로 local variables, function parameters, return address에 스택을 사용
    - 인수와 함께 스택 초기화 가능 -> main()함수의 argc 및 argv 배열
  3. 프로그램의 heap영역 생성
    - 명시적으로 요청된 동적 할당 데이터에 사용
    - malloc()를 call공간 할당 후, free()를 call해 명시적으로 해제
    (GC를 생각해보면 될 것 같다…)
  4. 다른 초기화 작업 수행
    - 입출력(I/O) 설정
    - 각 프로세스의 open file descriptots: 표준입력, 출력, 오류
  5. main()을 실행 — 진입점에서 실행되는 프로그램
    - OS가 CPU에 대한 제어를 새로 만든 프로세스로 이전

## Process States

  • Running
    - 프로세스 실행 중
  • Ready
    - 프로세스가 실행될 준비가 되었지만, 실행하지 않고있는 상태 (메모리 적재)
  • Blocked
    - 특정 이벤트가 발생할 때까지, 대기하는 상태 (waiting)

## Data Structures

  • 프로세스 목록
    -
    시스템의 모든 프로세스에 대한 정보가 포함
    - 항목은 프로세스 제어 블록 (PCB)이라고도하며, 특정 프로세스에 대한 정보를 포함하는 구조
    - 프로세스 상태 관리문맥교환(Context Switching)을 위해 피료
  • The xv6 kernel Proc Structure
  • PCB 저장 정보
    - PID: 프로세스의 고유 번호
    - 상태: 준비, 대기, 실행 등의 상태
    - 포인터: 다음 실행될 프로세스의 포인터
    - Register save area: 레지스터 관련 정보
    - Priority: 스케줄링 및 프로세스 우선순위
    - 할당된 자원 정보
    - Account: CPU 사용시간, 실제 사용된 시간
    - 입출력 상태 정보

[출처: https://jhnyang.tistory.com/33]

--

--