- 연속 메모리 할당의 두 가지 문제점
- 외부 단편화
- 물리 메모리보다 큰 프로세스 실행 불가
- 가상 메모리
- 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 페이징, 세그멘테이션
- 페이징
- 프로세스를 일정 크기로 자르록, 이를 메모리에 불연속적으로 할당
- 프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위로 자름
- 메모리의 물리 주소 공간을 프레임이라는 페이지와 동일한 일정한 단위로 자른 뒤
- 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 페이징에서의 스와핑
- 프로세스 단위의 스왑 인, 스왑 아웃이 아닌 페이지 단위의 스왑 인(페이지 인), 스왑 아웃(페이지 아웃)
- 메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 스왑 아웃
- 실행에 필요한 페이지들은 메모리로 스왑 인
- 프로세스를 실행하기 위해 모든 페이지가 적재될 필요 없다
- 물리 메모리보다 큰 프로세스도 실행될 수 있다
- 문제 발생
- 프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는 지 CPU가 일일이 알기 어렵
- 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수 없음
- CPU 입장에서 다음에 실행할 명령어 위치를 찾기 어려워짐
- 페이지 테이블
- (실제 메모리 내의 주소)물리 주소에 불연속적으로 배치되더라도 (CPU가 바라보는 주소)논리주소에는 연속적으로 배치되도록 하는 방법
- 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표
- 프로세스마다 페이지 테이블이 있다
- 내부 단편화
- 페이지 크기가 10KB, 프로세스 크기 108KB?
- 2KB: 내부 단편화
- PTBR
- 프로세스마다 페이지 테이블이 있고,
- 각 페이지 테이블은 CPU 내의 프로세스 테이블 베이스 레지스터(PTBR)가 가리킨다
- 페이지 테이블이 메모리에 있으면? 메모리 접근 시간 두 배로
- 페이지 테이블 참조하기 위해 한 번, 페이지 참조하기 위해 한 번
- TLB
- CPU 곁에 페이지 테이블의 캐시메모리
- 페이지 테이블의 일부를 가져와 저장
- CPU가 접근하려는 논리 주소가 TLB에 있다면 - TLB 히트 - 메모리 접근 한 번
- CPU가 접근하려는 논리 주소가 TLB에 없다면 - TLB 미스 - 메모리 접근 두 번
- 페이징에서의 주소 변환
- 특정 주소에 접근하고자 한다면 어떤 정보가 필요할까?
- 어떤 페이지/프레임에 접근 하고 싶은지
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
- 페이징 시스템에서의 논리 주소
- 페이지 번호와 변위
- 페이지 테이블을 통해 프레임 번호, 변위로 변환된다
- 프레임과 페이지는 크기가 같으므로 각각의 변위끼리의 값은 같다
- 페이지 테이블 엔트리
- 페이지 테이블의 각각의 행
- 유효 비트 - 현재 해당 페이지에 접근 가능한지 여부
- 유효 비트가 0인 페이지에 접근하려고 하면?
- 페이지 폴트라는 인터럽트 발생
- 유효 비트가 0인 페이지에 접근하려고 하면?
- 보호 비트 - 페이지 보호 기능을 위해 존재하는 비트
- 읽기/쓰기/실행 따로 가능 여부를 나누어 설정 가능
- 참조 비트 - CPU가 이 페이지에 접근한 적이 있는지 여부
- 수정 비트 - CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부
- 메모리에 변경된 내용을 보조기억장치에도 새로 바꿔줘야 함
- 특정 주소에 접근하고자 한다면 어떤 정보가 필요할까?
'CS지식 쌓기' 카테고리의 다른 글
페이징의 이점과 계층적 페이징 (1) | 2024.01.04 |
---|---|
페이지 교체와 프레임 할당 (1) | 2024.01.04 |
연속 메모리 할당 (0) | 2024.01.02 |
교착 상태 해결 방법 (0) | 2024.01.02 |
교착 상태(데드락) (0) | 2024.01.02 |