본문 바로가기
운영체제

운영체제 정리 5. 메모리 관리

by sunday5214 2018. 12. 3.

메모리 관리 기법


-고정 분할

-시스템 생성시 주기억장치가 고정된 파티션들로 분할된다. 프로세스는 균등크기의 파티션 또는 그보다 큰 파티션으로 적재 된다.

-강점 : 구현이 간단함, 운영체제의 오버헤드가 적음

-약점 : 내부단편화 발생, 최대 활성 프로세스가 고정됨


-동적 분할

-파티션들이 동적으로 생성되며, 각프로세스는 자신의 크기와 일치하는 크기의 파티션에 적재된다.

-강점 : 내부단편화가 없다. 주기억장치를 효율적으로 사용할 수 있다.

-약점 : 외부 단편화를 해결하기 위한 메모리 집약이 요구된다. 처리기 효율이 나빠진다.


-단순 페이징

-주기억장치는 균등크기의 프레임으로 나뉜다. 각 프로세스는 프레임들과 같은 길이를 가진 균등페이지들로 나뉜다. 프로세스의 모든 페이지가 적재되어야 하며 이 페이지를 저장하는 프레임들은 연속적일 필요는 없다.

-강점 : 외부 단편화가 없다

-약점 : 적은 양의 내부 단편화가 생긴다.


-단순 세그먼테이션

-각 프로세스는 여러 세그먼트(모듈별로, 클래스별로)들로 나뉜다. 프로세스의 모든 세그먼트가 적재되어야 하며 이 세그먼트를 저장하는 동적 파티션들은 연속적일 필요는 없다.

-강점 : 내부단편화가 없고 메모리 사용 효율이 개선됨, 동적분할에 비해 오버헤드가 적음

-약점 : 외부 단편화 발생



외부단편화? 내부단편화?


-외부단편화 : 고정 분할과 같이 고정된 파티션들로 분할 했을 때 그 분할된 파티션보다 메모리에 올라가는 작업이 차지하는 메모리가 작을 경우 비효율적으로 낭비되는 메모리가 생겨나는 것


-내부단편화 : 파티션들을 프로세스가 차지하는 메모리 크기에 맞게 적재 시키는 동적 분할에 발생하는데 예를 들어 15MB의 메모리에 5MB의 크기의 작업을 메모리에 적재 시키고 2MB의 크기의 작업을 메모리에 적재시킨 후 6MB의 크기의 작업을 메모리에 적재 시키면 상대적으로 작업량이 적은 2MB가 먼저 종료되고 4MB의 메모리가 남았지만 딱 3MB의 작업이 메모리에 할당되고 싶어도 할당할 수 없는 상태를 말한다.


페이징과 세그먼테이션의 차이점


-페이징이란?

-주기억장치를 비교적 작은 고정사이즈의 파티션으로 나누고 각 프로세스 또한 같은 크기의 고정 조각으로 나눈다고 가정하고 페이지라 불리는 이 프로세스 조각을 프레임 또는 페이지 프레임이라고 불리는 빈 메모리의 조각에 저장 하는 것, 이 방법은 외부단편화로 인한 메모리 낭비는 없고 내부단편화로 인한 낭비만이 존재하는데 그것도 각 프로세스의 마지막 페이지에서만 생겨난다.


첫 번째 그림은 16개로 프레임을 나눠 놓은 모습이다. 두 번째 그림은 프로세스 A를 적재시킨 상태이다. 세 번째와 네 번째 그림은 각각 B와 C프로세스를 적재시킨 모습이다. 다섯 번째 그림은 B프로세스가 끝나고 스왑아웃된 상태이다. 여섯 번째 그림은 프로세스 D를 적재시킨 모습이다.


-위의 그림에서 알아 볼 수 있듯이 단순 페이징은 고정 분할 방법과 유사하다. 페이징이 고정 분할 방법과 다른 점은 파티션의 크기가 보다 작고 한 프로그램이 하나 이상의 파티션을 차지할 수 있으며, 이 파티션이 꼭 연속적일 필요는 없다는 것이다.


-세그먼테이션

-사용자 프로그램은 세그먼테이션 기법을 이용해서 나누어질 수 있는 데 프로그램과 그와 관련된 데이터들이 여러 세그먼트로 나누어진다. 세그먼트의 최대 길이에는 제한이 있더라도 프로그램의 모든 세그먼트가 같은 크기일 필요는 없다. 세그먼테이션은 동적분할과 유사하지만 가상메모리나 오버레이 같은 방법을 사용하지 않는다면 모든 프로그램의 세그먼트들은 실행을 위해 전부 메모리에 적재되어야 하며 그 외에도 프로그램이 하나 이상의 파티션을 차지할 수 있다는 점과 파티션이 연속적일 필요가 없다는 것이다. 동적할당과 유사하기때문에 외부단편화가 생기게된다.하지만 프로세스가 동적할당보다 더 작은 크기의 여러 조각으로 나누어지기 때문에 외부 단편화가 상대적으로 적은 편이다.


-세그먼테이션과 페이징의 차이점
-페이징이 프로그래머한테 투명한데 비해 세그먼테이션은 보통 프로그래머가 각 세그먼트를 지정할 수 있으며 프로그램과 데이터를 편의대로 나누기 위한 수단으로 제공된다.
-구조적 프로그래밍을 위해서 프로그램 또는 데이터는 더 세분화된 여러 세그먼트들로 나뉠 수 있다. 이런 세그먼트 기법을 사용하는 데 있어 가장 불편한 점은 프로그래머가 세그먼트 최대 크기를 알아야 한다는 것이다.(페이징은 몰라도됨)


배치 알고리즘


-프로세스를 주기억장치로 적재하거나 스왑인 하려고 할 때 충분한 크기의 사용 가능한 메모리 블록이 두 개 이상 있다면 운영체제는 어떤 블록에 할당 할 것인지를 결정해야한다.


-최적적합

-요청된 크기와 가장 근접한 크기의 메모리를 선택한다.


-최초적합

-메모리의 처음부터 검사해서 크기가 충분한 첫 번째 사용 가능한 메모리 블록을 선택한다.


-순환적합

-가장 최근에 배치되었던 메모리 위치에서부터 검사를 시작해 크기가 충분한 다음 위치의 사용 가능한 메모리 블록

을 선택한다.


-최악적합

-요청도니 크기와 가장 용량 차이가 큰 메모리를 선택한다.