본문 바로가기
운영체제

[OS] 운영체제 - 프로세스의 개념과 상태 변화

by Seong-Jun 2021. 12. 30.
728x90
반응형
SMALL

프로세스의 개념

다중 프로그래밍 환경에서는 여러 프로그램을 메모리에 적재하여 병행 실행할 수 있어 컴퓨터의 효율을 높일 수 있습니다. 병행 실행하는 프로그램들은 컴퓨터 자원을 공유하는데 이를 제어하는 방법이 프로세스입니다.

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

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

 사용자 관점에서의 프로세스는 주소 공간을 가지고 실행 중인 프로그램이고, 시스템 관점에서의 프로세스는 실행 중인 프로그램입니다. 실행 순서를 결정하는 스케줄러는 디스크에 저장된 프로그램에 프로세서를 할당해서 장치나 메모리 같은 파일 자원을 참조합니다. 그리고 프로세스를 지원하고 협력하여 교착 상태, 보호, 동기화 같은 정보를 교환합니다.

스택(Stack)

스택은 데이터를 일시적으로 저장하는 영역입니다.

힙(Heap)

힙은 코드 영역과는 별도로 유지되는 자유 영역입니다.

데이터

데이터는 프로그램의 가상 주소 공간입니다.

코드

코드는 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역입니다.

 

프로세스 2개가 동일한 문서 편집기를 사용하고 데이터 영역이 같더라도 스택 영역은 서로 달라 별개의 프로세스로 인식합니다.

 

프로세스의 종류

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

 

프로세스의 상태 변화

생성 -> 비실행 ->(디스패치)-> 실행 -> 종료

           비실행 <-(인터럽트)<- 실행

  • 비실행 : RAM에 올라간 상태 -> 메인 메모리에 올라가 있는 상태
  • 실행 : CPU로 할당받은 상태

프로세스의 상태 변화는 운영체제가 작업 스케줄러와 프로세스 스케줄러 같은 프로세서 스케줄러를 이용하여 관리합니다. 작업 스케줄러는 스풀러가 디스크에 저장한 작업 중 실행할 작업을 선정하고 준비 리스트에 삽입하여 다중 프로그래밍의 정도를 결정합니다.

그림으로 배우는 구조와 원리 운영체제 그림 3-5 프로세스의 상태 변화

  • 준비 -> 실행
    • 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것을 디스패치라고 합니다.
    • 다중 프로그래밍 운영체제에서는 실행 상태인 프로세스가 할당된 시간만큼만 프로세서를 사용하도록 하여 특정 프로세스가 프로세서를 계속 독점하는 것을 방지합니다.
  • 실행 -> 준비
    • 운영체제는 실행 상태의 프로세스가 프로세서를 계속 독점하지 않도록 인터럽트 클록을 두어 특정 프로세스가 할당된 시간 동안만 프로세서를 점유하게 합니다. 타임 아웃되어도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세서 제어권을 부여하는 것입니다. 그러면 실행 상태의 프로세스는 준비 상태가 되고, 준비 상태가 되고, 준비 리스트의 첫 번째 프로세스가 실행 상태가 됩니다.
  • 실행 -> 대기(보류)
    • 할당된 시간 이전에 실행 상태의 프로세스에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 프로세서를 스스로 양도하면 대기 상태가 됩니다.
  • 대기(보류) -> 준비
    • 프로세스는 입출력 작업이 끝나면 깨움(wake up)으로 대기에서 준비상태가 됩니다.

 

PCB(프로세스 제어 블록)

운영체제가 프로세스를 제어할 때 필요한 프로세스 상태 정보는 PCB에 저장됩니다. PCB는 특정 프로세스 정보를 저장하는 데이터 블록이나 레코드로, 작업 제어 블록(TCB)이라고도 합니다.

 프로세스가 생성되면 메모리에 PCB를 생성하고, 프로세스가 실행을 종료하면 해당 PCB를 삭제합니다.

 

PCB의 정보

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

 

프로세스의 문맥 교환

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

728x90
반응형
LIST

댓글