선점(컴퓨팅)

Preemption (computing)

컴퓨팅에서 선점이란 나중에 다시 시작할 목적으로 실행 작업일시적으로 방해하는 행위를 말한다.이 인터럽트는 외부 스케줄러에 의해 수행되며, 업무 지원이나 협조 없이 수행된다.[1]: 153 이 선제적 스케줄러는 보통 가장 특권이 있는 보호 링에서 실행되는데, 이는 중단과 재개를 매우 안전한 작업으로 간주한다는 것을 의미한다.프로세서의 현재 실행 중인 작업에서 이러한 변경을 컨텍스트 전환이라고 한다.

사용자 모드 및 커널 모드

주어진 시스템 설계에서 시스템에 의해 수행되는 일부 운영은 선점할 수 없다.이는 일반적으로 커널 기능과 서비스 중단에 적용되며, 이러한 중단은, 완료까지 실행이 허용되지 않을 경우, 경기 상황을 초래하여 교착 상태를 초래하는 경향이 있다.커널 기능을 처리하는 동안 스케줄러가 작업을 선점하는 것을 금지하면 커널 설계가 시스템 응답성을 희생시키면서 단순화된다.시스템 내에서 권한 수준을 결정하는 사용자 모드커널 모드의 구별은 작업이 현재 선점 가능한지 여부를 구별하는 데도 사용될 수 있다.

대부분의 현대적 운영체제는 커널모드에 있을 때에도 작업을 선점할 수 있도록 고안된 선제적 커널을 가지고 있다.이러한 운영 체제의 예로는 Solaris 2.0/SunOS 5.0,[2] Windows NT, Linux 커널(2.5.4 이상),[3] AIX 및 일부 BSD 시스템(버전 5 이후 NetBSD)이 있다.

선제적 멀티태스킹

선제적 멀티태스킹이란 용어는 업무 선점을 허용하는 멀티태스킹 운영체제를 시스템 자원이 필요하지 않을 때 양보하도록 명시적으로 프로그램해야 하는 협동적 멀티태스킹 시스템과 구별하기 위해 사용된다.

간단히 말해, 선제적 멀티태스킹은 현재 실행 중인 프로세스를 중단하고 스케줄러를 호출하여 다음에 실행해야 할 프로세스를 결정하는 인터럽트 메커니즘의 사용을 포함한다.따라서 모든 프로세스는 주어진 시간에 어느 정도의 CPU 시간을 얻게 될 것이다.

선제적 멀티태스킹에서 운영체제 커널컨텍스트 스위치를 개시하여 스케줄링 정책의 우선적 제약을 충족시킬 수 있으므로 활성 작업을 선점할 수 있다.일반적으로 선점이란 "압류 전"을 의미한다.해당 인스턴스의 높은 우선순위 태스크가 현재 실행 중인 태스크를 포착하면 이를 사전 예약이라고 한다.

"선제적 멀티태스킹"이라는 용어는 때때로 의도된 의미가 더 구체적일 때 잘못 사용되기도 하며, 대신 시간 공유 스케줄링 또는 시간 공유로 알려진 스케줄링 정책의 클래스를 가리킨다.

선제적인 멀티태스킹은 컴퓨터 시스템이 각 프로세스의 정기적인 "슬라이스"를 보다 안정적으로 보장할 수 있게 해준다.그것은 또한 시스템이 수신 데이터와 같은 중요한 외부 사건을 신속하게 처리할 수 있도록 해주는데, 이것은 하나 또는 다른 프로세스의 즉각적인 주의가 필요할 수 있다.

언제라도 특정 시간에 프로세스는 입력 또는 출력을 기다리는 프로세스("I/O 바운드"라고 함)와 CPU를 충분히 활용하고 있는 프로세스("CPU 바운드")의 두 가지 범주로 분류할 수 있다.초기 시스템에서는 프로세스가 요청된 입력(예: 디스크, 키보드 또는 네트워크 입력)을 기다리는 동안 "poll" 또는 "busy-wait"하는 경우가 많았다.이 기간 동안 이 프로세스는 유용한 작업을 수행하지 않고 여전히 CPU에 대한 완전한 제어를 유지하고 있었다.인터럽트와 선제적 멀티태스킹의 출현으로, 이러한 I/O 바인딩 프로세스는 필요한 데이터가 도착할 때까지 "차단"되거나 보류되어 다른 프로세스가 CPU를 활용할 수 있게 되었다. 요청된 데이터의 도착으로 인해 인터럽트가 발생하므로 차단된 프로세스는 적시에 실행으로 복귀할 수 있다.

멀티태스킹 기술은 원래 여러 사용자가 하나의 기계를 공유할 수 있도록 개발되었지만, 곧 사용자 수에 관계없이 멀티태스킹이 유용하다는 것이 명백해졌다.메인프레임에서 단일 사용자 개인용 컴퓨터와 무사용자 제어 시스템(로봇 우주선처럼)에 이르기까지 많은 운영체제는 다양한 이유로 멀티태스킹 지원의 유용성을 인식해왔다.멀티태스킹은 한 명의 사용자가 동시에 여러 응용프로그램을 실행하거나, 컴퓨터의 제어권을 유지하면서 "백그라운드" 프로세스를 실행할 수 있게 한다.

타임슬라이스

사전 다중 작업 시스템에서 프로세스가 실행될 수 있는 기간을 일반적으로 시간 조각 또는 양자라고 한다.[1]: 158 스케줄러는 슬라이스마다 한 번씩 실행되어 실행할 다음 프로세스를 선택한다.각 시간 조각의 길이는 시스템 성능과 프로세스 응답성의 균형을 맞추는 데 매우 중요할 수 있다. 시간 조각이 너무 짧으면 스케줄러는 처리 시간을 너무 많이 소비하지만, 시간 조각이 너무 길면 입력에 응답하는 데 프로세스가 더 오래 걸릴 것이다.

인터럽트는 시간 슬라이스가 만료될 때 운영 체제 커널이 프로세스 간에 전환되도록 스케줄링되어 있어 프로세서의 시간을 여러 작업 간에 효과적으로 공유할 수 있게 되어, 이러한 작업을 병렬(동시적으로) 처리하는 것처럼 착각하게 된다.이러한 설계를 제어하는 운영체제를 멀티태스킹 시스템이라고 한다.

시스템 지원

오늘날, 현재 버전의 Windows, MacOS, Linux(Android 포함), iOS를 포함한 거의 모든 운영 체제는 선제적인 멀티태스킹을 지원한다.

선제적 멀티태스킹을 특징으로 하는 홈 유저들이 이용할 수 있는 가장 초기 운영체제로는 싱클레어 QDOS(1984년[4])와 아미가 OS(1985년)가 있었다.이 둘 다 메모리 관리 없이 모토로라 68000 제품군 마이크로프로세서에서 작동했다.아미가 OS는 동일한 플랫 어드레스 공간에 있는 모든 프로세스를 선제적으로 멀티태스킹하기 위해 다시 연결 가능한 코드 블록("아미가 용어의 hunks")의 동적 로드를 사용했다.

MS-DOS, PC DOS 등 초기 PC 운영체제는 멀티태스킹을 전혀 지원하지 않았지만 MP/M-86(1981)과 Concurrent CP/M-86 등 대체 운영체제는 선제적 멀티태스킹을 지원했다.MINIXCoistent를 포함한 다른 Unix 유사 시스템은 1980년대 PC에서 선제적인 멀티태스킹을 제공했다.

선제적 멀티태스킹/멀티스레딩을 기본적으로 지원하는 이후 DOS 버전에는 Concurrent DOS, Multiuser DOS, Novell DOS(Caldera OpenDOSDR-DOS 5.02 이상이라고 하는 라이터)가 포함된다.Concurrent DOS 386 이후, 그들은 또한 가상 DOS 기계에서 동시에 여러 DOS 프로그램을 실행할 수 있었다.

제한된 형태의 선제적 멀티태스킹을 지원하는 윈도 초기 버전은 윈도/386 2.0으로, 인텔 80386가상 8086 모드를 사용하여 일반적으로 "DOS 박스"로 알려진 가상 8086 시스템에서 DOS 애플리케이션을 실행했는데, 이 모드는 선점될 수 있다.윈도 95, 98, 미에서는 32비트 어플리케이션을 각각 별도의 주소 공간에서 실행하여 선제적으로 만들었지만, 16비트 어플리케이션은 역호환성을 위해 협력 관계를 유지했다.[5]윈도우즈 3.1x(보호 모드)에서는 커널과 가상 디바이스 드라이버가 선제적으로 실행되었지만, 16비트 애플리케이션은 모두 비선호적이며 동일한 주소 공간을 공유했다.

선제적 멀티태스킹은 항상 윈도 NT(모든 버전), OS/2(원래 애플리케이션), 유닉스 및 유닉스 유사 시스템(Linux, BSD, macOS ), VMS, OS/360, 그리고 학술 및 중대형 비즈니스 시장에서 사용하도록 설계된 많은 다른 운영 체제에서 지원되어 왔다.

비록 계획이 선제적인 모델(한정된 sense[6]비록에서 선제 API맥 OS9에서가 존재했다면,)에 협동 다중 작업은 고전적인 맥 OS에서 발견된 업그레이드를 한다면 이러한 맥 OSX에 찬성하(지금 macOS라고 불리는)는 오래 된 맥 시스템 스타일과 NeXTSTEP의 하이브리드 카로로 한 것이다 운영 체제 폐기되었다.엄마.ch 커널 및 부분적으로는 Unix와 같은 선제적 멀티태스킹을 제공했던 BSD에서 파생되었다.

참고 항목

참조

  1. ^ a b Tanenbaum, Andrew (2015). Modern operating systems. Boston: Pearson. ISBN 0-13-359162-X. OCLC 870646449.
  2. ^ Khanna, S.; Sebree, M.; Zolnovsky, J. "Realtime scheduling in SunOS 5.0". Proceedings of the USENIX Winter Conference, 1992: 375–390.
  3. ^ "Release notes for v2.5.4". The Linux Kernel Archives. Linux Kernel Organization, Inc. Retrieved 2021-07-03.
  4. ^ "QL History FAQ: Firmware".
  5. ^ "How 16-Bit and 32-Bit Programs Multitask in Windows 95 (Q117567)". Archived from the original on 2008-01-17. Retrieved 2008-01-17.
  6. ^ "Re: newbie question: What is a Blue Task". Archived from the original on 2007-10-13. Retrieved 2007-03-29.