다중작업
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
다중작업은 컴퓨터가 여러 작업을 동시에 처리하는 능력을 의미한다. 역사를 통해 CPU 시간 낭비를 줄이기 위해 개발되었으며, 초기에는 여러 프로그램들을 메모리에 로드하여 CPU 활용도를 높이는 멀티프로그래밍 시스템이 등장했다. 멀티태스킹은 크게 운영체제가 CPU 시간을 강제로 제어하는 선점형 멀티태스킹과 응용 프로그램이 자발적으로 CPU 제어권을 양보하는 협력적 멀티태스킹으로 나뉜다. 관련 기술로는 스레딩, 메모리 보호, 메모리 스와핑 등이 있으며, 한국에서는 상표권 분쟁이 발생하기도 했다.
CPU에 비하여 주변장치들은 상대적으로 매우 느렸다. 컴퓨터가 주변장치에 접근해야 하는 프로그램을 실행시키면 CPU는 아무것도 하지 못하고, 주변장치가 데이터 처리를 완료해 줄 때까지 기다려야 했다. 전산학 발전 초기 단계에서 CPU 시간은 매우 귀중한 자원이었기 때문에 이러한 CPU 시간의 낭비는 매우 비효율적으로 보였다.
멀티태스킹은 크게 '''선점형 멀티태스킹'''과 '''협력적 멀티태스킹''' 두 가지로 나뉜다. 선점형 멀티태스킹은 운영 체제가 CPU 시간을 강제로 제어하는 방식이고, 협력적 멀티태스킹은 응용 프로그램이 자발적으로 CPU 제어권을 양보하는 방식이다. 각 유형에 대한 자세한 설명은 해당 하위 섹션을 참고하면 된다.
2. 역사
이러한 낭비를 막기 위해 1960년대가 되면서 최초의 멀티 프로그래밍 시스템을 개발하려는 움직임이 있었다. 이 시스템에서는 몇 개의 서로 다른 프로그램들이 컴퓨터의 메모리에 불러들여진다. 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런 식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.
멀티프로그래밍은 프로그램이 적절한 시간 안에 완료되는 것을 보장해주지는 못한다. 아주 먼 옛날의 프로그램도 주변장치에 접근할 필요 없이 몇 시간이고 잘 동작하였다. 이러한 컴퓨터 환경은 활성화된 단말기 앞에 사용자가 결과를 확인하기 위해서 대기하고 있지만 않다면 특별한 문제가 없었다. 사용자는 단지 컴퓨터를 조작하는 사람에게 천공카드 한 묶음(프로그램)을 건네주고 떠났다가, 몇 시간 후 출력된 결과를 확인하기 위해 다시 돌아오면 되기 때문이다. 멀티 프로그래밍은 여러 개의 순차 프로그램들이 처리될 때 대기 시간을 크게 줄여주었다.[4][5]
가상 메모리 및 가상 머신 기술의 등장으로 다중 프로그래밍의 사용은 향상되었으며, 이를 통해 개별 프로그램은 다른 동시 실행 프로그램이 실질적으로 존재하지 않는 것처럼 메모리 및 운영 체제 리소스를 사용할 수 있게 되었다.
컴퓨터는 프로세서(CPU), 기억 장치, 디스플레이나 키보드 등의 휴먼 머신 인터페이스, 네트워크 인터페이스 등으로 구성된다. 일반적으로 CPU의 계산 처리 시간에 비해 디스크나 네트워크의 처리 시간은 수십 배에서 수백 배가 걸린다. 싱글 태스크 환경에서는 순차 처리가 이루어지기 때문에 입력 대기나 통신 대기 등 CPU가 계산을 실행하지 못하고 기다리는 시간이 발생한다. 멀티태스킹의 도입으로 이러한 대기 시간 동안 CPU를 동작시켜 다른 계산을 수행하여 전체 처리 시간 단축을 실현할 수 있다. 또한, 병렬 프로그래밍 기법을 활용하여 기능을 태스크로 분할함으로써 소프트웨어의 재사용성을 높일 수 있다.
CPU가 하나뿐인 컴퓨터에서는 특정 순간에는 하나의 처리만 실행할 수 있다. 그러나 CPU의 처리 시간을 수십 밀리초와 같은 짧은 시간으로 나누어 태스크 간에 하나의 CPU를 순서대로 사용함으로써 사용자가 보기에는 여러 애플리케이션 (태스크·프로세스)이 동시에 실행되는 것처럼 보인다.
태스크 전환의 오버헤드나 캐시 및 TLB의 미스율 상승 등의 비용이 들지만, 입출력 대기 등으로 특정 태스크의 실행이 중단되어도 다른 태스크가 실행되므로 전체적으로 처리량 증가를 기대할 수 있다.
또한, 태스크라는 단위보다 사용자 단위로 "1대의 컴퓨터를 시분할로 공유한다"는 점에 주안점을 둔 용어로 "시분할 시스템"이 있다.
2. 1. 초기 멀티프로그래밍 시스템
컴퓨팅 초창기에는 CPU 시간이 비쌌고, 주변장치는 매우 느렸다. 컴퓨터가 주변 장치에 접근해야 하는 프로그램을 실행할 때, CPU(중앙처리장치)는 주변 장치가 데이터를 처리하는 동안 프로그램 명령 실행을 중단해야 했다. 이는 일반적으로 매우 비효율적이었다.[3] 다중 프로그래밍은 여러 프로그램을 컴퓨터의 메모리에 동시에 로드하고 실행할 수 있도록 하는 컴퓨팅 기술로, CPU가 프로그램 간에 빠르게 전환할 수 있게 해준다. 이는 CPU가 작업 실행에 관여하도록 유지함으로써 CPU 활용도를 최적화하며, 특히 한 프로그램이 입출력(I/O) 작업 완료를 기다릴 때 유용하다.[3]
1957년에 설계되어 1960년에 처음 출시된 불 감마 60(Bull Gamma 60)은 다중 프로그래밍을 염두에 두고 설계된 최초의 컴퓨터였다. 이 아키텍처는 중앙 메모리와 최대 25개의 자율 처리 장치에 코드와 데이터를 제공하는 프로그램 배포기를 특징으로 했으며, 여러 클러스터의 동시 작동을 허용했다.[3]
1961년에 처음 출시된 LEO III는 일괄 처리 중에 여러 다른 프로그램이 컴퓨터 메모리에 로드되었고, 첫 번째 프로그램이 실행되기 시작했다. 첫 번째 프로그램이 주변 장치를 기다리는 명령에 도달하면, 이 프로그램의 문맥이 저장되고, 메모리 속의 두 번째 프로그램이 실행될 기회를 얻었다. 이 과정은 모든 프로그램이 실행을 완료할 때까지 계속되었다.[3]
2. 2. 협력적 멀티태스킹
초창기 멀티태스킹 시스템은 애플리케이션들이 자발적으로 서로에게 시간을 양보하는 방식을 사용했다. 이 방식은 오늘날 협력적 멀티태스킹으로 알려져 있다. 현재는 CICS나 JES2 서브시스템과 같은 특정 애플리케이션을 제외하고는 대규모 시스템에서 거의 사용되지 않지만, 한때 마이크로소프트 윈도우와 클래식 Mac OS에서 여러 애플리케이션을 동시에 실행할 수 있도록 하는 유일한 스케줄링 방식이었다. 협력적 멀티태스킹은 오늘날에도 RISC OS 시스템에서 사용되고 있다.[6]
협력적 멀티태스킹 시스템은 각 프로세스가 시스템의 다른 프로세스에게 정기적으로 시간을 양보하는 것에 의존한다. 때문에 설계가 잘못된 프로그램 하나가 광범위한 계산을 수행하거나 busy waiting을 함으로써 CPU 시간을 모두 소비할 수 있으며, 이로 인해 전체 시스템이 멈춤 상태가 될 수 있다. 서버 환경에서 이는 전체 환경을 용납할 수 없을 정도로 취약하게 만드는 위험 요소이다.
각 태스크가 짧은 시간 간격으로 OS에 처리를 반환하는 방식으로 실현되는 것을 '''논프리엠티브''' 멀티태스킹, '''협력적 멀티태스킹'''이라고 한다. 예를 들어 이벤트 대기열을 참조할 때 등 태스크가 스스로 OS에 제어를 넘긴다(NetWare처럼 시스템 호출 시마다 제어를 반환하는 구현도 있다). OS가 CPU 자원을 관리할 필요가 없으므로 처리가 적다. 그러나 장시간 CPU를 점유하는 태스크가 존재하면, 실질적으로 싱글 태스크와 같아진다는 단점이 있다(예를 들어, 특정 태스크가 무한 루프에 빠지는 등 OS에 처리를 반환할 수 없게 되면, 다른 태스크를 함께 멈추게 하여 시스템이 멈추는 결과가 된다. 과거의 Mac OS나 Windows 3.x, Windows 9x 계열에서의 16비트 Windows 프로그램의 동작 등이 이 방식이다).
2. 3. 선점형 멀티태스킹
선점형 멀티태스킹은 컴퓨터 시스템이 각 프로세스에 정기적인 운영 시간 "슬라이스"를 더 안정적으로 보장할 수 있게 해준다. 또한 시스템이 들어오는 데이터와 같이 다른 프로세스의 즉각적인 주의를 필요로 할 수 있는 중요한 외부 이벤트를 신속하게 처리할 수 있게 해준다.[7] 운영 체제는 이러한 하드웨어 기능을 활용하고 여러 프로세스를 선점적으로 실행하도록 개발되었다. 선점형 멀티태스킹은 1964년 PDP-6 모니터와 Multics, 1967년 OS/360 MFT, 1969년 유닉스에 구현되었으며, DEC의 PDP-8과 같이 작은 컴퓨터의 일부 운영 체제에서도 사용할 수 있었다. 리눅스, 솔라리스 및 BSD와 그 파생 제품과 같은 모든 유닉스 계열 운영 체제와 Windows의 최신 버전의 핵심 기능이다.[7]
어느 특정 시점에서 프로세스는 입출력을 기다리는 프로세스("I/O 바운드")와 CPU를 완전히 활용하는 프로세스("CPU 바운드")의 두 가지 범주로 나눌 수 있다. 초기의 시스템에서는 소프트웨어가 요청된 입력(예: 디스크, 키보드 또는 네트워크 입력)을 기다리는 동안 종종 "폴링" 또는 "비지 웨이팅"을 했다. 이 시간 동안 시스템은 유용한 작업을 수행하지 않았다. 인터럽트와 선점형 멀티태스킹의 출현으로 I/O 바운드 프로세스는 필요한 데이터가 도착할 때까지 "차단"되거나 보류되어 다른 프로세스가 CPU를 활용할 수 있게 되었다. 요청된 데이터의 도착은 인터럽트를 생성하므로 차단된 프로세스는 실행으로의 적시 반환을 보장받을 수 있었다.
홈 사용자가 사용할 수 있는 가장 초기의 선점형 멀티태스킹 OS는 Microware의 OS-9일 수 있으며, TRS-80 Color Computer 2와 같은 Motorola 6809 기반 컴퓨터에서 사용할 수 있었고, 운영 체제는 디스크 장착 시스템의 업그레이드로 Tandy에서 제공했다.[8][9] 1984년에 Sinclair QL의 Sinclair QDOS가 출시되었지만 큰 성공을 거두지 못했다. Commodore의 아미가는 이듬해에 출시되었으며, 멀티태스킹과 멀티미디어 기능을 결합하여 제공했다. 마이크로소프트는 Windows NT 3.1과 Windows 95를 개발하면서 1990년대 초에 선점형 멀티태스킹을 주력 운영 체제의 핵심 기능으로 만들었다. 1988년 애플은 클래식 Mac OS의 대안으로 UNIX System V 기반의 A/UX를 제공했다. 2001년 애플은 NeXTSTEP의 영향을 받은 Mac OS X로 전환했다.
유사한 모델은 네이티브 32비트 애플리케이션이 선점형으로 멀티태스킹되는 Windows 9x 및 Windows NT 계열에서 사용된다.[10] x86-64 및 아이테니엄 아키텍처 모두에 대한 Windows의 64비트 에디션은 더 이상 레거시 16비트 애플리케이션을 지원하지 않으므로 지원되는 모든 애플리케이션에 대해 선점형 멀티태스킹을 제공한다.
3. 멀티태스킹의 종류
3. 1. 선점형 멀티태스킹 (Preemptive Multitasking)
선점형 멀티태스킹은 컴퓨터 시스템이 각 프로세스에 정기적인 운영 시간 "슬라이스"를 더 안정적으로 보장할 수 있게 해준다.[7] 또한 시스템이 들어오는 데이터와 같이 다른 프로세스의 즉각적인 주의를 필요로 할 수 있는 중요한 외부 이벤트를 신속하게 처리할 수 있게 해준다. 운영 체제는 이러한 하드웨어 기능을 활용하고 여러 프로세스를 선점적으로 실행하도록 개발되었다.
어느 특정 시점에서 프로세스는 입출력을 기다리는 프로세스(I/O 바운드)와 CPU를 완전히 활용하는 프로세스(CPU 바운드)의 두 가지 범주로 나눌 수 있다. 초기의 시스템에서는 소프트웨어가 요청된 입력(예: 디스크, 키보드 또는 네트워크 입력)을 기다리는 동안 "폴링" 또는 "비지 웨이팅"을 했다. 이 시간 동안 시스템은 유용한 작업을 수행하지 않았다. 인터럽트와 선점형 멀티태스킹의 출현으로 I/O 바운드 프로세스는 필요한 데이터가 도착할 때까지 "차단"되거나 보류되어 다른 프로세스가 CPU를 활용할 수 있게 되었다. 요청된 데이터의 도착은 인터럽트를 생성하므로 차단된 프로세스는 실행으로의 적시 반환을 보장받을 수 있었다.
선점형 멀티태스킹은 1964년 PDP-6 모니터와 Multics, 1967년 OS/360 MFT, 1969년 유닉스에 구현되었으며, DEC의 PDP-8과 같이 작은 컴퓨터의 일부 운영 체제에서도 사용할 수 있었다.[7]
홈 사용자가 사용할 수 있는 가장 초기의 선점형 멀티태스킹 OS는 Microware의 OS-9일 수 있으며, TRS-80 Color Computer 2와 같은 Motorola 6809 기반 컴퓨터에서 사용할 수 있었고, 운영 체제는 디스크 장착 시스템의 업그레이드로 Tandy에서 제공했다.[8][9] 1984년 Sinclair QL의 Sinclair QDOS가 출시되었지만 큰 성공을 거두지 못했다. 이듬해 Commodore의 아미가가 출시되어 멀티태스킹과 멀티미디어 기능을 결합하여 제공했다. 마이크로소프트는 Windows NT 3.1과 Windows 95를 개발하면서 1990년대 초에 선점형 멀티태스킹을 주력 운영 체제의 핵심 기능으로 만들었다. 1988년 애플은 클래식 Mac OS의 대안으로 UNIX System V 기반의 A/UX를 제공했다. 2001년 애플은 NeXTSTEP의 영향을 받은 Mac OS X로 전환했다.
유사한 모델은 네이티브 32비트 애플리케이션이 선점형으로 멀티태스킹되는 Windows 9x 및 Windows NT 계열에서 사용된다.[10] x86-64 및 아이테니엄 아키텍처 모두에 대한 Windows의 64비트 에디션은 더 이상 레거시 16비트 애플리케이션을 지원하지 않으므로 지원되는 모든 애플리케이션에 대해 선점형 멀티태스킹을 제공한다.
작업 전환에는 하드웨어 타이머 인터럽트가 사용되는 경우가 많으며, 이 경우 인터럽트에 의해 일정 시간 내 (타임 슬라이스)에 강제적으로 운영 체제(OS)로 제어가 넘어간다.[18] OS는 TSS의 경우, 일정 방식에 따라 다음 타임 슬라이스를 실행 중인 작업·프로세스·스레드(멀티 스레드 OS의 경우)에 할당한다. 또한, OS는 시스템 콜 처리 타이밍에서 더 높은 우선 순위의 작업·프로세스·스레드에 CPU 사이클을 할당한다. 이러한 것을 '''선점'''이라고 한다.
이 방식을 특히 지칭하는 경우에는 '''선점형''' 멀티태스킹이라고 한다. 유닉스 계열(리눅스 등) 시스템이나, 개인용 컴퓨터용 상용 OS에는 OS/2(ArcaOS, eComStation, osFree), 9X 계열 Windows, CE 계열 Windows, NT 계열 Windows(ReactOS, Greentea OS), macOS(Classic Mac OS) 등이 있다. 기업용 시스템의 메인 프레임용 OS(타임 쉐어링 시스템) 등도 거의 모두 이 방식이다. 일정 시간 내에 OS로 제어가 돌아오기 때문에 시스템 전체의 견고성이 높다. 한편, OS가 CPU 시간을 관리할 필요가 있으며, 또한 일정 시간마다 작업 전환 처리가 발생하기 때문에 처리에는 비용이 들지만, 현재 CPU의 능력 향상과 함께 그 비용은 문제가 되지 않게 되었으며, 현재는 장점이 많은 이 방식이 주류이다.
작업을 전환하는 간격을 '''퀀텀'''이라고 부른다. 이 시간이 길면 길수록 시스템의 부하가 낮다. 하지만, 일정 기간 내에 동시에 처리할 수 있는 수는 퀀텀에 반비례한다. 이 때문에 서버용 OS에서는 퀀텀을 짧게 하여 응답을 좋게 하도록 조정된다.
OS에 따라서는 입출력 인터럽트나 시스템 콜 호출에 의해 선점을 발생시키는 것도 있다. 멀티태스킹을 처음으로 실현한 운영 체제인 MVS는 입출력 인터럽트를 기본으로 하고 있다.
3. 2. 협력적 멀티태스킹 (Cooperative Multitasking)
협력적 멀티태스킹은 각 태스크(Task)가 짧은 시간 간격으로 운영체제(OS)에 처리를 반환하는 방식이다.[6] 예를 들어, 이벤트 대기열을 참조할 때 등 태스크가 스스로 OS에 제어를 넘기는 방식이다. NetWare처럼 시스템 호출 시마다 제어를 반환하는 구현도 존재한다.[6]
이 방식은 OS가 CPU 자원을 관리할 필요가 없으므로 처리가 적다는 장점이 있다. 그러나 장시간 CPU를 점유하는 태스크가 존재하면 실질적으로 싱글 태스크와 같아진다는 단점이 있다. 예를 들어, 특정 태스크가 무한 루프에 빠지는 등 OS에 처리를 반환할 수 없게 되면 다른 태스크를 함께 멈추게 하여 시스템이 멈추는 결과가 된다.[6]
과거의 Mac OS, Windows 3.x, Windows 9x 계열에서의 16비트 Windows 프로그램 등이 이 방식을 사용했다.[6]
4. 멀티태스킹 관련 기술
컴퓨팅 초창기에는 CPU 시간이 비쌌고, 주변 장치는 매우 느렸다. 컴퓨터가 주변 장치에 접근해야 하는 프로그램을 실행할 때, CPU는 주변 장치가 데이터를 처리하는 동안 프로그램 명령 실행을 중단해야 했는데, 이는 매우 비효율적이었다.
다중 프로그래밍은 여러 프로그램을 컴퓨터 메모리에 동시에 로드하고 실행할 수 있도록 하는 컴퓨팅 기술이다. 이를 통해 CPU는 프로그램 간에 빠르게 전환할 수 있다. 이는 CPU가 작업 실행에 관여하도록 유지함으로써 CPU 활용도를 최적화하며, 특히 한 프로그램이 입출력(I/O) 작업 완료를 기다릴 때 유용하다.
1957년에 설계되어 1960년에 처음 출시된 불 감마 60(Bull Gamma 60)은 다중 프로그래밍을 염두에 두고 설계된 최초의 컴퓨터였다. 1961년에 처음 출시된 LEO III는 일괄 처리 중에 여러 프로그램이 컴퓨터 메모리에 로드되었고, 첫 번째 프로그램이 실행되기 시작했다. 첫 번째 프로그램이 주변 장치를 기다리는 명령에 도달하면, 프로그램의 컨텍스트가 저장되고, 메모리에 있는 두 번째 프로그램이 실행될 기회를 얻었다. 이 과정은 모든 프로그램이 실행을 완료할 때까지 계속되었다.[3]
다중 프로그래밍은 가상 메모리 및 가상 머신 기술의 등장으로 더욱 발전했으며, 개별 프로그램은 다른 동시 실행 프로그램이 없는 것처럼 메모리 및 운영 체제 리소스를 사용할 수 있게 되었다. 다중 프로그래밍은 프로그램이 적시에 실행될 것이라는 보장을 하지는 않지만, 여러 일괄 처리가 처리될 때 대기 시간을 크게 줄였다.[4][5]
컴퓨터 처리량 향상을 위해 프로그래머는 협력 프로세스 집합으로 응용 프로그램을 구현하기 시작했지만, 프로세스 간 데이터 교환을 위한 도구가 필요했다. 파이버는 여러 프로세서가 있는 컴퓨터에서 스레드의 이점 중 일부를 잃는 경향이 있지만, 스레드보다 가볍고 프로그래밍하기 쉽다.[15] 일부 시스템은 하드웨어에서 멀티스레딩을 직접 지원한다.
독립적인 프로세스는 다중 작업 환경에서 프로그래밍하는 데 큰 어려움이 없지만, 다중 작업 시스템의 복잡성은 작업 간 컴퓨터 자원 공유 및 협력 작업 동기화 필요성에서 비롯된다. 다양한 동시 컴퓨팅 기술은 여러 작업이 동일한 자원에 접근하려 할 때 발생할 수 있는 잠재적 문제를 방지하는 데 사용된다.
더 큰 시스템은 중앙 프로세서와 여러 채널 I/O를 사용하여 구축되기도 했으며, 이는 비대칭 멀티 프로세싱의 일종이었다. 다중 작업 시스템은 시간이 지나면서 개선되었고, 현대 운영 체제는 프로세스 우선순위 지정을 위한 메커니즘을 포함하며, 대칭 멀티 프로세싱은 새로운 복잡성과 기능을 도입했다.
컴퓨터는 CPU, 기억 장치, 디스플레이나 키보드 등의 휴먼 머신 인터페이스, 네트워크 인터페이스 등으로 구성된다. CPU의 계산 처리 시간에 비해 디스크나 네트워크의 처리 시간은 훨씬 길다. 싱글 태스크 환경에서는 순차 처리가 이루어져 CPU가 계산을 실행하지 못하고 기다리는 시간이 발생한다. 멀티태스킹 도입으로 이러한 대기 시간 동안 CPU를 동작시켜 다른 계산을 수행, 전체 처리 시간을 단축할 수 있다. 병렬 프로그래밍 기법을 활용하여 기능을 태스크로 분할하면 소프트웨어 재사용성을 높일 수 있다.
CPU가 하나뿐인 컴퓨터에서는 특정 순간에 하나의 처리만 실행 가능하다. 그러나 CPU 처리 시간을 짧게 나누어 태스크 간에 하나의 CPU를 순서대로 사용하면, 사용자에게는 여러 애플리케이션(태스크·프로세스)이 동시에 실행되는 것처럼 보인다. 태스크 전환 오버헤드나 캐시 및 TLB 미스율 상승 등의 비용이 있지만, 입출력 대기 등으로 특정 태스크 실행이 중단되어도 다른 태스크가 실행되므로 전체 처리량은 증가한다. "시분할 시스템"은 태스크 단위보다 사용자 단위로 "1대의 컴퓨터를 시분할로 공유한다"는 점에 주안점을 둔 용어이다.
4. 1. 멀티스레딩 (Multithreading)
스레드는 여러 협력 프로세스가 데이터를 교환할 때, 전체 메모리 공간을 공유하는 것이 가장 효율적이라는 아이디어에서 시작되었다.[12][13][14] 스레드는 실제로 동일한 메모리 컨텍스트에서 실행되며, 열린 파일과 같은 다른 리소스를 상위 프로세스와 공유한다. 스레드는 메모리 컨텍스트를 변경하지 않고 스레드 간에 전환할 수 있기 때문에 ''경량 프로세스''라고도 한다.일부 시스템은 하드웨어에서 멀티스레딩을 직접 지원한다.
4. 2. 메모리 보호 (Memory Protection)
모든 멀티태스킹 시스템에서 메모리 접근은 어떠한 프로세스도 실수로든 의도적으로든 해당 프로세스의 주소 공간 외부의 메모리 위치를 읽거나 쓰지 못하도록 엄격하게 관리되어야 한다. 이는 일반적인 시스템 안정성 및 데이터 무결성뿐만 아니라 데이터 보안을 위해서도 수행된다.일반적으로 메모리 접근 관리는 운영체제 커널의 책임이며, 메모리 관리 장치(MMU)와 같은 지원 기능을 제공하는 하드웨어 메커니즘과 결합된다. 프로세스가 메모리 공간 외부의 메모리 위치에 접근하려고 시도하면 MMU가 해당 요청을 거부하고 커널에 적절한 조치를 취하도록 신호를 보낸다. 이는 보통 해당 프로세스를 강제로 종료시키는 결과를 낳는다. 소프트웨어 및 커널 설계, 그리고 문제의 특정 오류에 따라 사용자는 "세그멘테이션 오류"와 같은 접근 위반 오류 메시지를 받을 수 있다.
잘 설계되고 올바르게 구현된 멀티태스킹 시스템에서는 주어진 프로세스가 다른 프로세스에 속한 메모리에 직접 접근할 수 없다. 이 규칙에 대한 예외는 공유 메모리의 경우이다. 예를 들어, UNIX System V 프로세스 간 통신 메커니즘에서 커널은 여러 프로세스가 상호 공유할 메모리를 할당한다. 이러한 기능은 PostgreSQL과 같은 데이터베이스 관리 소프트웨어에서 자주 사용된다.
설계상의 결함이나 구현의 부실로 인해 메모리 보호 메커니즘이 부적절할 경우, 악성 소프트웨어가 악용할 수 있는 보안 취약점이 발생할 수 있다.
4. 3. 메모리 스와핑 (Memory Swapping)
가상 메모리 기술의 일종으로, 사용되지 않는 메모리 영역을 보조 기억 장치(하드 디스크 등)로 옮겨 더 많은 프로세스를 동시에 실행할 수 있게 하는 기술이다.스왑 파일 또는 스왑 파티션 사용은 운영 체제가 보조 기억 장치에 주 기억 장치의 일부를 보관하여 물리적으로 사용 가능한 메모리보다 더 많은 메모리를 제공하는 방법이다. 다중 작업과 메모리 스와핑은 완전히 관련이 없는 두 가지 기술이지만, 메모리 스와핑은 동시에 더 많은 작업을 로드할 수 있으므로 매우 자주 함께 사용된다. 일반적으로 다중 작업 시스템은 실행 중인 프로세스가 보조 기억 장치에서 메모리의 일부를 다시 로드하기 위해 대기해야 하는 지점에 도달하면 다른 프로세스를 실행할 수 있다.[16]
5. 한국에서의 멀티태스킹
한국에서는 일본 전기(NEC)가 "멀티태스크"(MULTITASK)라는 단어를 상표 등록했다.(제4598360호, 2002년 8월 23일 등록)[1]
5. 1. 상표권 분쟁
"멀티태스크"(MULTITASK)라는 단어는 일본 전기가 일본에서 상표 등록을 했다(제4598360호, 2002년 8월 23일 등록).[1] 지정 상품은 다음과 같다.[1]참조
[1]
웹사이트
Concurrency vs Parallelism, Concurrent Programming vs Parallel Programming
https://blogs.oracle[...]
Oracle
2016-03-23
[2]
서적
Encyclopedia of Computer Science Third Edition
Van Nostrand Reinhold
1993
[3]
서적
MASTER PROGRAME AND PROGRAMME TRIALS SYSTEM PART 1 MASTER PROGRAMME SPECIFICATION
http://settle.ddns.n[...]
1965-02
[4]
웹사이트
What is the Difference Between Batch Processing and Multiprogramming
https://pediaa.com/w[...]
2019-05-20
[5]
웹사이트
Evolution of Operating System
https://www.notesjam[...]
2017-09-29
[6]
웹사이트
Preemptive multitasking
http://www.riscos.in[...]
2009-11-03
[7]
웹사이트
UNIX, Part One
http://www.ibiblio.o[...]
ibiblio.org
2002-01-30
[8]
간행물
Dynamic Uno
https://archive.org/[...]
1983-09
[9]
서적
1984 TRS-80 Catalog
https://archive.org/[...]
Tandy Corporation
1984
[10]
간행물
Windows 2000 &16-Bit Applications
http://www.smartcomp[...]
2006-06
[11]
논문
Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment
1973-01-01
[12]
웹사이트
Linux Performance and Tuning Guidelines
http://www.redbooks.[...]
IBM
2008-04-25
[13]
웹사이트
Context Switch Definition
http://www.linfo.org[...]
2006-05-28
[14]
웹사이트
What are threads (user/kernel)?
http://www.tldp.org/[...]
1997-09-08
[15]
문서
Multitasking different methods
http://csmoraitis.we[...]
[16]
웹사이트
What is a swap file?
https://kb.iu.edu/d/[...]
2018-03-26
[17]
웹사이트
Operating Systems Architecture
http://cis2.oc.ctc.e[...]
2018-03-17
[18]
문서
preemptive
[19]
문서
작업(task): 컴퓨터로 처리되는 일의 최소 단위
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com