[운영체제] Chapter 3. Process(1)

2022. 12. 11. 01:47CS/운영체제

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

프로세스의 개념, 프로세스의 상태(Process State), 프로세스의 개념, 프로세스 상태도, Process Control Block(PCB), 문맥 교환(Context Switch), 프로세스를 스케줄링하기 위한 큐, Ready Queue와 다양한 Device Queue, 스케줄러(Scheduler)

 

1. 프로세스의 개념

Process is a program in execution 
프로세스는 실행 중인 프로그램이다

1-1. 프로세스의 문맥(context)

  • 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미
  • 여러 프로세스가 함께 수행되는 시분할 시스템 환경에서
    • CPU를 다시 획득해 명령 수행을 재개하려면 이전에 어디까지 수행했는지에 대한 정확한 정보가 필요

  • 하드웨어 문맥: 어떤 instruction까지 실행했는지(CPU 수행 상태)
    • Program Counter: 코드의 어느 부분까지 실행했는지
    • register: 레지스터에 어떤 값을 넣었는지
  • 프로세스의 주소 공간: 메모리에 어떤 부분을 어디까지 쌓아 놓고 있는지
    • code(기계어 코드), data(전역 변수, 자료구조), stack(함수 데이터)
  • 프로세스 관련 커널 자료 구조: 프로세스를 관리하기 위한
    • PCB(Process Control Block): 프로세스 하나가 실행될 때마다 운영체제는 PCB를 하나씩 두고 관리
    • Kernel stack: 커널은 여러 프로세스가 공유하는 코드 → 커널 스택을 프로세스마다 별도로 둠

“어느 시점에 과연 이 프로세스는 지금 어디까지 와 있는가?”를 규명하는데 필요한 요소: 프로세스의 문맥

 

2. 프로세스의 상태(Process State)

  • 프로세스는 상태(state)가 변경되며 수행된다.
    • 컴퓨터 자원을 효율적으로 관리하기 위해 프로세스의 상태를 구분
    • 하나의 프로세스는 항상 어느 한 상태에 머물러 있게 되고, 그 상태는 시간의 흐름에 따라 변하게 된다.
  • Running(실행): 프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태
  • Ready(준비): 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 보유하지 못한 상태
  • Blocked(wait, sleep)(봉쇄): CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태
    • 예) 프로세스가 요청한 입출력 작업이 진행 중인 경우(디스크에서 file을 읽어와야 하는 경우)
  • New: 프로세스가 생성 중인 상태로 메모리 획득을 승인받지 못한 상태
  • Termintated: 수행(execution)이 끝난 상태지만 정리할게 남아있는 상태

2-1. 프로세스 상태 변화

  1. 하나의 프로세스(A)가 CPU에서 running(실행)하고 있다 타이머 인터럽트가 들어오면
  2. CPU를 뺏기고 ready(준비) 큐의 맨 뒤에 줄을 서고
  3. CPU를 기다리는 준비 상태의 프로세스들 중에서 CPU 스케줄러가 적절한 프로세스(B)를 하나 선정해 CPU를 할당(CPU 디스패치)
  4. 실행 중인 프로세스(B)에 디스크에서 파일의 내용을 읽어와야 하는 명령이 있다면
  5. 입출력이 완료될 때까지 프로세스(B)는 CPU를 반환한 다음 blocked(봉쇄) 상태로 바뀌게 된다.
  6. CPU 디스패치
  7. 프로세스(B)는 디스크 입출력을 기다리는 큐(Disk I/O queue) 줄 서 있다 디스크 컨트롤러의 지휘 하에 순서대로 처리되고 나면 디스크 컨트롤러가 CPU에게 인터럽트 발생시켜 입출력이 완료되었다는 사실을 알린다.
  8. 인터럽트를 당한 프로세스(C)는 사용자 모드에서 실행되다가 커널 모드로 진입
  9. 디스크 컨트롤러가 발생시킨 인터럽트는 입출력이 완료된 프로세스(B)의 상태를 blocked → ready 상태로 바꾼 후 장치의 로컬 버퍼에 있는 내용을 메모리로 이동시키는 일련의 업무 수행
  10. 인터럽트 처리가 끝나면 인터럽트 처리 루틴 이전에 수행되던 프로세스(C)에게 CPU를 다시 할당해 그 프로세스(C)의 직전 수행 시점 이후의 코드가 실행된다.
  • Disk I/O queue, keyboard I/O queue, Resource queue등에서 대기 중인 프로세스는 모두 blocked 상태

⇒ 운영체제 커널이 커널 데이터 영역에 자료구조로 큐를 만들고, 프로세스의 상태를 바꿔가며

  • ready 상태에 있는 프로세스에게 CPU를 주고
  • blocked 상태에 있는 프로세스에게는 CPU를 주지 않으며 운영한다.

 

3. 프로세스 제어 블록(PCB: Process Control Block)

  • 운영체제가 시스템 내의 프로세스들을 관리하기 위해 각 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조(구조체로 유지)
  • OS가 관리상 사용하는 정보
    • 프로세스의 상태(CPU를 할당해도 되는지 여부를 결정), 프로세스 번호(Process ID)
    • 스케줄링 정보, 우선순위
  • CPU 수행 관련 하드웨어 값
    • 프로그램 카운터(다음에 수행할 명령의 위치), 레지스터(CPU 연산을 위해 현시점 저장하는 값)
    • 커널 메모리 안에 가지고 있는 값
  • 메모리 관련
    • code, data, stack의 위치 정보(메모리 할당을 위해)
  • 파일 관련
    • 프로세스가 오픈해서 쓰고 있는 파일 정보

 

4. 문맥 교환(Context Switch)

  • 하나의 사용자 프로세스로부터 다른 프로세스로 CPU의 제어권이 이양되는 과정
  • 프로세스(A) → 프로세스(B)
    • 운영체제는 프로세스(A)의 상태를 그 프로세스의 PCB에 저장
    • 운영체제는 프로세스(B)의 상태를 그 프로세스의 PCB에서 읽어옴
    • 예) 타이머 인터럽트 발생
      • CPU의 제어권은 운영체제로 넘어간다.
      • 운영체제는 타이머 인터럽트 처리 루틴으로 가서
      • 직전까지 수행 중이던 프로세스(A)의 문맥을 저장하고 새롭게 실행시킬 프로세스(B)에게 CPU 이양
      • 수행 중이던 프로세스(A)는 준비상태로 바뀌고 새롭게 CPU를 할당받은 프로세스(B)는 실행상태
      • 프로세스(A)는 PC값 등의 프로세스의 문맥을 자신의 PCB에 저장하고
      • 프로세스(B)는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원한다.

4-1. 문맥 교환이 일어나는 경우와 그렇지 않은 경우

  • 문맥 교환이 일어나는 경우: 다른 프로세스로 CPU의 제어권이 이양
  • 문맥 교환이 일어나지 않는 경우: 다른 프로세스로 CPU의 제어권이 이양되지 않고 실행 모드만 변경
    • 다른 프로그램의 요청

  • 문맥 교환이 일어나지 않는 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save 해야 하지만
  • 문맥 교환을 하는 경우는 프로세스가 바뀌는 것으로 그 부담이 훨씬 크다.
    • cache memory flush와 같이 상당한 오버헤드 발생
      • 타이머에 CPU 할당 시간을 아주 작게 세팅해 프로세스 간 문맥 교환이 빈번하게 발생하도록 하면 이에 드는 오버헤드가 상당히 커진다.

 

5. 프로세스를 스케줄링하기 위한 큐

  • Job queue(작업 큐): 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스의 집합
    • 작업 큐에 있다고 해서 반드시 메모리를 가지고 있는 것은 아님
    • 준비 큐에 속한 프로세스들은 준비 상태에
    • 장치 큐에 속한 프로세스들은 봉쇄 상태에
    → 프로세스의 상태 변화에 따라 준비 큐와 장치 큐를 오가며 실행된다.
  • Ready queue(준비 큐): 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue(장치 큐): I/O 장치의 처리를 기다리는 프로세스의 집합
  • 프로세스의 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐(queue)를 두어 수행하게 된다.
    • 커널이 총체적으로 관리한다는 뜻
    • 큐는 각 프로세스의 PCB를 연결 리스트 형태로 관리하며 포인터를 사용해 순서를 정한다.

 

6. 스케줄러(Scheduler)

  • 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드

6-1. 단기 스케줄러(Short-term scheduler or CPU scheduler)

  • 프로세스에 CPU를 주는 문제
  • 준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지를 결정
  • 대단히 많이 호출되기 때문에 충분히 빨라야 한다(millisecond 단위).
  • 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출됨

6-2. 장기 스케줄러(Long-term scheduler or job scheduler)

  • 프로세스에 memory(및 각종 자원)을 주는 문제
  • 시작 프로세스(new 상태)중 어떤 프로세스를 준비 큐로 보낼지 결정 (admitted)
    • CPU에서 실행되기 위해서는 프로세스가 메모리를 보유해야 하므로 장기 스케줄러는 프로세스에게 메모리를 할당하는 문제에 관여
  • 메모리에 동시에 올라가 있는 프로세스의 수(degree of multiprogramming)를 조절하는 역할
    • 시작 상태의 프로세스에게 메모리 할당을 승인할지 여부를 장기 스케줄러가 결정하기 때문
    • 현대의 시분할 시스템에서 사용되는 운영체제에는 보통 장기 스케줄러가 없이 곧바로 그 프로세스에 메모리를 할당해 준비 큐에 넣어준다. admitted 과정이 없다.

6-3. 중기 스케줄러(Medium-Term Scheduler or Swapper)

  • 프로세스에게서 메모리를 뺏는 문제
  • degree of Multiprogramming을 제어
    • 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러
    • 메모리에 올라와 있는 프로세스 중 일부를 선정해 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장스왑 아웃

6-4. Suspended(Stopped): 프로세스의 새로운 상태 - 중지

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 중기 스케줄러로 인해 메모리를 통째로 빼앗기면 CPU를 얻어도 아무 일도 할 수 없음
    • 외부에서 재개시키지 않는 이상 다시 활성화될 수 없으므로 메모리 자원이 당장 필요하지 않다
      중지 상태의 프로세스는 메모리를 통째로 빼앗기고 디스크로 스왑 아웃된다.

  • Suspended Ready(중지 준비 상태): 준비 상태에 있던 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃되는 상태
  • Suspended Blocked(중지 봉쇄 상태): 봉쇄 상태에 있던 프로세스가 중기 스케줄러에 의해 스왑 아웃되는 상태
  • 중지 봉쇄 상태이던 프로세스가 봉쇄되었던 조건을 만족하게 되면 이 프로세스의 상태는 중지 준비 상태로 바뀜: Wakeup
    • I/O 작업 때문에 Blocked 상태였는데, 메모리도 빼앗겨서 Suspended Blocked 상태가 됨
    • I/O 작업은 계속 할 수 있다. I/O 작업이 끝나면 ~ Suspended Ready 상태
  • 중지 상태에 있는 프로세스들은 중지 준비 상태이든 중지 봉쇄 상태이든 관계없이 메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재
  • Blocked: 자신이 요청한 event가 만족되면 Ready
  • Susppended: 외부(사람, 중기 스케줄러)에서 다시 재개(resume)해주어야 Active
    • 사용자가 프로그램을 일시 정지시킨 경우: 사람이 그 프로세스를 재개해야 active
    • 시스템이 여러 이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)
  • Running
    • user mode - 프로세스의 코드 실행 중
    • monitor mode - 사용자 프로그램이 커널 모드에서 running 한다고 하지, 운영체제가 running 한다고 하지 않는다.
      • 프로그램 A가 running 중일 때 프로그램 B로부터 인터럽트가 들어와서 CPU가 운영체제에게 넘어갔지만, 여전히 A가 커널 모드에서 running 중에 있다고 간주.
  • Disk I/O 를 시작할 때는 운영체제에게 system call로 요청(SW 인터럽트)  CPU가 디스크 컨트롤러에게 I/O 요청
    I/O가 끝나면 → 디스크 컨트롤러가 CPU에게 I/O 작업이 끝났다고 인터럽트(HW 인터럽트)
    • I/O 인터럽트는 SW, HW 인터럽트 모두 필요

 

[복습]

    1. 프로세스: 프로세스는 실행 중인 프로그램이다.
    2. 프로세스의 문맥: 프로세스가 현재 어떤 상태에서 수행되고 있는지를 정확히 규명하기 위해 필요한 정보
      • 하드웨어 문맥(PC, 레지스터), 프로세스의 주소 공간(code, stack, data), 프로세스 관련 커널 자료구조(PCB, Kernel stack)
    3. 프로세스의 상태
      • Running(실행), Ready(준비), Blocked(봉쇄)
      • Suspended(중지)
      • New, Terminated
    4. 프로세스 제어 블록(PCB)
    5. 문맥 교환: 하나의 사용자 프로세스로부터 다른 프로세스로 CPU 제어권이 이양되는 과정
      • CPU의 제어권을 빼앗긴 프로세스는 프로세스의 상태를 프로세의 PCB에 저장
      • CPU의 제어권을 받는 프로세스는 프로세스의 상태를 그 프로세스의 PCB에서 읽어옴
      • timer interrupt, I/O 요청 system call
    6.  프로세스를 스케줄링하기 위한 큐: Job queue, Ready queue, Device queue
    7. 스케줄러: 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드
      • 단기 스케줄러(CPU scheduler): 프로세스에 CPU를 주는 문제
      • 장기 스케줄러(Job scheduler): 프로세스에 메모리를 주는 문제, degree of multiprogramming
      • 중기 스케줄러(Swapper): 프로세스에게서 메모리를 뺏는 문제, degree of multiprogramming, 스왑 아웃
        • suspended(중지): 중지 준비 상태이든 중지 봉쇄 상태이든 관계없이 메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재

 

 

 

 


이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제] 강의 정리입니다.

 반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.

https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f 

 

반효경 [운영체제] 5. Process1

설명이 없습니다.

core.ewha.ac.kr

 

728x90