[운영체제] 세그멘테이션 : 세그멘트 테이블, 주소변환
기본 상식 정리..
메모리는 제한적인 크기이지만 엄청나게 큰 메모리가 있는 것처럼 관리하기 때문에 가상메모리라고 부른다.
가상 메모리를 사용하기 위해 큰 프로그램을 쪼개서 한정된 메모리에 적재(mapping) 해주게 된다.
그 방법으로 페이징과 세그멘테이션이 있다.
메모리와 디스크 사이에서 전송되는 전송 단위가 Block이라고 부른다.
가상 메모리를 관리하기 위해 해결할 부분이 주소의 사상 (address mapping)
참조하는 주소는 실제 메모리 주소와 달라서 메모리상의 주소로 변환해야 한다.
메모리 상의 주소로 변환이 필요할 때 하는 것이 사상이다.
프로그램에서 참조하는 주소 : 가상 주소
실제 메모리상의 주소 : 실주소
세그먼트
논리적 단위가 되는 프로그램 모듈이나 자료 구조
대부분의 프로그램들은 주 프로그램, 프로시저, 함수, 전역 변수, 호출 시 사용되는 스택 등으로 구성
이 구성요소 하나하나를 세그먼트.
세그먼트는 서로 다른 크기를 가진다.
세그멘테이션
세그멘트를 사상(mapping)하고 적재(loading)하는 기법
(적재는 프로그램을 메인 메모리에 올리는 동작을 의미한다)
페이징 vs 세그멘테이션
페이징 - 페이지(블록을 같은 크기로 자를 때)로 잘라서 메모리에 적재하는 방식
세그멘테이션 - 세그먼트(블록을 서로 다른 크기로 자를 때)로 잘라서 메모리에 적재하는 방식
(어떤 시스템에서는 여러 크기의 세그먼트를 다시 일정 크기의 페이지로 재구성함으로써 위 의 두 가지 방법을 결합하여 사용)
세그멘트 테이블
가상 주소
s : 세그먼트 번호 | d : 세그먼트 내의 위치 값 |
세그먼트 테이블 : 세그먼테이션을 위한 테이블
세그먼트 개수만큼의 엔트리를 가짐.
엔트리를 찾는 과정은 페이징과 비슷하다
s + (기준 레지스터의) α -> 세그먼트 테이블에서 위치 찾음
세그먼트 테이블의 항목
존재비트, 존재 비트의 값에 따라 유효한 디스크 주소와 메모리 주소를 갖는 필드들
1. 세그먼트 존재비트
r=0 : 세그먼트가 주기억장치 내에 없는 경우
r=1 : 세그먼트가 주기억장치 내에 있는 경우
2. 보호비트
R: 판독 접근 W: 기록 접근 E: 수행 접근 A: 첨가 접근
3. 세그먼트 길이
주소 변환
페이징은 프레임 번호와 같이 실주소를 위해 계산을 요구하는 형태가 아닌 메모리주소에 적혀있는 값이 실주소라는 점.
- 논리주소는 v = (s,d) 로 표현된다.
- 논리주소 (2, 100) -> 물리주소 4400번지
- 논리주소 (1, 500) -> 인터럽트로 인해 프로세스 강제 종료(범위를 벗어남)
- 물리주소 a 는 base[s] + d 로 계산된다.
출처: https://techvu.dev/106 [Techvu]
세그먼트의 보호(Protection)와 공유(Sharing)
1. 보호
실주소를 위해 더해지는 위치 값 (d)이 세그먼트의 길이를 초과하면 트랩을 통해 프로세스의 실행을 중지시켜 사용자 간의 메모리 보호가 가능하다.
(entry에는 length 코드가 있으므로 d와 비교해서, d값이 크면 트랩으로 막는다)
2. 공유
엔트리에서 같은 주소 값을 가지게 하면 같은 데이터 값을 받을 수 있다. (페이징도 동일)
+) 장점
세그먼트는 논리적 단위.
논리적 단위로 나눴다 = 단위별로 수정하고 다시 컴파일해서 쓸 수 있다.
전체에서 어떤 세그먼트가 오류나면 해당 세그먼트만 컴파일 해서 다시 link로 이으면 된다!
Paged segmentation : 페이징을 사용하는 세그멘테이션
페이징의 편리함 + 세그멘테이션의 논리적 장점을 이용하자
프로그램을 세그먼트로 나눈다.
각 세그먼트를 페이지들로 나눈다.
각각의 세그먼트는 여러개의 페이지로 이루어지게 되고, 사상의 최종 크기는 페이지가 된다.
-> 사상을 위한 세그먼트 테이블 필요. 세그먼트 엔트리 개수만큼 페이지 테이블이 필요.
가상주소 v = <s, p, d>
세그먼트 번호 s | 페이지 번호 p | 변위 d |
1. 세그먼트 테이블의 시작주소를 가지는 기준레지스터 값에 s를 더함
2. s를 위한 엔트리 검색
3. s를 위한 페이지 테이블 주소 계산
4. 페이지 테이블 주소를 얻었으니 가상 주소의 p를 더해 p를 위한 엔트리를 검색
5. p가 적재된 프레임 번호를 계산해서 실주소에 접근
단점)
1. 접근을 3번하게 되므로 시간이 오래걸린다
2. 각 세그먼트 별로 내부단편화가 또 생길 수 있다.