CS 공부
페이징(외부 단편화, 내부 단편화, TLB) 본문
내부단편화와 외부 단편화
내부 단편화

메모리에 빈공간이 50mb 있고 C작업이 30MB인데 C작업이 실행을 위해 메모리의 빈공간에 적재된다고하면
20MB가 남게된다.
이런 식으로 남는 공간은 너무 작아 다른 작업이 사용하기 힘들게 되는데 이러한 작은 빈공간 낭비를 내부 단편화라고 합니다.
외부 단편화

메모리에 남아 있는 용량은 100mb이지만 50mb씩 나누어져있어 50MB를 넘는 작업이 메모리에 들어가지 못하는 상황입니다. 즉 작업을 하기에 충분한 공간이 남아 있더라도 실제로 그 작업을 받아 들이지 못하는 경우를 외부 단편화라고 합니다.
이러한 내부 단편화 외부 단편화는 메모리 낭비를 심하게 합니다.
단편화 해결 방법
단편화 통합

인접한 단편화 영역을 혹은 빈 영역을 하나로 합치는 방법으로서 프로그램 재배치가 필요 없습니다.
단편화 압축

메모리에 존재하는 여러 흩어진 단편화 영역 혹은 빈 영역들을 한 곳으로 모으는 방법으로 프로그램 재배치가 필요하여 오버헤드가 발생합니다.
페이징
사전 지식
프로세스를 나눈 조각을 page라하고 메모리를 나눈 조각을 frame이라하고 프로세스는 페이지의 집합이고 메모리는 프레임의 집합이다.
페이징이란
비어있는 메모리 공간인 hole을 가지고 해결하려 한 것이 아닌 프로세스를 작은 크기로 나누어서 외부 단편화를 해결하려 하는 기법
페이징은 프로세스를 일정한 작은 크기로 나누는데 프로세스뿐만 아니라 hole도 같은 크기로 나눕니다.
그리고 이러한 작은 조각들의 크기를 맞추어 메모리에 할당합니다.
그리고 조각난 하나의 프로세스를 정상적으로 실행하기 위해서 CPU에게 실제 메모리는 연속적이지는 않지만 연속적으로 사용하고 있는 것처럼 속인다.

위의 이미지에서 P1 프로세스는 5개의 페이지로 나누어져 메인 메모리 5곳에 나누어서 할당 되었다.
CPU는 논리 주소로 프로그램이 설정한대로 연속적인 주소 값으로 명령을 내리는데 이 때 실제 메모리 주소가 저장되어있는 테이블에서 CPU가 명령을 내린 주소 값을 실제 물리적 주소로 변경시킨다.
해당 페이징 기술은 가상 기억 장치를 이용한 보조 기억장치 - 다중 프로그래밍에서도 사용하는데
CPU자리에 메인 메모리 , 메인 메모리 자리에 보조 기억 장치가 들어가고 그 사이에 페이지 테이블이 있다고 생각하면 된다.
페이징 기법의 특징
- 페이징 기법의 블록 크기는 고정적이다.
- 페이지 크기가 작을 수록 더 많은 페이지 테이블이 필요하여 기억공간이 낭비된다.
- 페이지 크기가 작을 수록 내부 단편화 크기는 줄어들게 되고 꼭 필요한 내용만 사용하므로 유용도가 좋아진다.
- 페이지 크기가 작을 수록 자주 사용하는 작업집합을 효율적으로 운영할 수 있고 특정한 참조 지역성만 포함하기 때문에 기억 장치의 효율이 높을 수 있다.
- 페이지 크기가 클수록 페이지 테이블이 복잡하지 않으므로 관리가 용이하다.
페이지 테이블
위에서처럼 나누어져 할당 된 프로세스가 정상적으로 동작할 수 있게 CPU가 명령을 내린 주소 값을 실제 물리적 주소로 변경시키는 것이 페이지 테이블이다.
페이지 테이블은 여러 개의 MMU재배치 레지스터의 집합이다.
MMU 재배치 레지스터란

재배치 레지스터는 CPU가 프로그램을 실행시킬 때 코드를 읽어 들어가는데 코드에서 특정 위치의 메모리 주소로부터 데이터를 가지고 오라는 동작을 할 때 도움을 준다.
CPU가 특정 위치를 가르쳐 주면 재배치 레지스터는 이의 주소에서 메모리에 프로그램이 있는 위치 주소를 더해서 계산을 해서 CPU에서 원하는 데이터 위치와 메모리상에 프로그램의 위치를 맞게 맞추어 준다.
CPU에서 MMU로 보내는 주소를 논리 주소라고 하고 MMU에서 메모리로 보내는 주소는 물리 주소라고 한다.
논리 주소란
CPU가 내는 주소는 2진수로 표현된다.
이를 m비트가 있다고 가정하면. 여기서 하위 n비트는 오프셋(offset) 또는 변위(displacement)라고 한다.
그리고 상위 m-n 비트는 페이지의 번호에 해당한다.(n = d, m-n = p)
페이지 번호(p)는 페이지 테이블의 인덱스 값이고, p에 해당되는 테이블 내용은 메모리의 프레임 번호이다.
페이지 테이블을 만드는 방법
CPU 내부에 페이지 테이블을 만드는 방법
CPU 내부의 여러개의 레지스터 페이지 테이블을 만드는 것이다.
장점: 주소 변환 속도가 빠르다
단점: CPU 내부 사용 가능 레지스터는 한정되어있어 페이지 테이블의 크기 제한
메모리 내부에 만드는 방법
장점: 페이지 테이블의 크기에 제한이 없다
단점: 주소 변환 속도가 느리다. CPU가 프로세세의 주소에 접근하기 위해서 메모리에 위치한 페이지 테이블에 한번 실제 주소로 접근하는데 한번해서 메모리에 총 2번 접근해야하므로 속도 역시 2배로 느려짐
즉 CPU 내부에 페이지를 만드는 방법의 정 반대
TLB
TLB란
- 이 두 가지 방법의 장단점이 확실하기 때문에 이를 해결하기 위해서 페이지 테이블도 캐시로 만들었는데 그것이 TLB이다.
- TLB는 SRAM이고 CPU와 메모리 사이에 위치한다.
단점: CPU보단 변환속도는 느리고 메모리보다 테이블 크기는 작다.
장점: CPU보다 테이블 크기가 크고 메모리보다 변환 속도가 빠르다
TLB는 캐시와 같은 역할을 하므로 실체 전체 페이지 테이블은 메모리에 있고 테이블의 일부를 TLB에 가져와서 사용한다.
따라서 TLB에 유효한 페이지가 있을때와 없을 때 속도차이가 발생한다.
페이지의 보호와 공유
보호
모든 주소는 페이지 테이블을 경유하므로 테이블을 이용하여 보호 기능을 수행 가능
모든 페이지 테이블마다 r(read), w(write), x(execute) 비트를 두어, 해당 비트가 켜져있을 때 그 수행이 가능하도록한다.
공유
공유는 메모리 낭비를 방지하기 위함이다. 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면, 프로세스의 메모리는 code + data + stack 영역으로 나뉘는데 프로그램이 같다면 code 영역은 같을 것이다. 그러므로 하나의 code 영역을 복수 개의 프로세스가 공유하여 메모리 낭비를 줄이는 것이다. 단, code가 공유되려면 code가 변하지 않는 프로그램이어야 한다.
이러한 방식을 통해서 페이징을 진행한다.
외부 단편화를 해결하기 위해서 페이징을 진행하였지만. 페이징은 내부 단편화를 발생 시킨다.
그리고 내부 단편화는 해결할 방법이 없다.
다행인 점은 내부 단편화는 외부 단편화에 비해 낭비되는 메모리 공간은 매우 적다는 점이다.
참고: https://m.blog.naver.com/rbdi3222/220623825770
https://m.blog.naver.com/qbxlvnf11/221367174686
https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-13.-%ED%8E%98%EC%9D%B4%EC%A7%95
https://copycode.tistory.com/93 [ITstory]
'CS공부 > 운영체제' 카테고리의 다른 글
세그먼테이션 (0) | 2021.07.16 |
---|---|
메모리 (0) | 2021.07.15 |
경쟁 상태와 세마포어,뮤텍스 (0) | 2021.07.12 |
데드락(DeadLock) (0) | 2021.07.12 |
CPU 스케줄링 (0) | 2021.07.06 |