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 |