프로세스 관리
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로세스 관리는 운영 체제가 컴퓨터 프로그램의 실행을 제어하는 핵심적인 기능이다. 현대 운영 체제는 다중 프로그래밍을 통해 여러 프로세스를 동시에 메모리에 적재하여 실행하며, 프로세스 생성, 종료, 상태 관리 등을 수행한다. 프로세스는 실행, 준비, 대기 상태를 가지며, 프로세스 제어 블록(PCB)을 통해 관리된다. 프로세서 모드는 커널 모드와 유저 모드로 구분되며, 시스템 서비스 요청은 시스템 콜 또는 메시지 전달 방식을 통해 이루어진다. 운영 체제는 스케줄링 알고리즘을 사용하여 프로세스의 실행 순서를 결정하며, 경량 프로세스 및 프로세스 그룹도 관리 대상이 될 수 있다.
더 읽어볼만한 페이지
프로세스 관리 |
---|
2. 다중 프로그래밍
현대의 많은 운영 체제는 하나 이상의 프로그램을 동시에 메모리에 적재할 수 있다. 예를 들어, 여러 사용자가 같은 프로그램을 실행할 수 있으며, 각 사용자는 메모리에 적재된 프로그램의 별도 사본을 갖는다. 어떤 프로그램은 메모리에 하나의 사본만 생성되지만, 여러 사용자가 공유하여 각자 동일한 코드를 실행할 수도 있다. 이러한 프로그램을 재진입성이 있다고 한다. 프로세서는 한 번에 하나의 프로그램에서 하나의 명령어만 실행할 수 있지만, 여러 프로세스에 짧은 시간 간격(타임 슬라이스)을 할당하고 빠르게 전환(문맥 교환)함으로써 사용자에게는 여러 프로그램이 동시에 실행되는 것처럼 보이게 한다.
다중 프로그래밍(멀티태스킹)은 여러 프로세스를 동시에 실행하는 시스템이다. 다중 프로그래밍에서는 프로세서가 각 프로세스에 일정 기간 할당되고 적절한 시점에 할당 해제되어야 한다. 프로세서가 프로세스 실행 도중 할당 해제되면, 나중에라도 쉽게 다시 시작할 수 있도록 해야 한다. 운영체제가 프로그램 실행 중 프로세서의 제어권을 되찾아 할당을 해제하거나 할당하는 두 가지 방법은 다음과 같다.
- 프로세스가 시스템 호출(소프트웨어 인터럽트)을 발생시킨다. (예: 하드 디스크 파일 접근을 위한 입출력 요청)
- 하드웨어 인터럽트가 발생한다. (예: 키보드 키 입력, 타이머 만료 - 선점형 멀티태스킹에 사용)
하나의 프로세스를 중단하고 다른 프로세스를 시작하거나 다시 시작하는 것을 문맥 교환이라고 한다.
2. 1. 효율성 증가
대부분의 컴퓨터 프로그램과 관련된 프로세스는 CPU 사이클과 I/O 사이클을 번갈아 수행한다. CPU 사이클 동안 프로세스는 실행되며 CPU를 점유하고, I/O 사이클 동안에는 프로세서가 아닌 입출력 작업을 수행하거나 대기한다. 멀티프로그래밍 이전의 단일 사용자 시스템에서는 사용자가 정보를 입력하거나 디버깅하는 동안 프로세서가 유휴 상태인 경우가 많았다.컴퓨터 과학자들은 한 프로세스가 입출력을 기다리는 동안 다른 프로세스가 프로세서를 사용하도록 함으로써 시스템 전체의 성능을 향상시킬 수 있음을 발견했다. 단일 프로그래밍 시스템에서 N명의 사용자가 각각 t1, t2, ..., tN의 실행 시간을 갖는 프로그램을 실행하면, 모든 N개의 프로세스를 처리하는 데 걸리는 총 시간 tuni는 다음과 같다.
: tuni = t1 + t2 + ... + tN.
그러나 각 프로세스는 CPU 사이클과 I/O 사이클을 모두 소모하므로, 실제로 CPU를 사용하는 시간은 총 실행 시간보다 매우 작다. 따라서 프로세스 i에 대해 다음이 성립한다.
:ti (processor) ≪ ti (execution)
여기서 ti (processor)는 프로세스 i가 CPU를 사용하는 시간이고, ti (execution)은 프로세스의 총 실행 시간이다.
일반적으로 N개 프로세스의 총 프로세서 사용 시간은 단일 프로세스 실행 시간보다 훨씬 짧다.
:
따라서 단일 프로그래밍 시스템에서는 프로세서가 상당 시간 유휴 상태가 된다. 이러한 비효율성을 극복하기 위해 리눅스, 유닉스, 마이크로소프트 윈도우와 같은 현대 운영 체제는 멀티프로그래밍을 구현한다. 이는 프로세서가 프로세스 X가 I/O 단계에 있을 때 다른 프로세스 Y로 전환할 수 있도록 한다. 처리 시간이 단일 작업의 런타임보다 훨씬 짧기 때문에, 멀티프로그래밍 시스템으로 모든 N명의 사용자를 처리하는 데 걸리는 총 시간은 대략 다음과 같이 줄어든다.
: tmulti = max(t1, t2, ..., tN)
대한민국은 높은 수준의 인터넷 인프라와 모바일 기기 보급률을 바탕으로 다중 프로그래밍을 통해 다양한 서비스를 효율적으로 제공하며, 이는 사용자 경험을 향상시키고 자원 활용도를 극대화하는 데 기여하고 있다.
3. 프로세스 관리
운영 체제는 다중 프로그래밍을 지원하기 위해 프로세스를 생성, 종료하고 상태를 관리한다.
현대 운영 체제에서는 여러 개의 프로그램 인스턴스가 메모리에 동시에 로드될 수 있다. 여러 사용자가 동일한 프로그램을 실행할 수 있으며, 각 사용자는 메모리에 로드된 프로그램의 별도 사본을 갖게 된다. 일부 프로그램은 하나의 사본만 메모리에 로드하여 여러 사용자가 공유할 수 있는데, 이를 재진입 가능 프로그램이라고 한다. 프로세서는 한 번에 하나의 명령어만 실행할 수 있지만, 여러 프로세스를 일정 간격으로 할당하고 해제하여 동시에 실행되는 것처럼 보이게 한다. 이를 동시 실행이라고 한다.
다중 프로그래밍 또는 멀티태스킹 OS는 여러 프로세스를 동시에 실행할 수 있는 시스템이다. 프로세서가 각 프로세스에 일정 기간 할당되고 적절한 시점에 할당 해제되거나 발행되어야 한다. 프로세스 실행 중에 프로세서가 할당 해제되는 경우, 나중에 효율적으로 프로세스를 다시 시작할 수 있는 방식으로 수행해야 한다.
OS가 프로그램 실행 중에 프로세서의 제어권을 되찾는 방법에는 두 가지가 있다.
하나의 프로세스를 중단하고 다른 프로세스를 시작(또는 재시작)하는 것을 컨텍스트 스위치 또는 컨텍스트 변경이라고 한다. 많은 최신 운영 체제에서 프로세스는 여러 하위 프로세스(스레드)로 구성될 수 있다.
일반적으로 프로세스를 관리 대상으로 하지만, 커널이 스레드를 직접 제어하는 경우에는 스레드도 관리 대상이 된다. 이 경우의 스레드를 '''경량 프로세스'''라고 부르기도 한다. 또한 프로세스를 그룹화하여 자원을 할당하는 기능을 가진 경우, 프로세스 그룹도 관리 대상이 된다.
프로세스는 실행, 준비, 대기 상태로 나누어 관리한다. 시스템에 따라, 프로세스 중단·재개도 가능하여 "실행 가능 중단 상태"와 "대기 중단 상태"를 포함한 다섯 가지 상태로 관리하기도 한다. 프로세스가 소멸될 때는 사용 중인 자원 (기억 영역 등)을 전부 반환하며, 자식 프로세스의 처리 방식은 운영체제에 따라 다르다.
3. 1. 프로세스 생성
운영 체제는 다음과 같은 네 가지 주요 이벤트에 따라 프로세스를 생성한다.- 시스템 초기화
- 실행 중인 프로세스의 프로세스 생성 시스템 호출
- 새로운 프로세스 생성에 대한 사용자 요청
- 일괄 처리 작업 시작
운영 체제가 부팅되면 일반적으로 시스템 작동을 준비하기 위해 몇 가지 필수 프로세스가 시작된다. 이 중 일부는 사용자와 상호 작용하며 작업을 수행하는 포그라운드 프로세스[4]이다. 다른 것들은 특정 사용자와 관련이 없고 대신 특정 기능을 갖는 백그라운드 프로세스이다. 예를 들어, 백그라운드 프로세스는 들어오는 이메일을 수락하거나, 웹 페이지에 대한 요청을 처리하기 위해 대기하다가 요청이 있을 때 활성화될 수 있다.
UNIX 및 Linux에서 프로세스 생성은 fork() 또는 `clone()` 시스템 호출을 통해 수행된다. 프로세스 생성의 첫 번째 단계는 상위 프로세스가 프로세스를 생성할 수 있는 충분한 권한을 가지고 있는지 확인하는 것이다. 유효성 검사가 성공하면 상위 프로세스가 거의 전체적으로 복사되며, 고유한 프로세스 ID, 상위 프로세스 및 사용자 공간에만 변경 사항이 적용된다. 각 새 프로세스는 자체 사용자 공간을 갖는다.[1]
Windows에서 프로세스 생성은 `CreateProcessA()` 시스템 호출을 통해 수행된다. 새 프로세스는 호출 프로세스의 보안 컨텍스트에서 실행되지만 다른 방식으로 호출 프로세스와 독립적으로 실행된다. 새 프로세스가 실행되는 보안 컨텍스트를 변경하는 방법이 있다. 새롭게 생성된 프로세스에 액세스할 수 있는 식별자가 할당된다. 새롭게 생성된 프로세스에 호출 스레드를 동기화하는 기능이 제공된다.[2][3]
3. 2. 프로세스 종료
프로세스는 다음과 같은 다양한 이유로 종료될 수 있다.- 정상적인 완료: 프로세스가 작업을 완료하고 스스로 종료한다.
- 시간 제한 초과: 프로세스가 허용된 시간 안에 작업을 완료하지 못한다.
- 메모리 부족: 프로세스가 필요한 메모리를 할당받지 못한다.[4]
- 오류: 다음과 같은 오류가 발생할 수 있다.[4]
- 산술 연산: 0으로 나누는 시도
- 보호 오류: 읽기 전용 파일에 쓰기 시도
- 유효하지 않은 명령 실행
- 데이터 오용
- 입출력 실패: 입출력 작업이 실패한다.[4]
- 부모 프로세스 종료: 부모 프로세스가 종료되면 자식 프로세스도 함께 종료될 수 있다. (연쇄 종료)[4]
- 사용자의 로그오프나 서비스 종료 요청[4]
- 운영 체제 중재: 교착 상태 해결 등을 위해 운영 체제가 프로세스를 강제 종료할 수 있다.[4]
3. 3. 프로세스 상태
현대의 운영체제는 멀티프로그래밍을 지원하여 여러 프로세스를 동시에 실행할 수 있다. 각 프로세스는 실행, 준비, 대기 상태 중 하나에 있으며, 운영체제는 이러한 상태를 관리하며 프로세스 간 전환을 수행한다. 이를 문맥 교환이라고 한다.프로세스는 CPU 사이클과 I/O 사이클을 번갈아 수행하는 특징을 가진다. CPU 사이클 동안 프로세스는 CPU를 점유하고, I/O 사이클 동안에는 입출력을 수행하거나 대기한다. 멀티프로그래밍은 한 프로세스가 입출력을 기다리는 동안 다른 프로세스가 CPU를 사용하도록 하여 시스템 전체의 효율성을 향상시킨다.
프로세스 생성 시에는 프로세스 제어 블록(PCB)이 생성되어 프로세스 정보를 관리한다. PCB는 프로세스의 우선순위, 메모리 할당 등을 포함한다. 프로세스는 실행, 준비, 대기 상태로 나뉘어 관리되며, CPU 스케줄링에 따라 실행 상태로 전환된다. 실행 상태의 프로세스는 일정 시간(타임 슬라이스)이 지나면 준비 상태로 이동하고, 입출력 처리 등이 시작되면 대기 상태로 이동한다.
상태 | 설명 | 전환 조건 |
---|---|---|
실행 (Running) | 현재 CPU를 점유하여 명령어를 실행 중인 상태 | |
준비 (Ready) | CPU가 할당되기를 기다리는 상태 | |
대기 (Blocked) | 입출력 완료 등 특정 이벤트를 기다리는 상태 |
일부 시스템에서는 프로세스 중단 및 재개 기능을 제공하여, "실행 가능 중단" 및 "대기 중단" 상태를 추가하여 관리하기도 한다. 프로세스가 소멸될 때는 사용 중인 자원을 반환하며, 자식 프로세스의 처리 방식은 운영체제에 따라 다르다.[1]
3. 3. 1. 2단계 프로세스 관리 모델
프로세스는 '실행 중' 또는 '실행 중 아님'의 두 가지 상태 중 하나로 간주될 수 있다. 운영체제가 새로운 프로세스를 생성하면, 해당 프로세스는 처음에 '실행 중 아님'으로 표시되고 '실행 중 아님' 상태로 시스템의 큐에 배치된다. 그러면 프로세스(또는 그 일부)는 주 기억 장치에 존재하며 실행 기회를 위해 큐에서 대기한다. 일정 시간이 지나면 현재 '실행 중'인 프로세스가 중단되어 '실행 중' 상태에서 '실행 중 아님' 상태로 이동하고, 프로세서를 다른 프로세스에 사용할 수 있게 된다. 그러면 OS의 디스패치 부분은 '실행 중 아님' 프로세스 큐에서 대기 중인 프로세스 중 하나를 선택하여 프로세서로 전송한다. 선택된 프로세스는 '실행 중 아님' 상태에서 '실행 중' 상태로 다시 레이블이 지정되며, 새로운 프로세스인 경우 실행이 시작되거나 이전에 중단되었던 프로세스인 경우 실행이 재개된다.[1]3. 3. 2. 3단계 프로세스 관리 모델
2단계 프로세스 관리 모델은 운영 체제에서 유효한 설계이지만, ''BLOCKED(차단됨)'' 상태가 없다는 점은 활성 프로세스가 CPU 사이클에서 입출력 사이클로 변경될 때 프로세서가 유휴 상태가 됨을 의미한다. 이는 프로세서를 효율적으로 사용하지 못하게 한다. 3단계 프로세스 관리 모델은 ''BLOCKED(차단됨)'' 상태라는 새로운 상태를 도입하여 이 문제를 해결한다. ''BLOCKED(차단됨)'' 상태는 입출력(I/O) 이벤트가 발생할 때까지 대기 중인 모든 프로세스를 나타낸다. 여기서 I/O 이벤트는 특정 장치의 사용이나 다른 프로세스의 신호를 의미할 수 있다.3단계 프로세스 관리 모델의 세 가지 상태는 다음과 같다.
- '''RUNNING(실행 중):''' 현재 실행 중인 프로세스이다.
- '''READY(준비):''' 실행될 준비가 되어 대기열에 있는 프로세스이다.
- '''BLOCKED(차단됨):''' 입출력 작업 완료와 같은 특정 이벤트가 발생할 때까지 실행될 수 없는 프로세스이다.
어떤 시점에서든 프로세스는 이 세 가지 상태 중 하나에 존재한다. 단일 프로세서 컴퓨터에서는 한 번에 하나의 프로세스만 ''RUNNING(실행 중)'' 상태에 있을 수 있다. ''READY(준비)'' 및 ''BLOCKED(차단됨)'' 상태에는 여러 프로세스가 있을 수 있으며, 각 상태에는 해당 프로세스들을 위한 대기열이 존재한다.
시스템에 들어오는 프로세스는 처음에 ''READY(준비)'' 상태가 되며, ''READY(준비)'' 상태를 통해서만 ''RUNNING(실행 중)'' 상태로 진입할 수 있다. 프로세스는 일반적으로 ''RUNNING(실행 중)'' 상태에서 시스템을 종료한다. 각 상태에서 프로세스는 메인 메모리의 공간을 차지한다. 한 상태에서 다른 상태로 전환되는 이유는 대부분 명확하지만, 일부는 그렇지 않을 수도 있다.
- '''''RUNNING(실행 중) → READY(준비):''''' 이 전환의 가장 일반적인 이유는 실행 중인 프로세스가 중단 없이 실행될 수 있는 최대 시간에 도달했기 때문이다. 즉, 시간 초과가 발생한 것이다. 다른 이유로는 스케줄링 정책에 의해 결정된 우선 순위 적용, 더 높은 우선 순위의 프로세스가 준비 상태로 도착하여 하위 수준 스케줄러에 영향을 주는 경우가 있다.
- '''''RUNNING(실행 중) → BLOCKED(차단됨):''''' 프로세스가 대기가 필요한 작업을 요청하면 ''BLOCKED(차단됨)'' 상태가 된다. 운영 체제에 대한 요청은 일반적으로 시스템 호출 형식으로 이루어진다. (실행 중인 프로세스에서 운영 체제 코드의 일부인 함수를 호출). 예를 들어, 프로세스가 디스크의 파일을 요청하거나, 메모리에서 디스크의 파일로 코드 또는 데이터 섹션을 저장하는 경우 ''BLOCKED(차단됨)'' 상태가 될 수 있다.
3. 4. 프로세스 제어 블록 (PCB)
운영 체제는 프로세스 제어 블록(PCB)이라는 자료 구조를 사용하여 각 프로세스를 표현하고 관리한다. PCB는 프로세스 식별자, 상태, 우선순위, 자원 사용 정보 등을 포함한다.[1]PCB는 다음과 같은 기본 정보를 포함하고 있다.
정보 종류 | 내용 |
---|---|
프로세스 동일성 | 각 프로세스는 서술자에 연계된 포인터와 사용자의 동일성을 그대로 고유하게 부여받는다. |
프로세스 상황 | READY, RUNNING, BLOCKED, READY SUSPEND, BLOCKED SUSPEND 가운데 프로세스의 현재 상황을 인지한다. |
프로세스 상태 | 작업의 현재 상태를 알려 주는 모든 정보를 포함한다. |
측정 | 성능 측정과 소요 목적에 주로 쓰이는 정보를 포함한다. 어떠한 종류의 자원이 프로세스가 사용하고 있는지, 또 얼마나 오래 사용하고 있는지를 알려 준다. |
리눅스에서는 프로세스 서술자라고 불리기도 한다.[1]
4. 프로세서 모드
현대의 프로세서는 프로그램 실행 능력을 정의하기 위해 모드 비트를 사용한다. 이 비트는 ''커널 모드'' 또는 ''유저 모드''로 설정할 수 있다. 커널 모드는 ''슈퍼바이저 모드'', ''모니터 모드'', ''링 0''이라고도 한다.
커널 모드에서 프로세서는 하드웨어의 모든 명령을 실행할 수 있지만, 유저 모드에서는 일부 명령만 실행할 수 있다. 커널 모드에서만 실행 가능한 명령을 유저 모드 명령과 구별하기 위해 커널, 특권 또는 보호된 명령이라고 한다. 예를 들어, I/O 명령은 특권 명령이므로, 응용 소프트웨어가 유저 모드에서 자체적으로 I/O를 수행하는 것은 불가능하며, 운영 체제에 요청하여 대신 I/O를 수행해야 한다.
운영 체제의 핵심 부분은 커널 모드에서 실행되고, 시스템 유틸리티 및 응용 프로그램과 같은 다른 소프트웨어는 사용자 모드에서 실행된다. 커널 모드에서 실행되는 시스템 부분을 운영 체제의 커널 또는 핵이라고 한다. 커널은 신뢰할 수 있는 소프트웨어로 설계되어, 사용자 모드에서 실행되는 신뢰할 수 없는 소프트웨어에 의해 수정될 수 없는 보호 메커니즘을 구현한다. 운영 체제의 확장은 사용자 모드에서 작동하므로, 운영 체제의 핵심 기능은 이러한 확장에 의존하지 않고 올바르게 작동한다.
운영 체제 기능의 핵심 설계 결정은 커널에서 구현할지 여부이다. 커널에서 구현하면 커널 모드로 작동하여 커널의 다른 부분에 접근하고 신뢰를 받는다. 반면, 사용자 모드에서 실행하면 커널 데이터 구조에 접근할 수 없지만 호출에 드는 노력이 적다. 커널에서 구현된 기능은 간단하지만, 호출 중 필요한 트랩 메커니즘과 인증 프로세스는 비교적 많은 리소스를 소비할 수 있다. 커널 코드 자체는 효율적으로 실행되지만, 호출 관련 오버헤드는 상당할 수 있다.
5. 시스템 서비스 요청
커널 모드에서 실행되는 운영 체제의 중요한 부분과는 달리, 소프트웨어(시스템 유틸리티 및 응용 프로그램 등)는 사용자 모드에서 실행된다.[1] 사용자 모드에서 실행 중인 프로그램이 커널의 서비스를 요청하는 기술에는 시스템 콜과 메시지 전달 두 가지가 있다.[1]
5. 1. 시스템 호출
사용자 모드에서 실행 중인 프로그램이 커널의 서비스를 요청할 수 있는 기술에는 시스템 콜과 메시지 전달 두 가지가 있다.운영 체제는 이 두 가지 기능 중 하나로 설계된다. 시스템 콜 방식의 경우, 사용자 프로세스는 트랩 명령어를 사용한다. 시스템 콜은 응용 프로그램에 대한 일반적인 프로시저 호출처럼 보이도록 설계되었다. OS는 각 실제 시스템 콜에 해당하는 이름을 가진 사용자 함수 라이브러리를 제공한다. 이러한 함수에는 OS 함수에 대한 트랩이 포함되어 있다. 응용 프로그램이 함수를 호출하면 트랩 명령어를 실행하여 CPU를 커널 모드로 전환한 다음 호출될 함수의 진입점으로 분기한다. 함수가 완료되면 프로세서를 사용자 모드로 전환한 다음 사용자 프로세스로 제어를 반환한다.
메시지 전달 방식에서, 사용자 프로세스는 원하는 서비스를 설명하는 메시지를 구성한 후 신뢰할 수 있는 전송 함수를 사용하여 신뢰할 수 있는 OS 프로세스에 메시지를 전달한다. 전송 함수는 트랩과 동일한 목적을 수행한다. 즉, 메시지를 확인하고, 프로세서를 커널 모드로 전환한 다음 대상 기능을 구현하는 프로세스에 메시지를 전달한다. 한편, 사용자 프로세스는 메시지 수신 작업을 통해 서비스 요청의 결과를 기다린다. OS 프로세스가 작업을 완료하면 사용자 프로세스에 메시지를 다시 보낸다.
일반적으로 시스템 콜 인터페이스를 기반으로 하는 운영 체제는 별도의 프로세스 간에 메시지를 교환해야 하는 운영 체제보다 더 효율적으로 만들 수 있다. 시스템 콜 방식은 OS 프로세스가 반드시 존재하지 않아도 된다는 특징이 있다. 사용자 모드에서 실행되는 프로세스는 커널 코드를 실행할 때는 커널 모드로 변경되고, OS 호출에서 반환될 때는 사용자 모드로 다시 전환된다.
5. 2. 메시지 전달
메시지 전달 방식은 프로세스 간 통신(IPC)을 통해 운영 체제의 서비스를 요청하는 방식이다.[1] 사용자 프로세스는 원하는 서비스를 설명하는 메시지를 구성한 후, 신뢰할 수 있는 전송 함수를 사용하여 신뢰할 수 있는 운영 체제 프로세스에 메시지를 전달한다.[1] 전송 함수는 메시지를 확인하고, 프로세서를 커널 모드로 전환한 다음, 대상 기능을 구현하는 프로세스에 메시지를 전달한다.[1] 사용자 프로세스는 메시지 수신 작업을 통해 서비스 요청 결과를 기다리며, 운영 체제 프로세스가 작업을 완료하면 사용자 프로세스에 메시지를 다시 보낸다.[1]시스템 콜 인터페이스를 기반으로 하는 운영 체제는 별도의 프로세스 간에 메시지를 교환해야 하는 운영 체제보다 일반적으로 더 효율적이다.[1] 시스템 콜 방식은 운영 체제 프로세스가 반드시 존재하지 않아도 되며, 사용자 모드에서 실행되는 프로세스가 커널 코드를 실행할 때는 커널 모드로, 운영 체제 호출에서 반환될 때는 사용자 모드로 전환된다.[1] 반면, 운영 체제가 별도의 프로세스들로 설계된 경우에는 커널이 사용자 프로세스에 의해 커널 모드에서 실행되는 함수의 모음인 경우보다 특수한 상황에서 기계 제어를 얻기 쉽다.[1]
6. 스케줄링
현대의 수많은 운영 체제는 하나 이상의 프로그램을 동시에 메모리에 적재할 수 있다. 프로세서는 한 번에 하나의 명령만 수행할 수 있지만, 여러 프로세스에 번갈아 가며 프로세서를 할당하여 동시에 실행되는 것처럼 보이게 한다. 이를 동시 실행(concurrent execution)이라고 한다.
다중 프로그래밍 또는 멀티태스킹 운영 체제는 여러 프로세스를 동시에 실행하는 시스템이다. 프로세서가 특정 기간 동안 각 프로세스에 할당되고 적절한 시점에 해제되는데, 프로세스 실행 도중 할당이 해제될 경우 나중에 쉽게 다시 시작할 수 있도록 다음과 같은 방식을 사용한다.
- 프로세스가 시스템 호출(소프트웨어 인터럽트)을 일으킨다. (예: 하드 디스크 파일 접근 요청)
- 하드웨어 인터럽트가 발생한다. (예: 키보드 입력, 타이머 소진 (선점 스케줄링에 사용))
한 프로세스를 멈추고 다른 프로세스를 시작 및 다시 시작하는 것을 문맥 교환이라고 한다. 현대 운영 체제에서 프로세스는 스레드라는 하위 프로세스를 가질 수 있다. 스레드는 프로세스 코드 내의 개별적이고 독립적인 실행 시퀀스이며, 분산 및 클라이언트-서버 시스템, 다중 프로세서 시스템에서 중요성이 커지고 있다.
프로세스 생성 시, '''프로세스 제어 블록(PCB)'''을 생성하여 프로세스 정보를 관리하고, 우선순위 결정, 메모리 영역 할당 등을 수행한다. 프로세스는 부모-자식 관계를 유지할 수 있다.
프로세스는 다음 세 가지 상태로 관리된다.
- 실행 상태
- 실행 가능 상태
- 대기 상태
실행 가능 상태의 프로세스는 CPU에 여유가 생기면 '''디스패치'''되어 실행 상태로 이동한다. 한 번에 하나의 프로세스만 실행 상태로 이동할 수 있다. 실행 상태의 프로세스는 일정 시간('''타임 슬라이스''')이 지나면 강제로 실행 가능 상태로 이동하거나, 입출력 처리 시작 시 대기 상태로 이동한다. 대기 상태의 프로세스는 입출력 처리 완료 후 실행 가능 상태로 이동한다. 이러한 스케줄링 알고리즘은 다양하게 연구되어 실용화되었다.
시스템에 따라 프로세스 중단·재개가 가능하며, 이 경우 "실행 가능 중단 상태"와 "대기 중단 상태"를 포함한 다섯 가지 상태로 관리한다.
7. 경량 프로세스 (Light Weight Process)
커널이 스레드를 직접 제어하는 경우, 스레드를 '''경량 프로세스'''(Light Weight Process)라고 부르기도 한다.[1]
8. 프로세스 그룹
프로세스를 일반적으로 관리하지만, 커널이 스레드를 직접 제어하는 경우에는 스레드도 관리 대상이 된다. 이 때의 스레드를 '''경량 프로세스''' (Light Weight Process)라고 부르기도 한다. 또한 프로세스를 그룹화하여 자원을 할당하는 기능을 가진 경우, 프로세스 그룹도 관리 대상이 된다.
참조
[1]
블로그
A Sneak-Peek into Linux Kernel - Chapter 2: Process Creation
http://sunnyeves.blo[...]
[2]
웹사이트
CreateProcessA function (Processthreadsapi.h) - Win32 apps
https://docs.microso[...]
2023-02-09
[3]
웹사이트
Creating Processes - Win32 apps
https://docs.microso[...]
2023-02-09
[4]
문서
다중 프로그래밍 및 프로세서 등과 같이 동시에 몇 개의 프로그램이 실행될 때 우선 순위가 높은 프로그램이 실행되는 상태
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com