Base and Limit Registers
base register와 limit register쌍은 논리 주소 공간을 정의한다.
CPU는 사용자 모드에서 생성되는 모든 메모리 접근이 해당 사용자의 base와 limit의 사이에 있는지 확인한다.
논리 주소 공간 vs 물리 주소 공간
논리 주소 : CPU에 의해 생성된 주소이고, 가상 주소라고도 불린다.
물리 주소 : 메모리 장치에서 실제 보이는 주소
논리 주소 공간 : 프로그램에 의해 생성된 논리 주소의 집합
물리 주소 공간 : 프로그램에 의해 생성된 물리 주소의 집합
스와핑(Swapping)
스와핑은 메모리 공간이 부족할 경우 일시적으로 수행 중인 프로세스를 디스크로 이동시키고 그 자리에 새로운 프로세스를 동작시키는 것이다.
물리적인 메모리 공간은 한계가 있기 때문에 모든 프로세스를 메모리에 보유하는 것은 불가능하다. 따라서 스와핑을 통해 메모리 공간을 효율적으로 사용하고 우선순위에 따라 프로세스를 관리할 수 있다.
연속 메모리 할당( Contiguous Memory Allocation)
가장 간단한 메모리 할당 방법은 메모리 내의 연속된 블록을 프로세스에 할당하는 방법이다.
메모리를 사용 중인 프로세스가 종료되면, 생기는 빈 공간에 대해서 할당받기 충분한 크기의 프로세스가 새로 점유하게 된다. 이때 필요한 크기의 블록만큼 할당받게 된다.
프로세스가 메모리의 빈 공간을 할당받는 방법에는 3가지가 있다.
First-fit : 처음부터, 바로 이전탐색부터 충분한 크기 hole에 할당한다.
Best-fit : 가장 작은 충분한 크기 hole을 할당한다.
worst-fit : 가장 큰 hole을 할당한다.
단편화(Fragmentation)
연속 메모리 할당의 단점은 외부 단편화(External Fragmentation)이다. 외부 단편화는 여러 프로세스가 메모리에 할당되고 해제되는 과정에서 발생하는 메모리 공간의 파편화를 의미한다.
연속 메모리 할당은 할당받은 프로세스 사이에 빈 공간이 생겨도 다른 프로세스의 크기보다 작은 빈 공간이 생길 수 있기 때문에 사용하지 못하는 메모리 공간이 생긴다.
First-fit을 사용해서 연속 메모리 할당을 하게 되면 메모리 공간의 1/3을 사용하지 못하게 된다.
블록 단위로 프로세스가 메모리 할당을 받게 될 경우에 요청된 사이즈보다 크게 할당해 줄 경우 할당 공간 내부에 사용하지 못하는 공간이 생기는데, 이를 내부 단편화(Internal Fragmentation)이라 한다.
세그먼테이션(Segmentation)
세그먼테이션이란 메모리에 프로세스의 code, stack, heap segment 별로 나눠서 저장하는 방법을 말한다.
이렇게 분할된 세그먼트는 각자의 크기와 주소범위를 가지며 독립적으로 관리된다.
segment table을 만들어 프로세스 별로 base, limit을 관리하고, STBR(Segment-table base register)와 STLR(Segment-table limit register)로 메모리 안의 segment table의 base와 limit을 알 수 있다.
하지만 세그먼테이션 기법을 사용해도 limit가 segment별로 다르기 때문에 hole이 생기게 된다.
따라서 외부 단편화도 여전히 존재하게 된다.
페이징(Paging)
페이징은 물리 메모리를 같은 크기의 프레임(frame)으로 나누고, 논리 메모리를 같은 크기의 페이지(page)로 나눈다.
프로세스를 여러 개의 페이지로 나누고, 페이지 단위로 메모리에 저장한다.
페이지들은 메모리에 연속적으로 저장되지 않고 불연속적으로 저장되기 때문에 저장된 위치에 대한 정보가 필요하다. 이 정보는 페이지 테이블(page table)이라는 곳에 저장되어 있다.
페이지 테이블은 모든 프로세스마다 개별적으로 가지고 있고, 각 페이지의 물리 주소 공간에서의 base 값을 저장한다.
프로세스는 페이지 별로 페이지 테이블에서 base 값을 찾고 offset을 더하여 실제 물리 주소를 알아낼 수 있다.
'OS' 카테고리의 다른 글
[OS] 가상메모리(Virtual Memory) (0) | 2023.10.18 |
---|---|
[OS] 교착상태(Deadlock) (0) | 2023.10.04 |
[OS] 프로세스 동기화 (0) | 2023.09.27 |
[OS] CPU 스케줄링(CPU Scheduling) (0) | 2023.09.20 |
[OS] 스레드(Threads) (0) | 2023.09.14 |