본문 바로가기
CS/운영체제

[Chapter 3. 프로세스] 프로세스와 문맥

by 베어 그릴스 2022. 8. 16.
320x100
본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다.

 

 

프로세스 (Process)


실행 중인 프로그램

시스템 콜을 통해 자원을 요구하는 주체

 

* 운영체제(시스템) 프로세스 : 운영체제가 필요에 의해 생성, 시스템 코드를 실행한다.

* 사용자 프로세스 : 사용자 코드(응용 프로그램)를 실행한다.

→ 자원 경쟁 측면에서 둘은 동일하다.

 

 

*프로그램 vs 프로세스

프로그램과 프로세스는 명백히 다른 개념이다. 프로그램은 명령어의 리스트를 내용으로 가진 저장장치에 저장된 단순 실행파일일 뿐이고, 프로세스는 해당 프로그램이 메인 메모리에 올라와서, 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련된 자원의 집합을 가진다. 즉, 프로세스는 상태변화가 있는 동적인 개체이고, 프로그램은 상태변화가 없는 정적인 개체이다.

 

프로세스의 문맥(Context)


문맥이란 프로세스의 실행 중단 시 보존되고, 속개 시 다시 원상 복구되어야 하는 프로세스의 모든 실행 정보이다.

 

시분할에 따른 멀티태스킹 환경에서 프로세스는 실행되고 중단되고의 상태가 계속 반복되고 이에 따라 현재 실행 정보를 저장할 필요가 있고 이에 문맥 정보를 가지고 있다.

 

문맥은 크게 사용자 수준 문맥커널 수준 문맥으로 나눌 수 있다.

 

 

사용자 수준 문맥


보통 메인 메모리의 현재 상태를 사용자 수준 문맥이라 한다.

 

(1) text 영역 - 프로그램 코드 부분 (우리가 작성한 코드)

(2) data 영역 - 광역 변수 부분 (흔히 전역변수라고 부르는 변수 데이터)

(3) stack 영역 - 프로그램 실행시간 스택 부분 (함수 내부의 지역 변수)

(4) heap 영역 - 동적으로 할당한 데이터들이 들어가는 공간 (자료구조 혹은 배열 등의 동적 할당 데이터)

(5) bss 영역 - Block Started by Symbol. 초기화하지 않는 광역변수의 경우 일반적으로 컴파일러와 링커는 길이만 오브젝트 파일에 저장하고, 그 후 프로그램 로더가 프로그램을 로드할 때 bss 섹션을 위한 메모리를 할당하고 초기화함

 

코드가 메인메모리에 할당되는 예시

함수에서 생성한 지역변수를 밖에서 사용하지 못하는 이유는 해당 함수가 실행될 때,함수의 데이터가 stack에 push되고 종료되면 stack에서 pop되기 때문이다. (Call stack frame 개념)

 

참고: https://developbear.tistory.com/98

 

[Chapter 3. 프로세스] 프로세스와 문맥

본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다. 프로세스 (Process) 실행 중인 프로그램 시스템 콜을 통해 자원을 요구하

developbear.tistory.com

커널 수준 문맥 (Kernel-level context)


커널이 관리하는 내용에 대한 정보

 

(1) CPU 내의 각종 특수 레지스터의 내용 - 문맥 보존에 굉장히 중요!!!

 

* 프로그램 카운터 (PC)

     text 내 다음으로 수행할 명령어의 주소를 담고 있는 레지스터

 

스택 포인터 (SP)

     Call Stack의 top에 해당하는 주소를 저장하는 레지스터

 

* CPU 상태 레지스터 (Program Status Register, PSR)

     명령어 실행 후 그 결과로 생겨나는 CPU의 상태를 저장

     decode 한 명령어를 수행할 때 조건으로 작용 가능, 다음 명령어를 수행할 때 중요한 정보로 반영 가능

 

(2) CPU 내의 각종 범용 레지스터 내용 - 프로그램 수행용 (일반 계산용)

(3) 프로세스의 현재 각종 자원 사용 정보

(4) 커널의 프로세스 관리 정보

 

문맥 교환 (Context Switch)


CPU의 점유를 다른 프로세스로 교체하기 위해

실행이 정지되는 프로세스의 문맥은 보존하고, 새로 실행되는 프로세스의 보관된 문맥을 활성화(복구)하는 작업

 

 

(1) 사용자 수준 문맥

 

메모리에 존재하기 때문에 따로 보존하거나 복구하는 작업이 필요하지 않는다.

 

(2) 커널 수준 문맥 (CPU에 있던 레지스터의 내용들)

 

추후의 복구를 위해 PCB(Process Control BLock)에 특수 Register(Program Counter, Stack Pointer, PSR) 및 범용 Registers, 등을 저장(save)

스케줄링된 새로운 프로세스의 문맥이 적재(restore)된다.

 

1. 비자발적 문맥 교환

(1) 시분할 기반의 스케줄링

(2) 인터럽트로 인해 CPU를 선점당함

 

2. 자발적 문맥 교환

(1) 프로세스 스스로 입출력 요청

(2) 프로세스 스스로 다른 프로세스가 보낼 시그널에 대한 대기 요청을 하여 CPU를 반납

728x90