[Operating System] Paging / Segmentation
메모리 파티셔닝에서 relocation 없이 Fragment 메모리를 효과적으로 사용하기 위해 Paging 전략이 도입됐다.
프로세스를 일정 조각으로 조각내고 메모리를 할당하는 방식으로, 기본 단위로 4KB를 사용한다.
고정 분할 방식에서는 메모리를 일정한 크기로 분할했는데, 이런 컨셉을 페이징에서도 사용한다.
다만 페이징에서는 하나의 프로세스가 여러 개의 페이지로 나뉘어서 메모리에 할당된다.
메모리 한 조각은 page frame이고, 그 안에 들어가는 프로세스의 조각을 page라고 부른다.
프로세스도 여러 page로 나뉘어서 할당되는 부분에 집중하자. 프로세스가 연달아서 배치되지 않아도 돼 External Fragment를 고려하지 않아도 된다.
Internal Framgent는 여전히 발생할 수 있지만, 어차피 페이지의 기본 단위가 4KB라서 사소하다.
현대 운영체제도 4KB정도는 무시하고 사용하는 편.
공간을 효과적으로 사용할 수 있지만.. 일단은 연달아서 위치하지 않기에 프로그램을 실행할 때 추가 작업이 필요하다.
운영체제는 메모리 관리를 수행할 때 페이징 기법을 사용하는데, 페이징 기법을 수행하기 위해서는 Page Table이 꼭 필요하다.
페이지 테이블은 프로세스마다 하나씩 만들어지고, PCB에 저장된다.
프로세스를 구성하는 페이지가 메인메모리에서 어느 위치에 속하는지를 기록해 둔 테이블이라고 생각하자.
이렇게 테이블을 구성해두면 물리적으로는 페이지들이 떨어져 있지만 순차적으로 접근할 수 있다.
파일시스템의 Super 블럭에 저장되는 Free Frame List도 페이징 테이블로 관리하고, 비어 있는 경우 N으로 처리한다. (NULL)
그림에서 프로세스 B는 suspended 상태이다. (swap out)
페이징을 사용하면 relocation 없이 메모리를 효과적으로 사용할 수 있지만, 페이지 테이블을 사용해야 하니 메모리를 좀 더 사용하고 Logical Address가 두 가지로 구성된다는 단점이 발생한다.
페이징 방식을 사용하면 Logical Address가 페이징 번호와 페이지 내부에서의 offset으로 구성된다.
좌측은 메모리 파티셔닝을 사용할 때의 주소 체계, 우측은 페이징을 사용할 때의 주소 체계를 보여준다.
페이징의 크기가 1KB라고 가정하자.
프로세스 전체 크기가 2700byte이니 세 개의 페이지로 구성되는데, 세 번째 페이지에는 사용하지 않는 부분이 있다. (Internal Fragment)
1502번지에 access할 때, 페이징을 사용하지 않으면 바로 접근할 수 있지만 페이징을 사용할 때는 "n번 조각에서 m만큼 떨어진 곳이다"처럼 상대적인 위치로 표현해야 한다.
즉, 페이징을 사용할 때는 페이지1의 478번지 이렇게 표현해야 함
같은 말이긴 한데 이런식으로 표현할 수도 있다. 주소비트 8개를 페이지에 4개 offset에 4개 할당해서 사용함.
16비트 기반 컴퓨터에서 주소를 해석해보자.
비트는 같은데 해석하는 방식이 다르다.
페이지 하나가 1KB -> 10비트 사용해서 offset 표현
나머지 비트는 다 페이지 번호로 사용한다.
Logical Address를 Physical Address로 변환할 때는 페이지 테이블을 보고 인덱스를 찾아가는 방식으로 수행된다.
테이블에 있는 Frame Number를 가져오고 offset은 그대로 사용하자.
segmentation도 프로세스를 조각내서 메모리에 할당하는 방식이지만, segment라는 가변 단위를 사용한다.
(Dynamic Partitioning + 프로세스 조각내기)
프로세스를 구성하는 세그먼트들은 성격이 같은 요소별로 묶인다. (subroutine, stack ...)
메모리의 빈 공간에 각 세그먼트를 집어넣는다.
페이징처럼.. 물리적으로는 섞여있지만 논리적으로는 세그먼트 테이블을 통해 연속적으로 접근할 수 있다.
테이블은 시작 주소와 세그먼트의 길이를 저장하고, 역시 프로세스마다 생성돼 PCB에 저장된다.
빈 메모리에 할당할 때는 어느 위치에 할당할 지 정하기 위해 First Fit, Worst Fit 등 메모리 할당 알고리즘을 사용한다.
Address Translation 수행 시간도 길고, 메모리 할당 알고리즘을 사용해야 해서 시간이 오래 걸린다.
혁신적인 방식이지만.. 페이징 보다 시간이 더 걸려서 현대 운영체제에서는 세그멘테이션 대신 페이징을 사용한다.
페이징 방식을 사용하기에 메인 메모리는 프레임(4KB) 단위로 나뉜다. 빈 자리에는 파일을 열 때 사본을 저장하는 공간으로 사용된다.
어차피 프로세스를 조각내서 메모리에 넣으니.. 프로세스 조각을 일부만 메모리에 넣고 나머지는 가상 주소 공간에 넣고 필요할 때 메모리에 넣는 방식을 사용해보자.
가상 주소 공간을 보조 기억 장치에 만들어두면 용량이 작은 메인 메모리 대신해서 사용할 수 있다.
요점은 한정된 공간을 좀 더 효과적으로 사용하기 위해 가상메모리를 도입했고, 필요할 때 swap in 하는 부분이다.
여러 프로세스를 조금씩 메모리에 할당해두면 실행 대상이 되는 프로세스들이 많아진다.
한 프로세스가 block되더라도 실행 대상이 되는 프로세스들이 많이 남아있으니 Throughput이 커진다.
프로세스가 가상 주소 공간에서 오래 기다려야 하는 경우가 있는데.. 프로세스가 빠르게 실행되어야 하는 경우에도 기존 프로세스를 swap out시키고 새로 메모리에 할당해 줘야 한다.
가상 메모리 방식을 사용하면 어차피 프로세스들이 조금씩 들어와 있기 때문에 빠르게 실행되어야 하는 프로세스도 메인 메모리에 들어와 있을 가능성이 높고, 빠르게 처리될 수 있다.
실제 메모리에서 사용하는 주소는 Physical Address, 가상 메모리 주소는 Logical Address(Virtual Address)라고 부른다.
가상 메모리 기법을 사용하면 메인 메모리의 크기에 제한되지 않고 더 큰 프로세스를 실행할 수 있다.
가상 메모리를 사용하기 전에는 code data stack을 모두 메모리에 할당해 줘야 했고, 프로세스의 크기가 커질 수 밖에 없었다.
가상 메모리를 사용하면 code data statck의 일부만 메모리에 가져오게 돼 더 많은 프로세스를 메인메모리에 할당할 수 있다.
첫 번째 그림에서도 보조 기억 장치를 사용하는건 같지만, 요점은 "프로세스 전체를 메모리에 저장하는지 / 프로세스 일부만 메모리에 저장하는지"이다.
운영체제는 프로세스의 일부를 메모리로 가져오는데, 사용자는 프로세스의 어떤 부분이 가져오는지는 알 필요 없다.
Resident Set은 메모리에 들어와 있는 프로세스의 일부를 의미한다.
프로세스의 일부를 실행하다가 아직 메모리에 올라오지 않은 프로세스 영역을 실행해야 하는 경우 CPU는 운영체제에게 trap을 건다.
어차피 지금 당장 실행할 수 없으니 해당 프로세스를 block상태로 바꾸고, 디스크 장치에게 해당하는 프로세스 영역을 가져오라고 요청한다.
CPU는 스케쥴링을 통해 다음으로 실행해야 하는 프로세스를 선정하고 Context Switch후 이어서 작업한다.
디스크가 작업을 마치면 운영체제에게 다시 interrupt를 걸고, 운영체제는 block됐던 프로세스를 돌려놓고 다시 CPU 스케쥴링을 수행한다.
가상 메모리 방식에서는 이렇게 프로세스가 실행되던 중 중단되는 경우가 많이 발생한다.
그러니 프로세스가 시작~끝 까지의 시간인 Turnaround Time은 더 길어지는데.. 여러 프로세스 관점에서 보면 이점이 훨씬 더 크다.
사실 프로그램을 실행하게 되면 그 부분을 집중적으로 실행하게 되는 Locality 덕분에 가상 메모리 방식을 사용하더라도 swap out swap in이 지나치게 많이 발생하지는 않는다.
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] Multi-Level Page Table (1) | 2025.06.04 |
---|---|
[Operating System] Demand Paging (0) | 2025.06.03 |
[Operating System] Memory Management (0) | 2025.05.17 |
[Operating System] Disk Scheduling (0) | 2025.05.13 |
[Operating System] I/O Management (0) | 2025.05.11 |
댓글
이 글 공유하기
다른 글
-
[Operating System] Multi-Level Page Table
[Operating System] Multi-Level Page Table
2025.06.04 -
[Operating System] Demand Paging
[Operating System] Demand Paging
2025.06.03 -
[Operating System] Memory Management
[Operating System] Memory Management
2025.05.17 -
[Operating System] Disk Scheduling
[Operating System] Disk Scheduling
2025.05.13