-
페이징 정리 - 2컴퓨터 과학/운영체제 2021. 8. 8. 19:52
하드웨어 지원
대부분의 운영체제는 프로세스마다 하나의 페이지 테이블을 할당한다. 페이지 테이블의 하드웨어 구현은 여러 가지 방법이 있는데 간단한 방법은 레지스터를 이용하는 것이다. 하지만 이는 페이지 테이블이 작을 경우에만 가능하다. 32비트 환경의 시스템은 페이지 테이블의 항목이 1백만에 이른다. 페이지의 크기가 4kb일 때, 4gb 메모리를 가진 시스템에서 페이지의 수가 1백만이기 때문이다. 2^32 / 2^12 = 2^20 -> 1,048,576. 이러한 페이지 테이블을 레지스터를 이용해 구현하는 것은 적절하지 않다. 대부분의 컴퓨터는 페이지 테이블을 주 메모리에 저장하고 페이지 테이블 기준 레지스터(PTBR, Page Table Base Register)가 페이지 테이블을 가리키게 한다. 다른 페이지 테이블을 사용하려면 이 레지스터만 변경해주면 된다.
이 방법은 페이지 테이블에 한 번 접근한 뒤, 물리 메모리를 접근하기 때문에 두 번의 접근이 이루어진다. 그만큼 접근이 느려진다. 논리 주소를 물리 주소로 변환하는 일은 MMU(Memory Management Unit)라는 하드웨어 장치가 담당한다.
이를 해결하기 위해 TLB(Translation Look-aside Buffer)라는 특수한 소형 하드웨어 캐시가 사용된다. TLB는 키와 값을 가지는 연관 메모리다. 키는 페이지 번호가 되고 값은 프레임 번호다. TLB에서 페이지 번호를 찾으면 프레임 번호를 바로 알 수 있어 메모리에 접근하는 데 사용할 수 있다. 만약 페이지 번호가 연관 레지스터 TLB에 없으면(TLB 미스), 메모리의 페이지 테이블에 가서 찾아야 한다. 이렇게 찾은 페이지 번호와 프레임 번호는 TLB에 추가해 다음 참조 때 처리하는 속도를 올릴 수 있다.
어떤 TLB는 각 항목에 ASID(address-space identifier)를 저장하기도 한다. 이는 해당 TLB가 어느 프로세스에 속한 것인지를 알려준다. TLB가 동작할 때 지금 동작하는 프로세스의 ASID가 TLB에 있는 ASID와 동일한지를 검사해, 맞지 않으면 TLB 미스로 처리한다. ASID가 있으면 한 TLB 안에 여러 프로세스들의 정보를 동시에 보관할 수 있다. ASID의 지원이 없으면 수행되는 프로세스가 바뀔 때(컨텍스트 스위칭) TLB에 있던 기존 정보는 전부 플러시(flush)되어야 한다. 그렇지 않으면 이전 프로세스가 사용하던 페이지 번호와 프레임 번호가 남아 무효화된 주소를 쓰게 될 수 있다.
보호
각 페이지에는 메모리 보호를 위해 보호 비트가 있다. 읽기, 쓰기, 읽기 전용을 정의할 수 있다. 페이지 테이블의 각 항목에는 유효/무효 비트가 하나 더 있다. 무효 비트라면 해당 페이지의 접근을 막는다.
공유 페이지
페이징은 코드를 쉽게 공유할 수 있다.
40명의 사용자를 지원하는 시스템에서, 페이지의 크기를 50kb라고 가정하고 프로그램의 크기는 150kb이며 프로세스마다 유지해야 하는 자료가 50kb라고 해보자. 전부 8,000kb의 공간이 필요하다. 하지만 만약 재진입 가능 코드(reentrant code or pure code)라면 위 그림처럼 프로그램을 공유할 수 있어 2,150kb의 공간만 쓰게 된다. 재진입 가능 코드는 수행하는 동안 절대 변하지 않는다. 컴파일러, 윈도우 시스템, 실시간 라이브러리, 데이터베이스 시스템 등이 공유 가능한 프로그램이다.
'컴퓨터 과학 > 운영체제' 카테고리의 다른 글
컨텍스트 스위칭 (0) 2022.01.09 스케줄링 알고리즘 (0) 2021.08.18 동시성(concurrentcy) vs 병렬성(parallelism) (0) 2021.08.11 페이징 정리 - 1 (0) 2021.08.08