hmk run dev

프로세스의 개요 본문

OS

프로세스의 개요

hmk run dev 2024. 3. 3. 12:50

프로세스 직접 확인하기

 

포그라운드 프로세스

- 사용자가 볼 수 있는 공간에서 실행되는 프로세스

 

백그라운드 프로세스

- 사용자가 볼 수 없는 공간에서 실행되는 프로세스

- 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 ex) 데몬, 서비스

 

MAC에서 현재 활성 중인 프로세스 살펴보기

 

 

프로세스 제어블록

모든 프로세스는 실행을 위해 CPU가 필요하다.

But, CPU 자원을 한정되어있다.

 

 

프로세스들은 돌아가며 한정된 시간 만큼만 CPU 이용

- 자신의 차례에 정해진 시간만큼 CPU 이용

- 타이머(타임아웃) 인터럽트가 발생하면 차례 양보

 

 

 

빠르게 번갈아 수행되는 프로세스들을 관리해야

이를 위해 사용하는 자료구조가 프로세스 제어블록 (이하 PCB)

 

- 프로세스 관련 정보를 저장하는 자료구조

- 마치 상품에 달린 태그와 같은 정보

- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기

 

 

 

PCB(Process Control Block)에 담기는 대표적인 정보

 

- 프로세스 ID (= PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 (학교의 학번, 회사의 사번)

- 레지스터 값 :

     프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 => 실행재개

     프로그램 카운터, 스택 카운터 등등...

 

- 프로세스 상태 : 
     입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU 이용 중인 상태

 

- CPU 스케줄링 정보
     프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

   

- 메모리 정보
     프로세스가 어느 주소에 저장되어 있는지에 대한 정보

     페이지 테이블 정보(지금으로서는 '메모리 주소를 알 수 있는 정보가 담기는 구나' 정도로)

  

- 사용한 파일과 입출력장치 정보

    할당된 입출력장치, 사용 중인(열린) 파일 정보

문맥 교환(context switch)

한 프로세스(A)에서 다른 프로세스(B)로  실행순서가 넘어가면?

 

기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업

 

- 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등

- 이러한 중간 정보 == 문맥 (context)

- 다음 차례가 왔을 때 실행을 재개하기 위한 정보

- 실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다.

 

 

뒤이어 실행할 프로세스 B의 문맥을 복구

- 자연스럽게 실행 중인 프로세스가 바뀜

타이머 인터럽트에 의한 문맥교환

 

이처럼 기존의 실행 중인 프로세스 문맥을 백업하고

새로운 프로세스 실행을 위해 문맥을 복구하는 과정을

문맥 교환 (contenxt switching)이라 한다.

=> 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리

 

 

사용자 영역의 프로세스 메모리

 

크게 코드 영역 (=텍스트 영역), 데이터 영역, 힙 영역, 스택 영역

 

코드 영역

- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장

- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역(read-only)

 

 

데이터 영역(정적 할당 영역)

- 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장 ex) 전역 변수

 

 

힙 영역(동적 할당 영역)

- 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간

- 힙 영역에 메모리를 할당 했다면 언제가는 반환해야한다. 일부 프로그래밍 언어에선 GC가 자동으로 처리해주기도 함

- 힙 영역의 메모리가 반환되지 않고 계속해서 쌓이기만 하면 메모리 누수(MEMORY LEAK)이 발생할 수 있음

 

 

스택 영역(동적 할당 영역)

- 데이터가 일시적으로 저장되는 공간

- 잠깐 쓰다가 말 값들이 저장되는 공간 ex) 매개 변수, 지역 변수

 

 

 

힙 역역과 스택 영역의 크기는 가변적

- 프로그램이 컴파일 되는 단계에서 사용할 수 있는 메모리의 크기가 정해지기 때문에 정적할당 역역이다 라는 의견도 있음

 

- 일반적으로 힙 영역은 낮은 주소 => 높은 주소로 할당

- 일반적으로 스택 영역은 높은 주소 => 낮은 주소로 할당

'OS' 카테고리의 다른 글

교착 상태 해결 방법  (0) 2024.03.16
교착상태(Dead lock)  (0) 2024.03.15
CPU 스케줄링  (0) 2024.03.05
스레드란?  (0) 2024.03.05
운영체제의 큰 그림  (0) 2024.03.02
Comments