03. 프로세스1

YeJi Kim·2023년 1월 17일
0

운영체제

목록 보기
3/7

프로세스를 생성한다 = 보조기억 장치에 저장된 프로그램을 메모리에 적재하고 실행한다.

  • 포그라운드 프로세스: 사용자가 볼 수 있는 공간에서 실행되는 프로세스. 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스: 보이지 않는 공간에서 실행되는 프로세스. 사용자가 보지 못하는 뒷 편에서 실행되는 프로세스
  • 사용자와 상호작용하지 않고 묵묵히 정해진 일만 수행하는 백그라운드 프로세스 → 유닉스 체계의 운영체제에서는 데몬, 윈도우 운영체제에서는 서비스 라고 부른다.

프로세스 제어 블록

  • 프로세스 제어 블록(PCB): 프로세스와 관련된 정보를 저장하는 자료구조. 프로세스를 식벽하기 위해 필요한 정보들이 저장된다. PCB는 커널 영역에 생성된다. PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기된다.
  • PCB에 담기는 정보
    운영체제마다 차이가 있지만 대표적인 정보는 다음과 같다.
    
    - **프로세스 ID**
        
        특정 프로세스를 식별하기 위해 부여하는 고유한 번호
        
    - **레지스터 값**
        
        해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값들
        
        프로세스는 이전까지 진행했던 작업들을 그대로 이어 실행하기 위해 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원한다.
        
    - **Proram Counter**: 해당 프로세스가 이어서 실행해야 할 명령의 주소를 가리키는 카운터이다.
    - **프로세스 상태**
        
        프로세스의 상태 정보
        
    - **CPU 스케줄링 정보**
        
        프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
        
    - **메모리 관련 정보**
        
        프로세스마다 메모리에 저장된 위치가 다르다. 그래서 PCB에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 한다. 프로세스의 주소를 알기 위해 페이지 테이블 정보를 담고 있다.
        
    - **사용한 파일과 입출력 장치 목록**
        
        프로세스가 실행 과정에서 특정 입출력 장치나 파일을 사용하면 PCB에 해당 내용이 명시된다. 

문맥 교환

  • 문맥: 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보. 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있다.

  • 문맥 교환: 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것이다.

프로세스가 CPU를 사용할 수 있는 시간이 다 되거나 예기치 못한 상황이 발생하여 인터럽트가 발생하면 문맥 교환이 발생한다.

문맥 교환이 자주 발생하면 우리 눈에는 프로세스들이 동시에 실행되는 것처럼 보인다. 문맥 교환을 너무 자주 하면 오버헤드가 발생할 수 있기 때문에 문맥 교환이 자주 일어난다고 해서 반드시 좋은 것은 아니다.

프로세스의 메모리 영역

  • 커널 영역: 프로세스가 생성되면 커널 영역에 PCB가 생성된다.
  • 사용자 영역
    - 스택 영역 동적 할당 영역 : 데이터를 일시적으로 저장하는 공간. 매개 변수, 지역 변수가 대표적. 일시적으로 저장할 데이터는 스택 영역에 PUSH 되고, 더 이상 필요하지 않은 데이터는 POP 됨으로써 스택 영역에서 사라진다.
    - 힙 영역 동적 할당 영역 : 프로그래머가 직접 할당할 수 있는 저장 공간. 메모리 공간을 반환하지 않는다면 할당한 공간이 메모리 내에 계속 남아 메모리 낭비를 초래하는 메모리 누수가 발생할 수 있다.
    - 데이터 영역 정적 할당 영역 : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간. 대표적으로 전역변수가 있다.
    - 코드 영역 정적 할당 영역 : 텍스트 영역이라고도 불리며 기계어로 이루어진 명령어가 저장된다. CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되어 있다. 읽기 전용 공간이다.
    > `동적 할당 영역`: 프로세스 실행 과정에서 크기가 변할 수 있는 영역. 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당된다. 그래야만 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당되는 주소가 겹치지 않는다.
    > 
    
    > `정적 할당 영역`: 프로세스 실행 과정에서 크기가 변하지 않는 영역.
    > 

프로세스 상태

프로세스는 모두 저마다의 상태가 있으며 운영체제는 프로세스의 상태를 PCB에 기록하여 관리

운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리. 프로세스의 상태를 표현하는 방식은 운영체제마다 차이가 있지만 대표적인 상태는 다음과 같다.

  • 생성 상태(new): 메모리에 적제되어 PCB를 할당 받은 상태.
  • 준비 상태(ready): 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태. 준비 상태 프로세스는 차례가 되면 CPU를 할당받아 실행 상태가 된다. 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(dispatch)라고 한다.
  • 실행 상태(running): 실행 상태는 CPU를 할당받아 실행 중인 상태. 실행 상태인 프로세스는 할당된 시간 동안만 CPU를 사용할 수 있다. 이때, 타이머 인럽트 발생 → 준비 상태가 된다. 입출력 발생 → 대기 상태가 된다.
  • 대기 상태(blocked): 특정 이벤트가 일어나길 기다리는 상태. 대표적으로 입출력 장치의 작업을 기다리는 상태. 입출력 작업은 CPU에 비해 처리 속도가 느리기 때문에 입출력 작업을 요구한 프로세스는 입출력 장치가 입출력을 끝낼 때까지 기다려야 한다. 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다린다.
  • 종료 상태(terminated): 프로세스가 종료된 상태. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.

프로세스 계층 구조

  • 프로세스는 실행 중에 프로세스 생성 시스템 호출을 이용하여 새로운 프로세스를 생성할 수 있다. 이때 프로세스 생성 순서를 저장하고 부모 - 자식 관계를 유지하여 계층적으로 생성한다.
  • 프로세스를 새로 생성하는 프로세스는 부모 프로세스, 생성되는 프로세스는 자식 프로세스이다.
  • 자식 프로세스는 운영체제에서 직접 필요한 자원을 얻거나 부모 프로세스의 자원 일부를 사용할 수 있다. 이때 부모 프로세스는 자식 프로세스가 사용하는 자원을 제한하여 시스템 부담을 방지할 수 있다.
  • 부모 프로세스와 자식 프로세스는 PCB를 공유하지 않는다.

[참고자료]
혼자 공부하는 컴퓨터구조+운영체제(저자: 강민철, 출판사: 한빛미디어)

profile
이전의 기록들 👉 https://blog.naver.com/reviewerkyj

0개의 댓글