[OS] Program? Process?

2020. 5. 3. 17:44Computer Science/운영체제

프로그램(Program)

1. 정의

  º 컴퓨터에서 실행될 때 특정 작업을 수행하는 명령어들의 모음

  º 디스크 내의 실행 가능한 파일

프로세스(Process)

1. 정의

  º 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램. 테스트(task) 라고도 부른다.

  º 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)

  º 운영체제로부터 시스템 자원을 할당받는 작업의 단위

    ex) CPU 시간, 주소 공간, 메모리 영역

  º 프로세스를 구성하는 요소들을 프로세스의 문맥(process contexts) 라고한다.

 

2. 특징

  º 프로세스에 대한 정보는 프로세스 제어블록(PCB)라고 부르는 자료구조에 저장

  º 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, heap 의 구조)을 할당 받는다

  º 각 프로세스는 별도의 주소공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다

  º 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간의 통신(IPC, inter-process-communication)을 사용해야 한다.

    ex) 파이프, 파일, 소켓 등을 이용한 통신 방법 

 

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

1. 정의

  º 프로세스를 관리 하기 위해 필요한 프로세스 요소들의 자료 구조

  º OS가 현재 CPU 제어권을 다른 프로세스에게 넘겨줄 때 실행중인 프로세스의 정보를 PCB에 저장

  º CPU 제어권을 다시 넘겨받은 경우 PCB에 저장되어 있던 정보를 불러와 추후 작업을 실행

 

 

2. 구성

  º PID(Process IDentification)

    - OS가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호

 

  º Process State

    - CPU는 프로세스를 교체하면서 실행되기 때문에 상태를 저장

    - 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated)

 

  º Program Counter

    - CPU가 다음으로 실행할 명령어를 가리키는 값

    - CPU는 기계어를 한 단위씩 읽어서 처리. 다음 실행할 기계어가 저장된 메모리 주소를 가리키는 값.

 

  º CPU 스케줄링 정보

    - 우선 순위, 최종 실행시각, CPU 점유시간 등

 

  º 메모리 관리 정보

    - 해당 프로세스의 주소 공간 등

 

  º 프로세스 계정 정보

    - 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등

 

  º I/O 상태 정보

    - 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

 

프로세스 상태

  º 생성(Create) : 프로세스가 생성 중

    - 프로세스가 생성되었지만 메모리에 적재되지 않은 상태

 

  º 준비(Ready) : 프로세스가 설정되어 대기 중

    - CPU를 할당받기 위해 준비중인 상태

    - Ready Queue에서 대기하고 있는 상태를 의미(물리적인 메모리에 적재된 상태)

 

  º 실행(Running) : 프로세스가 실행되는 중인 상태

    - 프로세스가 CPU를 할당받아 기계어 명령어를 수행중인 상태

 

  º 대기(Block, wait, sleep) : 프로세스가 어떤 사건이 발생하기를 기다리고 있는 상태

    - CPU를 할당해줘도 instruction을 수행할 수 없는 상태

    - DISK에서 FILE을 가져오는것과 같은 오래된 작업을 하고 있거나 프로세스의 진행을 일부로 sleep한 경우

  

  º 종료(Exit) : 프로세스 실행 종료

    - 프로세스가 실행 종료된 상태

    - 프로그램이 메모리에서 해제된 상태

    - 프로세스가 종료되면 정리하는 작업을 진행하는 상태

 

프로세스 상태 전이

 º Dispatch (준비→실행)

    - 프로세스 생성 상태에서 프로세서(Processor)만 할당 받으면 실행 상태로 전이 과정

    - Ready Queue에 있는 프로세스가 CPU를 할당 받아 실행 상태로 전이

    - 스케줄링 알고리즘에 의해 수행

 

 º Timeout (실행준비)

    - 일정 시간이 지나면 스케줄러에 의해 PCB에 저장, 프로세서 반납 후 준비 상태로 전이

    - 실행되고 있는 프로세스 A보다 Ready Queue에 있는 프로세스 B가 우선순위가 높으면, Preemptive Schedule인 경우 프로세스 상태가 서로 변경된다.

 

 º Block (실행대기)

    - I/O 등의 자원 요청 후 즉시 할당 받을 수 없어, 할당 받을 때까지 대기하고 있는 상태로 전이

    - I/O 처리는 CPU가 아닌 I/O 프로세스가 담당 하기 때문에 발생

 

 º Wakeup (대기준비)

    - 필요한 자원이 할당되면 프로세스는 준비상태로 전이

    - 장치 관리자로부터 신호 또는 페이지 인터럽트 처리에 의해 발생

    - 준비 리스트의 맨 뒤에 붙음

 

 º Swap-out (준비지연, 대기지연)

    - 프로세스 생성 후 메모리 부족 또는 준비 상태의 프로세스가 기억장치를 잃은 경우 커널에 의해 메모리를 회수 당하고 중단 상태인 디스크로 Swap-out 됨

 

 º Swap-in (지연→준비, 지연→대기)

   - 기억장치가 다시 할당되는 경우 지연 준비 상태로 전이

   - 디스크에서 다시 활동 상태인 메모리 영역으로 Swap-in 됨

프로세스 메모리 영역

  º Code : 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역     

  º Heap : 필요에 의해 메모리를 동적 할당하고자 할 때 사용하는 메모리 영역

    - 메모리 주소 값에 의해서만 참조

    - 언어별 동적 할당 -> C : malloc, C++/JAVA : new 

  º Stack : 프로그램이 자동으로 사용하는 임시 메모리 영역

    - 지역변수, 매개변수, 리턴 값등이 잠시 사용되었다가 사라지는 영역

    - 함수 호출 시 생성되고 함수가 끝나면 반환

    - Stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 Stack 사이즈가 고정되어 런타임시 Stack 사이즈는 고정

    - 명령 실행 시 자동으로 증가/감소하기 때문에 보통 메모리의 마지막 번지에 지정

  º Data : 전역변수, 정적변수, 배열, 구조체 등이 저장되는 영역

    - 초기화된 데이터는 Data 영역에 저장되고 초기화되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장

    - 함수 내부에 선언된 Static 변수는 프로그램이 실행될 때 공간만 할당되고 해당 함수가 실행 될 때 초기화

 

더보기

※ 스택영역과 힙영역 사이 빈공간이 있는 이유

- 컴파일 타임에 지역변수를 얼마나 사용할지 미리 계산할 수 없기 때문에 런타임에 지역변수 선언 순서에 따라 스택영역은 위쪽으로 주소 값을 매기며 동적 할당될때 힙여역은 아래쪽으로 주소값을 매긴다.

- 주소값을 채워나다가 Heap에서 Stack 방향으로 영역을 침범하는 경우를 Heap overflow라고 하며 Stack에서 Heap 방향으로 영역을 침범하는 것을 Stack overflow라고 한다.

 

 

Reference

- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

- https://woovictory.github.io/2018/12/25/OS-Process/

- https://bowbowbow.tistory.com/16

- https://recorda.tistory.com/entry/20160503%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0

- http://blog.skby.net/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%EC%A0%84%EC%9D%B4