Game Tech Blog

2장. 컴퓨터 구조와 성능 향상 본문

20 ~ 21 Theory Study/OS (Operating System)

2장. 컴퓨터 구조와 성능 향상

jonghow 2020. 11. 2. 23:04
반응형

[ 컴퓨터 구조 ] 

- 컴퓨터 = 하드웨어 + 소프트웨어 

 

[ 하드웨어의 구성 ] 

 

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

반응형
Comments