[OS] 프로세스의 상태

Elmo·2022년 11월 7일
0

프로세스

처리기에 할당되어 수행될 수 있는 개체로서, 디스크의 객체를 메모리로 로딩하여 프로그램이 생명력을 얻으면 프로세스가 됨.

프로세스의 구성

  • Memory(가상주소공간)->heap
  • Code(text)
  • Data: 전역변수 등
  • Stack : 지역변수, 함수 파라미터, 리턴 주소 등
  • Registers : Program counter, Stack pointer

PCB 구조체

프로세스마다 PCB 구조체를 가짐

문맥(Context)

  • system 문맥
  • 메모리 문맥
  • 레지스터 문맥

문맥 교환

  • 프로세스가 인터럽트 될 때, 문맥 데이터의 값이 해당 프로세스의 필드에 저장되고, 프로세스의 상태는 블록 또는 준비 상태로 바뀜
  • OS가 다른 프로세스를 선택하여 수행 상태로 바꾸고 그 프로세스의 PC(program counter)와 문맥 데이터를 처리기 레지스터로 적재하여 새로운 프로세스를 수행함.

xv6에서 proc.h 파일에서 프로세스 구조체를 찾을 수 있음

struct proc {
  uint sz;                     // Size of process memory (bytes)
  pde_t* pgdir;                // Page table
  char *kstack;                // Bottom of kernel stack for this process
  enum procstate state;        // Process state
  int pid;                     // Process ID
  struct proc *parent;         // Parent process
  struct trapframe *tf;        // Trap frame for current syscall
  struct context *context;     // swtch() here to run process
  void *chan;                  // If non-zero, sleeping on chan
  int killed;                  // If non-zero, have been killed
  struct file *ofile[NOFILE];  // Open files
  struct inode *cwd;           // Current directory                
};

프로세스 API(시스템 콜)

  • 생성: fork()
    자식 프로세스 생성
  • 종료: exit()
    종료해도 메모리에 남아 좀비 상태가 되므로 부모가 자식 프로세스가 종료되길 기다렸다가 해제해줘야함.
  • 대기: wait()
  • 그 밖의 제어: exec() 등
  • 상태: status로 표현

프로세스의 생성

  • 프로그램은 실행 가능한 형식(바이너리 실행 이미지 format)으로 디스크에 상주함
    unix) a.out -> COFF -> ELF
    windows) com, exe -> PE
  • 프로그램 코드를 메모리(주소 공간)에 로드함
  • 프로그램 실행 중에 필요한 코드의 일부분을 로딩함
  • 프로그램의 런타임 스택 할당
  • 프로그램의 힙 생성
  • OS는 다른 초기화 작업 진행
    각 프로세스는 기본 3개의 file descriptors 할당(표준 입력,출력,에러)
  • main()에서 프로그램 시작 -> cpu 제어권을 새로 생성된 프로세스에 전달

프로세스의 상태

프로세스가 인터럽트되는 경우 : I/O 인터럽트, Time 퀀텀

  • I/O 인터럽트 : I/O 작업을 수행하는 경우
  • Time 퀀텀 : 주어진 cpu 할당 시간이 지나면 인터럽트 됨

2가지 상태

  • 수행(실행)과 비수행(비실행)

3가지 상태

  • Running (실행) : 처리기 상에서 프로세스 실행
  • Ready (준비)
  • Blocked 블럭 = Sleep = 수면
    I/O 요청을 시작하면 블럭 상태가 되고 다른 프로세스가 실행됨

5가지 상태

9가지 상태


보류 상태(swap-out 상태)

  • swapping : 프로세스의 일부나 전체를 주기억장치로부터 디스크로 옮김
  • 스왑 아웃: 프로세스의 전체 또는 일부 이미지를 주기억장치로부터 스왑공간으로 이동시킴
  • 스왑 인: 스왑 공간으로부터 주기억장치로 적재함
  • 스와핑은 I/O 연산으로서 성능 저하가 가능하지만 연결 리스트로 구현되어 일반적으로 성능을 향상시킬 수 있음
profile
엘모는 즐거워

0개의 댓글