봉황대 in CS

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

Computer Science & Engineering/Operating System

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

등 긁는 봉황대 2022. 7. 7. 17:04

* 본 글은 '운영체제(Operating System: Concepts) 9th edition'의 내용과 2021학년도 1학기에 수강한 '운영체제' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

프로세스 (Process)

실행 중인 프로그램

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

 

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

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

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

 


* 프로그램 그 자체는 프로세스가 아니다!

 

[ 프로그램 ]

명령어 리스트를 내용으로 가진 저장 장치에 저장된 파일(실행 파일)을 뜻한다.

수동적인 존재

 

[ 프로세스 ]

메인 메모리에 존재하며, 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련된 자원의 집합을 가진다.

 능동적인, 상태 변화가 있는 동적인 존재

 

실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다.

 

메모리 상의 프로세스

 

문맥 (Context)

CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등

프로세스의 실행 중단 시 보존되고, 속개 시 복구되어야 하는 프로세스의 모든 실행 정보

1. 사용자 수준 문맥 (User-level context)

메인 메모리의 현재 상태에 대한 정보

 

(1) text 영역 - 프로그램 코드 부분

(2) data 영역 - 광역 변수 부분

(3) stack 영역 - 프로그램 실행시간 스택 부분

 

* BSS (Block Started by Symbol)

: 초기화하지 않는 광역 변수의 경우 컴파일러와 링커는 그 길이만 오브젝트 파일에 저장,

그 후 프로그램 로더가 프로그램을 로드할 때 bss 세션을 위한 메모리를 할당하고 초기화한다.

 

 

* 함수가 return 되고 나서 그 함수 내의 지역 변수를 사용할 수 없는 이유

함수가 호출될 때마다 Call Stack에 자료가 push → return이 일어났을 때 자료가 pop 되어 없어지기 때문이다.

(Call Stack에 대하여 : 2022.07.08 - [Computer Science/Operating System] - Call Stack Frame & ESP, EBP 레지스터)

2. 커널 수준 문맥 (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)에 저장(save),

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

 

 

문맥 교환이 일어나는 시점

총 4가지로, 비자발적 문맥 교환과 자발적 문맥 교환으로 분류할 수 있다.

 

[ 비자발적 문맥 교환 ]

1. 시분할 시스템에서 타임 슬라이스 소진으로 인한 스케줄링 (CPU의 독점 방지)

2. 인터럽트 → 커널에 의해 CPU를 선점당한 경우

 

[ 자발적 문맥 교환 ]

3. 프로세스 스스로의 입출력 요청

4. 다른 프로세스가 보낼 시그널에 대한 대기 요청  → CPU 자진 반납

 

 

반응형
Comments