관리 메뉴

Kim's Programming

프로세스(Process) 본문

Computer Theory/Operating System

프로세스(Process)

Programmer. 2017. 6. 22. 20:47

1. 프로세스의 개념과 상태 변화


1. 프로세스의 개념


다중프로그래밍 환경에서는 여러 프로그램을 메모리에 적재하여 병행 실행할 수 있어 컴퓨터의 효율을 높일 수 있다. 병행 실행하는 프로그램은 컴퓨터 자원을 공유하므로 이를 제어하는 방법이  필요한데 이 과정에서 해당 절의 주제인 프로세스가 등장했다.


      • 프로세스의 정의
        • 실행중인 프로그램
        • 실행중인 프로시저
        • 프로세서에 할당하여 실행할 수 있는 개체


프로세스가 실행 중인 프로그램이 되려면 프로세서, 메모리, 파일, 입출력장치 같은 자원이 필요한데 프로세스를 생성하거나 실행할 때 이 자원을 할당한다. 그리고 프로세서는 현재 활동의 상태를 나타내는 프로그램 카운터, 프로세서의 현재 활동(레지스터 내용)도 포함한다.


프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체이다. 반면에 프로세스는 아래 그림과 같이 메모리 구조를 이루고 프로그램 카운터나 레지스터 처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체이다

프로세스의 메모리 구조

    • 스택(Stack) : 스택은 데이터를 일시적으로 저장하는 영역
    • 힙(Heap) : 동적으로 메모리를 할당하는 공간
    • 데이터(Data) : 프로그램의 가상 주소공간이다. 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화한다.
    • 코드(COde) : 코드는 실행명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역이다. 코드영역은 공유할 수 있다.

프로세스는 수행하는 역할에 따라 시스템(커널) 프로세스와 사용자 프로세스로 구분한다.


2. 프로세스의 상태변화


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


운영체제가 프로세스를 제어할 때 필요한 프로세스 상태 정보는 프로세스 제어 블록에 저장된다. 


 프로세스 식별자

 각 프로세스의 고유 식별자(숫자, 색인 항목)

 프로세스 상태

 생성, 준비, 실행, 대기, 중단 등 상태 표시

 프로그램 카운터

 프로세스를 실행하는 다음 명령의 주소 표시

 CPU 레지스터 내용

 누산기, 인덱스, 레지스터, 스택 포인터, 범용 레지스터, 조건 코드 등 정보로 컴퓨터 구조에 따라 수나 형태가 다르다. 인터럽트가 발생하면 프로그램 카운터와 함께 저장하여 재실행할 때 원래대로 복귀할 수 있게 한다.

 프로세스 스케쥴링 정보

프로세스의 우선 순위 스케줄링 큐의 포인터, 기타 스케줄 매개변수 

 계정정보

 프로세서 사용 시간, 실제 사용 시간, 사용 상한 시간, 계정 번호, 장업이나 프로세스 번호 등

 입출력 상태 정보

 메모리 관리 정보

 .....

  • 특별한 입출력 요구 프로세서에 할당된 입출력장치, 열린 파일 리스트 등
  • 운영체제가 사용하는 메모리 시스템에 따른 상한·하한 레지스터 등(경계 레지스터), 페이지 테이블이나 세그먼트 테이블 값 등


* 프로세스의 문맥 교환(Context Switching)

일정시간이 경과하거나 인터럽트에 의해 실행중인 프로세스를 다른 프로세스로 교환하여 실행할 때 발생하는 CPU 레지스터 내용교롼을 의미한다.



2. 프로세스의 관리


1. 프로세스의 구조


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


2. 프로세스의 생성

 

* 프로세스를 생성할 때 필요한 세부 작업을 단계별로 정리한 것이다.

        1. 새로운 프로세스에 프로세스 식별자를 할당한다.
        2. 주소 공간과 프로세스 제어 블록(PCB) 공간을 할당한다.
        3. 프로세스, 제어 블록을 초기화 한다.
        4. 링크를 건다(해당 큐에 삽입한다.)


3. 프로세스의 종료 


* 보통 부모 프로세스를 종료하면 자식 프로세스는 필요치 않으므로 운영체제가 자식 프로세스도 종료하는데 이를 연속 종료하고 한다.

      1. 자식 프로세스가 할당된 자우너을 초과하여 자원을 사용할 때
      2. 자식 프로세스에 할당된 작업이 더는 없을 때
4. 프로세스의 제거

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

5. 프로세스의 중단과 재시작


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

      1. 시스템 장애가 발생했을 때
      2. 프로세스에 의심스러운 부분이 있으면 실행중인 프로세스를 중단
      3. 처리할 작업이 너무 많아 시스템에 부담되면(너무나 많은 적재) 프로세스를 중단


6. 프로세스의 우선순위 변경


프로세스 스케줄러는 프로세스 제어 블록에 있는 우선순위를 이용하여 준비 리스트의 프로세스를 처리한다. 준비 리스트의 프로세스는 프로세서 중심 프로세스와 입출력 중심 프로세스로 구분할 수 있다. 입출력 중심 프로세스는 프로세서를 짧게 자주 사용하도록 하고, 프로세서 중심 프로세스는 프로세서를 길게 사용하되 사용 횟수를 줄여서 유지할 수 있다.



7. 프로세스의 문맥 교환


      • 인터럽트 발생
        1. 입출력 인터럽트
        2. 클록 인터럽트
        3. 시스템 인터럽트 -> 문맥교환이 일어나지 않음.
* 인터럽트 처리 과정




'Computer Theory > Operating System' 카테고리의 다른 글

병행 프로세스와 상호배제(2/2)  (0) 2017.06.24
병행 프로세스와 상호배제(1/2)  (0) 2017.06.23
스레드(Thread)  (0) 2017.06.22
운영체제란? (2/2)  (0) 2017.06.21
운영체제란? (1/2)  (0) 2017.06.21