CS 공부

[CS] {운영체제} 메모리 관리 방식

ogh4554 2025. 5. 3. 15:16

1. 연속 메모리 할당

: 프로세스에 연속적인 메모리 공간을 할당

 

1) 스와핑

- 현재 사용되지 않는 프로세스들을 보조기억장치의 일부 영역으로 쫓아내고 빈 공간에 새 프로세스 적재

 

> 이점

- 프로세스들이 요구하는 메모리 공간 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시에 실행할 수 있음.

 

2) 메모리 할당

- 프로세스는 메모리의 빈 공간에 할당되어야 한다.

- 빈 공간이 여러개 있다면?

> 최초 적합, 최적 적합, 최악 적합

(1) 최초 적합

: 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식

- 검색 최소화, 빠른 할당

 

(2) 최적 적합

: 운영체제가 빈 공간을 모두 검색해본 뒤, 적재 가능한 가장 작은 공간에 할당

 

(3) 최악 적합

: 운영체제가 빈 공간을 모두 검색해본 뒤, 적재 가능한 가장 큰 공간에 할당

 

=> 외부 단편화

- 프로세스들이 실행되고 종료되길 반복하며 메모리 사이에 빈 공간이 생겼지만 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상.

 

=> 외부 단편화 해결 방법

(1) Compaction

흩어져 있는 빈 공간들을 하나로 모으는 방식

프로세스를 재배치시켜 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법

 

(2) 페이징


2. 페이징을 통해 가상 메모리 관리

> 연속 메모리 할당의 두가지 문제점

- 외부 단편화, 물리 메모리보다 큰 프로세스 실행 불가

 

* 가상 메모리

: 실행하고자 하는 프로그램을 일부만 메모리에 적재하여

실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술

(ex. 페이징, 세그멘테이션)

 

1) 페이징이란?

- 외부단편화가 발생했던 근본적인 문제는 각자 다른 크기의 프로세스가 연속적으로 메모리에 할당되었기 때문

 

Q. 만약 모든 적재되는 대상이 같은 크기라면?

=> 프로세스를 일정 크기로 자르고, 이를 메모리에 불연속적으로 할당하는 것

=> 페이징

 

- 프로세스의 논리 주소 공간을 '페이지'라는 일정 단위로 자르고

- 메모리의 물리 주소 공간을 '프레임'이라는 페이지와 동일한 일정한 단위로 자른 뒤

페이지를 프레임에 할당하는 가상 메모리 관리 기법

 

+ 페이징에서도 스와핑이 가능하다

 

2) 문제상황

- 프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는지 CPU가 일일이 알기란 어렵다

- 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수가 없음

- CPU 입장에서 '다음에 실행할 명령어 위치'를 찾기가 어려워짐

=> 페이지 테이블로 해결

 

3) 페이지 테이블

: 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 하는 방법

- 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표

- 프로세스마다 페이지 테이블이 있음!

- 물리적으로는 분산되어 저장되어 있더라도 CPU 입장에서 바라본 논리 주소는 연속적으로 보임

- CPU 는 그저 논리 주소를 순차적으로 실행하면 됨

 

=> 내부 단편화 부작용 야기

 

4) PTBR

- 프로세스마다 페이지 테이블이 있고 각 페이지 테이블은 CPU 내의 프로세스 테이블 베이스 레지스터가 가리킨다.

-> 부작용

- 페이지 테이블이 메모리에 있으면? 메모리 접근시간이 두배로 걸림

(페이지 테이블 참조 한번, 페이지 참조 한번)

 

5) TLB

: CPU 곁에 페이지 테이블의 캐시 메모리

- 페이지 테이블의 일부를 가져와 저장

 

+ CPU가 접근하려는 논리 주소가 TLB에 있다면 = TLB 히트

- 메모리 접근 한번

+ CPU가 접근하려는 논리 주소가 TLB에 없다면 = TLB 미스

- 메모리 접근 두번

 

6) 페이징에서의 주소 변환

- 특정 주소에 접근하고자 한다면 어떤 정보가 필요할까?

(1. 어떤 페이지/프레임에 접근하고 싶은지

2. 접근하려는 주소가 그 페이지/프레임에서 얼마나 떨어져 있는지)

 

- 페이징 시스템에서의 논리 주소 '페이지 번호', '변위'

- 페이지번호, 변위로 이루어진 논리 주소는 페이지 테이블을 통해 프레임 번호, 변위로 변환된다

페이지 번호의 변위와 프레임 번호의 변위는 같다

 

7) 페이지 테이블 엔트리(PTE)

: 페이지 테이블의 각각의 행

- 이전까지 설명한 PTE : 페이지 번호, 프레임 번호

 

>> 이외에 담기는 정보

(1) 유효 비트

: 현재 해당 페이지에 접근 가능한 지 여부

Q. 유효비트가 0인 페이지에 접근하려고 하면?

-> 페이지 폴트라는 인터럽트가 발생됨.

a. CPU는 기존의 작업 내역을 백업

b. 페이지 폴트 처리 루틴 실행

c. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경

d. 페이티 폴트를 처리했다면 CPU는 해당페이지에 접근 가능

 

(2) 보호 비트

: 페이지 보호 기능을 위해 존재하는 비트

ex. 읽기만 가능한, 읽기/쓰기 가능한 페이지 구분

 

(3) 참조 비트

: CPU가 이 페이지에 접근한 적이 있는지 여부

 

(4) 수정 비트

: CPU가 이 페이지의 데이터를 쓴 적이 있는지 여부

Q. 수정 비트의 존재 이유?

- 스와핑에 사용

- 수정된 페이지는 스왑 아웃 될 때 보조기억장치에도 쓰기 작업을 거쳐야 함.

 

 

'CS 공부' 카테고리의 다른 글

[CS] {네트워크} 네트워크란?  (2) 2025.05.11
[CS] {운영체제} 파일  (0) 2025.05.07
[CS] {운영체제} 교착상태(데드락)  (0) 2025.04.25
[CS] {운영체제} 동기화  (0) 2025.04.22
[CS] {운영체제} CPU 스케줄링  (0) 2025.04.21