프로세스

반응형
728x90
반응형

프로세스

일반적인 프로세스의 정의는 '실행중인 프로그램'이다. 프로그램이 실행중이라는 의미는 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태가 되었다는 것이다.

디스크 -> 메모리 (자신만의 메모리 영역(주소공간)이 있다는 의미)

 

▶ 프로그램이란

프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체다.

 

프로세스는 스택, 힙, 데이터, 코드 메모리 구조를 이루고, 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체다.

프로세스 정의 정의
사용자 관점에서 프로세스 주소 공간을 가지고 실행하는 프로그램
시스템 관점에서 프로세스 실행중인 프로그램

https://www.crocus.co.kr/1369

 

프로세스는 프로그램 실행의 인스턴스도 된다. 예를들어 웹 브라우저 창을 2개 열면 프로세스 2개가 생성된다.

 

 

 

프로세스 자원 할당

프로세스가 실행중인 프로그램이 되려면 프로세서 점유 시간, 메모리, 파일, 입출력장치 같은 자원이 필요하다.

프로세스를 생성하거나 실행할 때 이 자원을 할당한다. 

프로세스는 현재의 활동 상태를 나타내는 프로그램 카운터, 프로세서의 현재 활동(레지스터 내용)도 포함한다.

 

▶ 프로세서란

CPU(Central Processor Unit)라고도 한다. 제어장치연산장치레지스터, 데이터 버스로 구성된 디지털 시스템의 핵심 부분이다.

 

프로세스 메모리 구조 

https://velog.io/@cchloe2311/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%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

용어 내용
스택 스택은 데이터를 일시적으로 저장하는 영역이다. 
지역변수에 사용하고, 변수가 범위 밖으로 이동하면 공간을 해제한다. 
호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용하고 함수를 호출할수록 커지고 반환하면 줄어든다.
보통 힙과 인접한 방향으로 점점 커져서 스택 포인터와 힙 포인터가 만나면 메모리가 소진되었다는 의미이다.
힙은 코드 영역과는 별도로 유지되는 자유 영역이다.
동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용한다.
프로세스의 공유 라이브러리와 동적으로 적재된 모듈이 서로 공유하는데, 동적 메모리 할당이 발생하면 보통 위쪽으로 커진다.
데이터 데이터는 프로그램의 가상 주소 공간이다.
전역변수, 정적변수 등을 저장하거나 할당하고 실행하기 전에 초기화한다.
변수 값은 실행 시간에 변경될 수 있으므로 읽기 전용 영역은 아니지만, 읽기 전용 영역이나 읽기&쓰기 영역으로 초기화할 수 있다.
초기화하지 않은 데이터는 데이터 영역의 끝에서 시작한다.
코드 코드는 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역이다.
프로그램을 시작할때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장한다.
프로세스로 변경할 수 없고, 읽기 전용이므로 프로그램이 코드 영역을 침범하여 쓰기를 시도하면 오류가 발생한다.
코드 영역은 공유할 수 있다.

 

더 자세한 설명은 아래 포스팅을 참고하자.

https://devfunny.tistory.com/650?category=902749 

 

운영체제 메모리 구조

Memory Model High Address 메모리 구조에서 높은 주소 영역으로, Heap, Stack 이 포함된다. Low Address 메모리 구조에서 낮은 주소 영역으로, Data 영역, Code 영역이 포함된다. BSS/GVAR Data 영역이 BSS와 GV..

devfunny.tistory.com

 

 

프로세스 상태 변화

프로세스의 상태는 실행 상태와 비실행 상태로 구분할 수 있다.

운영체제가 프로세스를 생성하면 비실행 상태로 초기화해서 실행을 기다린다.

실행중인 프로세스를 종료하거나 인터럽트가 발생하면 비실행 프로세스 중에서 선택한 프로세스를 실행 상태로 바꾼다. (Dispatch)

이때 인터럽트된 프로세스는 비실행 상태가 된다. 실행중인 프로세스는 새로운 자원을 할당받으려고 프로세서를 기다리는 비실행 상태로 바뀌기도 한다.

 

프로세스의 실행과 비실행 상태는 준비, 실행, 대기(보류)로 더 세분화할 수 있다.

프로세스는 시스템에서 준비, 실행, 대기 상태로 바뀌면서 실행하고 종료하는데, 이 과정을 계속해서 반복한다. 

 

https://velog.io/@0mi/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EA%B0%9C%EB%85%90-%EA%B5%AC%EC%A1%B0-%EC%83%81%ED%83%9C-%EB%B3%80%ED%99%94

 

상태 변화 설명 프로세스 이름
실행 상태 -> 준비 상태 프로세스가 프로세서를 자발적으로 반환하기 전에 할당된 시간이 지난 경우

실행 상태의 프로세스가 프로세서를 계속 독점하지 않도록 인터럽트 클록을 두오 특정 프로세스가 할당된 시간 동안만 프로세서를 점유하게한다.

인터럽트 클록이 발생하면 운영체제에 프로세서 제어권을 부여하여 실행 상태의 프로세스는 준비 상태가 되고, 준비 리스트의 첫번째 프로세스가 실행 상태가 된다.
timeout
실행 상태 -> 대기 상태 프로세스를 실행하타 입출력 명령(또는 시간이 많이 필요한 비슷한 요청)이 발생한 경우

할당된 시간 이전에 실행 상태의 프로세스에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 프로세서를 스스로 양도하면 대기 상태가 된다.
block
대기 상태 -> 준비 상태 대기 상태인 프로세스는 대기 원인을 제거하면 준비상태로 변경

프로세스는 입출력 작업이 끝나면 깨움으로 대기에서 준비 상태가 된다.
wakeup
준비 상태 -> 실행 상태 디스패치가 준비상태인 프로세스에 프로세서를 할당한 경우

▶ 디스패처 (dispatcher)
스케줄러가 선택한 프로세스에 프로세서를 할당하는 모듈

▶ 디스패치
준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것

다중 프로그래밍 운영체제에서는 실행 상태인 프로세스가 할당된 시간만큼만 프로세서를 사용하도록 하여 특정 프로세스가 프로세서를 계속 독점하는 것을 방지한다.
dispatch

 

 

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

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

프로세스 제어 블록(PCB)은 특정 프로세스 정보를 저장하는 데이터 블록이나 레코드로, 작업 제어 블록(TCB; Task Control Block) 이라고도 한다.

 

프로세스가 생성되면 메모리에 프로세스 제어 블록을 생성하고, 프로세스가 실행을 종료하면 해당 프로세스 제어 블록도 삭제한다.

 

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

 

 

프로세스의 문맥 교환

인터럽트나 시스템 호출 등으로 실행중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 말한다.

프로세스 문맥 교환이 일어나면 프로세서의 레지스터에 있던 내용을 나중에 사용할 수 있도록 저장한다. 

 

https://wisecoding.tistory.com/12

 

 

프로세스의 구조

프로세스는 실행 중에 프로세스 생성 시스템 호출을 이용하여 새로운 프로세스를 생성할 수 있다.

이때 프로세스 생성 순서를 저장하고 부모-자식 관계를 유지하여 계층적으로 생성한다.

프로세스를 새로 생성하는 프로세스는 부모 프로세스(paraent process)이고, 생성되는 프로세스는 자식 프로세스(child process) 또는 서브 프로세스(sub process)이다.

부모 프로세스는 자식 프로세스를 생성하는 과정을 반복하면서 계층 구조를 형성하는데, 이런 프로세스 계층 구조의 예는 아래와 같다.

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jk130694&logNo=220690149527

 

 

 

 

반응형

Designed by JB FACTORY