컴퓨터 운영체제 지식 집대성 - 프로세스 및 스레드 지식 요약(컴퓨터 운영체제 입문 안내서)

2장 프로세스와 스레드

프로세스와 스레드에 대해 배울 점이 많습니다. 블로거는 점차적으로 내용을 정리하고 업데이트할 것입니다. 현재 20,000 단어 이상의 사진과 텍스트가 업데이트되었습니다...

2.1 프로세스

2.1.1 프로세스의 개념

프로세스의 경우 이를 프로그램과 연결해야 합니다. 프로세스는 프로그램의 실행 프로세스이자 시스템의 자원 할당 및 스케줄링의 기본 단위이기 때문입니다 .

참고: 현재 스레드 개념은 도입되지 않았습니다.

우리는 프로그램이 하드 디스크에 저장된 실행 파일 , 즉 일련의 명령이라는 것을 알고 있습니다 . 다중 프로그래밍에서 운영 체제는 프로그램이 동시에 실행되도록 허용하므로 이러한 프로그램 간의 폐쇄가 손실됩니다. 프로그램의 동시 실행을 더 잘 설명하고 제어하기 위해 운영 체제는 프로세스 개념을 도입합니다 .

프로세스 및 절차의 예:

애플리케이션 A를 시작하면 제어판에서 해당 프로세스를 볼 수 있으며, 애플리케이션 A를 여러 개 시작하면 해당 프로세스가 여러 개 나타납니다. 시작된 여러 애플리케이션 A의 경우 명령 세트는 동일하지만 해당 프로세스마다 고유한 데이터가 있습니다(이 부분은 프로세스 구성과 관련되어 있으며 다음 장에서 자세히 연구합니다). 여러 번 실행된 동일한 응용 프로그램은 여러 다른 프로세스에 해당합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.1.2 프로세스의 특성

프로세스는 여러 프로그램의 동시 실행에서 파생된 개념이므로 프로세스의 기본 특성은 단일 프로그램의 순차적 실행에 비유되며 프로세스 관리의 기본 요구 사항이기도 합니다.

프로세스의 특성에는 동적, 동시성, 독립성 및 비동기성이 포함됩니다.

  • 동적

    프로세스는 프로그램의 실행을 의미하며 생성, 활동, 정지, 종료 등의 프로세스를 가지며 일정한 생명주기를 가지며 동적으로 생성, 변경, 소멸됩니다. 따라서 역학은 프로세스의 가장 기본적인 특성입니다.

  • 동시성

    이는 여러 프로세스가 동시에 메모리에 존재하고 일정 기간 동안 동시에 실행될 수 있음을 의미합니다. 프로세스를 도입하는 목적은 여러 프로세스를 동시에 실행할 수 있도록 하는 것입니다. 동시성은 프로세스와 운영 체제의 중요한 특성입니다.

  • 독립

    이는 프로세스가 독립적으로 실행되고, 독립적으로 자원을 획득하고, 독립적으로 스케줄링을 수락할 수 있는 기본 단위임을 의미합니다.

  • 비동기성

    프로세스의 상호 제약으로 인해 프로세스는 독립적이고 예측할 수 없는 속도로 실행됩니다. 비동기화로 인해 실행 결과가 재현되지 않게 되므로 운영 체제에서 해당 프로세스 동기화 메커니즘을 구성해야 합니다.

프로세스의 이러한 네 가지 특성만 이해하면 됩니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.1.3 프로세스 구성

프로세스의 구성을 소개하기 전에, 프로세스 엔터티(프로세스 이미지)라는 새로운 개념을 소개하겠습니다.

프로세스 엔터티는 프로세스 제어 블록 , 프로그램 세그먼트데이터 세그먼트 의 세 부분으로 구성됩니다 . 프로세스 개체의 개념을 도입한 후, 프로세스는 " 프로세스 개체가 실행하는 프로세스이자 시스템에 의한 자원 할당 및 스케줄링을 위한 독립적인 단위 " 라고 정의할 수도 있습니다 . 즉, 프로세스 개체는 정적이며 프로세스는 동적입니다. 특별한 구별이 없다면 일반적으로 프로세스 엔터티를 프로세스라고 합니다 . 따라서 프로세스는 독립적인 실행 단위이자 운영 체제에 의한 자원 할당 및 스케줄링의 기본 단위라고 할 수 있으며 프로세스 제어 블록, 프로그램 세그먼트 및 데이터 세그먼트의 세 부분으로 구성 됩니다 .

2.1.3.1 프로세스 제어 블록
  • 정의

    PCB(Process Control Block)는 프로세스를 위해 특별히 구성된 데이터 구조로, 프로세스의 기본 상황과 실행 상태를 기술하는 데 사용됩니다.

  • 프로세스와의 관계

    프로세스가 생성되면 운영체제는 이를 위한 PCB를 생성하고, 이 PCB는 메모리에 위치하며, 프로세스가 실행되면 시스템은 프로세스의 PCB를 통해 프로세스의 현재 상태 정보를 이해할 수 있다. , 그래서 운영체제를 제어하고 관리할 수 있습니다. 프로세스가 끝나면 운영 체제도 메모리에서 PCB를 삭제하고 프로세스는 종료됩니다. 이를 통해 PCB가 프로세스 존재의 유일한 신호임을 ​​알 수 있습니다 .

  • 프로세스 제어 블록에 포함된 주요 정보

    PCB에는 주로 프로세스 설명 정보, 프로세스 제어 및 관리 정보, 자원 할당 목록 및 프로세서 관련 정보가 포함됩니다.

    프로세스 설명 정보 공정 제어 및 관리 정보 자원 할당 목록 프로세서 관련 정보
    프로세스, 사용자 식별자(PID, UID) 프로세스 현황, 프로세스 우선순위 코드 실행 항목 주소, 프로그램 외부 메모리 주소 및 기타 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트 포인터, 파일 설명자, 키보드, 마우스 등 일반, 주소, 제어, 플래그 레지스터 값, 상태 워드 등
    • 프로세스 설명 정보

      프로세스 식별자: 각 프로세스를 식별하며 각 프로세스에는 고유한 ID가 있습니다.

      사용자 식별자: 각 프로세스가 속한 사용자를 식별합니다.

    • 공정 제어 및 관리 정보

      프로세스의 현재 상태: 프로세서 할당 및 스케줄링의 기초가 되는 프로세스의 상태 정보를 설명합니다.

      프로세스 우선순위: 프로세서를 점유하는 프로세스의 우선순위를 설명합니다. 프로세스의 우선순위가 높을수록 프로세서를 점유하기가 더 쉽습니다.

    • 자원 할당 목록

      메모리 주소 공간 또는 가상 주소 공간의 상태, 열린 파일 목록 및 사용된 I/O 장치 정보를 설명하는 데 사용됩니다.

    • 프로세서 관련 정보

      프로세서의 컨텍스트라고도 하며 주로 프로세서에 있는 각 레지스터의 값을 말하며, 프로세스가 실행 중일 때는 프로세서에 대한 많은 정보가 레지스터에 있고, 프로세스가 일시 중지되면 프로세서의 상태 정보가 나타납니다. 프로세서는 해당 PCB에 저장되어 있어야 프로세스가 재실행될 때 마지막 실행 위치부터 계속 실행될 수 있다.

  • 시스템이 PCB를 사용하여 프로세스를 제어하는 ​​방법

    1. 운영 체제가 프로세스 실행을 예약하려면 프로세스의 PCB에서 프로세스의 현재 상태와 우선 순위를 확인해야 합니다.
    2. 운영 체제가 프로세스를 성공적으로 예약하면 PCB에 저장된 프로세서 상태 정보와 프로그램 및 데이터의 메모리 시작 주소를 기반으로 프로세스 실행을 다시 시작(마지막 중단된 위치에서 계속 실행)하도록 설정해야 합니다. PCB에서 프로그램과 데이터를 찾으십시오.
    3. 프로세스 실행 중에 협력하는 프로세스와 파일을 동기화, 통신 또는 액세스해야 하는 경우 PCB에도 액세스해야 합니다.
    4. 어떤 이유로 프로세스가 실행을 일시 중지하면 중단점의 프로세서 컨텍스트를 PCB에 저장해야 합니다.

    위의 프로세스를 보면 프로세스의 라이프사이클 전체에 걸쳐 시스템이 PCB를 통해 프로세스를 제어한다는 것을 알 수 있다. 즉, 시스템은 PCB를 통해서만 프로세스의 존재를 인지할 수 있다는 것이다.

  • PCB 구성 방법

    운영체제에는 프로세스가 많은 경우가 많기 때문에 준비 상태인 프로세스도 있고 차단된 상태인 프로세스도 있으며 차단 이유도 다릅니다. 공정 스케줄링 및 관리를 용이하게 하기 위해서는 각 공정의 PCB를 적절한 구조로 구성하는 것이 필요합니다. 일반적인 방법에는 링크 방법과 인덱스 방법의 두 가지가 있습니다. (진행상황은 다음편에서 소개하겠습니다)

    링크 방식은 PCB를 큐에 연결합니다. 서로 다른 상태는 서로 다른 큐에 해당하며 프로세스의 서로 다른 상태에 따라 서로 다른 큐(예: 준비 큐 , 차단 큐) 로 구분됩니다 . 심지어는 큐에 따라 서로 다른 차단 큐로 구분됩니다. 차단 이유는 다양합니다.

    인덱스 방법은 PCB를 인덱스 테이블에 넣는 것입니다.다른 상태는 준비 인덱스 테이블차단 인덱스 테이블 과 같은 다른 인덱스 테이블에 해당합니다 .

2.1.3.2 프로그램 세그먼트

프로그램 세그먼트는 프로세스 스케줄러에 의해 CPU에 의해 실행되도록 예약된 프로그램 코드 세그먼트, 즉 CPU 내의 프로세스에 의해 실행되는 코드 세그먼트입니다.

참고: 프로그램은 여러 프로세스에서 공유될 수 있습니다. 즉, 여러 프로세스가 동일한 프로그램을 실행할 수 있습니다.

2.1.3.3 데이터 세그먼트

프로세스의 데이터 세그먼트에는 프로세스에 해당하는 프로그램에서 처리한 원본 데이터와 프로세스 실행 중에 생성된 중간/최종 결과가 포함됩니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.1.4 프로세스 상태 및 전환

2.1.4.1 프로세스의 5가지 상태

프로세스에는 생성 상태 , 준비 상태 , 실행 상태 , 차단 상태종료 상태 의 5가지 상태가 포함된 완전한 수명 주기가 있습니다 .

  • 생성된 상태

    프로세스가 생성될 때는 생성 상태이며, 이 단계에서 운영체제는 프로세스에 다양한 자원을 할당하고 PCB를 초기화하게 된다.

    프로세스를 생성할 때 여러 단계로 나누어집니다.

    1. 빈 PCB를 요청하고 프로세스 제어 및 관리를 위한 정보를 PCB에 입력합니다.
    2. 프로세스를 실행하는 데 필요한 리소스를 할당합니다.
    3. 프로세스를 준비 상태로 전환하여 준비 대기열에 넣습니다. 이때 프로세스에 필요한 자원이 충족되지 않으면 준비 상태로 전환할 수 없습니다. 이때 프로세스 생성은 완료되지 않았습니다. 완료되었으며 프로세스가 생성되는 중입니다.
  • 준비 상태

    프로세스는 CPU를 제외하고 필요한 모든 자원을 확보한 후 준비 상태로 전환되며, 이 상태의 프로세스는 CPU에 의해 호출되면 즉시 실행됩니다. 단일 코어 CPU는 한 번에 하나의 프로세스만 실행할 수 있으므로 시스템에는 많은 수의 준비된 프로세스가 있으며 이러한 프로세스는 준비 대기열이라고 하는 대기열에 배치 됩니다 .

  • 실행 상태

    프로세스가 CPU에서 실행 중일 때 실행 중인 상태가 실행 상태입니다.

  • 차단 상태

    실행 중인 프로세스가 이벤트를 기다려야 하고 일시 중단되면 차단 상태에 있습니다. 이 상태의 프로세스는 계속해서 리소스를 기다리게 되며(예: I/O 장치를 기다리는 등) CPU가 유휴 상태이더라도 이 상태의 프로세스는 실행되지 않습니다. 시스템의 많은 리소스가 독점적으로 공유되므로 시스템에는 여러 개의 차단된 프로세스가 있으며 이러한 프로세스는 대기열에 배치됩니다. 이 대기열을 차단 대기열이라고 하며 시스템은 심지어 이러한 프로세스를 배치 하기 위해 다른 차단 대기열의 차단된 프로세스.

  • 최종 상태

    프로세스를 종료해야 할 때 시스템은 프로세스를 종료 상태로 전환합니다.

  • 준비 상태와 차단 상태의 차이점

    준비(Ready) 상태의 프로세스는 CPU를 제외하고 필요한 모든 자원을 갖고 있어 CPU 자원만 확보하면 즉시 실행되지만, 차단(Blocked) 상태의 프로세스는 CPU가 부족하더라도 CPU가 아닌 다른 자원을 계속 기다린다. 현재 유휴 상태입니다. , 프로세스가 실행되지 않습니다.

알아채다:

준비 상태, 실행 중 상태, 차단 상태를 프로세스의 세 가지 기본 상태라고 합니다.

2.1.4.2 프로세스 상태 전환

다음 그림은 프로세스의 5가지 상태 간 전환을 나타냅니다.

여기에 이미지 설명을 삽입하세요.

그 중에서 더 중요한 상태 천이는 세 가지 기본 상태의 천이이다.

  • 준비상태->실행상태

    준비 상태의 프로세스는 CPU에 의해 예약되고 CPU 리소스를 얻은 후 실행 상태로 들어갑니다.

  • 실행 상태 -> 준비 상태

    실행 중 상태의 프로세스는 할당된 시간 조각을 모두 사용한 후 준비 상태로 전환됩니다.

  • 실행상태->차단상태

    실행 상태의 프로세스는 특정 자원의 사용을 요청하거나 특정 이벤트 발생을 기다리는 경우 실행 상태에서 차단 상태로 변경됩니다. 프로세스는 시스템 호출을 통해 적극적으로 운영체제에 서비스 제공을 요청하는데, 즉 실행 상태에서 차단 상태로 전환하는 것이 프로세스의 능동적인 행위이다.

  • 차단된 상태->준비된 상태

    차단된 상태의 프로세스가 요청한 자원이나 기다리고 있는 이벤트가 도착한 후, 인터럽트 핸들러는 해당 프로세스를 차단된 상태에서 준비 상태로 전환합니다.

알아채다:

실행 상태에서 차단 상태로의 프로세스 전환은 프로세스의 활성 동작인 반면, 차단 상태에서 준비 상태로의 전환은 수동 동작이며 다른 프로세스와 인터럽트 핸들러의 지원이 필요합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.1.5 공정 관리

2.1.5.1 정의 및 구현 방법
  • 프로세스 제어의 정의

    프로세스 제어의 주요 기능은 시스템 내 모든 프로세스를 효과적으로 관리하는 것으로, 새로운 프로세스 생성, 기존 프로세스 취소, 프로세스 상태 전환 실현 등의 기능을 갖고 있습니다. 즉, 프로세스 제어는 프로세스 상태의 전환을 실현하는 것입니다 .

  • 프로세스 제어를 구현하는 방법

    위에서 볼 수 있듯이 프로세스 제어는 프로세스 상태의 변환을 실현합니다. 프로세스 상태 변환 프로세스는 "한 번에" 완료되어야 합니다. 따라서 1장에서 소개한 기본 요소를 사용하여 프로세스 제어를 구현할 수 있습니다. (프리미티브에 대한 소개는 섹션 1.3.5.3을 참조하세요)

    프로세스 상태 전환이 "한 번에" 완료되도록 해야 하는 이유는 무엇입니까?

    다음으로 예를 들겠습니다. 이때 준비 상태의 프로세스가 있다고 가정합니다(즉, 해당 프로세스의 PCB가 준비 대기열에 있음). 이제 프로세스를 차단 상태로 전환하려고 합니다. 이번에는 프로세스 제어를 담당하는 커널 프로그램이 최소한 다음 두 가지 작업을 수행해야 합니다.

    1. 프로세스의 PCB 상태를 차단 상태로 설정
    2. 프로세스의 PCB를 블로킹 큐에 배치

    당연히 위의 두 단계는 한 번에 완료되어야 하며, 위의 두 단계를 한 번에 완료할 수 없는 경우, 예를 들어 첫 번째 단계를 완료한 후 CPU는 인터럽트 신호를 수신한 후 해당 인터럽트 핸들러를 실행합니다. 이때 프로세스의 PCB 상태는 차단되었지만 PCB는 준비 대기열에 있으므로 운영 체제의 주요 데이터 구조 정보가 일치하지 않아 운영 체제의 후속 관리 작업에 영향을 미칩니다.

2.1.5.2 프로세스 생성

프로세스 생성에 해당하는 프로세스 상태는 다음과 같이 변환됩니다.

  • 없음->생성된 상태
  • 생성된 상태->준비된 상태

프로세스 생성은 다음 단계를 포함하는 생성 기본 요소를 통해 수행 됩니다.

  1. 신규 프로세스에 고유한 프로세스 식별번호(PID)를 부여하고 블랭크 PCB를 신청하며, PCB 적용이 실패할 경우 생성 실패(PCB 제한)
  2. 프로세스 실행에 필요한 자원(메모리, 파일, CPU 시간, I/O 장치 등)을 할당하고, 자원이 부족할 경우 프로세스는 이때 생성 상태로 들어가 필요한 자원을 기다린다.
  3. PCB 초기화에는 주로 초기화 플래그 정보, 프로세서 상태 정보, 프로세서 제어 정보, 프로세스 우선 순위 설정 등이 포함됩니다.
  4. PCB를 Ready Queue에 삽입하고(Ready Queue가 가득 차지 않은 경우) PCB 상태를 Ready 상태로 설정하면 프로세스가 Ready 상태로 전환됩니다.

프로세스 생성을 유발하는 이벤트에는 일반적으로 다음이 포함됩니다.

  1. 사용자 로그인: 시간 공유 시스템에서 사용자가 성공적으로 로그인하면 시스템은 이에 대한 프로세스를 생성합니다.
  2. 다중 채널 일괄 처리 시스템에서 작업 스케줄링은 새 작업이 메모리에 저장되면 이에 대한 프로세스가 생성됩니다.
  3. 서비스 제공: 사용자가 운영 체제에 특정 서비스를 제공하면 요청을 처리하기 위한 프로세스가 생성됩니다.
  4. 응용 프로그램 요청, 사용자 프로세스는 자식 프로세스 생성을 적극적으로 요청합니다.

운영체제에는 부모-자식 프로세스(Parent-Child Process) 개념이 있는데 , 즉 하나의 프로세스가 다른 프로세스를 생성하도록 허용하는데, 이때 생성자 가 부모 프로세스 이고, 생성된 프로세스가 자식 프로세스 이다 . 상위 프로세스의 모든 자원을 상속받을 수 있으며, 하위 프로세스가 취소되면 상위 프로세스에서 얻은 자원이 상위 프로세스로 반환됩니다.

2.1.5.3 프로세스 종료

프로세스 종료에 해당하는 프로세스 상태는 다음과 같이 변환됩니다.

  • 실행상태/차단상태/준비상태->종료상태

프로세스 종료는 다음 단계를 포함하는 종료 기본 요소를 통해 수행 됩니다.

  1. 종료된 프로세스의 PID에 따라 PCB 컬렉션에서 해당 프로세스의 PCB를 찾아 프로세스의 상태를 읽는다.
  2. 프로세스가 실행 상태이면 해당 프로세스의 실행이 즉시 종료되고 CPU는 다른 프로세스에 할당됩니다.
  3. 프로세스에 하위 프로세스가 있으면 모든 하위 프로세스가 종료됩니다.
  4. 프로세스가 소유한 모든 리소스를 운영 체제 또는 해당 상위 프로세스로 반환합니다.
  5. 대기열에서 PCB를 제거합니다.

프로세스 종료를 유발할 수 있는 이벤트에는 일반적으로 다음이 포함됩니다.

  1. 정상적으로 종료된다는 것은 프로세스의 작업이 완료되어 종료할 준비가 되었음을 의미합니다(프로세스 자체가 종료 시스템 호출과 같이 종료를 요청함).
  2. 비정상적인 종료는 프로세스가 실행되는 동안 비정상적인 이벤트가 발생하여 프로그램을 계속 실행할 수 없게 만드는 것을 의미합니다(0으로 정수 나누기, 특권 명령어의 불법 사용, 실행 시간 초과, I/O 실패 등).
  3. 외부 개입이란 사용자나 운영 체제 개입, 상위 프로세스 요청, 상위 프로세스 종료 등 외부 세계의 요청에 따라 프로세스가 종료되는 것을 의미합니다.
2.1.5.4 프로세스 차단

프로세스 차단에 해당하는 프로세스 상태는 다음과 같이 변환됩니다.

  • 실행상태->차단상태

프로세스 차단은 다음 단계를 포함하는 차단 기본 요소를 통해 달성됩니다 .

  1. 프로세스의 PID를 통해 PCB 컬렉션에서 해당 프로세스의 PCB를 찾아 프로세스의 상태를 읽어옵니다.
  2. 프로세스가 실행 중 상태이면 실행 중인 사이트를 보호하고 차단 상태로 전환한 후 실행을 중지합니다.
  3. PCB를 해당 대기 큐에 삽입하고 준비 상태의 다른 프로세스에 CPU를 예약합니다.

프로세스 차단을 유발할 수 있는 이벤트에는 일반적으로 다음이 포함됩니다.

  1. 프로세스가 I/O 장치 리소스를 기다리는 등 특정 시스템 리소스를 요청하지 못했습니다.
  2. 프로세스는 일부 작업이 완료되기를 기다립니다.
2.1.5.5 프로세스 웨이크업

프로세스의 절전 모드 해제에 해당하는 프로세스 상태는 다음과 같이 변환됩니다.

  • 차단된 상태->준비된 상태

프로세스의 깨우기는 wake-up 프리미티브를 통해 이루어지며 프로세스의 깨우기는 특정 이벤트를 기반으로 하며 특정 이벤트를 기다리고 있는 차단된 프로세스를 깨우기 위한 것이며 다음 단계를 포함합니다.

  1. 프로세스의 PID를 통해 이벤트 대기 큐에서 해당 프로세스의 PCB를 찾습니다.
  2. 대기 대기열에서 제거하고 준비 상태로 설정합니다.
  3. PCB를 준비 대기열에 삽입하고 CPU 스케줄링을 기다립니다.

프로세스를 깨울 수 있는 이벤트에는 일반적으로 다음이 포함됩니다.

  1. 차단된 프로세스에서 요청한 시스템 리소스는 무료이며 I/O 장치 리소스와 같은 프로세스에 할당됩니다.
  2. 차단된 프로세스가 일부 작업이 완료되기를 기다리고 있습니다.

참고: 프로세스의 Blocking 프리미티브와 Wake-up 프리미티브는 정반대의 효과를 갖는 한 쌍의 프리미티브이므로 쌍으로 사용해야 하며, 프로세스에서 Blocking 프리미티브를 호출하는 경우에는 협력 또는 기타 관련 프로세스에서 사용해야 합니다. 차단된 프로세스를 깨우기 위해 해당 프로세스에 해당 깨우기 프리미티브를 배치합니다. 그렇지 않으면 차단된 프로세스는 결코 깨어나지 않으며 영구적으로 차단됩니다.

2.1.5.6 프로세스 전환

프로세스 전환에 해당하는 프로세스 상태는 다음과 같습니다.

  • 실행상태->차단상태/준비상태
  • 준비상태->실행상태

프로세스 전환은 다음 단계를 포함하는 전환 기본 요소를 통해 수행됩니다 .

  1. 프로세스의 PID에 따라 PCB 컬렉션에서 해당 PCB를 찾고 현재 실행 환경 정보가 PCB에 저장됩니다.
  2. PCB를 해당 대기열로 이동합니다.
  3. PCB를 실행하고 업데이트할 다른 ​​프로세스를 선택합니다.
  4. PCB에 따라 새로운 프로세스를 복원하는 데 필요한 작동 환경입니다.

프로세스 전환을 유발할 수 있는 이벤트는 일반적으로 다음과 같습니다.

  1. 프로세스의 타임 슬라이스 시간이 만료되었습니다.
  2. 우선순위가 더 높은 프로세스를 통해 도착합니다.
  3. 현재 프로세스가 적극적으로 차단됩니다.
  4. 현재 프로세스가 적극적으로 종료됩니다.

프로세스 전환 시 실행 환경 정보를 PCB에 저장하는 중요한 단계가 있습니다 .

여기서 언급하는 실행 환경 정보는 CPU의 실행 컨텍스트(Context)로 이해될 수 있으며, 선행 연구를 통해 CPU에는 다양한 레지스터(CPU 상태 전환에 사용되는 PSW 레지스터 등)가 있다는 점을 이해했다. 는 컴퓨터의 구성이다. 원리에 대한 지식은 여기에서 자세히 소개하지 않는다.) 프로세스가 실행되면 레지스터에 많은 정보가 생성된다. 이 정보는 현재 프로세스가 실행되는 컨텍스트이다. 다른 프로세스가 CPU를 점유하면 다시 사용하게 되며, 현재 프로세스가 실행되면 CPU에 있는 레지스터 정보가 다른 프로세스의 정보로 덮어쓰기될 수 있으므로 해당 프로세스가 계속 실행되기 위해서는 오류가 없으면 프로세스의 실행 컨텍스트 정보를 PCB에 저장해야 하며 CPU가 다시 실행하면 프로세스가 실행될 때 프로세스의 실행 환경 정보를 PCB에서 읽어 프로세스를 계속할 수 있습니다. 실행하다.

위의 프로세스 제어와 관련된 다섯 가지 기본 요소 소개를 통해 다음과 같이 추가 요약을 할 수 있습니다.

프로세스 프리미티브에 관계없이 수행되는 작업은 다음 세 가지에 포함됩니다.

  1. 프로세스 PCB 정보 업데이트(프로세스 상태 수정, 프로세스 실행 환경 정보 보호/복원)
  2. PCB를 적절한 큐(차단 큐, 준비 큐)에 삽입합니다.
  3. 자원 할당/재활용

참고: 컨텍스트 전환과 모드 전환은 다릅니다. 모드 전환 시 CPU는 여전히 논리적으로 동일한 프로세스를 실행 중일 수 있습니다. 사용자 프로세스는 처음에는 사용자 모드에서 실행됩니다. 프로세스가 중단이나 예외로 인해 코어 모드로 들어가면 다음에서 실행됩니다. 실행 후 코어 모드 사용자 모드로 돌아가 방금 중단된 프로세스를 실행합니다. 사용자 모드와 커널 모드 사이의 전환을 모드 전환이라고 하며 현재 프로세스를 변경하지 않습니다. 컨텍스트 전환은 커널 모드에서만 발생할 수 있습니다. 멀티 태스킹 운영 체제에서 필요한 기능입니다.

섹션 요약

이 섹션에는 내용이 너무 많아서 블로거는 마인드맵을 여러 개의 작은 그림으로 나누었습니다.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

2.1.6 프로세스 간 통신

2.1.6.1 소개
  • 프로세스 간 통신이란 무엇입니까?

    프로세스 통신은 프로세스 간 정보 교환(데이터 교환)을 의미합니다 . 프로세스 간 통신은 운영 체제에서 제공하는 지원에 의존합니다 .

  • 프로세스 간 통신이 운영 체제 지원에 의존하는 이유는 무엇입니까?

    위의 연구를 통해 프로세스는 운영 체제가 시스템 자원을 할당하는 기본 단위이며, 각 프로세스가 소유한 메모리 주소는 서로 독립적이라는 것을 알 수 있습니다 . 따라서 다양한 프로세스 간에 데이터 교환을 수행하려면 운영 체제의 지원에 의존해야 합니다.

  • 각 프로세스가 소유한 메모리 주소는 왜 서로 독립적이어야 합니까?

    시스템 보안의 관점에서 볼 때 각 프로세스가 소유한 메모리 주소가 서로 독립적이지 않다면 이는 각 프로세스가 서로의 데이터에 접근할 수 있다는 의미입니다. 이는 매우 위험한 일이 될 것입니다. 예를 들어 일부 앱은 개인정보(은행계좌, 신분증 정보 등)를 저장하고 있는데, 이때 악성 앱을 설치하게 되고 동시에 실행하게 되면, 이 두 가지 앱을 사용하게 되면, 이 악성 앱은 개인정보가 저장된 앱의 데이터에 자유롭게 접근할 수 있어 개인정보가 노출될 위험이 있습니다.

    따라서 보안을 보장하기 위해 한 프로세스는 다른 프로세스의 메모리 주소에 직접 접근할 수 없습니다 .

2.1.6.2 프로세스 커뮤니케이션의 분류

프로세스 간 통신은 공유 저장소 , 메시지 전달 , 파이프라인 통신의 세 가지 범주로 나눌 수 있습니다 .

2.1.6.3 공유 저장소
2.1.6.3.1 소개

공유 저장소는 통신해야 하는 여러 프로세스가 운영체제에서 공유 공간을 신청하는 것을 의미하며, 이러한 프로세스가 공유 공간에 직접 접근할 수 있으며, 이 공유 공간에 대한 읽기/쓰기 작업을 통해 프로세스 간 정보 교환이 이루어진다 . 운영 체제는 이 공유 공간을 해당 프로세스의 가상 주소 공간에 매핑합니다. (다음 장에서 소개하겠습니다)

평신도로 말하면 A, B 두 사람이 있는데, 블랙박스를 통해 물건을 교환해야 하는데, A는 B가 블랙박스에 넣은 물건만 블랙박스에서 얻을 수 있고, B에게서 직접 물건을 얻을 수는 없다. 마찬가지로 B가 A에게 물건을 주고자 할 경우 먼저 블랙박스에 물건을 넣어야 할 뿐, A에게 직접 줄 수는 없다.

여기에 이미지 설명을 삽입하세요.

2.1.6.3.2 기능
  • 오류를 방지하려면 공유 공간 프로세스에서 읽기/쓰기 작업을 수행할 때 동기식 상호 배제 도구 (예: P/V 작업)를 사용하여 읽기/쓰기를 제어해야 합니다.
  • 운영 체제는 통신 프로세스를 위한 공유 공간 및 동기화 상호 배제 도구를 제공하는 역할만 담당하며, 데이터 교환은 사용자 자신의 읽기/쓰기 명령 배열에 의해 완료됩니다.
2.1.6.3.3 분류

공유 스토리지는 다시 데이터 구조 기반 공유스토리지 기반 공유 로 나눌 수 있습니다 .

  • 데이터 구조 기반 공유(하위 수준)

    운영 체제는 각 프로세스가 사용할 메모리에 특정 데이터 구조의 공유 공간을 정의합니다.예를 들어 공유 공간은 크기 10의 배열만 확장할 수 있습니다.이 공유 방법은 느리고 많은 제한이 있습니다.

  • 버킷 기반 공유(고급)

    운영체제는 데이터 구조를 명시하지 않고 메모리 내 공유 저장 영역을 분할하고, 데이터 저장 위치와 형태를 프로세스에 의해 제어하는데, 이 공유 방식은 속도가 빠르다.

2.1.6.4 메시지 전달
2.1.6.4.1 소개

메시지 전달(Message Passing)은 프로세스 간 형식화된 정보 단위로 데이터를 교환하는 것을 의미하며 , 통신 프로세스 간에 공유 공간이 없는 경우 운영체제에서 제공하는 메시지 전달 방식을 사용하여 프로세스 통신을 할 수 있다.

형식화된 정보에는 정보 헤더정보 본문이 포함됩니다 .

  • 정보 헤더

    송신 프로세스 ID, 수신 프로세스 ID, 메시지 길이 등과 같은 정보를 포함합니다.

  • 정보기관

    프로세스가 교환하려는 것.

2.1.6.4.2 기능
  • 메시지 전달은 메시지 보내기메시지 받기를 위해 운영 체제에서 제공하는 두 가지 기본 요소와의 데이터 교환에 의존합니다.

    기본 메시지 보내기: send(pid,msg)

    메시지 기본 요소 수신: receive(pid,&msg)

  • 이는 통신 구현 세부 사항을 숨기고 통신 프로그램 설계를 단순화하기 때문에(두 가지 기본 요소에 의존) 현재 가장 널리 사용되는 프로세스 간 통신 메커니즘입니다.

2.1.6.4.3 분류

메시징은 직접 통신 과 간접 통신의 두 가지 유형으로 더 나눌 수 있습니다 .

  • 직접적인 의사소통

    송신 프로세스는 송신 프리미티브를 통해 수신 프로세스의 PID를 통해 수신 프로세스로 메시지를 직접 전송하고 이를 수신 프로세스의 메시지 버퍼 큐에 대기시키며, 수신 프로세스는 큐에서 정보를 얻는다.

  • 간접적인 의사소통 방식

    송신 프로세스는 메시지를 중간 엔터티로 보내고, 수신 프로세스는 중간 엔터티로부터 정보를 얻습니다. 이 중간 엔터티를 일반적으로 "사서함"이라고 부르므로 간접 통신 방법을 사서함 통신 방법이라고도 합니다.

A와 B라는 두 사람이 있다는 것이 통념이다. A는 B에게 편지를 쓰고 싶다. A는 작성한 편지를 택배기사에게 건네준다. 첫 번째 방법은 택배기사가 B의 손에 직접 편지를 건네주는 것이다. 두 번째 방법은 A가 B에게 편지를 쓰고 싶다는 것이다. 즉, 택배기사는 B의 우편함에 편지를 넣고, B는 우편함에서 편지를 집어든다.

2.1.6.5 파이프라인 통신
2.1.6.5.1 소개

파이프 통신은 파이프와 같은 특수 공유 파일을 통해 프로세스 간 정보 교환을 의미합니다.

파이프(Pipe)는 읽기 과정과 쓰기 과정을 연결하여 통신을 이루는 데 사용되는 공유 파일(파이프 파일)을 말한다. 파일에 데이터를 쓰는 프로세스를 쓰기 프로세스라고 하며 , 파일에서 데이터를 읽는 프로세스를 읽기 프로세스라고 합니다 .

여기에 이미지 설명을 삽입하세요.

2.1.6.5.2 기능
  • 파이프라인의 데이터는 FIFO 방식을 채택합니다.
  • 파이프는 반이중 통신만 사용할 수 있습니다. 즉, 동일한 시간 내에 단방향 전송만 가능합니다. 양방향 전송을 원할 경우 파이프 2개가 필요합니다.
  • 운영 체제는 파이프라인에 대한 다양한 프로세스의 상호 배타적 액세스를 제어합니다.
  • 파이프가 가득 차면 읽기 프로세스가 파이프에서 데이터를 제거하여 파이프에 여유 공간이 생길 때까지 쓰기 프로세스가 차단됩니다.
  • 파이프가 비어 있으면 파이프가 더 이상 비어 있지 않도록 쓰기 프로세스가 파이프에 데이터를 쓸 때까지 읽기 프로세스가 차단됩니다.
  • 파이프에 있는 데이터를 한 번 읽으면 완전히 사라지기 때문에 여러 프로세스가 동일한 파이프에서 데이터를 읽을 경우 혼란이 발생할 수 있는데, 이 경우 일반적으로 두 가지 해결 방법이 있습니다.
    1. 파이프는 여러 쓰기 프로세스와 하나의 읽기 프로세스를 허용합니다.
    2. 파이프는 다중 쓰기 프로세스와 다중 읽기 프로세스를 허용하며 운영 체제는 각 읽기 프로세스가 차례로 파이프에서 데이터를 읽도록 허용합니다(Linux 운영 체제 솔루션)
2.1.6.5.3 Linux의 파이프

Linux에서 파이프는 매우 자주 사용되는 통신 메커니즘입니다. 파이프는 통신에 파일을 사용할 때 발생하는 다음 문제 중 두 가지를 극복할 수 있습니다.

  1. 파이프라인의 크기를 제한합니다. 실제로 파이프는 고정된 크기의 버퍼인데, 리눅스에서는 파이프의 크기가 4KB로 검사 없이 늘어나는 파일과 달리 크기가 크다. 고정된 크기의 버퍼를 사용하면 문제가 발생할 수 있는데, 예를 들어 데이터를 쓸 때 파이프가 가득 차는 경우가 있는데 이때 파이프에 대한 write() 호출이 차단됩니다.
  2. 읽기 프로세스는 쓰기 프로세스보다 빠르게 작동할 수도 있습니다. 모든 데이터를 읽었으면 파이프가 비어 있고 파이프에 대한 read() 호출이 차단됩니다.
2.1.6.5.4 공유 저장소와의 차이점
  • 공유 스토리지에 대한 상호 배타적 액세스는 통신 프로세스에 의해 구현되고, 파이프라인 통신에 대한 상호 배타적 액세스는 운영 체제에 의해 구현됩니다.
  • 공유 스토리지에서는 프로세스가 공유 공간 어디에서나 데이터를 읽고 쓸 수 있지만, 파이프라인 통신에서는 한쪽에서만 데이터를 쓰고 다른 쪽에서만 데이터를 읽을 수 있습니다.
  • 공유 저장소에서 프로세스가 공유 공간에 액세스하려는 경우 다른 프로세스는 공유 공간에서 쓰기 작업을 수행해서는 안 됩니다. 그렇지 않으면 액세스 동작이 차단됩니다. 파이프라인 통신에서는 파이프라인에 데이터가 있는 한 가능합니다. 파이프라인에서 액세스할 수 있습니다. 다른 프로세스가 파이프에 쓰고 있기 때문에 차단될 염려 없이 데이터를 읽을 수 있습니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.2 스레드

2.2.1 스레드의 기본 개념 및 속성

2.2.1.1 소개

스레드(Thread)는 CPU의 기본 실행 단위이자 프로그램 실행 흐름의 가장 작은 단위로 스레드 ID, 프로그램 카운터, 레지스터 세트, 스택으로 구성된다. 체계. 이는 "경량 프로세스"로 이해될 수 있습니다.

2.2.1.2 스레드를 도입해야 하는 이유는 무엇입니까?

프로세스를 도입하는 이유는 다중 프로그램을 동시에 실행하고 리소스 활용도를 높이기 위한 것임을 앞서 배웠습니다. 프로세스는 동시에 여러 작업을 수행해야 할 수 있습니다.(예: QQ는 동시에 영상 채팅, 파일 전송 등을 수행해야 합니다.) 이러한 기능은 하나의 프로세스를 순차적으로 처리하여 해결할 수 없습니다. 이때 프로세스를 더욱 세분화하는 스레드 개념이 도입됩니다. 프로세스는 여러 스레드를 가질 수 있습니다. 이러한 스레드는 프로세스가 소유한 자원을 공유합니다. 각 스레드는 CPU에 의해 독립적으로 스케줄링될 수 있습니다. 이러한 스레드는 서로 다른 작업을 담당할 수 있습니다. 기능은 각각 . 예를 들어, 위의 QQ 예시에서는 두 개의 스레드(영상 채팅 및 파일 전송)에 해당하는 QQ 프로세스일 수 있습니다.

위에서 살펴본 바와 같이 스레드를 도입하면 운영 체제의 동시성 성능이 더욱 향상될 수 있음을 알 수 있습니다. 스레드 도입 이후 프로세스의 의미가 바뀌었는데, 이때 프로세스는 CPU 이외의 시스템 자원 할당 단위로만 사용되고, 스레드는 CPU의 할당 단위로 사용된다 .

2.2.1.3 스레드의 주요 속성
  • 스레드는 시스템 리소스를 소유하지 않으며 자신이 속한 프로세스의 리소스를 공유합니다.
  • 서로 다른 스레드가 동일한 프로그램을 실행할 수 있습니다.
  • 스레드는 CPU 독립적 스케줄링의 기본 단위이며 여러 스레드가 동시에 실행될 수 있습니다.
  • 스레드는 생성된 후 종료될 때까지 생명주기를 시작하며, 생명주기 동안 스레드는 차단 상태, 준비 상태, 실행 상태 등 다양한 상태 변화를 경험하게 됩니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.2.2 스레드 상태

프로세스와 매우 유사하게 스레드에는 새 상태, 준비 상태, 실행 중 상태, 차단된 상태, 종료된 상태 등 5가지 상태가 있습니다.

스레드는 더 세분화된 프로세스로 이해될 수 있으므로 이 5가지 상태와 5가지 상태 간의 전환은 기본적으로 프로세스와 동일합니다. 자세한 내용은 섹션 2.1.4를 참조하세요.

2.2.3 스레드 구성 및 제어

2.2.3.1 스레드 제어 블록

프로세스와 유사하게 운영 체제에는 스레드 제어 및 관리에 대한 정보를 기록하는 데 사용되는 각 스레드마다 스레드 제어 블록 TCB가 장착되어 있습니다.

TCB의 주요 내용은 아래 그림과 같습니다.

여기에 이미지 설명을 삽입하세요.

2.2.3.2 스레드 구성

프로세스와 마찬가지로 운영 체제는 TCB를 여러 상태에 따라 여러 스레드 테이블로 나누고 스레드 테이블을 통해 스레드를 구성합니다.

2.2.3.3 스레드 제어
  • 스레드 생성

    운영체제는 스레드를 생성하기 위해 시스템 호출을 제공합니다. 사용자 프로그램이 시작되면 일반적으로 "초기화 스레드"라는 하나의 스레드만 실행됩니다. 이 스레드의 주요 기능은 새 스레드를 생성하는 것입니다. 새 스레드를 생성할 때 스레드 시스템 호출 생성을 사용하고 해당 매개변수를 제공해야 합니다.

  • 스레드 종료

    스레드가 작업을 완료하거나 스레드가 실행 중에 예외를 만나 강제로 종료되면 종료 스레드는 해당 종료 스레드 시스템 호출을 호출하여 스레드를 종료합니다.

    참고: 스레드가 종료된 후 해당 스레드가 점유한 리소스는 즉시 해제되지 않으며, 종료된 스레드는 프로세스의 다른 스레드가 분리 기능을 실행한 후에만 리소스를 해제합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.2.4 스레드와 프로세스의 비교

  • 스케줄링

    스레드가 도입되기 전에는 프로세스가 자원 할당 및 스케줄링의 기본 단위였으며, 스케줄링할 때마다 컨텍스트 전환이 필요하여 비용이 많이 들었습니다.

    스레드 도입 후 프로세스는 CPU 이외의 자원 할당의 기본 단위입니다. 스레드는 CPU 스케줄링의 기본 단위입니다. 동일한 프로세스에서 스레드 전환의 오버헤드는 매우 적으며 프로세스 전환을 트리거하지 않습니다. 그러나 한 프로세스의 스레드에서 다른 프로세스의 스레드로 전환할 때 프로세스 전환은 여전히 ​​트리거됩니다.

  • 동시성

    스레드가 도입되기 전에는 프로세스가 동시에 실행될 수 있었습니다.

    스레드 도입 이후에는 프로세스를 동시에 실행할 수 있을 뿐만 아니라 스레드도 동시에 실행할 수 있어 운영 체제의 동시성 성능이 더욱 향상됩니다.

  • 자원을 가지고 있다

    프로세스는 CPU를 제외한 시스템의 자원 할당의 기본 단위로, 스레드는 시스템 자원을 소유하지 않으며, 자신이 속한 프로세스의 시스템 자원에 접근할 수 있다.

  • 독립

    각 프로세스는 독립적인 주소 공간과 리소스를 가지고 있습니다. 서로 다른 프로세스 간의 스레드는 서로 보이지 않습니다. 동일한 프로세스의 여러 스레드는 프로세스의 리소스를 공유합니다.

  • 다중 CPU 시스템

    스레드가 도입되기 전에는 CPU 수에 관계없이 프로세스가 하나의 CPU에서만 실행될 수 있었습니다.

    스레드를 도입한 후 프로세스의 여러 스레드를 실행을 위해 다른 CPU에 할당할 수 있습니다.

  • 구현

    스레드가 도입되기 전에 "실행 상태"에 있는 프로세스는 프로세스가 CPU에 의해 실행되고 있음을 의미합니다.

    스레드가 도입된 후 "실행 상태"의 프로세스는 프로세스의 스레드가 CPU에 의해 실행되고 있음을 의미합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.2.5 스레드 구현

스레드 구현은 ULT(사용자 수준 스레드) KLT(커널 수준 스레드)라는 두 가지 범주로 나눌 수 있습니다 .

2.2.5.1 사용자 수준 스레드
  • 개념

    사용자 수준 스레드를 사용하는 경우 스레드 관리와 관련된 모든 작업은 스레드 라이브러리를 통해 애플리케이션에서 구현됩니다 .

    스레드 라이브러리(Thread Library)는 프로그래머가 스레드를 생성하고 관리할 수 있도록 프로그래밍 언어에서 제공하는 API 라이브러리를 말하며, 스레드 라이브러리를 구현하는 방법은 크게 두 가지가 있습니다.

    • 사용자 공간에서 커널 지원 없이 API 라이브러리를 제공합니다. API 라이브러리의 모든 코드와 데이터 구조는 사용자 공간에 있습니다. 라이브러리에서 함수를 호출하면 사용자 공간에서 로컬 함수만 호출됩니다.
    • 운영 체제에서 직접 지원하는 커널 수준 API 라이브러리를 구현합니다. API 라이브러리의 모든 코드와 데이터 구조는 커널 공간에 있습니다. 라이브러리에서 함수를 호출하면 커널에 대한 시스템 호출이 발생합니다.

    이때 운영체제 커널은 스레드의 존재를 감지할 수 없고 프로세스의 존재만 감지할 수 있다. 즉, 사용자 관점에서는 여러 스레드가 동시에 실행되고 있지만 운영 체제 커널에서는 하나의 프로세스만 실행되고 있습니다. 사용자 수준 스레드를 사용하는 시스템의 구조 다이어그램은 아래 그림에 나와 있습니다.

여기에 이미지 설명을 삽입하세요.

위 구조의 운영 체제를 사용하면 CPU 스케줄링 단위는 여전히 프로세스이고 (운영 체제 커널은 사용자 수준 스레드를 감지할 수 없기 때문에) 각 프로세스는 교대로 타임 슬라이스를 실행합니다.예를 들어 시스템의 프로세스 A에는 1이 포함됩니다. 사용자 수준 스레드이고 프로세스 B에는 10개의 사용자 스레드가 포함되어 있으며, 이때 프로세스 A의 스레드 실행 시간은 프로세스 B의 각 스레드 실행 시간의 10배입니다.

  • 이점

    1. 사용자 수준 스레드의 관리 및 유지 관리는 응용 프로그램에서 구현되므로 스레드 간 전환 시 커널 상태로의 변환이 필요하지 않아 CPU 전환 상태의 오버헤드가 절약됩니다.
    2. 각 프로세스의 스케줄링 알고리즘은 전용일 수 있으며, 서로 다른 프로세스는 서로 다른 스케줄링 알고리즘을 선택하여 자신의 필요에 따라 자체 스레드를 예약할 수 있습니다.
    3. 애플리케이션에서 사용자 수준 스레드의 구현 및 관리와 관련된 코드는 운영 체제 플랫폼에 의존하지 않습니다.
  • 결점

    1. 동일한 프로세스의 사용자 수준 스레드 중 하나에서 시스템 호출 관련 차단 문제가 발생하면 동일한 프로세스의 다른 스레드에 영향을 미쳐 다른 스레드도 차단됩니다.
    2. 다중 코어를 활용할 수 없는 운영 체제 커널은 한 번에 하나의 CPU만 프로세스에 할당하므로 프로세스에서 동시에 하나의 스레드만 실행할 수 있습니다.
2.2.5.2 커널 수준 스레드
  • 개념

    커널 수준 스레드를 사용할 때 스레드 관리와 관련된 모든 작업은 운영 체제 커널 프로그램에 의해 구현됩니다 . 운영 체제는 각 커널 수준 스레드에 대해 TCB를 설정하여 커널 수준 스레드를 관리합니다(이전 장에서 TCB 관련 지식을 소개했습니다). 커널 수준 스레드를 사용하는 시스템의 구조 다이어그램은 아래 그림과 같습니다.

여기에 이미지 설명을 삽입하세요.

위 구조의 운영 체제를 사용하면 CPU의 스케줄링 단위는 커널 수준 스레드입니다.

  • 이점

    1. 멀티 코어를 활용할 수 있으며 동일한 프로세스의 여러 스레드를 다른 CPU에서 예약하고 실행할 수 있습니다.
    2. 동일한 프로세스의 스레드가 차단되면 프로세스의 다른 스레드에는 영향을 미치지 않으며 시스템에서는 다른 스레드가 CPU를 점유하도록 허용합니다.
    3. 커널 수준 스레드는 작은 데이터 구조와 스택, 빠른 스레드 전환 및 낮은 오버헤드를 갖습니다.
  • 결점

    동일한 프로세스에서 사용자 수준 스레드 간에 전환하려면 사용자 모드에서 커널 모드로 변환해야 하며, 이는 큰 시스템 오버헤드가 필요합니다.

2.2.5.3 혼합 형태
  • 개념

    하이브리드 형태는 사용자 수준 스레드와 커널 수준 스레드의 조합을 의미하며, 이 구현에서 커널은 여러 커널 수준 스레드의 생성, 예약 및 관리를 지원하며 사용자 프로그램에서 생성, 예약 및 관리를 허용합니다. 사용자 수준 스레드를 관리합니다. 하나의 커널 수준 스레드는 여러 사용자 수준 스레드에 해당할 수 있습니다(이러한 사용자 수준 스레드는 시분할 다중 커널 수준 스레드). 이 구현을 사용하는 시스템의 구조 다이어그램은 아래 그림에 나와 있습니다.

여기에 이미지 설명을 삽입하세요.

위 구조의 운영 체제를 사용하면 CPU의 스케줄링 단위는 커널 수준 스레드이지만 응용 프로그램에서는 스레드 라이브러리를 통해 사용자 수준 스레드를 관리할 수 있습니다.

  • 장점과 단점

    이 접근 방식은 사용자 수준 스레드와 커널 수준 스레드의 장점을 결합합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.2.6 멀티스레딩 모델

운영체제가 사용자 수준 스레드와 커널 수준 스레드를 모두 지원하는 경우, 즉 위에서 소개한 하이브리드 방식을 사용하는 경우 사용자 수준 스레드와 커널 수준 스레드의 연결 방식이 다르기 때문에 크게 두 가지로 나눌 수 있다. 세 가지 다른 멀티스레딩 모델: 일대일 모델 , 다대일 모델다대다 모델 .

2.2.6.1 일대일 모델
  • 개념

    각 사용자 수준 스레드 매핑은 서로 다른 커널 수준 스레드에 매핑되며 구조 다이어그램은 아래 그림과 같습니다.

여기에 이미지 설명을 삽입하세요.

위 그림에서 볼 수 있듯이 이 멀티스레딩 모델은 실제로 위에서 커널 수준 스레드를 활성화할 때 소개한 스레드 구현 방법입니다.

  • 이점

    스레드가 차단되면 CPU는 강력한 동시성 기능을 통해 다른 스레드가 실행되도록 예약할 수 있습니다.

  • 결점

    사용자 스레드가 생성될 때마다 해당 커널 스레드가 생성되어야 하며 이는 큰 시스템 오버헤드를 필요로 합니다.

2.2.6.2 다대일 모델
  • 개념

    여러 개의 사용자 수준 스레드를 하나의 커널 수준 스레드로 매핑 이러한 사용자 스레드는 하나의 프로세스에 속함 스레드 예약 및 관리는 사용자 공간에서 완료 사용자 수준 스레드가 커널에 액세스해야 하는 경우에만 하나의 커널에 매핑됨 레벨 스레드. , 한 번에 하나의 스레드만 매핑할 수 있습니다. 구조 다이어그램은 아래 그림과 같습니다.

여기에 이미지 설명을 삽입하세요.

위 그림에서 볼 수 있듯이 이 멀티스레딩 모델은 실제로 위에서 소개한 순수 사용자 수준 스레드를 구현한 것입니다.

  • 이점

    스레드 관리는 사용자 공간에서 수행되며 매우 효율적입니다.

  • 결점

    1. 스레드가 커널에 액세스하는 동안 차단되면 전체 프로세스가 차단됩니다.
    2. 동시에 하나의 스레드만 커널에 액세스할 수 있습니다.
    3. 여러 CPU에서 동시에 여러 스레드를 예약하고 실행할 수 없습니다.
2.2.6.3 다대다 모델
  • 개념

    n개의 사용자 레벨 스레드를 m개의 커널 레벨 스레드로 매핑합니다.(n은 m보다 크거나 같습니다.) 구조 다이어그램은 아래 그림과 같습니다.

여기에 이미지 설명을 삽입하세요.

위 그림에서 볼 수 있듯이 이 멀티스레딩 모델은 실제로 위에서 소개한 하이브리드 구현 방법입니다.

이 멀티스레딩 모델에서 사용자 수준 스레드는 "코드 논리"의 전달자로 이해될 수 있고, 커널 수준 스레드는 "실행 기회"의 전달자로 이해될 수 있습니다. CPU 스케줄링의 커널 수준 스레드는 매핑된 모든 사용자 수준 스레드에서 코드를 실행할 수 있습니다.

  • 특징

    다대일 모델의 낮은 동시성이라는 단점을 극복할 뿐만 아니라, 일대일 모델에서 하나의 사용자 프로세스가 너무 많은 커널 수준 스레드를 점유하여 발생하는 오버헤드가 너무 크다는 단점도 극복합니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.3 CPU 스케줄링

2.3.1 스케줄링 관련 개념

2.3.1.1 스케줄링이란 무엇입니까?

동시에 처리해야 할 사항이 여러 개인 경우, 제한된 자원으로 인해 동시에 처리할 수 없으므로, 이때 특정 규칙에 따라 처리해야 하는 순서를 결정해야 합니다. 이것이 바로 "스케줄링 " 입니다 .

다중 프로그래밍 시스템에서는 프로세스 수가 CPU 수보다 많은 경우가 많기 때문에 여러 프로세스가 CPU를 두고 경쟁하게 되는데, 이는 매우 일반적인 현상입니다. 이때 준비 대기열에서 특정 프로세스를 선택해야 합니다. 특정 규칙에 따라 프로세스를 처리하고 프로세스가 실행될 수 있도록 프로세스에 CPU를 할당합니다.

2.3.1.2 7상태 모델

2.1.4 절에서 프로세스의 5가지 상태에 대해 배웠는데, 이때 CPU 스케줄링을 배우기 위해서는 프로세스의 특별한 상태인 정지 상태(suspension state)를 추가적으로 학습해야 합니다 . 준비 정지차단 정지 의 두 가지 상태 로 세분되므로 프로세스의 5단계 모델을 7상태 모델 로 더 확장할 수 있습니다 .

그렇다면 일시 중단된 프로세스는 언제 나타날까요?

제한된 메모리로 인해 일부 프로세스의 데이터를 일시적으로 외부 메모리로 전송해야 합니다. 이러한 프로세스를 실행해야 하고 메모리가 비어 있으면 데이터가 다시 메모리로 전송됩니다. 임시로 저장되는 이러한 프로세스 상태 외부 메모리로 이동하여 대기 중이 정지된 상태입니다. . 일시 중지된 상태의 프로세스 PCB는 일시 중지 대기열 로 구성됩니다.

7개 상태 모델의 전이 다이어그램은 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.

차단과 정지 비교

마찬가지입니다. 모두 CPU를 일시적으로 사용할 수 없는 서비스에 있습니다.

차이점: 차단된 상태의 프로세스 이미지는 여전히 메모리에 있는 반면 일시 중지된 상태의 프로세스 이미지는 외부 메모리에 있습니다.

2.3.1.3 3단계 스케줄링

스케줄링은 운영 체제에서 높은 수준에서 낮은 수준까지 세 가지 수준으로 구분됩니다. 즉, 높은 수준 스케줄링 -> 중간 수준 스케줄링 -> 낮은 수준 스케줄링입니다.

  • 고급 예약

    작업 스케줄링이라고도 하는 고급 스케줄링은 외부 작업 백업 대기열에서 작업을 선택하여 특정 원칙에 따라 메모리로 전송하고 CPU를 두고 경쟁할 수 있도록 해당 프로세스를 생성하는 것을 말합니다. 각 작업은 한 번만 로드되고 한 번만 로드됩니다 . 호출될 때 작업에 대한 PCB가 생성되고 호출될 때 해당 PCB가 파괴됩니다.

    작업은 특정 작업을 의미합니다. 작업을 시스템에 제출한다는 것은 사용자가 운영 체제에 프로그램을 시작(특정 작업을 처리하기 위해)하도록 요청하는 것을 의미합니다.

    메모리 공간은 제한되어 있으므로 메모리 공간이 가득 차고 다른 사용자가 운영 체제에 작업을 제출하면 이러한 작업은 메모리 외부의 작업 백업 대기열 에 배치됩니다 .

  • 중간 스케줄링

    메모리 스케줄링이라고도 하는 중간 스케줄링은 특정 규칙에 따라 일시 중지된 프로세스를 메모리로 다시 읽어올 것인지 결정하는 것을 의미합니다. 프로세스는 여러 번 호출되어 메모리로 가져올 수 있습니다 . 메모리 스케줄링의 빈도는 작업 스케줄링의 빈도보다 높습니다.

  • 낮은 수준의 스케줄링

    프로세스 스케줄링이라고도 하는 저수준 스케줄링은 특정 규칙에 따라 준비 대기열에서 프로세스를 선택하고 해당 프로세스에 CPU를 할당하는 것을 말합니다.

    프로세스 스케줄링은 운영 체제에서 가장 기본적인 종류의 스케줄링 으로, 빈도가 매우 높으며 일반적으로 수십 밀리초마다 한 번씩 발생합니다.

2.3.1.4 3단계 스케줄링의 연결 및 비교
해야 할 일 일어난 그 장면 빈도 프로세스 상태에 미치는 영향
고급 예약 특정 규칙에 따라 백업 대기열에서 적절한 작업을 선택하여 메모리로 전송하고 프로세스를 생성합니다. 외장형 스토리지 -> 메모리(작업 중심) 가장 낮은 없음->생성된 상태->준비된 상태
중간 스케줄링 특정 규칙에 따라 일시 중단 대기열에서 적절한 프로세스를 선택하고 해당 프로세스의 데이터를 다시 메모리로 전송합니다. 외부 메모리 -> 메모리(프로세스 지향) 중간 정지 준비 -> 준비 상태(차단 정지 -> 차단 상태)
낮은 수준의 스케줄링 특정 규칙에 따라 준비 큐에서 프로세스를 선택하여 CPU를 할당합니다. 메모리->CPU 제일 높은 준비상태->실행상태

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.3.2 스케줄링 구현

2.3.2.1 스케줄러와 유휴 프로세스
  • 스케줄러

    운영 체제에서 CPU는 스케줄러를 통해 스케줄링되고 할당되며, 스케줄러는 일반적으로 큐, 디스패처, 컨텍스트 스위처의 세 부분으로 구성됩니다.

    • 대기열

      스케줄러의 선택을 용이하게 하기 위해 운영 체제의 모든 준비된 프로세스를 특정 규칙에 따라 하나 이상의 대기열에 대기시키는 데 사용됩니다.

    • 디스패처

      스케줄러가 선택한 프로세스에 따라 준비 큐에서 호출되고 CPU가 할당됩니다.

    • 컨텍스트 전환기

      CPU가 프로세스를 전환하면 두 프로세스의 실행 환경이 컨텍스트 전환기를 통해 보호되고 복원됩니다.

      두 쌍의 컨텍스트(실행 환경) 전환 작업이 컨텍스트 전환기에서 발생합니다.

      1. 현재 프로세스의 실행 환경을 해당 PCB에 저장한 후, 디스패치 프로그램이 실행될 수 있도록 디스패치 프로그램의 실행 환경을 로드합니다.
      2. 디스패처의 실행 환경을 제거하고 새 프로세스의 실행 환경을 CPU의 각 레지스터에 로드합니다.

    스케줄러의 구조 다이어그램은 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.

  • 어울리는 과정

    시스템에 Ready 프로세스가 없으면 CPU는 유휴 프로세스를 실행하고, 다른 Ready 프로세스가 없으면 CPU는 항상 유휴 프로세스를 실행하고 유휴 프로세스를 실행할 때 중단을 테스트합니다.

    CPU가 유휴 상태일 때 유휴 프로세스를 실행하여 지속적으로 순찰하는 것으로 이해할 수 있습니다.

    유휴 프로세스의 우선순위는 가장 낮으며 준비된 프로세스가 존재하면 즉시 CPU를 포기합니다.

2.3.2.2 스케줄링 및 전환 타이밍

2.3.1.3절에서 프로세스 스케줄링 관련 개념을 소개했는데, 프로세스 스케줄링과 전환은 언제 발생하는가?

먼저 2.3.2.1절에서는 스케줄러를 소개했는데, 운영체제 커널 프로그램인 스케줄러를 통해 프로세스 스케줄링이 완료되는 것을 볼 수 있다. 스케줄링을 요청하는 이벤트가 발생하면 스케줄러가 실행될 수 있으며, 새로운 준비 프로세스가 스케줄링될 때까지 프로세스 전환이 발생하지 않습니다. 그러나 모든 경우에 프로세스 스케줄링 및 전환이 반드시 스케줄링이 요청된 후에 발생하는 것은 아닙니다.

  • 프로세스 스케줄링 및 전환이 수행될 수 있는 상황

    1. 현재 프로세스가 적극적으로 CPU를 포기합니다.
      • 프로세스가 정상적으로 종료되면 프로세스 스케줄링 및 전환이 발생합니다.
      • 프로세스 실행 중 예외가 발생하여 종료되면 프로세스 스케줄링 및 전환이 발생합니다.
      • 프로세스가 적극적으로 차단(I/O 요청 등)을 요청하면 프로세스 예약 및 전환이 발생합니다.
    2. 현재 프로세스는 CPU를 수동적으로 포기합니다.
      • 현재 프로세스에 할당된 타임 슬라이스가 모두 소모되면 프로세스 스케줄링 및 전환이 발생합니다.
      • 실행 우선순위가 더 높은 프로세스가 있으면 프로세스 스케줄링 및 전환이 발생합니다.
      • 처리해야 할 긴급한 사항(예: I/O 중단)이 있는 경우 프로세스 예약 및 전환이 발생합니다.
  • 프로세스 스케줄링 및 전환이 불가능한 상황

    1. 인터럽트를 처리하는 과정에서는 프로세스 스케줄링과 스위칭이 불가능하다. 인터럽트 처리 프로세스는 매우 복잡하기 때문에 구현 시 프로세스 전환이 어렵습니다.

    2. 프로세스는 운영 체제 커널의 중요한 섹션에 있으므로 예약하거나 전환할 수 없습니다. 프로세스가 운영 체제 커널의 임계 영역에 진입하면 임계 영역을 잠가야 하며 다른 프로세스는 이에 액세스할 수 없습니다. 임계 영역을 잠금 해제할 수 없는 것을 방지하려면 잠금을 해제하기 전에 다른 프로세스로 전환하면 안 됩니다.

      중요 리소스: 일정 기간 내에 하나의 프로세스만 사용이 허용되는 리소스입니다. 각 프로세스는 중요 리소스에 대해 상호 배타적인 액세스 권한을 가져야 합니다.

      중요 섹션: 중요 리소스에 액세스하는 코드 조각입니다.

      커널 중요 섹션: 일반적으로 프로세스의 준비 대기열 등과 같은 특정 운영 체제 커널 데이터 구조에 액세스하는 데 사용됩니다. 따라서 커널 중요 섹션은 가능한 한 빨리 잠금을 해제해야 합니다. 그렇지 않으면 시스템의 다른 관리 작업에 영향을 미칠 수 있습니다. 운영 체제 커널.

      위의 소개에 따르면 프로세스는 운영 체제 커널의 임계 영역에서는 프로세스 스케줄링 및 전환을 수행할 수 없지만 프로세스가 일반적인 임계 영역에 있는 경우 프로세스 스케줄링 및 전환을 수행할 수 있습니다.

    3. 원자적(기본) 작업을 수행할 때 프로세스 스케줄링 및 전환을 수행할 수 없습니다. 원자적 연산을 수행할 때에는 인터럽트까지 마스크해야 하며, 프로세스 스케줄링과 스위칭을 수행해서는 안 된다.

2.3.2.3 스케줄링 방법의 분류

프로세스 스케줄링 방식은 CPU에서 프로세스가 실행 중일 때 더 중요한 프로세스가 처리되어야 할 때 CPU를 할당하는 방식을 말합니다. 일반적으로 프로세스 스케줄링 방법에는 비선점 스케줄링선점 스케줄링의 두 가지 방법이 있습니다 .

  • 비선점형 스케줄링

    프로세스만이 자발적으로 CPU를 포기할 수 있습니다 . 즉, 프로세스가 CPU에서 실행될 때 더 높은 우선순위를 가진 프로세스가 준비 대기열에 들어가더라도 실행 중인 프로세스는 자발적으로 실행될 때까지 계속 실행되도록 허용됩니다. CPU를 포기합니다.

    비선점형 스케줄링의 장점은 구현이 간단하고 시스템 오버헤드가 낮다는 점 이며, 배치 처리 시스템에는 적합하지만 시분할 시스템 및 실시간 시스템 에는 적합하지 않습니다 .

  • 선제적 스케줄링

    프로세스가 수동적으로 CPU를 포기하도록 허용합니다 . 즉, 프로세스가 CPU에서 실행될 때 우선 순위가 더 높은 프로세스가 준비 대기열에 들어가면 실행 프로세스가 즉시 일시 중지되고 준비 상태로 전환됩니다. CPU는 우선순위가 더 높은 Ready 프로세스에 할당됩니다.

    선점형 스케줄링의 장점은 시스템 처리량과 응답 효율성을 향상시킬 수 있으며 시분할 시스템과 실시간 시스템에 적합하다는 것입니다 .

2.3.2.4 스레드 스케줄링

운영 체제에는 사용자 수준 스레드 예약과 커널 수준 스레드 예약이라는 두 가지 유형의 스레드 예약이 있습니다.

  • 사용자 수준 스레드 스케줄링

    커널은 사용자 수준 스레드의 존재를 모르기 때문에 현재 커널 스케줄링의 단위는 여전히 프로세스입니다.

  • 커널 수준 스레드 스케줄링

    커널은 커널 수준 스레드의 존재를 알고 있으므로 이때 커널은 실행할 특정 스레드를 선택하고 여기에 타임 슬라이스를 할당하며, 타임 슬라이스가 끝나면 스레드는 강제로 일시 중단됩니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.3.3 스케줄링 알고리즘

2.3.3.1 스케줄링 알고리즘의 평가 지표

사람마다 장점이 다르듯이 스케줄링 알고리즘도 다르며, 스케줄링 알고리즘의 성능을 평가하기 위해 사람들은 다양한 평가 기준을 제안해 왔습니다. 주요 평가 기준은 CPU 사용률 , 시스템 처리량 , 처리 시간 , 대기 시간응답 시간 입니다 .

  • CPU 활용도

    CPU 사용률은 CPU가 사용되는 시간의 비율을 나타냅니다.

    CPU 사용률 = CPU 유효 작업 시간/(CPU 유효 작업 시간 + CPU 유휴 대기 시간)

  • 시스템 처리량

    시스템 처리량은 단위 시간당 CPU가 완료한 작업 수를 나타냅니다.

  • 처리 시간

    처리 시간은 작업이 완료될 때까지 시스템에 제출되는 데 걸리는 시간을 의미합니다. 즉, 작업을 기다리고 준비 대기열에 대기하고 CPU에서 실행하고 I/O하는 데 소요된 시간의 합을 의미합니다. 운영.

    처리 시간 = 작업 완료 시간 - 작업 제출 시간

    운영 체제의 경우 전체 직무 이직 성능에 더 관심을 두기 때문에 또 다른 평가 기준인 평균 이직 시간이 확장되었습니다. 평균 이직 시간은 여러 직무 이직 시간의 평균을 나타냅니다.

    평균 처리 시간 = 작업별 처리 시간의 합/작업 수

    직무별로 작업 소요 시간이 클수록 일반적으로 길고, 작업 소요 시간이 작을수록 일반적으로 짧습니다. 따라서 평가 지표가 확장되어 가중 처리 시간이 적용됩니다. 가중 처리 시간은 작업 회전 시간과 작업 회전 시간을 나타냅니다. 비율 실제 실행 시간의.

    가중 처리 시간 = 작업 처리 시간/작업 실제 실행 시간

    가중 처리 시간을 기반으로 또 다른 평가 기준인 평균 가중 처리 시간이 자연스럽게 확장됩니다.

    평균 가중 처리 시간 = 작업별 가중 처리 시간/작업 수

  • 대기 시간

    대기 시간은 프로세스가 설정된 후 서비스가 제공될 때까지 기다리는 시간의 합계를 나타냅니다.

    참고: 대기 시간에는 I/O 장치 작업이 완료되기를 기다리는 시간이 포함되지 않습니다. 왜냐하면 이 시간 동안 프로세스는 I/O 장치에 의해 제공되기 때문입니다.
    대기 시간 = 처리 시간 - 실행 시간

  • 응답 시간

    응답 시간은 사용자가 시스템에 요청을 제출한 후 첫 번째 응답이 생성될 때까지 걸리는 시간을 의미하며, 응답 시간이 짧을수록 사용자 경험이 좋아집니다.

섹션 요약

여기에 이미지 설명을 삽입하세요.

2.3.3.2 선착순 스케줄링 알고리즘
  • 적용 범위

    작업 스케줄링 및 프로세스 스케줄링에 사용할 수 있습니다.

  • 알고리즘 소개

    일상생활에서 물건을 구매하기 위해 줄을 서서 기다리는 것과 마찬가지로 FCFS(선착순 서비스) 스케줄링 알고리즘은 작업이나 프로세스가 도착하는 순서에 따라 서비스를 제공합니다 .

    작업 예약에서 FCFS는 백업 작업 대기열에서 먼저 대기열에 들어가는 하나 이상의 작업을 선택하고 실행을 위해 메모리로 전송합니다.

    프로세스 스케줄링에서 FCFS는 준비 대기열에서 대기열에 들어갈 첫 번째 프로세스를 선택하고 여기에 CPU를 할당한 후 실행되도록 합니다.

  • 선점 가능합니까?

    FCFS는 비선점형 스케줄링 알고리즘입니다.

  • 사례 분석

    시스템에 4개의 프로세스(순수 컴퓨팅 프로세스, 즉 I/O 연산이 없는 프로세스)가 있다고 가정할 때 이들의 도착 시간과 예상 실행 시간은 아래 표와 같다.

    프로세스 도착 시간 예상 실행 시간
    P1 0 8
    P2 4 6
    P3 5 2
    P4 6 6

    FCFS 스케줄링 알고리즘을 사용하면 위 프로세스 각각의 스케줄링 프로세스는 P1->P2->P3->P4 이며 , 2.3.3.1 절의 각 지표 계산 규칙에 따라 위 프로세스 각 지표는 다음과 같이 할 수 있습니다. 아래 표와 같이 계산됩니다.

    프로세스 완료 시간 처리 시간 권리 처리 시간 대기 시간
    P1 0+8=8 8-0=8 8/8=1 8-8=0
    P2 6+8=14 14-4=10 10/6=1.67 10-6=4
    P3 14+2=16 16-5=11 11/2=5.5 11-2=9
    P4 16+6=22 22-6=16 16/6=2.67 16-6=10

    평균 처리 시간=(8+10+11+16)/4=11.25

    평균 가중 처리 시간 = (1+1.67+5.5+2.67)/4=2.71

    평균 대기시간=(0+4+9+10)/4=5.75

    프로세스 P3의 특권 처리 시간 값은 5.5로 다른 세 프로세스보다 훨씬 높다는 것을 알 수 있습니다. 따라서 프로세스 P3은 당연히 짧은 시간 동안만 실행하면 되지만 반드시 실행해야 한다는 의미입니다. 오래 기다리세요. 오래 기다리세요.

  • 장점과 단점

    • 장점: 공정하고 간단한 알고리즘
    • 단점 : 긴 작업(프로세스)에 뒤처지는 짧은 작업은 오랜 시간을 기다려야 하고 처리 시간이 매우 길어서 짧은 작업에 매우 불리합니다. 즉, 긴 작업에는 좋지만 짧은 작업에는 좋지 않습니다. .
  • 기아(작업/프로세스가 오랫동안 제공되지 않음)로 이어질까요?

    대기열에 있는 작업/프로세스는 순서대로 예약되므로 기아 상태가 발생하지 않습니다.

2.3.3.3 단기 작업 우선순위 스케줄링 알고리즘
  • 적용 범위

    작업 스케줄링 및 프로세스 스케줄링에 사용할 수 있습니다.

  • 알고리즘 소개

    FCFS 스케줄링 알고리즘의 단점을 기반으로 사람들은 SJF(Short Job First) 및 SPF(Short Process First) 스케줄링 알고리즘, 즉 짧은 작업(프로세스)에 대한 우선순위 스케줄링을 제안해 왔습니다.

    SJF는 백업 대기열에서 예상 실행 시간이 가장 짧은 하나 이상의 작업을 선택하고 실행을 위해 메모리로 전송합니다.

    SPF는 준비 대기열에서 예상 실행 시간이 가장 짧은 프로세스를 선택하고 여기에 CPU를 할당한 후 실행되도록 합니다.

    최단 남은 시간 우선 알고리즘(SRTN)이라는 짧은 작업 우선순위 스케줄링 알고리즘도 있는데, 이 알고리즘은 프로세스가 준비 큐에 합류하거나 프로세스가 완료될마다 스케줄링되어야 한다. 현재 실행 중인 프로세스의 남은 시간, 새 프로세스는 CPU를 점유하고 현재 실행 중인 프로세스를 준비 상태로 변경합니다.

  • 선점 가능합니까?

    SJF와 SPF는 비선점형 알고리즘이고, SRTN은 선점형 알고리즘입니다.

  • 사례 분석

    시스템에 4개의 프로세스(순수 컴퓨팅 프로세스, 즉 I/O 연산이 없는 프로세스)가 있다고 가정할 때 이들의 도착 시간과 예상 실행 시간은 아래 표와 같다.

    프로세스 도착 시간 예상 실행 시간
    P1 0 8
    P2 4 6
    P3 5 2
    P4 6 6

    SPF 스케줄링 알고리즘을 사용하면 위의 각 프로세스의 스케줄링 프로세스는 P1->P3->P2->P4 이며 , 2.3.3.1 절의 각 지표의 계산 규칙에 따라 위 각 프로세스의 다양한 지표는 아래 표와 같이 계산할 수 있습니다.

    프로세스 완료 시간 처리 시간 권리 처리 시간 대기 시간
    P1 0+8=8 8-0=8 8/8=1 8-8=0
    P2 10+6=16 16-4=12 12/6=2 12-6=6
    P3 8+2=10 10-5=5 5/2=2.5 5-2=3
    P4 16+6=22 22-6=16 16/6=2.67 16-6=10

    평균 처리 시간=(8+12+5+16)/4=10.25

    평균 가중치 처리 시간 = (1+1.67+5.5+2.67)/4=2.0425

    평균 대기 시간=(0+4+9+10)/4=4.75

    SRTN 스케줄링 알고리즘을 사용하면 위의 각 프로세스의 스케줄링 프로세스는 다음과 같다(Pn(m)은 현재 프로세스 Pn의 남은 시간 m을 나타냄).

    시간 0(P1 도착): P1(8)

    시간 4(P2 도착): P1(4) , P2(6)

    시간 5(P3 도착): P1(3), P2(6), P3(2)

    시간 6(P4 도착): P1(3), P2(6), P3(1) , P4(6)

    7개 순간(P3 완료): P1(3) , P2(6), P4(6)

    시간 10(P1 완료): P2(6) , P4(6)

    시간 16(P2 완료): P4(6)

    시간 22(P4 완료), 종료

    2.3.3.1절의 각 지표별 계산규칙에 따르면, 위의 각 과정별 지표는 아래 표와 같이 계산될 수 있다.

    프로세스 완료 시간 처리 시간 권리 처리 시간 대기 시간
    P1 10 10-0=10 10/8=1.25 10-8=2
    P2 16 16-4=12 12/6=2 12-6=6
    P3 7 7-5=2 2/2=1 2-2=0
    P4 22 22-6=16 16/6=2.67 16-6=10

    평균 처리 시간=(10+12+2+16)/4=10

    평균 가중 처리 시간 = (1.25+2+1+2.67)/4=1.73

    평균 대기 시간=(2+6+0+10)/4=4.5

    FCFS, SPF, SRTN 알고리즘의 평균 회전율, 평균 가중 회전율, 평균 대기 시간을 비교해 보면 소요 시간은 FCFS>SPF>SRTN임을 알 수 있다.

  • 장점과 단점

    • 이점

      "가장 짧은" 평균 대기 시간, 평균 처리 시간

    • 결점

      이 알고리즘은 긴 작업에는 해로우며 짧은 작업에는 유리합니다. 짧은 작업이 계속해서 도착하면 긴 작업이 오랫동안 예약되지 않을 수 있습니다.

      작업의 예상 실행 시간은 사용자가 제공하므로 예상 실행 시간은 실제 실행 시간을 나타내지 않으므로 이 알고리즘은 반드시 짧은 작업의 우선 순위 예약을 달성하지 못할 수도 있습니다.

  • 기아(작업/프로세스가 오랫동안 제공되지 않음)로 이어질까요?

    장기간의 직업 기아로 이어질 수 있습니다.

2.3.3.4 고응답률 스케줄링 알고리즘
  • 적용 범위

    작업 스케줄링 및 프로세스 스케줄링에 적합

  • 알고리즘 소개

    FCFS와 SJF 스케줄링 알고리즘의 장단점을 균형 있게 조정하고 각 작업의 대기 시간과 예상 실행 시간을 고려합니다. 작업을 스케줄링할 때 백업 작업 큐에 있는 각 작업의 응답 비율을 먼저 계산하여 다음에서 선택합니다. 응답률이 가장 높은 작업이 실행됩니다.

    응답비율 = (대기시간 + 서비스 소요시간) / 서비스 소요시간

  • 선점 가능합니까?

    비선점형 알고리즘

  • 사례 분석

    시스템에 4개의 프로세스(순수 컴퓨팅 프로세스, 즉 I/O 연산이 없는 프로세스)가 있다고 가정할 때 이들의 도착 시간과 예상 실행 시간은 아래 표와 같다.

    프로세스 도착 시간 예상 실행 시간
    P1 0 8
    P2 4 6
    P3 5 2
    P4 6 6

    높은 응답률 우선순위 스케줄링 알고리즘을 사용하여 위에서 언급한 각 프로세스의 스케줄링 프로세스는 다음과 같다(Pn(m)은 현재 프로세스 Pn의 응답 비율이 m임을 나타냄).

    시간 0에는 P1만 준비 대기열에 도착하고 P1이 실행됩니다.

    8시가 되면 P1이 실행을 마치고 적극적으로 CPU를 포기하는데, 이때 Ready Queue에는 P2(1.67), P3(2.5), P4(1.33), P3이 실행 중입니다.

    10시에 P3는 작업을 완료하고 적극적으로 CPU를 포기하는데, 이때 Ready Queue에는 P2(2), P4(1.67), P2가 실행되고 있습니다.

    16시에 P2는 작업을 완료하고 적극적으로 CPU를 포기하는데, 이때 준비 큐에는 P4만 있고 P4는 실행 중입니다.

    22:00에 P4 작업이 완료되어 종료됩니다.

  • 장점과 단점

    FCFS 알고리즘과 SJF 알고리즘 간의 절충안은 대기 시간과 실행 시간을 고려합니다.

  • 기아(작업/프로세스가 오랫동안 제공되지 않음)로 이어질까요?

    배고픔을 유발하지 않음

2.3.3.5 타임슬라이스 회전 스케줄링 알고리즘
  • 적용 범위

    프로세스 스케줄링에 사용됨

  • 알고리즘 소개

    타임 슬라이스 회전 스케줄링 알고리즘은 주로 시분할 운영 체제에서 사용됩니다 . 시스템은 FCFS 정책에 따라 모든 준비된 프로세스를 준비 대기열에 배열합니다. 스케줄러는 항상 준비 대기열의 첫 번째 프로세스를 선택하여 실행하지만 이 프로세스는 고정된 시간 조각은 하나만 실행할 수 있습니다. 시간 조각이 끝나고 프로세스의 실행이 완료되지 않은 경우 프로세스는 CPU 사용 권한을 박탈당하고 준비 대기열이 끝나면 다시 대기열에 추가됩니다.

  • 선점 가능합니까?

    선점될 수 있으며, 시계 장치는 시계 인터럽트를 발행하여 타임 슬라이스가 도착했음을 CPU에 알립니다.

  • 사례 분석

    시스템에 4개의 프로세스(순수 컴퓨팅 프로세스, 즉 I/O 연산이 없는 프로세스)가 있다고 가정할 때 이들의 도착 시간과 예상 실행 시간은 아래 표와 같다.

    프로세스 도착 시간 예상 실행 시간
    P1 0 8
    P2 4 6
    P3 5 2
    P4 6 6

    使用时间片轮转调度算法进行调度,按照时间片大小分别为2和8来进行分析。

    时间片大小为2时,调度过程如下(Pn(m)表示进程Pn的剩余运行时间m就绪队列(队头…队尾)):

    时刻 就绪队列中的进程情况 CPU分配情况
    0 P1(8) P1
    2 P1(6) P1
    4 P2(6),P1(4) P2
    5 P1(4),P3(2) P2
    6 P1(4),P3(2),P4(6),P2(4) P1
    8 P3(2),P4(6),P2(4),P1(2) P3
    10 P4(6),P2(4),P1(2) P4
    12 P2(4),P1(2),P4(4) P2
    14 P1(2),P4(4),P2(2) P1
    16 P4(4),P2(2) P4
    18 P2(2),P4(2) P2
    20 P4(2) P4
    22 空闲 空闲

    上面的表格的文字描述版本:

    0时刻,就绪队列中的进程情况为(P1(8)),此时让P1运行。

    2时刻,时间片用完,此时就绪队列中的进程情况为(P1(6)),此时继续让P1运行。

    4时刻,P2到达,且时间片刚好用完,此时就绪队列中的进程情况为(P2(6),P1(4)),此时让P2运行。

    5时刻,P3到达,但是时间片没有用完,此时就绪队列中的进程情况为(P1(4),P3(2)),此时P2继续运行。

    6时刻,P4到达,且时间片刚好用完,此时就绪队列中的进程情况为(P1(4),P3(2),P4(6),P2(4)),此时让P1运行。

    8时刻,时间片用完,此时就绪队列中的进程情况为(P3(2),P4(6),P2(4),P1(2)),此时让P3运行。

    10时刻,P3执行结束,且时间片用完,此时就绪队列中的进程情况为(P4(6),P2(4),P1(2)),此时让P4运行。

    12时刻,时间片用完,此时就绪队列中的进程情况为(P2(4),P1(2),P4(4)),此时让P2运行。

    14时刻,时间片用完,此时就绪队列中的进程情况为(P1(2),P4(4),P2(2)),此时让P1运行。

    16时刻,P1执行结束,且时间片用完,此时就绪队列中的进程情况为(P4(4),P2(2)),此时让P4运行。

    18时刻,时间片用完,此时就绪队列中的进程情况为(P2(2),P4(2)),此时让P2运行。

    20时刻,P2执行结束,且时间片用完,此时就绪队列中的进程情况为(P4(2)),此时让P4运行。

    22时刻,P4执行结束,至此所有进程执行完毕。

    时间片大小为8时,调度过程如下(Pn(m)表示进程Pn的剩余运行时间m就绪队列(队头…队尾)):

    时刻 就绪队列中的进程情况 CPU分配情况
    0 P1(8) P1
    4 P2(6) P1
    5 P2(6),P3(2) P1
    6 P2(6),P3(2),P4(6) P1
    8 P2(6),P3(2),P4(6) P2
    14 P3(2),P4(6) P3
    16 P4(6) P4
    22 空闲

    上面的表格的文字描述版本:

    0时刻,就绪队列中的进程情况为(P1(8)),此时让P1运行。

    4时刻,P2到达,时间片没有用完,此时就绪队列中的进程情况为(P2(6)),此时继续让P1运行。

    5时刻,P3到达,时间片没有用完,此时就绪队列中的进程情况为(P2(6),P3(2)),此时继续让P1运行。

    6时刻,P4到达,时间片没有用完,此时就绪队列中的进程情况为(P2(6),P3(2),P4(6)),此时继续让P1运行。

    8时刻,P1执行结束,且时间片用完,此时就绪队列中的进程情况为(P2(6),P3(2),P4(6)),此时让P2运行。

    14时刻,P2执行结束,此时就绪队列中的进程情况为(P3(2),P4(6)),此时让P3运行。

    16时刻,P3执行结束,此时就绪队列中的进程情况为(P4(6)),此时让P4运行。

    22时刻,P4执行结束,至此所有进程执行完毕。

    当时间片为8时,可以看出这四个进程的执行顺序为P1->P2->P3->P4,此种情况与使用FCFS调度算法时的结果是一致的。

    由此,可以知道如果时间片太大,使得每个进程都可以在一个时间片内完成,则时间片轮转调度算法会退化为FCFS调度算法,并且会增大进程响应时间。因此时间片不能太大

    所谓的增大进程响应时间,在此举例说明,若系统中有10个进程在并发执行,且时间片为1秒,则一个进程被响应可能需要等待9秒,即,如果用户在自己的进程的时间片外通过键盘发出调试命令,可能需要等待9秒才能被系统响应,这种用户体验就是极其糟糕的了。

    与此同时,由之前的章节我们已经了解到,进程调度与切换是有时间代价的,因此如果时间片太小,进程调度切换太过于频繁,系统就会花费大量的时间来处理进程切换,就会导致实际用于处理用户进程的时间比例减少,因此时间片也不能太小

    一般来说,时间片要让切换进程的开销占比不超过1%

  • 优缺点

    • 优点

      公平、响应快,适用于分时系统

    • 缺点

      由于高频率的切换进程,因此有一定的系统开销

      无法区分任务的紧急程度

  • 是否会导致饥饿

    不会

2.3.3.6 优先级调度算法
  • 适用范围

    适用于作业调度以及进程调度。

  • 算法介绍

    优先级调度算法中的优先级用于描述作业/进程的紧急程度。

    在作业调度中,每次从后备作业队列中选择优先级最高的一个或几个作业,将它们调入内存。

    在进程调度中,每次从就绪队列中选择优先级最高的一个或几个进程,为其分配CPU。

  • 是否可抢占

    既有抢占式的也有非抢占式的。

    抢占式优先级调度算法,当一个进程正在运行时,若有优先级更高的进程进入就绪队列,则将当前进程暂停,将CPU分配给优先级更高的进程。

    非抢占式优先级调度算法,当一个进程正在运行时,即使有优先级更高的进程进入就绪队列,依旧让当前进程继续运行,直至由于当前进程自身原因让出CPU后,才会将CPU分配给优先级更高的进程。

  • 案例分析

    假设系统中有4个进程(纯计算进程,即没有I/O操作的进程),它们的到达时间、预估运行时间以及优先级如下表所示。

    进程 到达时间 预估运行时间 优先级
    P1 0 8 3
    P2 4 6 2
    P3 5 2 1
    P4 6 6 2

    使用非抢占式优先级调度算法时,运行情况如下:

    0时刻,只有P1到达,此时运行P1

    8时刻,P1运行完毕,此时就绪队列中有P2、P3、P4。P3优先级最高,让P3运行。

    10时刻,P3运行完毕,此时就绪队列中有P2、P4,此时虽然P2和P4的优先级一致,但是P2比P4更早进入就绪队列,因此让P2运行。

    16时刻,P2运行完毕,此时就绪队列只有P4,让P4运行。

    22时刻,P4运行完毕,所有进程执行结束。

    使用抢占式优先级调度算法时,运行情况如下(Pn(m)表示进程Pn的剩余运行时间m):

    0时刻,只有P1(8)到达,此时运行P1

    4时刻,P2(6)到达,且优先级比P1高,此时就绪队列中进程情况为(P2(6))此时让P2运行,将P1重新放回就绪队列。

    5时刻,P3到达,此时就绪队列中进程情况为(P1(4)、P3(2)),由于P3的优先级比P2的优先级高,因此让P3运行。

    6时刻,P4到达,此时就绪队列中进程情况为(P1(4),P2(5),P4(6)),由于此时P3的优先级依旧是最高的,因此继续让P3运行。

    7时刻,P3运行结束,此时就绪队列中进程情况为(P1(4),P2(5),P4(6)),由于此时P2与P4的优先级相同,并且比P1高,并且P2先到达就绪队列,因此让P2运行。

    12时刻,P2运行结束,此时就绪队列中进程情况为(P1(4),P4(6)),由于此时P4的优先级最高,让P4运行。

    18时刻,P4运行结束,此时就绪队列中进程情况为(P1(4)),让P1运行。

    22时刻,P1运行结束,所有进程执行结束。

  • 优缺点

    • 优点

      用优先级区分紧急程度,适用于实时操作系统。

    • 缺点

      若不断地有高优先级的进程到来,可能会导致饥饿

  • 是否会导致饥饿

    可能会导致饥饿

  • 优先级

    • 优先级分类

      优先级可分为两种:动态优先级、静态优先级。

      动态优先级是指在进程运行过程中,根据进程情况的变化动态调整优先级,主要依据有CPU的占用时长,就绪进程等待CPU的时长等。

      静态优先级是指在创建进程时就确定了,且在进程的整个运行期间保持不变,主要依据有进程类型、进程对资源的要求、用户要求等。

    • 优先级设置的原则

      1. 系统进程>用户进程,系统进程作为系统的管理者,应该拥有更高的优先级
      2. 交互型进程>非交互型进程(前台进程>后台进程)
      3. I/O型进程>计算机型进程,I/O型进程是指会频繁使用I/O设备的进程,计算机型进程是指会频繁使用CPU的进程(很少使用I/O设备),由于I/O设备可以与CPU并行运行,因此若将I/O型进程的优先级设置得更高,就可以使I/O设备更多地和CPU并行,提高系统的整体效率。
2.3.3.7 多级反馈队列调度算法
  • 适用范围

    用于进程调度

  • 算法介绍

    多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合与发展,在该算法中,通过动态地调整进程优先级和时间片的大小,来达到兼顾多个方面的系统目标。

    具体思想:

    1. 设置多个就绪队列,为每个队列赋予不同的优先级,第1级队列的优先级最高,第2级的队列优先级次之,以此类推至后续队列。

    2. 为每个队列的进程赋予不同大小的时间片,优先级越高的队列,时间片越小。

    3. 在每个队列中采用FCFS调度算法,当新进程进入内存后,首先将它放入第1级队列的末尾,按照FCFS原则等待调度。当轮到该进程执行时,如果它能够在给予的时间片内完成,则该进程就正常的执行完毕,否则,调度程序会将它转入第2级队列的末尾继续按照FCFS原则等待调度,若它在第2级队列的时间片内依旧未完成,就会被转入第3级队列,以此类推,当该进程被转入最后的第n级队列后,在第n级队列中便采用时间片轮转调度算法进行调度(因为此时已经没有更低优先级的队列了)。

    4. 按队列的优先级进行调度,只有第1级队列为空时,才会调度第2级队列中的进程,即,仅当第k级队列为空时,才会调度第k+1级队列中的进程。如果正在执行第k级队列中的某个进程时,系统有一个新的进程进入了更高优先级的队列时,就会立即把正在运行的进程放回到第k级队列中,把CPU分配给新进入的进程。

      具体规则稍微有些复杂,各位同学最好结合后面的案例分析来进行理解。

  • 是否可抢占

    是抢占式算法

  • 案例分析

    假设系统中有4个进程(纯计算进程,即没有I/O操作的进程),它们的到达以及预估运行时间如下表所示。

    进程 到达时间 预估运行时间
    P1 0 8
    P2 4 6
    P3 5 2
    P4 6 6

    并且,在系统中设置了三个优先级队列,分别是第1级队列、第2级队列、第3级队列,其时间片大小分别是1、2、4。

    使用多级反馈队列调度算法后,这些进程的执行情况如下(Pn(m)表示进程Pn的剩余运行时间m):

    0时刻,P1(8)进入第1级队列,执行P1。

    此时队列中的进程情况为:第1级队列[P1(8)],第2、3级队列为空。

    1时刻,P1(7)时间片用完,此时P1会进入第2级队列的队尾,此时由于第1级队列中没有任何进程,系统继续执行P1。

    此时队列中的进程情况为:第1、3级队列为空,第2级队列[P1(7)]。

    3时刻,P1(5)时间片用完,此时P1会进入第3级队列的队尾,此时由于第1、2级队列中没有任何进程,系统继续执行P1。

    此时队列中的进程情况为:第1、2级队列为空,第3级队列[P1(5)]。

    4时刻,P1(4)时间片没有用完,但是,这是P2(4)进入第1级队列,因此P1被重置到第3级队列队尾,系统执行P2。

    此时队列中的进程情况为:第1级队列[P2(4)],第2级队列为空,第3级队列[P1(4)]。

    5时刻,P2(5)时间片用完,且P3(2)进入第1级队列,此时P2进入第2级队列,执行P3。

    此时队列中的进程情况为:第1级队列[P3(2)],第2级队列[P2(5)],第3级队列[P1(4)]。

    6时刻,P3(1)时间片用完,且P4(6)进入第1级队列,此时P3进入第2级队列队尾,执行P4。

    此时队列中的进程情况为:第1级队列[P4(6)],第2级队列[P2(5),P3(1)],第3级队列[P1(4)]。

    7时刻,P4(5)时间片用完,进入第2级队列队尾,此时第1级队列为空,第2级队列的队头为P2,系统执行P2。

    此时队列中的进程情况为:第1级队列为空,第2级队列[P2(5),P3(1),P4(5)],第3级队列[P1(4)]。

    9时刻,P2(3)时间片用完,进入第3级队列队尾,此时第1级队列为空,第2级队列的队头为P3,系统执行P3。

    此时队列中的进程情况为:第1级队列为空,第2级队列[P3(1),P4(5)],第3级队列[P1(4),P2(3)]。

    10时刻,P3执行完毕,此时第1级队列为空,第2级队列的队头为P4,系统执行P4。

    此时队列中的进程情况为:第1级队列为空,第2级队列[P4(5)],第3级队列[P1(4),P2(3)]。

    12时刻,P4(3)时间片用完,进入第3级队列队尾,此时第1、2级队列为空,第3级队列队头为P1,系统执行P1。

    此时队列中的进程情况为:第1、2级队列为空,第3级队列[P1(4),P2(3),P4(3)]。

    16时刻,P1执行完毕,此时第1、2级队列为空,第3级队列队头为P2,系统执行P2。

    此时队列中的进程情况为:第1、2级队列为空,第3级队列[P2(3),P4(3)]。

    19:00에 P2가 실행되는데 이때 첫 번째와 두 번째 수준 대기열은 비어 있고 세 번째 수준 대기열의 선두는 P4이며 시스템은 P4를 실행합니다.

    이때, 큐에 있는 프로세스의 상태는 첫 번째와 두 번째 레벨 큐가 비어 있고, 세 번째 레벨 큐[P4(3)]입니다.

    22:00에 P4가 완료되고 모든 프로세스가 실행됩니다.

  • 장점과 단점

    • 이점

      • 모든 유형의 프로세스에 대해 상대적으로 공평함(선착순 스케줄링 알고리즘의 장점)
      • 새로 도착한 각 프로세스는 신속하게 응답을 얻을 수 있습니다(타임 슬라이스 라운드 로빈 스케줄링 알고리즘의 장점)
      • 짧은 프로세스를 더 짧은 시간에 완료할 수 있습니다. (짧은 프로세스 우선순위 스케줄링 알고리즘의 장점)
    • 결점

      알고리즘 구현이 더 복잡함

  • 배고픔을 불러일으킬까

    기아를 유발합니다(짧은 프로세스가 항상 도착하면 우선순위가 낮은 대기열에 있는 긴 프로세스의 기아로 이어질 것입니다).

2.3.3.8 다양한 스케줄링 알고리즘의 비교 및 ​​요약
알고리즘 이름 선점 가능합니까? 이점 결점 적용 범위 기본 결정 모드
선착순 비선점형 공정하고 구현이 간단함 단기 근무에는 적합하지 않음 일괄 처리 시스템 비선점형
단기 일자리 우선 선점형과 비선점형 모두 평균 대기 시간이 가장 적고 효율성이 가장 높습니다. (여기에는 남은 시간이 가장 짧은 우선 순위 알고리즘이 기본적으로 포함되어 있습니다.) 긴 작업은 기아 상태가 되며 예상 실행 시간을 결정하기 어렵습니다. 작업 스케줄링, 일괄 처리 시스템 비선점형
높은 응답률 우선순위 비선점형 긴 과제와 짧은 과제의 균형을 유지하세요 응답 비율을 계산하는 데 비용이 많이 듭니다. 시간 공유 시스템 비선점형
시간 조각 회전 선제적 공정하고 빠른 응답, 시분할 시스템에 적합 프로세스를 자주 전환하면 추가 오버헤드가 발생합니다. 시간 공유 시스템 선제적
우선순위 스케줄링 알고리즘 선점형과 비선점형 모두 실시간 운영 체제에 적합한 우선순위를 사용하여 긴급성을 구분합니다. 배고픔을 유발할 수 있다 실시간 시스템 비선점형
다단계 피드백 대기열 선점형(반드시 각 대기열 내에 있을 필요는 없음) 긴 작업과 짧은 작업을 모두 고려하여 응답 시간이 좋고 타당성이 뛰어납니다. 알고리즘이 더 복잡해졌습니다. 만능인 선제적

섹션 요약

여기에 이미지 설명을 삽입하세요.
계속…

참고자료

"2023년 운영체제 대학원 입학시험 검토 안내"-왕다오포럼

이 글이 도움이 되셨다면 좋아요, 전달, 저장 부탁드립니다~

추천

출처blog.csdn.net/weixin_42584100/article/details/127831572