-
[TIL] 스파르타) CS 강의 수강 (CPU와 메모리)TIL-sparta 2024. 4. 27. 22:39
1-1 CPU와 메모리, 1-2 CPU와 메모리 심화
--
앞선 강의들과는 다르게 정보가 정말 꽉꽉 들어차있어서 한 번에 여러 회차를 정리하기는 어려울 것 같다. 핵심 중의 핵심이라고 생각되는 정보들만 이해한대로 축약해서 적어놓고 자세한 부분은 강의 노트 및 첨부 링크를 참고하기로 했다.
--
학습 키워드: CPU, memory, assembly
1. CPU
1) CPU의 구성:
- 산술 논리 연산장치 (ALU): 비교, 판단, 연산
- 제어부 (CU)와 내부 버스: 명령어 해석 및 스케쥴링, CPU 제어
- 레지스터 (메모리 유닛): 처리할 명령어 저장. 용도에 따라 범용과 특수목적 (MAR, PC, IR, MBR, AC) 레지스터로 나뉨.
- 캐시 메모리 (L1, 메모리 유닛): 처리 속도를 높여주는 임시 저장 공간
2) CPU의 동작:
- 어셈블리(Assembly)어: 기계어(0, 1)를 CPU가 알아듣게 변환한다. 어셈블리어를 사람이 알아볼 수 있게 만드는 것이 프로그래밍 언어다.
- 명령어 수행 cycle: 인출 (수행할 명령어 가져오기) > 해독 (opcode?) > 실행 > 반영
3) CPU의 성능:
- 클럭 (clock): CPU 내부의 신호 주기로 명령 처리 속도를 의미한다. 1Hz가 1초에 1번의 신호 주기. 1GHz는 10억 번 쯤으로, 4.5GHz라면 1초에 45억 번의 명령을 처리한다는 뜻이 된다.
- 코어 (core): 연산의 병렬 처리가 가능해진다.
2. Memory
1) Memory 종류:
- 레지스터: CPU의 부품
- 정적 메모리 (SRAM), 동적 메모리 (DRAM): 주 기억장치
- 하드 디스크 (HDD), solid-state 드라이브 (SSD): 보조 기억장치
2) Static Memory (SRAM):
- 캐시 메모리가 여기에 해당되는데, CPU의 캐시 메모리는 Layer 1 (L1), 주 기억장치로 분류되는 메모리는 L2와 L3 메모리다. 메인 메모리와 CPU간의 속도 차이를 극복하기 위한 장치라고 한다.
- 접근 속도가 빠르고 비싸다!
- Temporal / Spatial Locality: 지역성이라고 하는데, 메인 메모리에서 캐시 메모리에 저장할 데이터를 선택하는 방식이라고 보면 된다. Temporal은 다시 접근할 가능성이 높은 데이터, Spatial은 접근한 메모리와 근접한 위치에 있는 데이터를 캐싱하는 방식을 의미한다.
- 캐시에서 원하는 데이터를 찾았는지 못 찾았는지에 따라 캐시 hit/miss 로 분류한다. 캐시 히트의 경우 CPU 내부 버스를 사용하여 속도가 빠른 반면에, 캐시 미스는 메인 메모리에 접근해야 하기 때문에 시스템 버스를 사용하게되어 속도가 비교적 느리다고 한다. 캐시 히트를 많이 발생시키기 위해서는 캐시의 mapping 방법이 중요하다.
3) Dynamic Memory (DRAM):
- 주 기억장치는 주로 DRAM을 의미한다. CPU가 사용하기 좋도록 각종 정보를 임시로 저장하는 휘발성 메모리다.
- SRAM과는 다르게 전원이 공급중이어도 주기적으로 재충전되어야 기억된 내용이 유지된다고 한다.
- 보조 기억장치와 CPU 사이의 연산 과정의 중간에 위치한다.
4) Storage:
- 보조 기억장치는 따로 Stroage로 분류된다. 전원이 차단되어도 데이터를 기억하는 반영구적 메모리다.
5) 메모리의 할당:
- 연속 할당: 메모리를 미리 나눠두는 고정 분할 방식과 프로그램의 크기에 따라 메모리를 동적으로 나눠주는 가변 분할 방식이 있다. 가변 분할의 경우 최소 적합 (위에서부터 할당), 최적 적합(크기에 맞게), 최악 적합(가장 큰 공간부터) 방식이 있다.
- 비연속 할당: 운영체제의 경우 Linked List (주소를 저장하는 방식), Bitmap (0과 1을 이용하여 사용 가능상태를 확인하는 방식), Page Table (가상 메모리 시스템에서 사용, ) 방식을 사용한다.
- Paging: 페이지 라는 블록으로 나누고 테이블에서 물리/가상 주소를 매핑하는 방식. Linked List나 Bitmap보다 효율적이라고 한다.
- Segmentation: 코드나 데이터를 segment라는 단위 기준으로 나누는 방식이라는데, paging에는 없는 process view를 제공하여 프로그래머 입장에서 visibility가 좋다고 한다. 추후에 자세하게 다루게 되면 내용을 보강하도록 한다.
- Paged Segmentation: 공유와 보안은 segmentation 방식을, 물리 주소 저장은 paging 방식을 사용한다.
- 페이지 교체에도 다양한 알고리즘이 있다.
- 오프라인, 시간 기반, 빈도 기반 알고리즘으로 분류할 수 있는데, 오프라인 알고리즘의 경우 실행 중 입력 데이터가 변경되지 않는 경우에서 사용하는 알고리즘으로, 대표적으로는 정렬 알고리즘이 이에 해당한다.
- 시간 기반 알고리즘으로는 위 차트에서 FIFO (First In First Out), LRU (Least Recently Used), NUR (Not Used Recently) 가 이에 해당한다.
- 빈도 기반은 LFU (Least Frequently Used) 가 있다.
3. CPU와 Memory 구조
1) 하버드 (Harvard) 구조:
2) 폰 노이만 (Von Neumann)구조:
3) M1:
--
4. 프로세스와 쓰레드
1) Process:
- 프로그램을 실행해주는 주체. CPU가 최대한의 성능을 발휘하기 위해선 프로세스 배정이 잘 이루어져야 한다(오버헤드와 기아 현상은 낮게, 사용률은 높게).
- 그냥 CPU의 프로세스 자원 분배가 효율적이어야 한다는 뜻이다.
- New, Ready, Waiting, Running, Termintated, Suspended 의 여섯 가지 상태가 있다.
2) Thread:
- 작업을 실행해주는 주체. 프로세스의 일부이며, 하나의 프로세스에서 여러개의 쓰레드를 다룬다. Running, Ready, Block 의 세 가지 상태가 있다.
4. Scheduling
1) Scheduling:
- Multiprogramming system: 두 개 이상의 프로그램이 동작할 수 있는 운영 체제를 의미하는데, 이게 불가능했던 과거에는 CPU의 사용이 효율적이지 못했다고 한다. Scheduling은 바로 이 multiprogramming이 가능하게 만들어주는 역할을 한다.
- Scheduling 동작: 스케쥴러가 프로세스의 상태 변경에 관여하는 것을 스케쥴링이라고 한다.
- Scheduling의 단위: 스케쥴링의 단위는 I/O, CPU burst 의 cycle로 구성된다. I/O는 입 출력동안 대기하는 시간, CPU burst는 실제로 CPU가 연산에 사용되는 시간을 의미한다.
- Scheduling 알고리즘 평가 기준: CPU 이용률, 처리량, 총 처리 시간, 대기 시간, 응답 시간
- Scheduling 종류: 크게는 preemptive scheduling 과 non-preemptive scheduling 로 나뉘고, preemptive 스케쥴링의 경우 priority scheduling, round robin, multi-level queue 등이 있다고 한다.
--
728x90'TIL-sparta' 카테고리의 다른 글
[TIL] 스파르타) CS 강의 수강 (Thread) (0) 2024.04.29 [TIL] 스파르타) CS 강의 수강 (Process) (0) 2024.04.28 [TIL] 스파르타) JS 개인 과제 피드백 확인 및 수정, Github Release, Semantic Versioning (0) 2024.04.26 [TIL] 스파르타) SQL (SELECT) 강의 2~5주차 수강 (2) 2024.04.25 [TIL] 스파르타) JS/SQL 강의 수강, TMDB 프로젝트 수정 (0) 2024.04.24