0.🚶들어가며
지난 글에서 가상 메모리와 페이징 기법에 대해 알아보았습니다. 이번 시간에는 세그멘테이션 기법과 세그멘테이션-페이징 혼용 기법에 대해 알아보도록 하겠습니다.
1.📖세그멘테이션 기법
세그멘테이션 기법은 가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스 크기에 따라 가변적으로 나누어 사용합니다. 세그멘테이션 기법의 구현과 주소 변환은 어떤 방식으로 이루어지는지 알아보겠습니다.
1) 세그멘테이션 기법 구현
위 사진은 세그멘테이션 기법과 세그멘테이션 테이블에 대해 보여주고 있습니다. 세그멘테이션 테이블에는 limit 값과 address 값이 존재합니다. address값은 페이징 테이블의 프레임과 비슷한 개념입니다. 페이징 테이블에는 없었던 limit 값은 세그먼트가 메모리 영역 어디까지를 잡고있는가에 대한 내용입니다. 한 프로세스가 다른 프로세스의 주소 영역을 침범하면 안되기 때문에 address 기준 limit까지만 접근이 허용하는 것이죠. 첨언하자면 페이징에서는 모든 프레임의 크기가 같기 때문에 limit 값을 따로 둘 필요가 없었습니다!
세그멘테이션 기법은 가변 분할 방식을 기본으로 하므로 가변 분할 방식의 장단점을 모두 가지고 있습니다. 장점으로는 메모리를 프로세스 단위로 관리하기 때문에 페이지 테이블이 작고 단순하다는 것입니다. 단점으로는 물리 메모리의 외부 단편화가 생겨 물리 메모리 관리가 복잡하다는 것이구요!
2) 세그멘테이션 기법의 주소 변환
위 사진은 세그멘테이션 기법의 주소 변환을 보여줍니다. 가상 주소 VA = <S, D>에 S는 세그멘테이션 번호, D는 세그먼트 시작 지점에서 해당 주소까지의 거리입니다. 큰 틀에서 페이징 방식과 비슷하지만 limit 값 때문에 생기는 차이가 있습니다. 가상 주소에서 요청한 값이 자기의 세그먼트에서 벗어난 값이면, 즉 address + limit 보다 큰 값을 요구한다면 이는 허가할 수 없는 행위입니다. 따라서 이러한 요청이 들어온다면 트랩이라는 일종의 소프트웨어 인터럽트를 발생시킵니다.
2.💻세그멘테이션 - 페이징 혼용 기법
이전 글과 이번 글에서 살펴본 페이징 기법과 세그멘테이션 기법은 각각 장단점을 가지고 있습니다. 페이징 기법은 메모리 관리가 수월한 반면 페이지 테이블의 크기가 크다는 단점이 있고, 세그멘테이션 기법은 테이블 크기를 작게 유지할 수 있는 반면 외부 단편화로 인해 메모리 관리가 어렵다는 단점이 있습니다. 세그멘테이션 - 페이징 혼용 기법은 이 둘의 장점을 취한 가상 메모리 관리 기법입니다.
1) 메모리 접근 권한
혼용 기법에 대해 알아보기 전 이해를 돕기 위해 메모리 접근 권한에 대해 알아보도록 하겠습니다. 메모리 접근 권한이란 메모리 특정 번지에 저장된 데이터를 사용할 수 있는 권한을 의미합니다. 권한에는 읽기, 쓰기, 실행, 추가 4가지가 존재하죠. 예를 들어 프로세스의 코드 영역은 읽기와 실행 권한을 가집니다.
메모리 접근 권한에 대해 이야기한 이유는 가상 주소에서 물리 주소로 주소 변환을 할 때 메모리 접근 권한 검사를 같이 하기 때문입니다. 만약 프로세스의 코드 영역에 쓰기를 시도하려면 트랩을 발생시켜 이를 막아야합니다. 이전에는 설명하지 않았지만 페이지 테이블에는 사실 프레임 번호 이외에 권한 비트 내용을 포함하고 있습니다. 아래와 같이 말이죠!
바로 이 권한 비트를 이용하여 적절한 명령인지를 체크를 하는 것 입니다. 그런데 모든 프레임 번호에 권한 비트를 넣는 것에 대해 다시 생각해봅시다. 사진 좌측 가상 메모리를 보면 코드, 데이터 A, 데이터 B가 있고 각각 동일한 권한을 가지고 있는 것을 알 수 있습니다. 이렇듯 메모리 접근 권한은 인접한 페이지에서 동일한 경우가 많은데 이러한 점을 고려해본다면 권한 비트 중복 삽입을 줄여볼 수 있지 않을까요? 이 문제를 바로 세그멘테이션 테이블을 추가해 해결합니다.
2) 세그멘테이션-페이징 혼용 기법
위 사진이 바로 세그멘테이션-페이징 혼용 기법입니다. 테이블을 보시면 권한 비트에 대한 중복을 막기 위해 세그멘테이션 테이블을 중간에 추가한 것을 알 수 있습니다. 이러한 방식을 통해 페이지 테이블의 크기를 줄일 수 있는 것입니다. 또한 현재 대부분의 운영체제는 이러한 방식을 사용하고 있습니다.
세그멘테이션-페이징 혼용 기법의 주소 변환은?
이 방식의 주소 변환은 어떻게 이루어질지 아래의 사진을 살펴보겠습니다.
사진을 살펴보시면 좌측은 사용자의 관점으로 세그멘테이션 방식을 사용하고 우측은 메모리 관리자의 관점에서 페이징 방식을 사용하고 있습니다. 좀 더 자세히 살펴보겠습니다.
가상 주소 VA = <S, P, D>는 S는 세그멘테이션 번호, P는 페이지 번호, D는 Distance입니다. 이것을 물리 주소로 변환하는 방식은 다음과 같습니다.
- 사용자가 어떤 주소에 있는 데이터를 요청하면 해당 주소를 사용해 VA = <S, P, D> 값을 구합니다.
- S값을 이용해 세그먼테이션 테이블에 접근하고 권한이 있는지, 자신의 영역을 벗어나는 접근인지에 대한 내용을 체크합니다.
- 이때 문제가 있으면 트랩을 발생시킵니다. 문제가 없다면 페이지 테이블에 도달하구요!
- P값을 사용해 페이지 테이블에 접근한 뒤 알맞는 프레임에 도달합니다.
- 프레임에서 D만큼 떨어진 곳에 접근하여 데이터를 읽거나 씁니다.
위 단계를 다시 정리하면 가상 주소 접근시 세그멘테이션 테이블에서 문제 검사를 하고 페이지 테이블로 접근한 뒤 알맞은 프레임을 찾습니다. 만약 프레임이 없다면 스왑 영역에서 해당 페이지를 가져올 것이구요. 그 후 D 값에 맞는 데이터를 찾게 되는 것입니다!
3.💨나가며
지난 글과 이번 글에서 가상 메모리, 페이징, 세그멘테이션, 혼용 방식에 대해 알아보았습니다.
처음 접하면 복잡해보일 수 있지만 각 방식이 왜 생겨났는지, 장단점은 무엇인지에 대해 알아보고 테이블에는 왜 그러한 정보들이 담겨있어야하는지를 중점적으로 살펴보시면 부차적인 과정들은 자연스럽게 그래야한다 라고 결론이 날 수 있을 것 같습니다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제(OS)] 가상 메모리 - (4) 페이지 교체 알고리즘 (0) | 2022.03.03 |
---|---|
[운영체제(OS)] 가상 메모리 - (3) 요구 페이징(Demand Paging) (0) | 2022.03.02 |
[운영체제(OS)] 가상 메모리 - (1) 가상 메모리와 페이징 기법 (0) | 2022.03.01 |
[운영체제(OS)] 물리 메모리 관리 - (2) 멀티 프로그래밍 환경에서의 메모리 할당 (0) | 2022.02.28 |
[운영체제(OS)] 물리 메모리 관리 - (1) 메모리 관리에 대하여. (0) | 2022.02.28 |