(운영체제) 레지스터, 캐시 hit&paging

이동훈·2023년 1월 5일

레지스터

x86 시대의 서막 - 16BIT

8086이 세상에 나오면서 바야흐로 x86의 시대가 시작되었다.
(물론 레지스터는 그 이전에도 있었지만, 명령어 Set이 다르다.
4004: 4비트, 8008~8080: 8비트. 레지스터 명명부터 다름)

8086을 시작으로 x86 시스템은 호환성을 지향하는 아키텍쳐로 발전하였다.
x86-x64로 대두되는 지금까지 호환성이 유지되는 이유다.

가끔 레지스트리 보면 볼 수있는 DWORD(32비트)나 QWORD(64비트)의 어원이 8086에서 나온것
16비트=WORD

이 친구의 존재감을 한 번에 와닿게 말해보자면, 우리가 쓰는 운영체제의 32-bit, 64-bit 등등이 곧 레지스터의 용량을 가리킨다. 주소를 담기 위한 공간이 2^32자리, 2^64자리라는 뜻.
8080처럼 추가적인 주소 어드레스 버스가 존재하는 경우도 있긴 했다.

그래서 레지스터가 왜 필요하고 뭘 하는데?

컴퓨터에서 결국 연산은 CPU가 한다. 근데 CPU는 저장장치라는게 없다.

레지스터는 명령어 종류(어셈블리), 연산결과, 복귀주소 등을 일시적으로 기억하는 기억장치
cpu에서 사용하는 변수라고 보면 됨

레지스터란 (결과값 등을 포함한) 값이나 주소를 기억하는것

각 레지스터는 레지스터마다의 역할이 주어져있다.
크게 분류하면 범용 레지스터, 세그먼트 레지스터, 플래그 레지스터, 포인터 레지스터가 있다.

  • 여담) 우리가 함수에서 스택을 쓰고 복귀하기 위한 포인터 등을 지원하는 레지스터도 8086의 전작인 8080에서 생겼다

AX 레지스터를 예시로 들면, AX는 AH+AL로 이루어져있고, 이 AX가 두개 합쳐진 형태로 EAX를 구성한다. 마찬가지로, EAX+EAX 형태로 RAX가 구성된다.

1) 결국 연산은 CPU가 한다. 근데 CPU는 저장장치라는게 없다. 그래서 저장장치가 필요하다.
2) 저장장치는 빠를수록 비싸고, 용량 또한 값에 비례한다. 레지스터든 캐시든 무식하게 TB 단위로 키울 수 없는 이유다.

그래서 계층별로
빠름+비쌈 || 레지스터 -> 캐시(L1-L4) -> RAM -> (TLB등) -> 보조기억장치 || 느림+저렴

캐시 - 페이지 폴트


TLB에 없으면 페이지 테이블을 돌면서(빨리 찾든 늦게 찾든 BIG-O 고려하면 손해)
물리적으로 두번 찾아야함
그나마 TLB에 있으면 바로 찾아들어가면 되지만


페이지 크기가 페이지 폴트 발생률에 미치는 영향


1) 페이지 크기가 작을 경우

: 한 프로세스가 사용할 수 있는 페이지들이 상대적으로 많아짐

: 메모리에 적재된 페이지들이 프로세스가 최근에 참조한 인접부분을 모두 포함해 페이지 폴트 발생률 낮음

: 페이지 크기가 작을수록 내부단편화의 양 줄어듬

: 페이지테이블 크기 증가

: 동일 크기 데이터 적재에 필요한 입출력 횟수 증가

: 지역성과 관련된 부분만으로 적재집합 구성 가능

: 프로세스 당 할당된 프레임이 많을수록 페이지폴트 발생률 감소

2) 페이지 크기가 증가할 경우

: 개별 페이지들이 최근 참조로부터 보다 멀리 떨어진 위치 포함

: 지역성의 원리가 약해서 페이지 폴트 발생률 증가

3) if 페이지 크기 = 프로세스 전체 크기

: 전체 크기에 근접해 갈수록 페이지 폴트 발생률 감소

: 한 페이지의 크기가 프로세스 전체를 포함할 경우, 페이지 폴트 발생X

: 단, 2)에 언급한대로 지역성 감소로 인한 히트 레이트 감소


+ 여담) 램디스크 써본 경험이 있으면 이해하기 빠를지도?
profile
Fool Snack Developer

2개의 댓글

comment-user-thumbnail
2023년 1월 5일

레지스터와 캐시에 관한 좋은 내용이네요 잘보고 갑니다 ~

1개의 답글