본문 바로가기
컴퓨터공학/전공공부

프로세스 중단(서스펜드)과 재시작

by hobbiz 2021. 4. 21.
반응형

1. 프로세스사용자 관점시스템 관점으로 구분하여 설명하시오.

 - 프로세스는 사용자 관점에서 세그먼트(코드, 데이터, 스택 등)의 가상 주소 공간을 갖는 실행상태를 의미하고,

   시스템관점에서는 실행 중인 프로그램을 의미한다.

 

 

2. 메모리에 존재하는 프로세스 주소 공간의 구성 요소와 그 역할을 설명하시오.

 - 실행 스택(Stack) : 호출된 프로시저(함수)의 복귀 주소와 지역 변수처럼 일시적인 데이터를 저장하는 영역이다. 프로시저를 호출할수록 커지고 호출했던 프로시저를 반환할 때 줄어든다. 

- 실행 힙(Heap) : 텍스트(코드) 영역과는 별도로 유지되는 자유 영역이다. 프로그램 실행 중 시스템 호출을 통해 사용되다가 해지되는 등 자유자재로 사용할 수 있다.

 - 데이터(정적 변수) : 프로세스 실행 중에 동적으로 할당받는 영역으로 전역 또는 정적 변수를 저장한다. 읽고 쓰기가 가능하다.

 - 텍스트(코드) : 프로세스가 실행하는 코드를 저장한다. 프로그램이 텍스트 영역을 침범하여 기록하려고 하면 오류가 발생하여 프로그램은 종료된다.

 

 

3. 프로세스의 상태 변화 그림을 그리고 각 상태를 간략하게 설명하시오.

 

- 실행 : 명령어가 실행되는 상태, 즉 프로세스가 프로세서를 점유한 상태

- 대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나기를 기다리는 상태

- 준비 : 프로세스가 프로세서를 할당받으려고 기다리는 상태

- 준비 -> 실행 : 준비 리스트 맨 앞에 있던 프로세스가 프로세서를 선택(배당되어 실행)하는 것

- 실행 -> 준비 : 프로세스가 프로세서를 점유하고 있으면 '프로세스가 실행 상태에 있다' 고 한다.

- 실행 -> 대기(보류) : 실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청 같은 문제가 발생하면, 스스로 프로세서를 양도하고 대기 상태가 된다.

- 대기(보류) -> 준비 : 프로세스의 마지막 상태 변화는 입출력 작업이 끝났을 때 발생하는 깨움(Wake Up)이다.

 

4. 프로세스 중단(서스펜드)과 재시작이 발생하는 경우는 언제인가?

 - 시스템에 장애가 발생하면 실행 중인 프로세스는 잠시 중단했다가, 시스템이 기능을 회복할 때 다시 재시작할 수 있다.

 - 프로세스의 어느 부분이 의심스러울 때 사용자는 실행 중인 프로세스를 중단하여 확인한 후 재시작하거나 정지할 수 있다.

 - 처리할 일이 너무 많아 시스템 부담이 크면 프로세스 몇 개를 중단했다가 시스템이 다시 정상 상태로 돌아왔을 때 재시작할 수 있다.

 

 

5. 프로세스 제어 블록(PCB)에 저장되는 정보는 무엇인가?

 - 프로세스 식별자 : 각 프로세스에 대한 고유 식별자(숫자, 색인 항목)를 지정한다.

 - 프로세스 상태 : 생성, 준비, 실행, 대기, 중단 등의 상태를 표시한다.

 - 프로그램 카운터 : 프로세스 실행을 위한 다음 명령의 주소를 표시한다.

 - 레지스터 저장 영역 : 누산기, 인덱스 레지스터, 범용 레지스터, 조건 코드 등에 관한 정보로 컴퓨터 구조에 따라 수나 형태가 달라진다. 인터럽트가 발생하면 프로그램 카운터와 함께 저장되어 다시 실행될 때 원상 복귀할 수 있게 한다.

 - 프로세서 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐에 대한 포인터, 그 외 다른 스케줄 매개변수를 가진다.

 - 계정 정보 : 프로세서 사용기간, 실제 사용기간, 사용상한시간, 계정 번호, 작업이나 프로세스 번호 등이다.

 - 입출력 상태 정보 : 특별한 입출력 요구 프로세스에 할당된 입출력장치, 개방된(Opened)파일의 목록 등이다.

 - 메모리 관리 정보 : 메모리 관리에 필요하다. 메모리 영역을 정의하는 하한 및 상한 레지스터(경계 레지스터) 또는 페이지 테이블 정보다.

 

6. 프로세스와 스레드의 상태를 비교 설명하시오. 

 * 프로세스의 상태

  - 실행 : 명령어가 실행되는 상태, 즉 프로세스가 프로세서를 점유한 상태

  - 대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나기를 기다리는 상태

  - 준비 : 프로세스가 프로세서를 할당받으려고 기다리는 상태

  - 준비 -> 실행 : 준비 리스트 맨 앞에 있던 프로세스가 프로세서를 선택(배당되어 실행)하는 것

  - 실행 -> 준비 : 프로세스가 프로세서를 점유하고 있으면 '프로세스가 실행 상태에 있다' 고 한다.

  - 실행 -> 대기(보류) : 실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청 같은 문제가 발생하면, 스스로 프로세서를 양도하고 대기 상태가 된다.

  - 대기(보류) -> 준비 : 프로세스의 마지막 상태 변화는 입출력 작업이 끝났을 때 발생하는 깨움(Wake Up)이다.

 

 * 스레드의 상태

  - 대기 : 스레드가 이벤트를 기다릴 떄, 즉 입출력 작업 등이 완료될 때까지 스레드는 대기(보류)상태가 되며 이때 자신의 정보(프로그램 카운터, 스택 포인터 등)를 실행 스택에 저장한다.

  - 준비 : 스레드가 프로세서에 의해 실행될 수 있는 상태다. 스레드를 대기시킨 이벤트(입출력이 완료되면)가 발생하면 해당 스레드는 준비 리스트에 삽입된다.

  - 실행 : 스레드가 프로세서를 점유하여 실행 중인 활성화 상태다.

  - 종료 : 스레드가 작업을 종료하면 자원을 해제하고 레지스터 문맥과 스택 할당이 제거된다.

 

 

7. 사용자 수준 스레드와 커널 수준 스레드의 차이는 무엇인가?
   그리고 각 구현 방법이 효과적인 경우는 언제인가?

 - 사용자 수준 스레드 : 사용자 수준 스레드는 커널 스레드를 지원하지 않는 운영체제에서 사용한다. 사용자 수준 스레드 여러 개가 커널 스레드(프로세스) 하나로 매핑되는 방식이다. 다중 스레드 프로세스에 대해 프로세서(실행 문맥)를 하나 할당하기 때문에 다대일 스레드 매핑이라고한다. 커널과 상관없이 다양한 목적의 응용 프로그램이나 언어 인터페이스의 요구에 적용할 수 있다.

 - 커널 수준 스레드 : 커널 수준 스레드는 사용자 수준 스레드의 한계를 해결하기 위해 사용자 스레드마다 커널 스레드, 즉 프로세스(실행 문맥)를 매핑하는 일대일 스레드 매핑을 지원한다. 커널에 의한 직접적인 스케줄링과 실행으로 사용자 수준 스레드가 겪는 커널 지원 부족 문제를 해결할 수 있다.

 

8. 스레드가 생성될 때 사용되는 자원은 무엇인가? 이것은 프로세스가 생성될 때와 어떻게 다른가?

 스레드가 생성될 때 사용되는 자원 : 코드, 주소공간, 운영체제의 자원(파일, 신호)

 프로세스 생성 : 운영체제가 프로그램을 선택하여 수행하기 시작하려면, 즉 새로운 프로세스를 생성하고 추가하려면 프로세스 관리를 위한 프로세스 제어 블록을 만든 후 프로세스에 주소 공간을 할당해야 한다.

 

9. 프로세스를 종료하는 과정을 예를 들어 설명하여라.

 - 정상 종료 : 프로세스가 운영체제의 서비스를 호출한 경우

 - 시간 초과 : 프로세스가 명시된 전체 시간을 초과하여 실행되거나 명시된 시간을 초과하면서 어떤 이벤트 발생을 기다리는 경우

 - 실패 : 파일 검색 실패, 명시된 횟수를 초과하여 입출력이 실패한 경우

 - 산술 오류, 보호 오류, 데이터 오류

 - 메모리 부족, 접근 위반

 

 

10. 인터럽트와 트랩의 차이를 설명하시오.

 - 인터럽트 : 컴퓨터에 장착된 장치나 컴퓨터 내의 프로그램으로부터 오는 신호로서 운영체계가 하던 일을 멈추고 다음에 무엇을 할 것인지를 결정하게 한다.

 - 트랩 : 하드웨어나 운영 체계 또는 둘의 조합에 의해 작동되는 특별한 형태의 조건 전달점.

하드웨어에 의해 자동적으로 미리 알려진 위치에 조건적으로 점프하는 것.

 

11. 문맥교환은 언제 발생하는가?

 - 프로세스를 다른 프로세스로 교환하려면 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재해야 하는데, 이런 일련의 과정을 문맥교환(Context Switching)이라 한다. 예를 들어, 프로세스가 '준비 -> 실행' 상태로 변하거나, '실행 -> 준비', 또는 '실행 -> 대기' 상태로 변할 때 문맥교환이 발생한다.

 

12. 사용자 수준 스레드의 장단점을 설명하시오.

 * 장점

  - 높은 이식성 : 기본 커널을 변경할 필요가 없으므로 모든 운영체제에 적용할 수 있어 이식성이 높다.

  - 오베헤드 감소 : 스레드 관리를 위한 모든 데이터 구조가 프로세스의 사용자 주소 공간에 있어 커널의 도움 없이 스레드 교환이 가능하다. 따라서 사용자와 커널 전환에 따른 오버헤드가 줄어든다.

  - 스케줄링의 유연성 : 스레드 라이브러리에서 스레드 스케줄링을 제어하기 때문에 스케줄링이 응용 프로그램에 맞게 적절하게 구성된다. 예를 들어, 라운드 로빈(Round Robin)이나 우선순위 기법을 이용할 수 있다.

 

 * 단점

  - 시스템의 동시성 지원 불가 : 한 번에 하나의 스레드만 커널에 접근할 수 있기 때문에 여러 스레드가 시스템 호출을 동시에 사용할 수 없다.

  - 시스템 규모 확장 제약 : 커널이 프로세스 내부의 다중 스레드를 프로세스로 하나로 관리한다. 따라서 다중 처리 환경이라도 여러 프로세서에서 분산 처리할 수 없으므로 시스템 규모를 확장하기 어렵다.

  - 스레드 간 보호가 어려움 : 스레드 간의 보호에 커널의 보호 기법을 사용할 수 없다. 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호된다.

 


프로세스의 개념

프로세스는 다양한 정의가 있다.

  • 실행 중인 프로그램
  • 비동기적 행위
  • 실행 중인 프로시저
  • 실행 중인 프로시저의 제어 추적
  • 운영체제에 들어 있는 프로세스 제어 블록(PCB)
  • 프로세서에 할당하여 실행할 수 있는 개체 디스패치가 가능한 대상

이 중 가장 일반적인 프로세스 정의는 "실행 중인 프로그램"이다. 프로그램이 실행 중이라는 의미는 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태가 되었다는 것이다. 이는 자신만의 메모리 영역(주소 공간)이 있음을 의미한다.

 

프로세스가 실행 중인 프로그램이 되려면 프로세서 점유 시간, 메모리, 파일, 입출력장치 같은 자원이 필요한데, 프로세스를 생성하거나 실행할 때 이 자원을 할당한다. 그리고 프로세스는 현재의 활동 상태를 나타내는 프로그램 카운터(PC), 프로세서의 현재 활동(레지스터 내용)도 포함한다. 프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체이다. 반면에 프로세스는 아래와 같이 메모리 구조를 이루고, 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어 있는 동적인 개체이다.

스택은 데이터를 일시적으로 저장하는 영역이다. 지역변수에 사용하고, 변수가 범위 밖으로 이동하면 공간을 해제한다. 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용하고, 함수를 호출할수록 커지고 반환하면 줄어든다. 보통 힙과 인접한 방향으로 점점 커져 스택 포인터와 힙 포인터를 만나면 메모리가 소진되었다는 의미이다.

 

힙은 코드 영역과는 별도로 유지되는 자유 영역이다. 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용한다. 프로세스의 공유 라이브러리와 동적으로 적재된 모듈이 서로 공유하는데, 동적 메모리 할당이 발생하면 스택영역 쪽인 위쪽으로 커진다.

 

데이터는 프로그램의 가상 주소 공간이다. 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화한다. 읽기&쓰기가 가능한 영역이다.

 

코드는 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역이다. 프로그램을 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장한다. 프로세스로 변경할 수 없고, 읽기 전용이므로 프로그램이 코드 영역을 침범하여 쓰기를 시도하면 오류가 발생해서 프로그램을 종료한다.

 

이러한 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 자원 영역에 접근할 수 없다. 만약 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야한다. (파이프, 파일, 소켓 등)

 

프로세스는 수행하는 역할에 따라 시스템(커널) 프로세스와 사용자 프로세스로 구분하고, 병행 수행 방법에 따라 독립 프로세스와 협력 프로세스로 구분한다.

구분 종류 설명
역할 시스템(커널)프로세스 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스이다. 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널 영역을 침범하지 못하게 감시하고, 사용자 프로세스를 생성하는 기능을한다.
사용자 프로세스 사용자 코드를 수행하는 프로세스이다.
병행 수행 방법 독립 프로세스 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스이다.
협력 프로세스 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스이다.

 

프로세스의 상태 변화와 상태 정보

운영체제는 프로세스의 실행을 제어한다. 그리고 프로세스는 실행하면서 상태가 변하므로 운영체제는 프로세스 제어에 필요한 상태를 점검하고 프로세스를 제어한다.

 

프로세스의 상태는 크게 실행 상태와 비실행 상태로 구분할 수 있다. 운영체제가 프로세스를 생성하면 비실행 상태로 초기화해서 실행을 기다린다. 실행 중인 프로세스를 종료하거나 인터럽트가 발생하면 비실행 프로세스 중에서 선택한 프로세스를 실행 상태로 바꾼다.(디스패치)이때 인터럽트된 프로세스를 비실행 상태가 된다. 실행 중인 프로세스는 새로운 자원을 할당받으려고 프로세서를 기다리는 비실행 상태로 바뀌기도 한다.

 

프로세스의 상태 변화는 운영체제가 작업 스케쥴러와 프로세스 스케쥴러를 이용하여 관리한다. 작업 스케쥴러는 스풀러가 디스크에 저장한 작업 중 실행할 작업을 선정하고 준비 리스트에 삽입하여 다중 프로그래밍의 정도를 결정하며, 프로세스 스케쥴러는 선정한 작업의 상태를 변화시키며 프로세스의 생성에서 종료까지의 과정을 수행한다.

 

실행 상태의 프로세스가 프로세서를 자발적으로 반환하기 전에 할당된 CPU점유 시간이 지나면 이 프로세스는 준비 상태가 된다. 그리고 프로세스를 실행하다 입출력 명령이 발생하면 대기 상태가 된다. 대기 상태인 프로세스는 대기 원인을 제거하면 준비 상태로 바뀌고, 디스패처가 준비 상태인 프로세스에 프로세서를 할당하면 다시 실행 상태로 바뀐다. 여기서 디스패처는 스케쥴러가 선택한 프로세스에 프로세서를 할당하는 모듈이다.

 

상태변화 표기방법
1.준비->실행 dispatch(프로세스 이름)
2.실행->준비 timeout(프로세스 이름)
3.실행->대기 block(프로세스 이름)
4.대기->준비 wakeup(프로세스 이름)

 

준비->실행
준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것을 디스패치라고 한다.(스케쥴 알고리즘에 따라 다름) 다중 프로그래밍 운영체제에서는 실행 상태인 프로세스가 할당된 CPU점유 시간만큼만 프로세서를 사용하도록 하여 특정 프로세스가 프로세서를 계속 독점하는 것을 방지한다.

실행->준비
운영체제는 실행 상태의 프로세스가 프로세서를 계속 독점하지 않도록 인터럽트 클록을 두어 특정 프로세스가 할당된 CPU점유 시간동안만 프로세서를 점유하게 한다. 프로세스가 일정 시간이 지나도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세서 제어권을 부여하는 것이다. 그러면 실행 상태의 프로세스는 준비 상태가 되고, 준비리스트의 첫 번째 프로세스가 실행 상태가 된다.(스케쥴 알고리즘에 따라 다름)

실행->대기
할당된 시간 이전에 실행 상태의 프로세스에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 프로세서를 스스로 양도하면 대기 상태가 된다.

대기->준비
프로세스는 입출력 작업이 끝나면 wake up으로 대기에서 준비 상태가 된다.

 

프로세스 제어 블록(PCB,Process Control Block)

운영체제가 프로세스를 제어할 때 필요한 프로세스 상태 정보는 프로세스 제어 블록에 저장된다. 프로세스 제어 블록은 특정 프로세스가 생성될 때 마다 생성되는 것이며 특정 프로세스 정보를 저장하는 데이터 블록이나 레코드로, 작업 제어 블록(TCB,Task Controll Block)이라고도 한다. 프로세스가 생성되면 메모리에 PCB를 생성하고, 프로세스가 실행을 종료하면 PCB도 삭제한다. PCB에 들어있는 정보들을 아래와 같다.

 

정보 설명
프로세스 식별자 각 프로세스의 고유 식별자
프로세스 상태 생성,준비,실행,대기,중단 등 상태표시
프로그램 카운터(PC) 프로세스를 실행하는 다음 명령어의 주소
레지스터 저장 영역 누산기, 인덱스 레지스터, 스택 포인터, 범용 레지스터, 조건 코드 등 정보로 컴퓨터 구조에 따라 수나 형태가 다르다. 인터럽트가 발생하면 프로그램 카운터와 함께 저장하여 재실행할 때 원래대로 복귀할 수 있게 한다.
프로세서 스케줄링 정보 프로세스의 우선순위, 스케줄링 큐의 포인터, 기타 스케줄 매개변수
계정정보 프로세서 사용 시간, 실제 사용시간, 사용 상한 시간, 계정 번호, 작업이나 프로세스 번호 등
입출력 상태 정보
메모리 관리 정보
...
특별한 입출력 요구 프로세스에 할당된 입출력장치, 열린 파일 리스트 등
운영체제가 사용하는 메모리 시스템에 따른 상한,하한 레지스터(경계 레지스터), 페이지 테이블이나 세그먼트 테이블 값 등

 

프로세스 Context Switching

인터럽트나 시스템 호출 등으로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 프로세스 Context Switching이라고 한다. 프로세스 문맥 교환이 일어나면 프로세서의 레지스터에 있던 내용을 나중에 사용할 수 있도록 저장한다.

 

예) 프로세스 A가 실행 상태에 있던 도중 프로세스 B에 제어권을 넘겨주는 Context Switching 가정

  1. 인터럽트 신호
  2. PCB_A에 프로세스 A 상태 저장
  3. PCB_B에 저장되어 있던 프로세스 B 상태를 다시 적재
  4. 인터럽트 신호
  5. PCB_B에 프로세스 B 상태 저장
  6. PCB_A에 저장되어 있던 프로세스 A 상태를 다시 적재

Context Switching에서는 오버헤드가 발생하는데, 이는 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 다르다. 그리고 Context Switching은 프로세스가 "준비->실행" 상태로 바뀌거나 "실행->준비, 실행->대기" 상태로 바뀔 때 발생한다.

 

현재 실행 중인 프로세스에서 Context Switching을 요청하면, 우선 사용자 모드에서 커널 모드로 프로세스 제어가 넘어가면서 프로세스를 종료한다. 그리고 다시 시작할 수 있도록 프로세스의 현재 상태를 PCB에 저장하고 다음에 실행할 프로세스를 선택한다. 새로 실행될 프로세스 정보를 PCB에서 얻어와 프로세서에 재저장하고는 사용자 모드로 돌아와서 새로운 프로세스를 실행한다.

 

이러한 Context Switching은 시간 비용이 들어가는 오버헤드이고, 이 오버헤드는 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 시스템마다 다르다. 그래서 운영체제를 설계할 때, 최대한 불필요한 Context Switching을 줄이는 것을 목표로 정한다. Context Switching은 레지스터 Context 교환, 작업 Context 교환, 쓰레드 Context 교환, 프로세스 Context 교환이 가능하다. 

 

<프로세스 구조>

프로세스는 실행 중에 프로세스 생성 시스템 호출을 이용하여 새로운 프로세스를 생성할 수 있다. 이때 프로세스 생성 순서를 저장하고 부모-자식 관계를 유지하여 계층적으로 생성한다. 

 

프로세스의 생성

운영체제나 응용 프로그램에서 요청을 받아 프로세스를 생성하면, 운영체제는 해당 프로세스에서 프로세스 제어 블록을 만들어 주소 공간을 할당한다. 

  1. 새로운 프로세스에 프로세스 식별자를 할당
  2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록 공간을 할당한다.
  3. 프로세스 제어 블록을 초기화한다. 프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 제어 정보(우선순위) 등을 포함한다.
  4. 준비큐에 삽입

프로세스가 작업을 수행하려면 프로세서 점유 시간, 메모리, 파일, 입출력장치 등 자원이 필요하다. 자식 프로세스는 운영체제에서 직접 필요한 자원을 얻거나 부모 프로세스의 자원을 일부 사용할 수 있다. 이때 부모 프로세스는 자식 프로세스가 사용하는 자원을 제한해서 특정 프로세스가 자식 프로세스를 너무 많이 생성하여 시스템에 부담을 주는 것을 막을 수 있다.

 

프로세스의 종료

프로세스가 마지막 명령을 실행하면 종료하여 운영체제에 프로세스의 삭제를 요청한다. 또한 부모 프로세스는 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때나 자식 프로세스에 할당한 작업이 더는 없을 때 자식 프로세스를 종료한다.

 

프로세스의 제거

프로세스 제거는 프로세스를 파괴하는 것이다. 프로세스를 제거하면 사용하던 자원을 시스템에 돌려주고, 해당 프로세스는 시스템 리스트나 테이블에서 사라져 프로세스 제어 블록을 회수한 후 디스크에 저장한다.

 

프로세스의 중단과 재시작

프로세스의 준비, 실행, 대기 상태만 이용하면 입출력 동작이 일반 연산보다 느려 시스템이 대부분 유휴 상태이다. 다중 프로그래밍 환경에서도 프로세서의 동작시간이 입출력보다 짧아 프로세스 문맥 교환이 일어난 후에도 기다리게 되므로 대부분 유휴시간이 된다.

 

시스템의 유휴시간 문제는 프로세스 중단(일시중단) 상태를 이용하여 해결할 수 있다. 운영체제는 새로운 프로세스를 생성하여 실행하거나 실행 중인 프로세스를 중단했다가 다시 실행하여 사용할 수 있다. 후자의 방법을 이용하면 시스템 전체의 부하를 증기시키지 않으면서 프로세스에 서비스를 제공할 수 있다. 중단 상태를 추가하면 실행에서 대기가 아닌 중단 상태로 전환하여 특정 이벤트의 발생을 기다리면서 대기 상태가 된다. 그리고 해당 이벤트가 발생할 때 준비상태로 가서 실행을 기다리는 것이 아닌 즉시 실행 상태로 바꿀 수 있는 이점이 있다.

 

프로세스를 중단한 원인을 제거하여 다시 실행하는 것을 재시작이라고 한다.

 

프로세스 중단과 재시작은 시스템 부하를 조절하는 데 상당히 중요하고, 다음 상황에서 주로 발생한다.

  • 시스템에 장애가 발생하면 실행 중인 프로세스는 잠시 중단했다가 시스템이 기능을 회복할 때 다시 재시작할 수 있다.
  • 프로세스에 의심스러운 부분이 있으면 실행 중인 프로세스를 중단하여 확인한 후 재시작하거나 종료할 수 있다.
  • 처리할 작업이 너무 많아 시스템에 부담이 되면 프로세스 몇 개를 중단했다가 시스템이 정상 상태로 다시 돌아왔을 때 재시작할 수 있다.

대다수 시스템은 프로세스를 실행하기 전에 자원을 할당받고 실행을 시작하지만, 다중 프로그래밍 환경에서는 지원의 이용률과 시스템 효율을 높이려고 자원을 동적으로 할당한다. 이때 자원을 할당받으려고 기다리는 상태가 "대기"이고, 할당받은 자원을 기다리는 상태가 "중단"이다.

 

중단된 상태는 프로세스가 보조 메모리에 있고 이벤트를 대기 중인 상태이다. 중단 상태는 프로세스가 보조 메모리에 있지만 즉시 메인 메모리로 적재하여 실행할 수 있는 상태이다.



출처: https://coding-start.tistory.com/198 [코딩스타트]

 

 

출처:

모바일인터넷201440125 (daum.net)

반응형

'컴퓨터공학 > 전공공부' 카테고리의 다른 글

관계 데이터 모델과 제약조건  (0) 2021.04.21
스위치의 역할  (0) 2021.04.21
기능적 요구사항과 비기능적 요구사항  (0) 2021.04.21

댓글