Process 1: Process, Context, PCB, Context Switch, Scheduler, Process State

ㅎㅎ·2023년 7월 7일
0

운영체제, 반효경

목록 보기
4/19
  • 프로세스란 ? "Process is a program in execution"

문맥(Context)

  • 프로세스의 문맥: 프로세스를 설명하기 위해 중요한 개념, 특정 시점을 놓고 봤을 때 이 프로세스가 어디까지 실행을 했는가에 대한 정보(현재 상태를 규명하는 정보)

    • CPU의 수행상태를 나타내는 HW 관련 문맥: PC가 어디를 가리키는지, register에는 어떤 값이 저장되어 있는가 등
    • 메모리 상 프로세스의 주소 공간은 무엇을 담고 있나(stack, data, code), 즉 데이터들의 현재 상태가 어떤가
    • 해당 프로세스와 관련한 커널 상 자료 구조
      • PCB, Kernal stack
      • 프로세스별로 별도로 커널의 주소공간에 쌓임

  • 문맥이 왜 중요할까? 현대 컴퓨터의 프로세스 동작방식은 멀티태스킹, 시분할 방식, CPU가 여러 프로세스를 빠른 시간 내에 이동하면서 처리하게 됨, 다른 곳에서 작업하다가 돌아온 경우 이 프로세스의 정보를 알아야 작업을 재진행 할 수 있음, 따라서 문맥이 필요

프로세스의 상태

  • Running: 프로세스가 CPU를 할당받아 진행중인 상태

  • Ready: 메모리 등 필요한 요소를 모두 갖추고 CPU를 할당받기 위해 대기중인 상태(CPU가 작업을 진행하려면 디스크에는 접근을 못 하니까 메모리에 올라와 있어야 함)

  • Blocked(wait, sleep): CPU를 주어도 당장 instruction을 실행할 수 없는 상태, I/O 등 프로세스 자신이 요청한 작업이 완료되는 것을 기다리는 상태(ex 메모리에 필요한 코드 영역이 올라와 있지 않아 읽어와야 하거나 디스크에서 파일 읽어오기)

  • New: 프로세스 생성중인 상태

  • Terminated: 프로세스 수행이 끝난 상태, 종료와는 구분(종료 전 처리할 작업이 있을 수 있음)


  • CPU는 Running 상태의 프로세스 Instruction 실행, timer interrupt가 들어오면 작업 멈추고 대기 큐로 이동, 다음 프로세스 수행

  • Running 중 I/O 등의 작업이 필요할 경우 해당 I/O device의 대기 큐에 보냄(Running ⇒ Blocked)
    ⇒ device의 controller가 순서대로 작업 수행 후 완료되면 interrupt를 통해 CPU에게 I/O작업이 종료됐음을 알림
    ⇒ interrupt에 의해 CPU 제어권이 O.S의 커널에 넘어감
    ⇒ O.S는 작업 완료 후 도출된 데이터를 메모리 영역의 Process에 넘기거나, Process의 상태를 blocked에서 ready로 바꾸는 등의 작업 실행

  • 이러한 일련의 작업은 HW적 처리 뿐만 아니라 SW적 처리를 위해 blocked 상태로 넘어갈 수도 있음

    • SW간 공유하는 공유데이터의 일관성을 위해 다른 Process가 CPU에 의해 이미 데이터에 접근 중이라면 차단하거나 오래도록 점유하는 것을 막는 등의 조치가 필요함, 이럴 때도 프로세스를 blocked 상태로 보낼 수 있음
  • 프로세스의 대기 큐들은 위 그림과 같이 커널의 Data 영역에 자료구조를 만들어 놓고 운영


PCB

  • 개념: O.S가 프로세스를 관리하기 위해 사용하는 프로세스 정보를 담은 구조체
  • 프로세스 관리를 위한 정보: 프로세스 ID, 프로세스 상태, 우선순위 등
  • CPU의 수행 정보(HW적 요소): register에 담긴 값, PC 등
  • 메모리 관련(code, data, stack)의 위치 정보
  • 그 외 resource 사용 관련: open한 파일 목록 등
  • pointer: 대기 큐에 담긴 프로세스 관리 등에서 사용

문맥교환

  • 개념: 한 프로세스에서 다른 프로세스로 작업이 넘어갈 때 기존 프로세스의 정보를 PCB에 save하고 다른 프로세스의 PCB 정보를 읽어와 재개하는 것
  • 프로세스 A에서 Kernal mode로 넘어갔다가 다시 프로세스 A로 돌아오는 것은 문맥교환이라고 하지 않음

스케줄러

  • 장기 스케줄러(job scheduler): 프로세스가 생성 될 때 메모리 여유 공간을 확인하여 메모리에 올릴 것인지 판단, degree of Multiprograming(메모리에 올라갈 프로세스의 수)를 제어, 요즘은 사용 X, 바로 메모리에 올림

  • 단기 스케줄러(cpu scheduler):, 어떤 프로세스에게 CPU를 할당할지 결정, CPU의 속도만큼 충분히 빨라야 함

  • 중기 스케줄러(swapper): 메모리에 여유 공간이 없으면 프로세스의 메모리를 통째로 빼앗아 DISK로 옮김, degree of multiprogramming 제어

  • 스케줄러라 표현했지만 O.S 내에 있는 코드임

  • 지금은 장기가 아닌 중기를 이용하여 degree of multiprogramming을 제어함

Q. 메모리에 올라간 프로그램이 아주 많거나 아주 적을 경우 생기는 문제?

  • 아주 많은 경우 실행을 위해 필요한 영역이 메모리에 없을 가능성이 높아 I/O가 빈번하게 일어나 overhead가 발생, 아주 적은 경우 I/O나 event 처리를 위해 대기 중인 프로세스를 대신하여 다른 프로세스를 실행시키기 위한 전환 작업이 신속하게 발생할 수 없음

프로세스 상태

  • Suspened: 외부적인 이유로 프로세스의 수행이 정지된 상태, 프로세스가 통째로 디스크에 swap out 됨
  • 중기스케줄러에 의해, 혹은 사람에 의해 프로세스를 정지시킬 때
    외부에 의해 중단된 프로세스는 외부에서 다시 재개해줘야 active로 올라갈 수 있음


  • 유의: 프로세스의 상태는 O.S에서 프로세스를 구분하는 개념으로 O.S 자신에 대해서까지 이 상태 개념을 부여하지 않음, Interrupt로 인해 CPU의 제어권이 O.S에 넘어갔을 때도 그전에 실행중이던 프로세스가 Monitor mode에서 running이라고 표현하지, O.S가 running이라 말하지는 않는다.

Q. 여기서 event occur에서 event 는 뭘 가리키지?

Q. PC는 정확히 뭐지?

profile
Hello World

0개의 댓글