-
세그먼테이션프로젝트/운영체제 만들기 2023. 6. 7. 01:21
글의 참고
글의 전제
- 밑줄로 작성된 글은 강조 표시를 의미한다.
- 그림 출처는 항시 그림 아래에 표시했다.
글의 내용
: 이제는 거의 사용하지 않지만, 여전히 x86 아키텍처 기반의 시스템 프로그래밍을 할 때 사용하는 메모리 주소 방식이다. 인텔이 초창기 모델인 8086은 처음 나올 때 부터 CPU 내부 레지스터 부터해서 내부와 외부 데이터 버스의 대역폭은 16비트였다(내부와 외부는 CPU를 기준으로 나눈다. CPU안에 있는 버스는 내부 버스, CPU 밖에 있는 버스는 외부 버스). 그런데, 메모리와 연결되는 외부 주소 버스가 20비트였다. 이게 세그먼트 주소 지정방식의 시작이다.
: 아래의 8086의 회로도를 보면 알겠지만, AD0 - AD15 까지 있는데, A16 - A19가 추가적으로 있는 것을 볼 수 있을 것이다. A16 - A19 핀들은 OUTPUT 핀이다. 왤까? 어차피 CPU의 레지스터는 16비트이기 때문에, A16 - A19으로 데이터를 4비트 더 읽어와봤자 저장할 공간이 없기 때문이다.
- x86 세그먼테이션
: x86의 메모리 관리는 세그먼테이션을 기반으로 동작한다. 세그먼테이션은 보호 모드에서 필수다. 보호 모드가 활성화되면, 리얼 모드에서 사용하던 세그먼테이션은 자동으로 사용하게 된다. 그러나, 페이징을 활성화하면 세그먼테이션 기법을 기반으로 페이징이 동작하게 된다. IA-32에서 세그먼테이션을 비활성화하는 방법은 없다.
1" 보호 모드에서 페이징을 사용하지 않을 경우, 선형 주소는 물리 주소와 1:1로 대응된다.
- 세그먼테이션의 쇠퇴
: 세그먼테이션 기법은 페이징과 물리적 메모리 관리의 양대 산맥이다. 그런데, 현대에는 왜 페이징 방식만 사용할까? 가장 큰 문제로 `외부 단편화`를 꼽을 수 있다.
: 위에 그림에서 물리 메모리에는 `100 + 50 + 100` 으로 총 250의 메모리가 남지만, 왼쪽의 하늘색으로 표시된 프로그램이 가진 150을 할당하지 못한다. 그 이유는 사용가능한 메모리가 연속적이지 않기 때문이다.
'프로젝트 > 운영체제 만들기' 카테고리의 다른 글
참고 자료 (0) 2023.06.14 재배치 (0) 2023.06.12 Higher Half Kernel (0) 2023.06.06 [x86] 인터럽트 (0) 2023.06.05 권한 (0) 2023.06.05