오래 못 할 짓 하지 않기

[ 운영체제 ] 3. 프로세스 개요 (프로세스 메모리 영역) 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 3. 프로세스 개요 (프로세스 메모리 영역)

쫑알bot 2024. 1. 3. 17:31
728x90

프로세스 = 실행 중인 프로그램 이라고 대략적인 정리를 했다.

 

그렇다면 프로세스를 직접 확인해보자

간단하게 윈두우 작업 관리자로도 확인이 가능하다.

 

프로세스는 주로 두 가지로 나뉘는데

 

1) Foreground process

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

 

2) Background process

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

 

여기서도 둘 로 나뉘는데 

 

- 사용자와 상호작용 가능한 백그라운드 프로세스 

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

 

가 있다.

 


프로세스 제어 블록

그렇다면 OS가 이러한 프로세스를 어떻게 관리할까?

 

→ 프로세스를 실행하기 위해서는 CPU가 필요하다.

그러나, CPU 자원은 제한되어 있다.

 

따라서

프로세스들은 한정된 시간만큼만 CPU를 이용한다.

 - 자신의 차례에 정해진 시간만큼 CPU를 사용하고

 - Timer Interrupt가 발생하면 (시간 다 되면) 차례를 다음 프로세스에게 양보한다.

 

 

위와 같은 방식을 빠르게 번갈아가면서 관리해야 한다.

 

이를 위해 커널 영역에서는

PCB (process control block) 

프로세스 제어 블록이라는 자료구조를 사용한다.

 

1) 프로세스에 대한 정보를 저장하는 자료 구조 = 그냥 상품 태그라고 이해하면 됨

2) 프로세스 생성 → 커널 영역PCB 생성 

    프로세스 종료 → 폐기

 

대표적으로 아래와 같은 정보들이 담긴다.

 

운영체제는 커널영역에 있는 프로세스의 PCB를 보고 관리한다. 

 

정보 분석

● 프로세스 ID ( = PID)

  : 프로세스 식별 번호

 

 

● 레지스터 값

  이게 PCB에 담기는 이유

  프로세스들은 CPU를 사용하면서 그 안에 있는 Register를 사용한다.

  → 정해진 시간 끝

  → 다음 프로세스 애들이 이것저것 다 해두고 감

  → 다시 자기 차례가 왔을 때 뭐를 참고해야하는지 모름 ex) Instruction MEM 주소 = PC 값을 생각하면 된다.

 

= 프로세스 1이 자기 시간 끝날 때 자기 PC값 까먹으면 다음에 돌아와도 뭘 못 함 

 

따라서

 

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

- PC, Stack pointer

 

 

 

● 프로세스 상태

  ( 다음 강의에서 배움 )

- 입출력 장치 쓰려고 기다리는 상태 /  CPU 쓰려고 기다리는 상태 or 이용 중인 상태 등을 나타냄

 

 

● CPU 스케줄링 정보

   : 어느 프로세스가 언제 얼마동안 CPU를 할당받을지에 대한 정보

 

 

 

● 메모리 정보

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

    + 페이지 테이블 정보 ( 아직까지는 자세하게 배우지 않아서, 메모리 주소를 알 수 있는 정보가 있는 곳 정도로 알면 됨) 

 

 

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

   : 할당된 입출력장치, 사용 중인 파일 정보

 

 


 

문맥 교환 ( Context switch )

기존에 실행 중인 프로세스 문맥을 백업

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

 

[ 설명 ]

프로세스 A에서 프로세스 B(다른 프로세스)로 순서가 넘어가게 되면

 

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

         

          ● 백업 목적 

          : 다음 차례가 왔을 때 실행을 재개하기 위해 정보를 남겨두는 것

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

 

            중간 정보 = 문맥(context)은

          - PC값

          - Register 값

          - MEM 정보

          - 열었던 파일 / 사용한 입출력 장치

 

2. 뒤이어 실행할 프로세스(B)의 문맥을 복구한다.

 

 

 

 

 


 

사용자 영역

 

프로세스가 커널 영역에는 PCB를 생성한다. 

그렇다면 사용자 메모리에는 어떤 걸 생성하는지 알아보자

 

● 코드 영역 ( = 텍스트 영역)

  - [ 실행할 수 있는 코드 = 기계어로 이루어진 명령어 ] 가 저장되어 있다.

  - CPU가 실행할 명령어가 담긴다. 따라서 쓰기는 금지! (read-only)

 


 

 

● 데이터 영역

  - 프로그램이 실행되는 동안 유지할 데이터 저장  ex) 전역 변수 

 


 

 

위 두 개는 크기가 고정되어 있다 =  정적 할당 영역

 

아래 두 개는 크기가 가변적으로 변한다. = 동적 할당 영역


 

● 힙 영역

  - 사용자가 직접 할당할 수 있는 저장공간

 

  + 할당을 했으면 반환을 해야함 

     근데 요새는 알아서 해줌  = Grabage collection

 

반환을 안 하고 계속 메모리를 낭비하고 있는 상태 = Memory leak

 

→ 낮은 주소에서 높은 주소로 할당

 


 

● 스택 영역

  - 데이터가 일시적으로 저장되는 공간 = 잠깐 쓰다 버릴 값들이 저장됨 

 ex) 매개 변수 , 지역 변수

 

→ 높은 주소에서 낮은 주소로 할당

 

 

 

 

(출처)

유튜브 한빛미디어