Professional Documents
Culture Documents
운영체제 입문 한글
운영체제 입문 한글
페이징 : 더 작은 테이블
여담 : 멀티 페이지 크기
많은 컴퓨터 구조들 (예, MIPS, SPARC, x86-64) 이 멀티 크기 페이지를 지원한다는
것을 기억하자. 일반적으로, 작은 (4 KB 또는 8 KB) 페이지 크기가 사용된다. 하지만,
만약 “똑똑한” 응용 프로그램이 페이지를 요청할 경우, 가상 주소 공간의 특정 부분을
대형 페이지 (예, 4 MB 의 크기) 에 할당하고, 그 프로그램이 자주 사용되는 대형 자료
구조를 해당 페이지에 위치시키는 것을 가능케 할 수 있다. 대형 페이지를 사용하므로
TLB 에 하나의 항목만 사용한다. 이러한 대형 페이지는 데이터베이스 관리 시스템과
고성능 프로그램에 흔히 사용된다. 멀티 페이지 크기를 사용하는 주요 이유는 페이지
테이블의 공간을 절약하려는 것은 아니다. TLB 미스를 줄이면 프로그램이 주소 공간을
접근할 수 있도록 하기 위해 이다. 그러나 연구진들이 발표한 것과 같이 [Nav+02],
하드웨어가 다수의 페이지 크기를 지원할 경우, 운영체제의 가상 메모리 관리 모듈이 매우
복잡해진다. 대형 페이지를 간단히 사용하는 방법으로, 추가 인터페이스를 정의하여,
응용 프로그램이 대형 페이지를 직접 요청할 수 있도록 할 수 있다.
팁 : 하이브리드를 사용하자
두 서의 괜찮은 그리고 상반되는 아이디어가 있다면, 두 방식의 장점을 모두 가져레 수
있도록 두 방식을 혼합하는 하이브리드를 만들 수 있는지 늘 살펴보아야 한다. 하이브리드
옥수수종을 예로 들면 자연적으로 자라나는 종에 비해 좀 더 강인하다고 알려져 있다.
물론, 모든 하이브리드 기법들이 좋은 아이디어는 아니다. 지돈크 (Zeedonk), 또는 존키
(Zonkey) 는 얼룩말과 당나귀 사이에 태어난 동물이다. 그런 생물이 존재하는지 믿지
못하겠다면 찾아보자. 놀랄 것이다.
멀티 레벨 페이징 예제
멀티 벨 페이지 테이블의 서념을 이해하기 위해 예제를 하나 살펴보자. 64 바이트
페이지를 갖는 16 KB 크기의 작은 주소 공간을 생각해 보자. 14 비트 가상 주소 공간이다.
VPN 에 8 비트, 페이지 오프셋에 6 비트가 필요하다. 선형 페이지 테이블은 28 (256) 서
엔트리로 구성된다. 주소 공간에 작은 부분만 사용된다 하더라도, 선형 페이지 테이블의
크기는 변하지 않는다. 그림 23.4는 이 구조를 갖는 주소 공간의 예시를 나타낸다.
이 예제에 는, 가상 페이지 0 과 1 은 코드, 가상 페이지 4 와 5 는 힙 그리고 가상
페이지 254 와 255 는 스택으로 사용된다. 주소 공간의 나머지 페이지들은 미사용 중이다.
이 주소 공간을 2 단계 페이지 테이블로 구성해 보자. 선형 페이지 테이블을 페이지
단위로 분할한다. 전체 테이블은 (이 예제에 ) 총 256 서의 항목을 갖고 있다는 것을
상기하자. 각 PTE 는 4 바이트라 가정한다. 페이지 테이블의 크기는 1 KB (256 × 4
바이트) 이다. 페이지가 64 바이트라고 하면 1 KB 의 페이지 테이블은 16 서의 64 바이트
페이지들로 분할된다. 각 페이지에는 16 서의 PTE 가 있다.
이제 VPN 으로부터 페이지 디 터리 인덱스를 추출하고, 페이지 테이블의 각 페이지
위치를 파악하는 법을 살펴보자. 페이지 디 터리, 페이지 테이블의 페이지들 모두
항목의 배열이라는 것을 기억해야 한다. VPN 을 이용하여 인덱스를 구성하는 법만
찾으면 된다.
먼저 페이지 디 터리의 인덱스를 만들어보자. 예제의 작은 페이지 테이블은 256
팁 : 복잡도를 주의하자
시스템 설계자들은 시스템 복잡도의 증가를 주의해야 한다. 좋은 시스템 서발자는
주어진 작 을 처리하기 위한 최소한의 복잡도를 갖는 시스템을 만든다. 예를 들어,
디스크 공간이 풍부하다면 공간 사용을 최소화하기 위한 파일 시스템을 설계해 는
안 된다. 마찬가지로, 프로세 가 빠르다면 어떤 작 을 처리하기 위해 운영체제 내에
이해하기 쉬운 모듈을 작성하는 것이 CPU 에 최적화되어 있고 치밀하게 짜여진 코드를
사용하는 것보다 더 좋다. 너무 성급하게 최적화한 코드는 다른 형태에 불필요한
복잡도를 추가하지 않도록 예의주시하자. 그러한 시스템은 더 이해하기 어려우며 관리와
디버깅을 어렵게 만든다. 앙투안 드 생텍쥐페리 (Antoine de Saint-Exupery) 는 이런
유명한 말을 남겼다. “완벽함은 무 인가 더 추가할 것이 을 때 얻어지는 것이 아니라
더 이상 뺄 것이 을 때 마침내 얻어진다.” 그가 기록하지 않은 부분은 “완벽함에 대해
이야기 하는 것이 실제로 달성하는 것보다 더 쉽다.” 는 것이다.
2 단계 이상 사용하기
지금까지는 멀티 벨 페이지 테이블은 페이지 디 터리와 페이지 테이블의 2 서 단계를
가정하였다. 경우에 따라 트리의 단계를 더 증가시키는 것도 가능하다 (그리고 사실,
그래야 할 필요가 있다).
간단한 예제를 통해 2 단계 이상의 멀티 벨 테이블에 대해 알아보자. 이 예제에 는
512 바이트 페이지와 30 비트 가상 주소 공간을 가정한다. 가상 주소는 21 비트의 가상
페이지 번호와 9 비트의 오프셋을 갖게 된다.
멀티 벨 페이지 테이블의 목적은 페이지 테이블의 모든 분할된 부분들이 단일
페이지 크기에 맞도록 하는 것이다. 만약 페이지 디 터리가 너무 커지면, 어떻게 될까?
멀티 벨 테이블에 몇 단계를 둘지 정하기 위해 는 먼저 한 페이지에 몇 서의
페이지 테이블 항목을 저장할 수 있을지를 계산해야 한다. 페이지 크기가 512 바이트이고
PTE 의 크기가 4 바이트라고 가정하면 한 페이지에 128 서의 PTE 를 넣을 수 있다. 페이지
테이블의 페이지를 인덱스로 쓰려면, VPN 의 하위 7 비트 (log2 128) 가 필요하다.
변환 과정 : TLB 를 기억하자
2 단계 페이지 테이블 사용 시, 전체 주소 변환 과정을 알고리즘 형태로 요약 정리해 보자
(그림 23.6). 이 그림은 모든 메모리 참조에 대해 하드웨어가 어떤 식으로 동작하는지를
나타낸다 (하드웨어 기반 TLB 를 가정).
그림에 볼 수 있듯이, 복잡한 멀티 벨 페이지 테이블 접근을 거치기 전에, 우선
TLB 를 검사한다. 히트가 되면 페이지 테이블을 참조 이 물리 주소를 직접 구성한다.
TLB 미스 시에만, 멀티 벨 페이지 테이블의 모든 단계를 거쳐 물리 주소를 구하게
된다. 이 알고리즘을 통해 TLB 미스 발생 시, 전통적인 2 단계 페이지 테이블의 주소
계산 비용을 볼 수 있다. 주소 변환을 위해 두 번의 추가 메모리 접근이 발생한다.
23.6 요약
페이지 테이블이 실제로 어떻게 구성되 는지를 보았다. 단순한 선형 배열을 사용하는
구조뿐만 아니라 좀 더 복잡한 자료 구조의 형태도 살펴보았다. 테이블을 위한 자료
구조에는 시간과 공간이라는 모순적 선택 사항이 존재한다. 공간을 많이 소모하는 테이블
구조를 사용할수록 TLB 미스의 처리속도가 빨라지고, 공간을 작게 차지하는 테이블
구조를 사용하면 상황은 반대가 된다. 주어진 제약 조건들을 적절히 고려하여 적합한
자료 구조를 결정해야 한다.
주기억 장치 용량이 작았 던 과거 시스템 (많은 과거의 시스템들과 같은) 의 경우,
소형 자료 구조의 사용이 현명한 선택이 다. 적당한 크기의 메모리와 다수의 페이지들을
사용하는 워크로드의 경우에 TLB 미스를 신속히 처리할 수 있는 큰 테이블을 사용하는
것이 옳은 선택일 것이다. 소프트웨어로 관리되는 TLB 의 경우에는, 전체 자료 구조를
운영체제 서발자가 임의로 그리고 혁신적으로 서발, 그리고 서선할 수 있다. 어떤 새로운
자료 구조가 있을까? 그 새로운 구조는 어떤 문제를 해결하는가? 잠들기 전에 이러한
질문들을 해 보라. 그리고 운영체제 서발자만 꿀 수 있는 큰 꿈을 꾸자.
참고 문헌
[BO10] “Computer Systems: A Programmer’ s Perspective”
Randal E. Bryant and David R. O’ Hallaron
Addison-Wesley, 2010
아직 멀티 벨 페이지 테이블에 대한 좋은 일차 참고 문 을 찾아야 한다. 하지만 Bryant 와
O’Hallaron 이 이 청난 교재는 멀티 벨 페이지 테이블을 사용했던 초기의 시스템 중의
하나 였던 x86 의 세부적인 내용을 다루고 있다. 그리고 갖고 있을만한 좋은 중에 하나이기도
하다.
숙제
문제
여담 : 저장 장치 기술들
I/O 장치의 동작 메커니즘은 추후 깊게 살펴보도록 하겠다 (I/O 장치들에 대한 장을
보자). 조금만 기다리기 바란다. 느린 장치가 꼭 하드 디스크 드라이브일 필요는 없다.
좀 더 현대적인 플래시 기반의 SSD 일 수도 있다. 그것에 대해서도 다룰 것이다. 이
시점에서는 대형 가상 공간을 위해, “크고 느린 저장 장치가 있다.” 라고만 가정하겠다.
24.1 스왑 공간
여담 : 스와핑 기술 그리고 다른 것들
가상 메모리 시스템의 용어들은 운영체제와 사용하는 기기에 따라서 약간 혼란스럽고
변종이 다. 예를 들어 페이지 폴트는 페이지 테이블 참조 시 발생가능한 다양한 종류의
오류를 의미할 수 있다. 이 오류에는 지금 여기서 우리가 다루고 있는 종류의 오류, 즉
페이지-존재하지-않음 오류, 포함할 수도 있지만 때로는 불법적인 메모리 접근을 나타낼
수도 있다. 사실, 분명하게 합법적인 접근을 “오류” 라고 부르는 것이 이상하다. 실제로는
페이지 미스라고 불려야 할 것이다. 그렇지만 대체적으로 사람들이 어떤 프로그램에서
“페이지 폴트” 가 발생하였다고 할 때 의미하는 것은 운영체제가 디스크로 스왑 아웃한
가상 주소 공간의 한 부분을 접근하였다는 것이다.
이러한 동작이 “오류” 라고 불리게 된 이유를 운영체제에 이것을 다루기 위해 적용한
기법과 관계가 있다고 추정한다. 일반적이지 않은 어떤 일이 발생한다면, 즉 하드웨어가
어떻게 다뤄야 할지 모르는 어떤 일이 발생한다면, 상황 개선을 기대하며 하드웨어는
제어권을 운영체제에게 넘긴다. 프로세스가 원하는 페이지가 메모리에 없다. 하드웨어는
“예외” 를 발생시키며, 그 이후부터는 운영체제가 처리를 담당한다. 프로세스가 불법적인
일을 할 때 그를 처리하는 방법과 동일하기 때문에, 이 동작을 “오류” 라고 해도 그리
이상하지 않다.
살펴보도록 하자.
24.3 페이지 폴트
TLB 미스의 처리 방법에 따라, 두 종류의 시스템이 있었다. 하드웨어 기반의 TLB(하
드웨어가 페이지 테이블을 검색하여 원하는 변환 정보를 찾는 것) 와 소프트웨어 기반
의 TLB(운영체제가 처리하는 것) 이다. 둘 중 어느 것이던, 페이지 폴트가 발생하면,
운영체제가 그 처리를 담당한다. 운영체제의 페이지 폴트 핸들러가 그 처리 메커니즘을
규정한다. 페이지 폴트 핸들러, 이름 참 잘 지었다. 거의 대부분의 시스템들에서 페이지
폴트는 소프트웨어적으로 처리된다. 하드웨어 기반의 TLB 도 페이지 폴트 처리는 운영
체제가 담당한다.
만약 요청된 페이지가 메모리에 없고, 디스크로 스왑되었다면, 운영체제는 해당 페이
지를 메모리로 스왑해 온다. 자연적으로 등장하는 질문이 있다. 원하는 페이지의 위치를
어떻게 파악할지? 은 시스템들에서 해당 정보—즉 해당 페이지의 스왑 공간상에서의
위치—를 페이지 테이블에 저장한다. 운영체제는 PFN 과 같은 PTE 비트들을 페이지의
디스크 주소를 나타내는 데 사용할 수 있다. 페이지 폴트 발생 시, 운영체제는 페이지
테이블 항목에서 해당 페이지의 디스크 상 위치를 파악하여, 메모리로 탑재한다.
디스크 I/O 가 완료가 되면 운영체제는 해당 페이지 테이블 항목 (PTE) 의 PFN 값을
탑재된 페이지의 메모리 위치로 갱신한다. 이 작업이 완료되면 페이지 폴트를 발생시킨
명령어가 재실행된다. 재실행으로 인해 TLB 미스가 발생될 수 있다. TLB 미스 처리
과정에서 TLB 값이 갱신된다 (이를 피하기 위한 대안으로 페이지 폴트를 처리 시 함께
1 PFN = FindFreePhysicalPage()
2 if (PFN == −1) //
3 PFN = EvictPage() // 리즘
4 \gndx{DiskRead}(\gndx{PTE . DiskAddr , pfn}) // 기 I/O 기 리기
5 PTE . present = True //
6 PTE . PFN = PFN // PFN)
7 RetryInstruction() //