1. 연속 메모리 할당
- 프로세스에 연속적인 메모리 공간을 할당하는 방식
- 스와핑 : 오랫동안 사용되지 않은 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
- 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃 되었던 프로세스가 다시 스왑 인 될 때는 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있다.
- 스와핑의 장점 : 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행 가능하다.
- 메모리 공간에 프로세스를 연속적으로 할당하는 방식
- 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 최초 적합 방식은 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식이므로 검색을 최소화할 수 있고 결과적으로 빠른 할당이 가능하다.
- 최적 적합 : 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합 : 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
- 연속 메모리 할당의 문제점
- 외부 단편화 : 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상
- 해결 방안 : 메모리 압축, 페이징 기법
- 메모리 압축 : 흩어져 있는 빈 공간들을 하나로 모으는 방식
- 단점 : 압축을 하는 동안 시스템은 하던 일을 중지해야한다, 메모리의 내용을 옮기는 작업은 오버헤드를 야기한다.
- 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
2. 페이징을 통한 가상 메모리 관리
- 프로세스를 메모리에 연속적으로 할당하는 방식은 두 가지 문제를 내포하고 있고 그중 하나는 외부 단편화, 그리고 또 하나는 물리 메모리보다 큰 프로세스를 실행할 수 없다는 점이다.
- 가상 메모리 : 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술로 페이징과 세그멘테이션 기법을 사용한다.
- 페이징 : 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임 이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로 할당하는 것
- 페이징을 사용하는 시스템에서는 페이지 단위로 스왑 아웃/스왑 인 된다.
- 메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 스왑 아웃되고, 실행에 필요한 페이지들은 메모리로 스왑 인 된다.
- 즉 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 뜻으로 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있다.
- 이를 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있습니다.
- 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU는 이를 순차적으로 실행할 수 없다.
- 이를 해결하기 위해 페이징 시스템은 프로세스가 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용
- 페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표
- 프로세스마다 각자의 페이지 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다.
- CPU 내의 페이지 테이블 베이스 레지스터는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다.
- 페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배로 늘어나는 문제가 있다.
- 이를 해결하기 위해 CPU곁에 TLB라는 페이지 테이블의 캐시 메모리를 둔다.
- CPU 가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 페이지가 적재된 프레임을 알기 위해 메모리에 접근할 필요가 없으므로 메모리 접근을 한 번만 하면 된다. 이를 TLB히트라고 한다. 반대는 TLB미스이다.
- 페이징에서의 주소 변환
- 하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있어서 특정 주소에 접근하려면 두 가지 정보가 필요
- 어떤 페이지 혹은 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
- 페이징 시스템에서는 모든 논리 주소가 기본적으로 페이지번호와 변위로 이루어져있다.
- 페이지 번호 : 접근하고자 하는 페이지 번호
- 변위 : 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지를 알기 위한 정보
- 하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있어서 특정 주소에 접근하려면 두 가지 정보가 필요
- 페이지 테이블 엔트리 : 테이블의 각각의 행
- 유효 비트 : 현재 해당 페이지에 접근 가능한지 여부
- 페이지가 메모리에 적재되어 있다면 유효 비트1, 아니면 0
- 페이지 폴트 : CPU가 유효 비트가 0인 메모리에 적재되어 있지 않은 페이지에 접근하는 것
- 보호 비트 : 페이지 보호 기능을 위해 존재하는 비트
- 해당 페이지가 읽고 쓰기가 가능한 페이지인지 알수 있는데, 1일 경우 읽고 쓰기가 모두 가능한 페이지이고 0일 경우는 읽기만 가능한 페이지이다.
- 보호 비트는 세 개의 비트(읽기, 쓰기, 실행)로 구현할 수 있다.
- 해당 페이지가 읽고 쓰기가 가능한 페이지인지 알수 있는데, 1일 경우 읽고 쓰기가 모두 가능한 페이지이고 0일 경우는 읽기만 가능한 페이지이다.
- 참조 비트 : CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.
- 적재 이후 CPU가 읽거나 쓴 페이지는 참조 비트가 1로 세팅되고 반대는 0으로 유지된다.
- 수정 비트(더티 비트) : 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 나타낸다.
- 변경된 적이 있는 페이지는 1, 없으면 0
- 수정 비트의 존재 이유 : 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지, 할 필요가 없는지를 판단하기 위해 존재
- 유효 비트 : 현재 해당 페이지에 접근 가능한지 여부
'OS' 카테고리의 다른 글
8. 파일 시스템(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.26 |
---|---|
7. 가상 메모리(2) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.25 |
5. 교착 상태 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.19 |
4. 프로세스 동기화 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.18 |
3. CPU 스케줄링 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.14 |