CS 공부

프로세스 본문

CS공부/운영체제

프로세스

kluiop1 2021. 7. 5. 00:43

프로세스란

프로그램이란 디스크 내의 실행 가능한 파일을 말하며,

프로세스란 현재 실행 중인 프로그램을 말하며 태스크(task)라고도 부른다.

프로세스는 시스템 작업의 기본단위로 모든 운영체제는 프로세스 개념을 바탕으로 동작한다.

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

 

프로세스의 문맥이란

- CPU 수행 상태를 나타내는 하드웨어 문맥

- 프로그램 카운터등 레지스터의 값들

- 프로세스의 주소공간의 주소 값들

- 프로세스 관련 커널구조 포함 (PCB, 커널 스택)

 

PCB

프로세스가 하나 시작될 때마다 운영체제에서 그 프로세스에서 상태 정보를 포함하여 생성하는 것

각 프로세스가 생성될 때 각 프로세스에 대한 고유의 PCB가 생성되고 프로세스가 완료되면 PCB는 제거됩니다.

 

PCB 프로세스 상태 관리와 문맥 교환(Context switch)시에 프로세스의 상태를 알기위해서 필요하다.

 

커널의 주소 공간에서 data에 해당하는 부분에 PCB를 저장해둔다.

 

즉 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스를 PCB라고 한다.

 

 

프로세스의 문맥을 알고 있어야하는 이유

 

하나의 CPU가 여러개의 프로세스를 동시에 수행하기 위해서 이전에 수행하고 있던 프로세스가 어디까지 진행되었는지를 알아야 할 필요가 생긴다. 그렇게 해야 효율적으로 관리가 가능하다.

 

 

즉 간단하게 말하면 보조 저장장치(ex.디스크) 프로그램이 메인 메모리로 적재되면 프로세스가 된다.

 

 

특징

프로세스는 각각 독립된 메모리 영역을 할당받는다.

기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

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

한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 한다.

 

프로세스의 독립된 메모리 공간

구역을 나눈 이유는 메모리 효율 관점

stack : 지역변수 할당과 함수 호출 시 전달되는 인자 값들을 저장하기 위한 공간

heap : 동적 할당을 위해 존재하는 공간

data : 전역 변수나 static 변수의 할당을 위해 존재하는 공간

code : 프로그램을 실행시키면 실행파일 내에 존재하는 명령어가 메모리상에 올라가야 프로그램을 동작시킬 수 있다. 이 명령어들을 위해 존재하는 공간(쉽게 말해 소스코드가 올라간다고 생각하면 됨)

 

stack을 제외하면 낮은 주소 -> 높은 주소 순으로 데이터가 저장된다.

 

프로세스 상태

프로세스 상태를 통해서 프로세스를 관리할 수 있다!

 

생성(New) : 프로세스가 생성 중

프로세스가 생성되었지만 프로그램이 메모리에 적재되지 않은 상태 즉 실행이 불 가능한 상태

 

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

CPU를 할당받기 위해 큐에서 대기 중인 상태, 메모리에 적재된 상태이다.

 

실행(Running) : 프로세스가 실행하는 중

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

 

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

지금 바로 CPU를 할당해줘도 명령을 수행할 수 없는 상태

오래 걸리는 작업을 하고 있거나 다른 프로세스의 진행을 위해 일부러 재워둔 경우에 해당한다.

 

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

프로세스가 실행 종료된 상태, 즉 프로그램이 메모리에서 해제된 상태

 

지연 대기(Suspended Waiting)

프로세스가 대기 상태에서 기억 장치를 잃은 상태

 

지연 준비(Suspended Ready)

프로세스가 기억장치를 제외한 다른 모든 필요한 자원들을 보유한 상태

 

프로세스 상태 전이

프로세스는 아래와 같은 상태 전이를 가지며 주로 아래와 같이 명명한다.

 

디스패치(Dispatch) : 준비 -> 실행

우선 순위가 높은 프로세스 선정하여 명령어 실행

 

타임 아웃(Time out) : 실행 -> 준비

클럭이 인터럽트를 발생시켜 제어권을 빼앗음(Preemption, 독점 방지)

 

대기(block) 또는 사건 준비(Event Wait) : 실행 -> 대기

프로세서가 입출력, 자원 등을 기다리기 위해 대기로 전환

 

깨움(wake up) 또는 사건 발생(Event Occurs) : 대기 -> 준비

입출력이 완료되거나 자원이 할당되어 다시 실행

 

Swap-out: 준비 -> 지연 준비 or 대기 -> 지연 대기

준비(대기) 상태에서 기억 장치를 반납하고 지연 준비(지연 대기) 상태로 전이

 

Swap-in: 지연 준비 -> 준비 or 지연 대기 -> 대기

지연 준비(지연 대기) 상태에서 기억 장치를 할당받아 준비(대기) 상태로 전이

 

상태전이 동작 그림

 

지연상태 표시 상태 전이 그림

Context Switch(문맥 교환)

CPU를 어떤 프로세스에서 다른 프로세스로 넘겨주는 과정을 말한다.

 

cache memory에 있던 진행하던 프로세스에 대한 cache를 모두 비워줘야 하기 때문에 다른 프로세스로 넘어가는 과정은 상당한 오버헤드를 발생시킨다.

 

따라서 문맥 교환이 일어나는 상황은 크게 두 가지 경우이다.

 

1. Interrupt 중에서도 timer interrupt가 들어왔을 때와 I/O 요청 System Call이 들어왔을 때이다.

2. 전환하는 동안에는 어떠한 유용한 작업도 불가능하다.

 

참고: https://itwiki.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C

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

'CS공부 > 운영체제' 카테고리의 다른 글

시스템 호출(System Call)  (0) 2021.07.05
PCB와 Context Switching, IPC  (0) 2021.07.05
운영체제란?  (0) 2021.07.03
운영체제 2020-1학기 중간고사 대비 3-2  (0) 2021.07.01
운영체제 2020-1학기 중간고사 대비 3-1  (0) 2021.07.01