⏱️ 0. 하드웨어
📄 1. 프로세서(CPU) : 명령어 처리를 위한 하드웨어
1). CU (Control Unit)
- 프로세스 형태로 메모리에 올라간 명령어 주소들중
- PC, IC가 가르키는 주소의 Instruction code를 "인출, 해독"한다.
- 명령어 실행에 필요한 "제어 신호" RAM, ALU, I/O에 보내는 장치
2). ALU
- 연산을 수행하는 장치
3). Register
- RAM이외에 CPU내부에 내장된 기억장치, 엑세스 속도가 가장 빠름
-
Instruction Register (IR)
프로세스 형태로 메모리에 올라간 명령어들 중 현재 수행중인 명렁어를 저장한다
-
Program Counter (PC)
6502에선 16bit 레지스터로 프로세스 형태로 메모리에 올라간 명령어들 중 다음에 수행해야 하는 명렁어를 저장한다. which points to the next instruction to be executed 만약 명령어가 수행 되었다면 자동으로 그 다음에 실행해야 하는 명령어 주소를 저장한다. 여기서 특별한 점은, 순차적으로 16bit 단위로 하나씩 커지는것이 꼭 아니고 서브루틴(함수), 인터럽트가 발생하면 명령어 주소가 점프하여 다닐 수 있다. 이렇게 반복이 된다.
-
Stack Pointer - esp
6502에선 8bit 레지스터로 ZeroPage다음 256 byte 정도의 메모리 공간을 스택 공간으로 사용한다. Stack Frame을 생성하고 스택 메모리에 최대로 할당된 메모리 (Stack Segment) 위치 직전을 주소를 저장하며 Pushing Byte / Pulling Byte 동작으로 스텍포인터가 증가하고 감소되며 조절된다.
-
Base Pointer (Frame Pointer) ebp
기준점 : Stack Frame 내 변수(데이터, 메모리)에 접근하는
-
General Purpose Register
8bit레지스터로 메모리나 스택을 순회하며 사칙 연산이나, 논리 연산을 수행하는데 사용한다. Copy of stack pointer or change its value 함수가 있음
📄 2. 메모리와 관계
1). CPU와 메모리 관계
① CPU와 RAM 사이에는 다음 버스들과 연결되어 있다.
- AddressBus(16bit in 6502)
- AddressBus를 통해 주소를 메모리에 전송
- ControlBus
- 장치들에 나온 보낸 시그널을 Control Bus를 통해 CPU로 전달한다.
- Read / Write Bit
- DataBus(8bit in 6502)
- DataBus는 주소에 저장된 데이터를 실어 보낸다.
② 메모리 공간을 나누자면
- 코,데,힙,스
6502에서는 다음과 같이 나뉘어져있다. ZeroPage : 256 byte 크기의 메모리를 ZeroPage로 사용 빠르게 연산 처리를 하고, 메모리에 빠르게 접근하기 위해 사용하는 메모리임. Second Page : 256 byte 크기의 메모리를 Second Page로 사용해서 스택 공간 메모리로 사용한다.
📄 3. Cache Memory
1). 각각 L1, L2, L3로 이뤄짐
CPU에서 메모리에 상주하는 데이터를 접근하는 시간을 줄이기 위해 Cache라는 Super Ultra Fast Memory 사용한다.
주소가 키로 주어졌을 때 그 공간에 즉시 접근할 수 있다는 것은 캐시가 하드웨어로 구현한 해시 테이블(Hash table)과 같다는 의미다.
6502에서랑 느낌이 비슷함 ZeroPage :
256 byte 크기의 메모리를 ZeroPage로 사용
빠르게 연산 처리를 하고, 메모리에 빠르게 접근하기 위해 사용하는 메모리임.
Cache Hit & Miss
① Cache Line
- CPU가 Cache한테 데이터를 요청할때, (64~128Byte) 정도 가져오는
이어진 데이터 단위 (Line)을 지칭함
② Cache Hit
- CPU가 Cache한테 데이터를 요청했을때 데이터가 실제로 있을때
- 캐시 히트의 확률이 곧 성능이라고 할 수 있다.
③ Cache Miss
- CPU가 Cache한테 데이터를 요청했을때 데이터가 없어서
- 순차적으로 캐시메모리(L1 -> L2 -> L3 -> RAM) 으로 가져옴
- 모든 캐시가 미스되었다면, 그제서야 메모리에서 불러온다.
캐시 미스가 일어날 확률이 적으려면, 자주 사용되고 자주 접근할 데이터를 올리면 된다.
1. 데이터를 컴팩트하게 올리거나, 2. 연속적인 데이터를 캐시에
올리면 캐시 히트가 자주 된다는것
2). 참조 지역성 (Locality)
- 캐시 메모리는 사용하면 빠른 데이터 접근이 가능하다.
만약 어디있는지 모른다면 O(N)만큼 걸릴것이다. 하지만, 어디있는지 알기만 하면, 예측할 수 있다면 시간은 적게 걸릴것 이다. 또한 알고 있다 하더라도, 페이지라는 단위로 관리되어 (SSD -> RAM)으로 적재할때 스왑-인 과정또한 시간이 걸리는 일이다.
- 하지만 캐시는 메모리보다 용량이 작고, 모든 내용을 저장할 수 없다.
목표는 다음과 같다. : CPU가 자주 사용할 법한 내용을 예측하여 캐시에 저장해야 한다.
- CPU가 메모리에 접근하는 경향은 다음과 같고, 이런점을 고려하고 캐시히트를 높일 수 있다.
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
루프문, Random Access
- CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.
Stack 메모리, Continues Structure( Array )
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
메모리 주소 예측성은 성능을 향상시킨다. 이점은 Locality 원리를 따른다.
참조
'CS > OS' 카테고리의 다른 글
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도 (0) | 2025.01.18 |
---|---|
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙 (0) | 2025.01.18 |