CS 지식/OS(운영체제)

[OS 4편] 프로세스 관리

정리왕이되자 2023. 3. 21. 21:12

프로세스 관리는 총 10개의 내용으로 정리합니다.

 

1. 프로세스와 프로세스의 상태

2. Context

3. Context Switching

4. PCB (Process Control Block)

5. Scheduling Queue

6. Scheduler

7. Thread

8. 프로세스의 생성

9. 프로세스의 종료 

10. 프로세스 간 협력 (IPC)

 

✔️프로세스와 프로세스의 상태

  • 프로세스: 현재 실행 중인 프로그램.
  • 프로세스의 상태

흐름

  • 프로세스 상태 종류: new, ready, running, blocked, terminated, suspended
  • new: 프로세스 생성, 프로세스를 위한 각종 자료구조는 준비되어 있으나, 메모리 할당을 받지 못한 상태.
  • ready: 메모리 할당등 다른 조건을 모두 만족하고 CPU를 기다리는 상태. (당장 CPU만 있으면 실행 가능!!)
  • running: CPU를 보유하고 명령어를 수행하고 있는 상태.
  • blocked: CPU를 주어도 명령어를 실행할 수 없는 상태. (ex. I/O execution)
  • terminated: 프로세스가 완전히 종료되었으나 OS가 자료구조를 완전히 정리하지 않은 상태.
  • suspended(Stopped): 외부적인 이유로 수행이 중단된 상태. 프로세스를 통째로 Swap Out
    • suspened 와 blocked의 차이
      • suspended: 외부에서 resume해야 active 해짐.
      • blocked: 자신이 요청한 이벤트가 완료되면 다시 ready 상태로 감. 

 

✔️Context

  • 정의 : 현재 프로세스의 상태 정보.
  • 종류
    • CPU의 상태를 나타내는 하드웨어 정보. (Register, PC)
    • 프로세스 주소 공간. (코드, 데이터, 스택)
    • 커널 자료 구조 (PCB, Kernel Stack)

✔️Context Switching

  • 정의: 실행시킬 프로세스를 변경하기 위해서 이전 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정.
  • OS의 역할
    • CPU 뺏기는 프로세스의 PCB 저장.
    • CPU 줄 프로세스의 PCB 읽어오기.
  • CPU Dispatch: Ready 상태에 있는 프로세스 중 CPU 할당 받을 프로세스를 선택한 뒤 CPU를 넘기는 과정.
  • system call이나 인터럽트가 발생한다고 무조건 context switch가 발생하는 것은 아니다.
  • 타이머 인터럽트나 입출력 시스템 콜을 하여 봉쇄 상태에 들어가는 경우에는 문맥 교환이 발생하지만, 그밖의 인터럽트와 시스템 콜은 모드 변경만 된다.

1번은 CPU의 수행 정보의 일부 context를 PCB에 저장해야하지만, 2번의 경우 cache memory에서 싹 지워야 하기 때문에 오버헤드가 크다.

✔️PCB (Process Control Block)

  • 정의: OS가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보를 담은 커널 내의 자료구조.
  • 구성

  • 프로세스의 상태
  • 프로세스의 PID
  • PC 값
  • CPU레지스터 값
    • CPU 스케줄링 정보.
    • 메모리 관리 정보.
    • 자원 사용 정보.
    • I/O 정보.
  • OS가 관리하는 정보 -> 프로세스의 상태, 번호, 스케줄링 정보, 우선순위.
  • CPU 수행과 관련된 값 -> PC 값, 레지스터 값,.
  • 메모리 관련 정보 -> 코드, 데이터, 스택의 위치 정보.
  • 파일 관련 -> 프로세스가 오픈한 파일 정보.

✔️Scheduling Queue

  • Job Queue: 현재 시스템 내의 모든 프로세스의 집합.
  • Ready Queue: Ready 상태이며 CPU를 할당 받기 위한 프로세스의 집합.
  • Device Queue: I/O 디바이스 처리를 기다리는 큐.
  • Ready Queue+ Device Queue는 Job Queue의 부분 집합.
    • 프로세스들은 여러 Queue를 오다님.
    • Queue Header라는 포인터가 존재하고 PCB들을 연결리스트로 연결해 관리함.

✔️Scheduler

  • 정의: 어떤 프로세스에게 CPU를 할당할지 결정하는 운영체제 커널의 코드
  • Long Term Scheduler(=Job Scheduler)
    • 시작 프로세스 중 어떤 걸 Ready Queue로 보낼지 결정.
    • degree of programming 제어.
    • time sharing에서는 보통 Job Scheduler를 사용하지 않는다. -> 바로 ready queue로 감.
  • Mid Term Scheduler(=Swapper)
    • 메모리 내에서 여유공간을 마련하기 위해 통째로 메모리에서 디스크로 쫓아낼 프로세스 선택.
    • 프로세스에게서 메모리를 빼앗는 문제.
    • degree of programming 제어.
    • Suspended 상태 추가.
  • Short Term Scheduler (= CPU Scheduler)
    • 어떤 프로세스에게 CPU, 즉 Running 할지 결정.
    • 프로세스에게 CPU를 주는 문제.
    • 충분히 빨라야 함. (ms)
    • 타이머 인터럽트 발생 시 CPU 스케줄러 호출.

✔️Thread

  • 정의: 프로세스 내 여러 실행 흐름의 단위, a basic unit of CPU Utilization.
  • 주소: Code, Data는 공유하고 Stack이랑 PC는 각각 존재함.
  • 구성
    • Thread의 구성
      • Program Counter
      • Register 
      • Stack
    • 공유
      • OS 부분
      • 데이터, 코드 부분
  • 구현
    • 커널 스레드: 커널에 의해 지원 받음.
    • 유저 스레드: 라이브러리에 의해 지원, OS는 다중 스레드 여부 알지 못함.
  • 장점
    • 응답성
    • 자원 공유 - data, code, 프로세스의 자원 공유
    • 경제성 - 생성 및 CPU 스위칭이 비교적 간단해 오버헤드가 적음.
    • 멀티 프로세서 구조 유용성 - 각 스레드는 프로세서들에서 병렬적으로 수행이 가능함.
  • 멀티스레드로 구성된 task의 경우, 하나의 서버 스레드가 blocked 상태인 동안, 동일 태스크 내의 다른 스레드가 running되어 빠른 처리가 가능.
  • 동일한 일을 수행하는 멀티 스레드가 협력하여 높은 throughput과 성능 향상.
  • 스레드 사용시 병렬성 증가.

✔️프로세스의 생성

  • 부모 프로세스가 자식 프로세스를 생성.
  • 프로세스는 트리 구조로 형성.
  • 프로세스는 자원을 필요로 함.
    • OS로부터 할당.
    • 부모와 공유
    • 일부 공유.
    • 공유하지 않는 경우
  • 수행
    • 부모와 자식이 공존하여 수행되는 모델.
    • 자식이 종료될 때까지 부모가 기다리는 모델.  (부모는 봉쇄 상태)
  • 주소공간
    • 자식은 부모의 공간을 복제 -> new 공간.
    • 자식은 그 공간에 새로운 프로세스를 올린다. -> exec
  • UNIX 예시
    • fork: 시스템 콜로 새로운 프로세스 생성(복제).
      • 부모를 그대로 복사 (PID, binary 빼고)
      • 주소 공간 할당.
      • 자식 프로세스는 부모 프로세스가 가리키던 메모리의 위치(=PC값)부터 실행한다.
      • 자식 프로세는 복제되었지만, 본인이 원본이라고 생각함.
      • 결국, 자식과 부모 프로세스는 내용이 동일하기 때문에 exec으로 자식 프로세스를 덮어씌운다.
    • exec: 새로운 프로그램을 공간에 올리기.
    • fork와 exec는 모두 특권명령.
    • wait: 자식 프로세스가 종료되길 기다리면서 부모 프로세스가 봉쇄 상태(sleep)에 머무르는 것.
      • 자식 프로세스가 끝나면 다시 ready queue에 가서 기다림.

✔️프로세스의 종료

  • 자발적
    • 마지막 명령 수행 후 이를 시스템 콜로 OS에 전달. (명시적 전달이 아닌 OS가 자동 삽입)
    • 자식이 부모에게 여러 output을 전달.
    • 프로세스 각종 자원을 OS에 반납.
  • 비자발적 - abort, kill/break
    • 자식이 할당된 자원의 한계치를 넘은 경우
    • 자식에게 할당된 태스크가 더이상 불필요한 경우
    • 부모가 종료하는 경우. (exit)

✔️프로세스 간 협력(IPC = Inter Process Communication)

  • IPC란 하나의 컴퓨터 내에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신 -> 의사소통 + 동기화 보장, 운영체제가 제공함.
  • 프로세스의 종류
    • 독립 프로세스
      • 각자의 주소 공간을 가지고 수행하며 원칙적으로 하나의 프로세스에 영향을 주지 않음.
    • 협력 프로세스
      • 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 줄 수 있음.
  • IPC 협력 메커니즘
    • 메세지 전달 방식 (Message Passing)
      • 프로세스 사이에 공유 데이터를 사용하지 않고 통신하는 시스템.
      • 통신하기를 원하는 두 프로세스 간 Communication link를 생성해 receive()와 send() 시스템 콜을 활용해 커널이 중간다리 역할을 한다. -> 직접, 간접의 공통점!
      • 2가지 방식
        • 직접 통신(Direct Communication)
          • 통신하려는 프로세스의 이름을 명시적으로 표시.
          • 링크는 자동적으로 생성, 하나의 링크는 한쌍의 프로세스에게 할당.
          • 각 쌍의 프로세스에게는 오로지 하나의 커뮤니케이션 링크만 존재.
          • 양방향이다.
        • 간접통신(Indirect Communication)
          • 메세지를 메일 박스 혹은 포트를 통해 전달 받음.
          • 메일 박스에는 고유의 ID가 있고 커뮤니케이션 링크는 메일 박스를 공유하는 프로세스 사이에서만 생성이 됨.
          • 만약 프로세스가 여러 개일 경우, 각각에 대한 링크 생성 혹은 하나의 프로세스만 수행하는 방법 선택.
    • 공유메모리 방식(Shared Memory)
      • 서로 다른 프로세스 간에도 일부 주소공간 공유(커널에 시스템 콜)
      • 실제로 A와 B 프로세스는 독자적인 주소 공간을 할당 받고, 주소 공간이 물리적 메모리에 매핑될 때 공유 메모리는 동일한 물리적 메모리 주소로 매핑.
      • 통신을 수월하게 만드는 인터페이스를 제공하지만, 서로의 데이터 일관성 문제를 야기할 수 있음.
      • 커널은 책임지지 않고 동기화에 대한 책임은 프로세스가 진다.