: 운영체제에서 메모리 관리란 컴퓨터의 메인 메모리 관리를 담당하는 기능이다. 이 역할을 담당하는 장치가 MMU이다. MMU란 CPU 코어 안에 탑재되어 가상 주소를 실제 메모리 주소로 변환해주는 장치이다.
가상 주소(논리 주소)
물리 주소
MMU 동작 원리
메모리 과할당 발생 상황
이러한 과할당을 해결하기 위해선, 빈 프레임을 확보할 수 있어야 한다.
swapping 기법을 통해 공간을 바꾸는 2번 방법과는 달리 1번은 사용자에게 Paging 시스템을 들킬 가능성이 매우 높아서 하면 안된다.
(Paging 기법은 사용자 모르게 시스템 능률을 높이기 위해 선택한 일이므로 들키지 않게 처리해야함)
따라서, 2번과 같은 해결책을 통해 페이지 교체가 이루어져야 한다.
Swapping
: 프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것
backing store(=swap area)
: 디스크 (많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간
※ Paging 시스템에서 일부 페이지가 메모리에서 쫓겨날 때도 swap out 이라고 표현하지만 원칙적으로 swap out은 프로그램을 구성하는 메모리 전부가 쫓겨남을 의미
[ 페이지 교체 ]
[ 오버헤드를 감소시키는 해결법]
이처럼 빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어진다.
페이지 교체가 많이 이루어지면, 이처럼 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생한다.
해당 비트가 set 상태
: 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻 (페이지가 메모리 올라온 이후 한번이라도 수정이 일어났던 것. 따라서 이건 디스크에 기록 해야함)
해당 비트가 clear 상태
: 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황 (디스크와 내용이 같아서 기록할 필요가 없음)
비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법이다.
현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 교체 알고리즘을 사용
FIFO(First In First Out), OPT(Optimal Replacement), LRU(Least Recently Used), NUR(Not Used Recently), LFU(Least Frequently Used)
5라는 페이지를 참조할 때 페이지 프레임의 상태는 (2, 3, 1)이다. 여기서 1을 내보내고 5를 넣었다. 이렇게 한 이유는 앞으로 2,3,5는 사용되지만 1은 사용되지 않으므로 1을 내보낸 것이다.
CPU가 이미 봤던걸 다시 재접근할 때, 메모리 참조 및 인출 과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다
캐시는 flip flop(1비트 소자) 소자로 구성되어 SRAM으로 되어있어서 DRAM보다 빠른 장점을 지녔다.
1) 존재(Hit)하면 해당 명령어를 CPU로 전송
2) 존재하지 않으면(Miss) 명령어를 갖고 주기억장치로 접근
→ 해당 명령어를 가진 데이터 인출
→ 해당 명령어 데이터를 캐시에 저장
→ 해당 명령어를 CPU로 전송
따라서 CPU가 어떤 데이터를 원할지 어느정도 예측할 수 있어야 한다. (캐시에 많이 활용되는 쓸모 있는 정보가 들어있어야 성능이 높아짐)
시간 지역성: 최근에 참조된 주소의 내용은 곧 다음에도 참조되는 특성
공간 지역성: 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
따라서 캐시에 데이터를 저장할 시 특정 자료구조를 사용하여 묶음으로 저장하는데 이를 캐싱 라인이라고 부른다.
가장 기본적인 구조로, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식. 간단하고 빠르지만 conflict Miss 발생
비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식. 저장할 때는 매우 간단하지만, 찾을 때가 복잡함.
Direct + Full 방식이다. 특정 행을 지정하고, 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식. Direct에 비해 검색 속도는 느리지만 저장이 빠르고, Full에 비해 저장 속도는 느리지만 검색은 빠르다.
파일: 의미 있는 정보를 담는 논리적인 단위, 레코드 혹은 블록 단위로 보조 기억장치에 저장
파일 시스템 등장 배경
파일은 정보를 저장할 수 있는 기억 장소 공간이 디스크에 할당되어 있으며 디스크에 존재하는 다른 파일들과 구별할 수 있는 고유의 이름이 존재한다. 디스크에 저장된 파일은 프로세스가 수행을 완료하고 파괴된 후에라도 여전히 남아있게 된다. 이렇게 저장되는 데이터가 점점 많아지면서 그 데이터를 관리하지 않으면 파일을 읽고 쓰는데 많은 자원을 사용하게 되고, 다른 작업에 부하가 걸리게 된다. 그래서 파일 시스템이 효율적으로 파일을 관리할 필요가 생겼다.
파일 시스템의 종류
파일 시스템의 특징
1) kernel 영역에서 동작
2) 파일 CRUD 기능을 원활하게 수행하기 위한 목적
3) 계층적 directory 구조를 가진다.
4) 디스크 파티션 별로 하나씩 둘 수 있음
접근 방법
: 가장 간단한 접근 방법이며 파일의 정보가 레코드 순서대로 차례차례 처리된다. 읽기는 파일의 다음 부분부터 차례로 읽어 나가며 자동적으로 현재 위치를 추적하는 파일 포인터(offset)가 자동으로 증가 된다. 쓰기 작업은 파일의 끝에 추가하며 새로운 파일의 끝으로 파일 포인터가 이동한다. Offset을 맨 앞이나 맨 뒤로 옮길 수도 있고, n개의 레코드 만큼 앞뒤로 건너뛸 수도 있다.
: 직접 접근을 위해서 파일은 고정 길이의 논리 레코드의 집합으로 정의되고 직접 접근 파일은 어떠한 블록이라도 직접 접근할 수 있다. 직접 접근 파일에는 읽거나 쓰기의 순서에 제약이 없다. 직접 접근 파일은 대규모의 정보를 즉각적으로 접근하는 데 아주 유용하며, 대규모 DB가 이러한 유형이다.
: 파일에서 레코드를 찾기 위해서 먼저 이 색인부터 찾아 그에 대응하는 포인터를 얻는다. 그런 다음 그 포인터를 사용하여 파일에 직접 접근하여 원하는 레코드를 찾는다. 크기가 큰 파일을 입출력 탐색할 수 있게 도와주는 방법이다.
1) 1단계 Directory
: 모든 파일이 Directory 밑에 있기 때문에 지원하기 쉽고 이해하기도 쉽다. 그러나 파일이 많아지거나 다수의 사용자가 사용하는 시스템에서는 심각한 제약을 가지고 있다.
2) 2단계 Directory
: 각 사용자는 자신만의 파일 Directory를 가진다. 이 구조는 사용자들을 서로 격리시킬 수 있다. 하지만 협력 작업에 있어서는 이 구조가 단점이 된다.
: 사용자들이 자신의 Sub Directory를 만들어서 파일을 구성할 수 있게 된다. 트리 구조는 하나의 루트 Directory를 가지며 시스템의 모든 파일은 고유한 경로 이름을 가지게 된다. 또한 비트가 0인지 1인지를 통해 일반 파일인지 Directory 파일인지를 구분한다.
: 순환이 발생하지 않도록 하위 디렉터리가 아닌 파일에 대한 링크만 허용하거나, Garbage Collection을 이용해 전체 파일 시스템을 순회하고 접근 가능한 모든 것을 표시한다.