Skip to main content

Command Palette

Search for a command to run...

[ 살펴보기 ] Operating System - 메모리 할당, 페이징

Updated
3 min readView as Markdown
[ 살펴보기 ] Operating System - 메모리 할당, 페이징
C

A developer living in Busan, Korea

프로세스의 실행을 위해선 메모리에 적재되어야 한다. 만약 프로세스 1, 프로세스 2, 프로세스 3을 차례대로 메모리에 적재하여 실행할 때 각 프로세스의 크기만큼 메모리를 할당하고 각 프로세스를 연속으로 적재하는 방식을 연속 메모리 할당이라고 한다.

연속 메모리 할당

메모리 공간에 프로세스를 연속으로 할당하는 방식에는 대표적으로 First fit, Best fit, Worst fit 세 가지 할당 방식이 있다.

  • First fit : 운영체제가 메모리 내의 빈 공간을 발견하면 그 공간에 프로세스를 적재한다.

  • Best fit : 운영체제가 비어있는 메모리를 모두 검사한 뒤 프로세스가 적재될 수 있는 가장 작은 메모리 공간에 프로세스를 적재한다.

  • Worst fit : 운영체제가 비어있는 메모리를 모두 검사한 뒤 프로세스가 적재될 수 있는 가장 큰 메모리 공간에 프로세스를 적재한다.

외부 단편화

프로세스를 연속으로 메모리에 적재하는 방법은 심플하고 직관적이지만 외부 단편화라는 문제점이 발생한다. 만약 사용자 메모리 영역에 사용할 수 있는 공간이 500mb이고. 그리고 현재 프로세스가 차지하고 있는 메모리 공간은 다음과 같다라고 가정해보자.

  • 프로세스 1 : 300mb

  • 프로세스 2: 50mb

  • 프로세스 3: 100mb

  • 프로세스 4: 50mb

그리고 시간이 흘러 프로세스 2와 프로세스 4가 종료된다면 프로세스 2와 프로세스 4가 적재되었던 자리는 다시 50mb의 여유분이 생긴다. 50mb 두 장소에 여유분이 생겼으므로 100mb 메모리 공간이 필요한 프로세스를 실행할 수 있겠는 생각이 들지만 위 상황에서는 불가능하다.

100mb 크기의 여유 공간이 아니라 50mb 크기의 여유 공간이 나뉘어져 존재하므로 100mb의 여유 공간이 필요한 프로세스가 한번에 적재될 공간이 없기 때문이다. 그리고 이러한 현상을 외부 단편화라고 한다.

이러한 외부 단편화로 인해 발생하는 메모리 낭비를 방지하기 위해 운영체제는 페이징 기법을 사용한다.

페이징

페이징 기법은 메모리와 프로세스를 일정한 크기로 자르고 이를 메모리에 불연속적으로 할당할 수 있게 해준다. 예를 들어 서로 다른 크기의 메모리가 요구되는 프로세스 1,2,3,4를 각각 특정 크기로 잘라 메모리에 할당한다.

페이징은 각 프로세스의 논리 주소 공간을 page라는 단위로 자르고 메모리의 물리 주소 공간을 page와 같은 크기의 frame이라는 단위로 잘라 각각의 page를 frame에 할당하여 메모리를 관리한다.

그렇게 page로 나뉘어진 프로세스는 메모리에 불연속적으로 배치될 수 있는데 CPU 입장에선 프로세스가 메모리에 불연속적으로 배치되어 있으면 프로세스를 순차적으로 실행하기가 어려워 진다.

이 문제를 해결하기 위해 페이징 기법은 프로세스의 각 page가 메모리의 어떤 frame에 할당 되어 있는지의 정보를 관리하는 page table을 통해 실제로는 프로세스의 page가 불연속적으로 메모리에 적재되어 있더라도 프로세스를 정상적으로 실행할 수 있게 도와준다.

프로세스마다 각자의 page table을 가지고 있으며 page table 역시 메모리에 적재된다. 그리고 CPU의 Page Tabel Base Register는 실행되고 있는 프로세스의 page table이 적재된 메모리 주소 정보를 가리킨다.

추가로 Translation Lookaside Buffer라는 page table 캐시 메모리에 최근 접근한 page 정보를 저장해두고 매번 page frame 정보를 찾기 위해 메인 메모리에 접근하는 대신 캐시 메모리를 우선 체크하여 정보가 캐시 메모리에 있다면 해당 정보를 사용한다.

Page Table Entry

Page Table Entry는 page table의 각 행을 말한다. Page Table Entry에는 프로세스의 page 정보와 메모리의 frame 정보 외의 Valid bit, Protection bit, Reference bit 등 다른 중요한 정보가 함께 포함된다.

  • Valid bit : 해당 page에 접근이 가능한지 여부를 나타낸다. 특정 페이징이 스와핑으로 인해 스왑 영역에 있다면 해당 page는 현재 접근할 수 없는 상태이므로 valid bit가 0이 된다. 반면 현재 메모리에 적재되어 있는 page의 valid bit는 1이다.

  • Protection bit : Read와 Write 모두 가능한 page인지 혹은 read만 가능한 page인지를 나타낸다. 1이면 write, read 모두 가능하고 0이면 read만 가능하다. 또는 r,w,x와 같이 각 행위를 나누어 Protection bit를 구성할 수도 있다. 예를들어 Protection bit가 100이라면 read가 1 write가 0 execute가 0이므로 read만 가능한 page를 뜻한다.

  • Reference bit : CPU가 해당 page에 접근한 적이 있는가를 나타낸다. 한 번이라도 read 또는 write 행위가 발생한 page는 해당 bit가 1이되고 그렇지 않다면 0으로 유지된다.

More from this blog

[ 살펴보기 ] TypeORM - Transactions, Migration

Transation Database 종류에 따라 detail한 부분은 차이점이 조금씩 있겠지만 각 sql statement는 개별적인 transaction block을 통해 실행되며 Database 설정에 따라 sql statement의 실행 결과가 자동으로 commit되어 영구히 적용되거나 commit을 직접 실행하기 전까지는 영구히 적용되지 않을 수 있다. 대부분의 경우 default로 sql statement 실행 결과가 자동으로 comm...

Feb 9, 20256 min read
[ 살펴보기 ] TypeORM - Transactions, Migration

Dev Diary

184 posts