컴퓨터 구조와 성능 향상
[학습 내용]
컴퓨터의 기본 구성(주요 하드웨어, 폰노이만 구조)
CPU & 메모리의 역할과 구조 (레지스터/버스/부팅)
컴퓨터 성능 향상 (버퍼/스풀/캐시/저장장치 계층구조/인터럽트/메모리 매핑/병렬처리)
[주요 내용 확인]
(최대한 이해하기 위해 그렸는데 분명 오류가 있을 것이다...;; 고로 계속 업데이트될 수 있다. TO BE CONTINUED!!)
- 하드웨어 구성
- 필수장치와 주변장치로 분류되며, 필수 장치는 CPU와 메모리를 포함한다. 주변장치는 나머지 부품을 포함하고 입력장치/출력장치/저장장치로 분류된다.
- 폰노이만 구조: 오늘날 대부분 컴퓨터가 따르는 구조, "모든 프로그램은 메모리에 올려야 실행할 수 있음." 응용프로그램뿐 아니라, 운영체제도 마찬가지.
- 부팅: 운영체제를 메모리에 올려서 실행하는 것
- 부트스트랩: 운영체제를 실행하기 위한 코드. 윈도우용 부트스트랩이 실행되면 윈도우 운영체제가 메모리에 올라옴
- 주요 사양 용어:
- 클록(CPU가 작업하는 박자를 만들고 틱을 생성해 CPU가 작업하도록 함)
- 헤르츠(클록틱이 발생하는 단위)
- CPU 구성
- 산술논리 연산장치
- 제어장치
- 레지스터
- 사용자 가시 레지스터: 데이터 레지스터, 주소 레지스터
- 사용자 불가시 레지스터: 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터
- 메모리 구성
- RAM
- 휘발성(메인메모리는 휘발성 메모리 사용): DRAM, SRAM, SDRAM
- 비휘발성: 플래시메모리/FRAM/PRAM
- ROM: 전력이 끊겨도 데이터를 보관할 수 있으나, 한번 저장하면 바꿀 수 없음
- 메모리 보호를 위해, 경계 레지스터 & 한계 레지스터 사용 (사용자의 작업이 진행되는 동안, 작업의 메모리 주소가 범위를 벗어나는지 점검)
- 버스: 데이터를 주고 받을 때 사용
- FSB(front side bus): 메모리와 연결 (제어 버스/주소 버스/데이터 버스)
- BSB(back side bus): CPU와 연결
- 버스의 대역폭: 버스가 한번에 전달할 수 있는 데이터의 크기 (32bit, 64bit)
- FSB와 BSB의 속도가 달라, 이를 줄이기 위한 다양한 기술이 적용됨
- 컴퓨터 성능 향상을 위한 다양한 기술
- 버퍼: 데이터를 일정량 이상 모은 후 전달, 속도 차이를 완화하는 것
- 스풀: 응용 프로그램과 프린터 사이에서 속도 차이를 완화하는 것
- 캐시: CPU가 사용할 것으로 예상되는 메모리의 데이터를 미리 갖고와 임시 저장하는 것 (cache hit ratio, 캐시 적중률이 높을 수록 성능이 좋음)
- CPU가 미리 사용할 데이터: 현재 위치에서 가까운 데이터일수록 많이 사용될 확률이 높다 (지역성 이론)
- 이 기준으로 보면 goto문은 바람직하지 않은 프로그래밍, 미리 갖고온 데이터가 무쓸모해질 수도 있어서.
- 저장장치 계층 구조
- 컴퓨터의 성능과 가격 사이의 타협점
- 속도가 빠르고 값이 비싼 장치는 CPU 가까이 두고, 값이 싸고 용량이 큰 저장장치를 반대에 배치
- 데이터 일관성 문제를 보완하기 위한 기술
- 인터럽트: 입출력장치와 CPU를 독립적으로 운영하게 하고, 입출력 관지라는 CPU가 요청한 데이터를 메모리로 전송하면 CPU에 보내는 완료 신호
- 직접 메모리 접근: direct memory access, 데이터를 메모리로 전송하기 위해 필요한 접근 권한
- 메모리 매핑 기법: 메모리 공간 내에서 CPU가 직접 사용하는 공간, 입출력장치가 사용하는 공간 등으로 나눈 것
- 병렬 처리: 여러 개 명령을 동시에 처리하는 방식 (멀티 스레드)
- 파이프라인 기법: 명령어 처리를 n개 단계(깊이)로 나누어 저마다 독립적으로 쉬지않고 처리할 수 있도록 하는 것. 한 클록마다 하나의 명령어를 처리
- 슈퍼스칼라 기법: 파이프라인을 처리하는 코어를 복수로 구성하는 것
- 슈퍼파이프라인 기법: 한 클록마다 복수의 명령어를 처리하도록 한 것
- 슈퍼파이프라인 슈퍼스칼라 기법: 기존 기법을 모두 합친 것
- 파이프라인의 위험
- 데이터 위험: 두 번째 명령어가 첫 번째 명령어의 데이터를 필요로 하는 경우
- 제어 위험: 대표적으로 goto문으로, 명령어들을 동시에 처리하고 있는 와중에 갑자기 다른 문장으로 가버리면 현재 처리되고 있었던 명령어들이 쓸모 없어짐
- 구조 위험: 다른 명령어가 같은 레지스터를 사용해야 해서 충돌 발생
출처: <쉽게 배우는 운영체제> , 조성호