안녕하세요 웹 프론트엔드 개발자 설탕시럽입니다.
운영체제에서 "가상 메모리 관리 - 세그멘테이션"에 대해 학습한 내용을 공유하려고 합니다.
세그멘테이션 기법
가상 메모리 방식에, 물리 메모리를 가변 분할 하는 방식이다.
프로세스가 할당되는 공간을 "세그먼트"라는 기준으로 분리하고, 그 크기는 프로세스의 크기에 맞게 가변적으로 할당된다. 하나의 프로세스를 연속된 공간에 배치하며, 여러 공간에 떨어져 있는 상태에 대한 처리를 하지 않는다. 프로세스가 들어오고 나오면서 빈 공간이 발생하게 되는 걸 외부 단편화 라고 하는데, 이 공간을 처리하는 방식이 복잡하다는 단점이 있다.
고정분할방식인 페이징 기법에 비해 권한 비트를 설정하기 편하고, 영역이 섞일 가능성이 없다는 장점이 있지만 외부 단편화라는 단점 때문에 페이징 기법이 더 많이 사용된다.
세그멘테이션 테이블
프로세스를 물리 메모리에 할당될 때 세그먼트 1개씩 할당하고, 세그먼트 번호를 부여하여 메모리에 올라간 프로세스를 관리하는 테이블이다.
세그멘테이션 테이블은 세그먼트 번호를 인덱스로 사용하여 시작주소를 뜻하는 Address와 해당 프로세스를 뜻하는 limit를 통해 세그멘테이션을 관리한다. 페이징은 페이지 크기가 모두 같으므로 크기정보 유지가 필요 없었으나, 세그먼트는 크기가 모두 다르므로 limit에 대한 정보가 필요하다. 메모리 영역을 벗어나는지에 대한 체크가 가능해진다.
테이블은 한 개만 유지되고, 테이블의 크기는 프로세스 개수에 비례한다.
주소 변환 방식
가상주소 VA = <1, 32>에 대하여
1. 세그멘테이션 테이블에서 세그먼트 번호 (1)의 시작 주소를 확인하고, distance를 더하여 물리 주소를 구한다.
2. 만약 distance 가 limit보다 커서, 할당된 세그먼트를 벗어나게 되면 프로세스는 강제 종료 되고, 아니라면 물리주소로 접근한다.
세그멘테이션-페이징 혼용 기법
페이징 + 메모리 접근 권한 관리
프로세스 별 메모리 접근 권한을 고려하여 페이지 테이블을 만들어야 한다. 메모리 접근권한은 읽기/쓰기/실행의 권한에 각 1bit씩 부여하여 3bit의 권한 비트 + 프레임 번호를 함하여 페이지 테이블을 관리하게 된다. 저장된 권한 비트는 가상주소에서 물리주소로 변환될 때, 권한 비트를 확인하여 프로세스 권한을 알게 된다.
권한 위반 시, 또는 이전에 말했던 세그멘테이션에서 변환된 주소가 할당된 세그먼트를 벗어나게 되면 메모리 오류 (트랩)이 발생하게 된다. 이 방법은 페이지 테이블 크기가 커지는 단점이 있다.
세그멘테이션-페이징 혼용 기법
권한 정보를 세그멘테이션 테이블로 관리하여 테이블 크기를 절약할 수 있다. 세그멘테이션은 권한 bit와 그 권한 bit을 가지고 있는 페이지테이블의 위치정보를 가지고 있고, 페이지테이블은 권한 신경 쓰지 않고 프레임 번호를 관리하게 된다.
프로세스의 코드영역, RW가 가능한 데이터영역과 ReadOnly의 데이터 영역은 그에 맞는 권한이 필요하고 그 권한에 맞는 페이지 테이블 위치를 관리하는 세그멘테이션 테이블이 있다. 이때 페이지 테이블 권한을 관리하는 세그멘테이션 테이블은 그 분리된 기준에 따라 할당된다.
동적 주소 변환 과정
VA = ( S, P, D)의 프로세스의 주소 기반 가상 주소에 대해 변환 과정은 아래와 같다.
1. 세그멘테이션 테이블을 참조해서 해당 페이지 테이블 위치를 획득한다. ( 권한도 이때 확인해 권한 위반 시, 오류(트랩) 발생 )
2. 획득한 페이지 테이블 위치 + P => 페이지 테이블 참조 해서 페이지 위치를 획득한다.
3. 획득한 페이지 위치 + distance를 통해서 물리 메모리 접근할 수 있게 된다.
'컴퓨터 기초 > 운영체제' 카테고리의 다른 글
가상 메모리 관리 - 페이징 (2) | 2023.05.16 |
---|