Game Tech Blog
2장. 컴퓨터 구조와 성능 향상 본문
[ 컴퓨터 구조 ]
- 컴퓨터 = 하드웨어 + 소프트웨어
[ 하드웨어의 구성 ]
1. 중앙처리장치 - 필수장치 - CPU
2. 메인메모리 - 필수장치 - RAM, ROM ...?
3. 입력장치 - 주변장치 - 키보드, 마우스, 콘솔 패드, 레이싱게임 휠 (Xinput을 이용하면 연동을 할 수 있다고는함.) ...
4. 출력장치 - 주변장치 - 모니터,프린트,스피커 ...
5. 저장장치 - 주변장치
5-1. 자성 저장 방식 - 카세트테이프, 플로피 디스크, 하드디스크
5-2. 레이저 방식 - CD, DVD, 블루레이
5-3. 메모리 방식 - USB, SD, CF, SSD
6. 메인보드
[ 폰 노이만 구조 ]
- 폰 노이만 구조의 근간은, ' 모든 처리를 위해서는 메모리에 올라와야 실행할 수 있다. ' 이다.
폰 노이만의 구조를 쉽게 알아볼 수 있도록 설명된 요리사 모형이 존재한다.
이 모형은 m.blog.naver.com/ahn128/221498051260 이 출처를 통해서 보면 될 듯하다.
쉽게말해, 장치는 다음과 같이 매칭된다.
1.요리사 - CPU
2.도마 - 메모리
3.보관창고 - 저장장치
4.**보조요리사1
5.**주방보조1 - 이는 폴링 방식을 대신하기위해, 존재하는데 폴링과 함께 설명할 것이다.
- 모든 조건이 동일할 때, ' 속도는 1GB 메모리환경 < 4 GB 메모리환경 ' 이다.
도마(메모리)에 올려야할 재료가 너무 많으면, 또 다시 재료를 가지러 가야하기 때문에 처리되는 시간보다 옮기는시간이 길어져 비효율적이 된다.
[ 하드웨어 사양관리 용어 ]
1. 클록 - CPU 속도에 관련. 클록에는 일정한 박자가 있는데 이 박자를 만들어 내는 것이 클록이다.
그 박자를 Tick(틱 = 펄스 = 클록틱)이라고 하며, 버스에는 여러개의 부품이 연결되어있는데, 메인보드는 클록이 틱을 보낼때마다 데이터 교환을 수행한다.
2. 헤르츠 - 틱이 발생하는 속도. 1초에 틱이 몇번 발생하는지 (1초에 1번 = 1Hz , 3.4GHz = $3.4 * 10^9 $ 번 발생한다.)
메인보드의 경우 1,333MHz(약 1.3GHz)의 클록을 사용, 초당 1.3억번의 데이터를 교환할 수 있다.
[ 시스템 버스 , 내부 버스 ]
- 시스템 버스 (Front Side Bus, FSB) : 메모리와 주변장치를 연결하는 버스
1,333MHz 시스템 버스를 가진 메인보드에 1,333MHz 속도를 가진 메모리를 삽입해야 1.333MHz의 속도를 낸다.
만약 600Mhz 의 속도를 가진 메모리를 삽입하면 전체 메인보드 속도는 600Mhz 로 변경된다.
높은 것을 착용한다고 해도, 1,333MHz 의 속도로 적용될 것이다.
- 내부 버스 (Back Side Bus, BSB) : CPU내부에 있는 장치를 연결하는 버스
- 속도 비교 : FSB < BSB , 훨씬 빠르다.
두 버스의 속도차는 버퍼로 해결할 수 있다.
[ CPU의 구성 ]
- 산술논리 연산장치 (ALU, Arithmetic and Logic Unit) : 사칙연산(산술 연산) , 논리연산 수행
- 제어장치 (Control Unit) : CPU의 작업을 지시.
- 레지스터 (Register) : 임시로 데이터를 보관하는 장소
[ 레지스터의 종류 ]
- 사용자 가시 레지스터 : 사용자의 프로그램에 의해 변경되는 레지스터를 말함
- 사용자 불가시 레지스터 : 특수 레지스터, 사용자가 임의로 변경할 수 없는 레지스터
레지스터 분류 | 이름(종류) | 수행 작업 |
사용자 가시 레지스터 (User-Visible Registerr) |
데이터 레지스터(DR) | 메모리에서 가져온 데이터를 임시 보관 |
주소 레지스터(AR) | 데이터, 명령어가 저장된 메모리의 주소를 저장 | |
사용자 불가시 레지스터 (User-Invisible Register) |
프로그램 카운터(PC) | 다음에 실행할 명령어의 주소를 저장, 제어장치에 알림 |
명령어 레지스터(IR) | 현재 실행 중인 명령어를 저장 | |
메모리 주소 레지스터(MAR) | 메모리에서 데이터를 가져오거나, 보낼때 사용 메모리 주소를넣으면, 해당 메모리 위치에 데이터를 가져오거나, 메모리를 저장함 |
|
메모리 버퍼 레지스터(MBR) | 메모리에서 가져온 데이터나 메모리로 옮겨갈 데이터를 임시 저장 | |
프로그램 상태 레지스터(PSR) | 연산 결과(양수, 음수 등)를 저장 |
[ 버스의 종류 ]
이름(종류) | 수행 작업 | 버스의 방향성 |
제어 버스 (Control Unit) |
다음에 어떤 작업을 할지 신호가 오고가는 버스 | 양방향 |
주소 버스 (Address Bus) |
메모리의 데이터를 읽거나 쓸떼 어느 위치에서 작업할 것인지 알려주는 위치정보 들이 오고가는 버스 |
단방향 |
데이터 버스 (Data Bus) |
데이터가 오고가는 버스 | 양방향 |
[ 메모리 종류 ]
- 추후 그림으로 첨후 (작성일자 20.11.02)
[ 주 기억장치 : RAM ]
- 램은 데이터의 휘발성에 따라 나누어진다.
[ 휘발성 메모리 - DRAM, SRAM, SDRAM ]
- DRAM (Dynamic RAM) : 일정 시간이 지나면 데이터가 사라짐, 데이터를 기억하고 싶으면 해당 시간내에 다시 재생할 필요가 있음
- SRAM (Static RAM) : 전력이 공급되는 동안에 데이터를 보관, 다시 재생할 필요는 없
- DRAM vs SRAM
1. 속도 : DRAM < SRAM
2. 가격 : DRAM < SRAM (SRAM 이 더 비쌈)
3. 용도 : DRAM ( 메인메모리 ) , SRAM (캐시등 고속메모리)
- SDRAM (Synchronous Dynamic Random Access Memory) : DRAM의 발전형, 클록이 발생할 때 마다, 데이터를 동기화를 실행
- DDR SDRAM : CPU는 매우 빠른속도로 작동, SDRAM은 메인보드의 시스템 버스와 같은 속도로 작동, 이 속도를 줄이기 위해 속도를 빠르게 하기보다, 대역폭을 늘리는( 데이터 이동량을↑) 방법을 선택하였다. 이로써, CPU와 메인메모리간 성능차이를 극복
[ 비 휘발성 메모리 - 플래시 메모리, FRAM, PRAM ]
- 플래시 메모리 : 디지털 카메라, MP3, USB 등으로 사용
[ 주 기억장치 : ROM ]
- 롬은 전력이 끊겨도 데이터를 저장, 단, 데이터를 한번 저장시 수정 불가능
- 주로 바이오스를 롬에 저장
이름(종류) | 특성 |
마스크 롬 (Mask Rom) |
데이터를 지우거나 수정할 수 없는 롬 |
PROM (Programmable ROM) |
전용 기계를 이용하여 단 한번만 저장할 수 있는 롬 |
EPROM (Erasable Programmable ROM) |
데이터를 여러번 쓰고 지울 수 있는 롬 (단, 비싸서 안쓰임) |
[ 메모리 보호 방법 ]
- 운영체제는 각 작업의 영역을 침범하지 않기 위한 방법을 고안
- 경계 영역 ( 작업의 시작주소 )과 한계 영역( 작업의 끝 주소 )을 설정하는 방법을 선택함
- 그림은 추후에 다시 추가할 예정
[ 부팅 ]
- 모든 프로그램은 실행되기 위해, 인스턴스 과정이 필요함
- OS를 인스턴스 하는 대상은, 롬에 저장된 바이오스
부팅시, 바이오스는 다음과 같은 수행을 함
1. 하드웨어 점검
2. 마스터 부트 레코드에 저장된 프로그램을 메모리에 인스턴스함
3. 마스터 부트 레코드는 하드디스크의 첫 섹터를 가리키며, OS를 실행하기 위한 부트스트랩 코드를 인스턴스함
4. OS구동
[ 버퍼 ]
- CPU 내부 속도와 메인 메모리의 속도 차이를 완화하는 역할을 수행
- How? 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화
[ 스풀 ]
- CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어
ex) 프린터에 쓰이는 스풀러
- 워드를 처리하는 CPU, 입출력을 처리하는 스풀러 둘 중 하나의 세션이 고장나도 서로의 프로세스에 영향을 끼치지 않음
[ 캐시 ]
- 메모리와 CPU의 속도 차이를 완화하기 위해 데이터를 미리 가져와 두는 임시 저장장소
- 캐시는 CPU 내부에 있으며, CPU 내부 버스의 속도로 작동( L1,L2,L3캐시 등이 있음 )
- 캐시는 메모리의 일부를 미리 가져와, 확인해보고 원하는 데이터가 있는지 먼저 찾아봄 ( 속도가 빨라, 선발대 역할 )
원하는 데이터가 있음을 캐시 힛 (Cache Hit) , 없음을 캐시 미스(Cache Miss)라고 부름
캐시 힛의 비율을 캐시 적중률(Cache Hit Ratio)이라고 하며, 일반적으로 90% 정도
- 성능을 늘리기 위한 방법은 두가지가 있다.
1. 캐시의 용량을 늘림 ( 비싸서, 몇 메가바이트 정도만 사용함 )
2. 캐시의 지역성 이론을 따르기위해, Goto 문 등 강제성의 명령은 최소화 함
( 프로그래밍 goto문은 해당 위치로 강제이동하는 구문이다. 캐시가 11줄을 읽고 12 ~ 30 줄을 가져왔는데, goto 문으로 40줄로 가라고하면, 캐시는 미리일은 했지만, 안하니만 못한 효율을 가짐 )
[ 캐시의 갱신 - 즉시 쓰기, 지연 쓰기 ]
- 캐시는 데이터를 가져올 때 마다, 원래 있던 데이터를 없애고 가져온 데이터로 갱신해야함.
1. 즉시 쓰기 - 데이터가 변경되면 바로바로 갱신 하는 방식
장점 : 항상 메모리의 값이 최신 값이므로, 부득이한 정전에도 데이터를 보존함
단점 : 매 상황 갱신으로, 속도가 비교적 느려질 수 있음
2. 지연 쓰기 - 변경된 내용을 모아서 주기적으로 반영하는 방식 (= Copy Back)
장점 : 데이터 전송횟수가 줄어 성능이 항샹
단점 : 메모리와 캐시된 데이터 사이의 불일치 발생가능성이 있음
[ L1 캐시, L2 캐시 ]
- 일반 캐시 : 명령어와 데이터 구분 없이 모든 자료를 가져옴
- 특수 캐시 : 명령어와 데이터를 구분하여 가져옴
- 명령어 캐시 - 명령어 레지스터 연결
- 데이터 캐시 - 데이터 레지스터 연결
이 둘을, L1 캐시라고 함 (레지스터에 직접연결 되었기 때문에)
이후 명령어 캐시, 데이터 캐시에 연결되는 일반 캐시들이 L2 캐시임.
- 사진은 추후에 작업하여 첨부
[ 인터럽트 ]
- 과거, CPU가 직접 입출력장치에서 데이터를 가져오거나, 내보냄 = 폴링 방식
- 폴링 방식은 CPU가 모든 작업에 관여해야하기 때문에, 효율이 떨어짐
- 대안으로 나온 것이 인터럽트 임
[ 인터럽트 방식 동작 과정 ]
1. CPU -> 입출력 관리자에게 입출력 명령 지시
2. 입출력 관리자는 지시받은 데이터를 가져다놓거나, 저장장치로 옮김
3. 전송 완료시, 입출력 관리자가 CPU에 완료신호를 보냄
4. 다른 일을 수행하던 CPU는 일을 멈추고 인터럽트를 처리함
- 어떤 장치가 일을 완수했는지 구별하기위해 인터럽트 번호를 사용
[ 직접 메모리 접근(Direct Memory Access, DMA) ]
- 과거 OS는 폴링방식(CPU가 모든작업에 관여하는 방식)이었는데, CPU가 주변장치, 메모리에 대한 모든 권한을 가지면 되는 방식이었음. 그러나, 인터럽트 방식을 사용하고, 입출력 관리자가 데이터의 입출력을 담당. 여기서 CPU만 접근권한을 가진 영역에 대해서 일을 할 수 도 있는데, CPU는 다른일을 처리중이고 입출력관리자는 접근을 해야 일을 할 수 있음
여기서 CPU의 접근권한을 가져야하는데 이 권한을 직접 메모리 접근 이라고 함
[ 메모리 매핑 입출력 ]
- 직접 메모리 접근으로 CPU가 사용하는 데이터, 직접 메모리 접근으로 가져온 데이터가 무분별히 섞이면 관리하기 어렵고 비효율을 초래함. CPU 사용 메모리공간 , 직접 메모리 접근 공간을 구분하는 것을 말함
- 첨부사진 이후에 첨부
[ 사이클 훔치기 ]
- 인터럽트를 통해 메모리는 CPU, 입출력 장치 등이 접근할 수 있게 되었음. 여기서, 동시에 접근한다고 한다면 어떻게 처리되어야하는가? 보통은 CPU가 양보함, (보통 CPU처리속도보다 입출력장치의 속도가 느리므로) 이러한 상황을
사이클 훔치기 라고 함
[ 병렬 처리 ]
- CPU 성능 향상의 방법
1. CPU 클록 수 증가 (발열 때문에 5Ghz 이상은 불가하다고 함)
2. 캐시의 크기 증가 (비쌈)
- 대안 : 코어를 여러개 만들거나, 동시에 실행가능한 명령 개수를 늘리는 방법을 채택
- 병렬처리시 고려사항
1. 상호 의존성이 없어야 함 : 즉 어느 한 프로세스가 고장난다고 해서, 다른 프로세스에 영향을 끼치면 안된다.
2. 각 단계의 시간을 거의 일정하게 맞춰야 병렬처리가 원만함 : 각 부분이 시간이 다르면 빨리 끝나는 쪽에서는 빨리 끝나겠지만, 그중에 가장 긴 시간을 가진 처리에서 대기하는 비효율을 초래함
3. 전체 작업시간을 몇 단계로 나눌지 잘 따져야함 : 작업을 N 개로 쪼갰을때 N : 병렬 처리의 깊이 라고함. 작업을 너무 깊이 나눈다면 각 단계마다 작업을 이동하고 새로운 작업을 불러오는데 시간이 너무많이 걸려 오히려 성능이 저하함
보통 10 ~ 20 단계로 나눔
[ 병렬 처리 기법 ]
1. 파이프라인 기법 : CPU의 사용을 극대화, 명령을 겹쳐서 실행
- 하나의 코어에 여러 개의 스레드를 사용
- 파이프라인 기법의 깊이가 5라면 동시에 최대로 실행가능한 명령 개수는 5개임
- 사진은 이후에 첨부
- 문제점 : 데이터 위험, 제어 위험, 구조적 위험이 존재
1) 데이터 위험 : 의존성의 문제로 발생, 데이터 A를 필요로 하는 두번째 명령어는 앞의 명령어가 끝날 때 까지 동시에 실행되어서는 안됌.
해결법 : 파이프라인의 명령어 단계를 지연하여 해결 가능
2) 제어 위험 : if 분기문, goto문 같은 명령에서 발생. 프로그램 카운터(PC)를 갑자기 변경하여 발생함
해결법 : 분기 예측, 분기 지연 방법으로 해결
3) 구조 위험 : 서로 다른 명령어가 같은 자원에 접근하려 할때 발생. 만약 A B C D 순으로 일을 처리한다고 가정할 때, B 와 A 의 처리가 병렬로 처리된다고 했을때, B가 접근할 변수와 A가 접근할 변수가 동일하면 안된다는 것임.
2. 슈퍼 스칼라 기법 : 코어를 여러개 구성, 복수의 명령어가 동시에 실행
- 사실상 파이프라인 기법과 거의 같은 구조, 다른 점은 코어를 여러개 써서 한 사람이 더 일하는 느낌임
3. 슈퍼 파이프라인 기법 : 파이프라인 기법의 강화판.
- 파이프 라인 : 1클록에서 1명령 처리
- 슈퍼 파이프라인 : 1클록 내에 여러개 명령 처리
- 한 클록 내에 여러 명령어가 실행되 병렬처리 능력이 높아짐
4. 슈퍼 파이프라인 슈퍼스칼라 기법 : 앞의 처리기법을 모두 합친 것
- 여러개의 코어에서 동시에 수행하며, 한 클록내에 여러개의 명령처리를 할 수 있음
5. VLIW(Very Long Instruction Word) 기법
- 앞의 병렬처리는 '하드웨어 기법' 이지만, 이 방법은 '소프트웨어 기법' 임
- CPU가 병렬처리를 지원 안할 때 사용하는 기법
- 동시에 수행할 수 있는 명령어들을 컴파일러가 추출, 하나의 명령어로 압축하여 실행
- 동시에 처리하는 명령어의 개수가 적음
- 하드웨어 병렬 처리 : 명령어 실행 시 병렬처리
- 소프트웨어 병렬 처리 : 컴파일 시 병렬처리
[ 무어의 법칙 ]
- CPU의 속도는 24개월 마다 2배 빨라진다.
[ 암달의 법칙 ]
- 컴퓨터 시스템 일부르 개선 할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는 수식
[ 궁금증 ]
1. 파이프 라인기법의 데이터 위험이 잘 이해안됨
[ 궁금증 정리 ]
1.
***[ 도서 출처 ]
조성호, 쉽게 배우는 운영체제, 한빛아카데미,2018
'20 ~ 21 Theory Study > OS (Operating System)' 카테고리의 다른 글
7장. 물리 메모리 관리 (0) | 2021.05.03 |
---|---|
6장 - 교착상태 (Dead Lock) (0) | 2021.02.15 |
1장. 운영체제와 컴퓨터 정리 (0) | 2020.11.02 |