멀티 태스킹 작동 방식


15

나는 운영 체제의 내부 작동에 대해 완전히 단서가 없지만 많은 기능의 대략적인 동작을 추측 할 수 있습니다. 그래도 알아낼 수없는 것은 멀티 태스킹입니다.

이론적으로 운영 체제는 CPU가 실행하는 다양한 프로그램에 대해 작은 간격으로 시간을 관리합니다. 그러나 이것이 실제로 어떻게 작동 하는지는 명확하지 않습니다 .

운영 체제에서 프로그램을 시작하려고한다고 가정하십시오. 머신 코드는 특정 주소에서 시작하여 RAM 어딘가에로드됩니다. 그런 다음 해당 주소로 점프해야 코드가 실행될 수 있다고 생각합니다. 그러나 이런 식으로 OS는 내가 되돌아 갈 때까지 제어권을 다시 얻지 못합니다.

기본적 으로이 작업을 수행하는 두 가지 방법을 상상할 수 있지만 실제로는 적합하지 않은 것 같습니다.

  • 운영 체제는 직접 수행하지 않고 수행하려는 기계 명령어를 읽고 에뮬레이션 할 수 있습니다. 이것이 어떻게 작동하는지 모르기 때문에 의도적으로 모호합니다.하지만 프로그램 속도가 상당히 느려질 것 같습니다.

  • 또는 운영 체제가 시스템 호출을 기다릴 수 있습니다. 그 순간 그것은 통제력을 회복하고 내가 얼마나 오랫동안 달리고 있는지 확인하고 시분할을 할 수 있습니다. 이것은 작동 할 수 있지만 시스템 호출을 포함하지 않고 오랫동안 모든 것을 중단시키는 긴 계산을 할 수 있기 때문에 신뢰할 수없는 것 같습니다.

따라서 메커니즘이 잘 작동하지 않는 것 같습니다. 멀티 태스킹은 실제로 어떻게 수행됩니까?


당신의 추측은 정확하지 않지만, 당신이 지적하는 문제는 "그렇습니다."시스템 호출을 포함하지 않고 한동안 모든 것을 중단시키는 긴 계산을 할 수 있습니다. "
jhocking

찾아야 할 키워드 :interrupt
SK-logic

예, 그러나 누가 인터럽트를 시작합니까? 내 코드가 실행 중이면 OS에서 INT명령 을 실행할 방법이 없습니다 . 뭔가 아직도 나에게 신비
Andrea

@Andrea, harware clock이 인터럽트를 트리거합니다. 그렇게 간단합니다. en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic

좋아, 이제 알겠다 따라서 올바르게 이해하면 하드웨어 기반 기능이며 OS에서 구현할 수있는 기능이 아닙니다.
Andrea

답변:


21

OS는 몇 마이크로 초 (또는 시스템 속도에 따라 밀리 초)마다 작동하도록 타이머를 프로그래밍합니다. 이 타이머는 하드웨어 인터럽트를 발생시켜 CPU가 현재 수행중인 작업을 중지하고 모든 내용을 스택에 덤프하고 인터럽트 컨트롤러가 제공 한 주소로 표시된 인터럽트 루틴을 처리합니다. 이 루틴은 스택 및 기타 다양한 변수를 검사하여 다음에 실행중인 프로세스를 다시 조치로 결정할 수 있습니다. 동일한 프로세스 인 경우 인터럽트 루틴이 반환됩니다. 다른 것이면 스택의 관련 부분이 저장되고 이전에 중단 된 프로세스의 내용으로 교체되므로 인터럽트 루틴이 반환되면 해당 프로세스가 계속됩니다. 시간이 지났다는 사실 외에는

이것은 (현대 CPU의 경우) 매우 단순화 된 버전의 일이지만 원리를 설명합니다. 이러한 OS 제어 인터럽트 외에도 외부 이벤트 (마우스, 키보드, 직렬 포트, 네트워크 포트 등)로 인해 발생하는 인터럽트가 있습니다.이 이벤트는 일반적으로 이벤트 처리기에 연결되는 별도의 인터럽트 루틴으로 처리됩니다.

종종 프로세스 / 태스크 / 컨텍스트 전환은 외부 리소스의 가용성을 기반으로합니다. 일반적으로 스토리지의 데이터가 필요한 프로세스 (예 : RAM이 아님)는 요청을 대기열에 놓고 하드웨어 인터럽트에 대한 이벤트 처리기를 설정하여 요청이 처리되었음을 나타내는 이벤트 처리기를 설정 한 다음 작업 스케줄러에 대한 제어 권한을 포기합니다. 대기 중). 다시 한 번, 실제로 진행되는 작업에 대한 매우 간단한 설명이지만이 답변의 목적에 부합해야합니다.


5

시스템마다 다릅니다.

선점 형 멀티 태스킹 시스템 (예 : 원래 Oberon 또는 원래 Apple Macintosh)에서 운영 체제는 정기적으로 모든 작업을 "폴링"하여 작업 할 수있는 기회를 제공합니다. 작업은 잘 어울릴 것으로 예상됩니다. 그들이해야 할 일이 조금만 있다면, 그렇게하고 OS로 돌아갑니다. 하나의 작업에 수행해야 할 BIG 청크가 있으면이를 작은 조각으로 나누고 폴링 될 때마다 작은 조각을 작동해야합니다.

하드웨어 인터럽트 (디스크 드라이브 DMA 완료, 직렬 포트 인터럽트, 가지고있는 것)로 인해 인터럽트 루틴이 실행됩니다. 이러한 인터럽트 루틴은 작업이 다음에 실행될 때 수행 될 작업을 작업에 알릴 수 있습니다.

비선 점형 멀티 태스킹 시스템에서 인터럽트 발생 또는 비 발생은 인터럽트 루틴이 완료된 후 실행중인 작업에 영향을 미치지 않습니다.

선점 형 멀티 태스킹 시스템에서 인터럽트 루틴이 스케줄링 변경을 강제 할 수 있습니다. 기존의 라운드 로빈 선점 형 멀티 태스킹 시스템에서는주기적인 타이머 인터럽트가이를 수행합니다. 타이머 인터럽트가 발생하면 타이머 인터럽트 루틴은 흑 마법을 사용하여 인터럽트에서 복귀 명령이 실행중인 작업이 아닌 운영 체제의 선점 일정으로 돌아가 프로세서를 현재 작업에서 빼내고 (가능한 경우) ) 다른 작업에 제공합니다. 이 시점에서 다른 작업을 실행할 준비가되지 않은 경우 현재 작업은 시간을 잃어버린 프로세서를 다시 가져옵니다.

선점 형 멀티 태스킹으로 인해 많은 문제가 발생할 수 있습니다. 뮤텍스와 중요한 섹션에 대한 성가신 것들과 치명적인 포용과 우선 순위 반전 및 ... 프로세서가 경고없이 당신에게서 멀어 질 때 나타납니다. 니트로 글리세린을 혼합하는 도중에 프로세서를 사용자에게서 빼내려면 운영 체제에 알리기 위해 이러한 모든 것들을 사용해야합니다.


경고없이 프로세서를 빼앗 으면 어떤 나쁜 일이 일어날 수 있습니까? 레지스터에서 동일한 값으로 프로세서를 다시 제어 할 수 있다고 생각합니다. 계산을 유지하는 것과 어떻게 다른가요?
Andrea

@Andrea : 상호 배제와 중요한 부분은 중요한 순간에 프로세서를 잃지 않는 것에 관한 것입니다. 프로세스에 잠겨있는 것이 있고 프로세서를 잃어버린 경우 프로세서를 다시 얻을 때까지 해당 항목이 잠겨 있습니다. 문제가 발생할 수 있습니다.
John R. Strohm 2016 년

@Andrea 프로세서를 다시 제어 할 수 있으며 다른 프로세스에서 사용하려고하는 메모리가 부족할 수 있습니다.
user253751

4

CPU를 인터럽트하기 위해 컴퓨터 하드웨어에서 타이머 인터럽트를 생성 할 수 있습니다. 이러한 방식으로 운영 체제에서 사용하는 예약 알고리즘을 기반으로 OS는 현재 프로그램을 계속 실행할지 또는 실행할 준비가 된 다른 프로그램으로 컨텍스트 스위치 를 계속 실행할지 결정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.