CPU
Instruciton Set Architecture (ISA)
- ISA는 소프트웨어와 하드웨어가 소통할 수 있는 창구.
- 프로그래머가 코드 생성 후 컴파일러의 도움으로 해당 코드를 기계어로 바꿔준다.
- 프로세서는 해당 기계어를 바탕으로 서로 소통.
- 즉 , ISA는 명령어들의 집합이다.
RISC vs CISC
RISC (Reduced Instruciton Set Computer)
- CPU 명령어셋을 CPU를 고속화시키는 데 적절하게 재정립하여 같은 트랜지스터 숫자를 투입하면서도 더 높은 성능의 CPU.
- 명령어 길이를 비교적 일정하게 정리하고 포맷을 일정 부분 다듬음으로써 디코더 단순화.
- 메모리 대상으로 하는 연산은 load/store만 가능하게 하고 나머지는 모두 레지스터 사용. 즉 메모리와 레지스터를 대상으로 하는 연산을 분리함으로써 복잡성을 줄이고 명려어 낭비를 줄임.
- 최소한의 Instruction으로 설계
- CISC의 단점을 극복하고자 만듬.
- ex) ARM , ATMEL .. (임베디드 칩)
- 시스템의 밑바닥의 기능을 건들지 못함.
단점 : pipelining 을 하기 위해 cache 메모리가 많이 듬 -> 비용이 비쌈
CISC (Complexed Instruciton Set Computer )
- 종류가 다양하고 하는 일이 복잡한 명령어로 이루어진 CPU 또는 마이크로프로세서.
- 명령어의 길이가 가변적이라 명령어 밀도에서 유리.
- 만약 데이터나 주소값이 필요하다면 명령어 길이를 늘려 해결.
- 비교대상인 RISC 구조에서는 명령어 길이를 늘릴 수도 없고 정해진 명령어 워드 길이 안에서 해결해야 한다. 그래서 복잡하다는 편견과 달리 CISC 구조는 명령어 세트 설계가 바이트 단위로 깔끔한 편이다.
- 바이파이프라이닝 방식(명령어를 하나씩 하나씩 수행) 을 채택하는데 동시에 여러가지 업무수행을 하는 파이프라이닝에 비해 효율성이 떨어짐.
- 파이프라이닝 방식을 적용하기 위해서는 명령어 사이의 데이터 흐름을 실시간으로 분석해야 하는데 명령어가 복잡하면 이 분석에 사용되는 하드웨어가 너무 복잡해져서 설계 비용이 증가하고 회로의 속도가 떨어지기 때문에 CISC에서는 폭넓게 적용하기가 매우 어려움.
- ex) 인텔의 x86 , x86-64
- 현재의 x86 CPU는 내부적으로 RISC로 동작하면서 CISC 명령을 에뮬레이션하는 형태를 취하고 있기 때문에 CISC 아키텍처가 아직까지 살아남아 있다고 주장하기는 어렵다. 즉 CISC는 RISC와 섞여 혼종처럼 남아있는 상태라, 순수한 CISC는 현재 찾아볼 수 없음.
//// 에뮬레이션(emulation) : 에뮬레이션은 서로 다른 기종의 프로그램 호환성을 갖게 하기 위한 수단이다.
장점:
1) 작지만 고밀도의 코드 사용
-> 높은 밀도의 코드 인해 프로그램의 용량과 메모리 접근 횟수 단축 가능.
2) 생산성이 높다.
-> 가변길이 코드를 사용하므로 코드 단위당 작업량이 매우 많다.
3) 높은 호환성
-> CISC는 구조상 프로세싱 단계에 꼭 들어맞아야 할 최적 명령어의 개념이 없어, 하드웨어 단계에서 지원하는 명령어를 후속 프로세서에서도 지원해준다면 명령어의 호환성을 크게 신경쓰지 않아도 된다.
참조 : https://namu.wiki/w/CISC
Pipelining

-
CISC의 단점을 보완하기 위해 RISC가 채택하는 방식.
-
명령어를 수행하는 과정에서 하나의 명령어를 수행시키고 해당 명령어가 끝날때 까지 기다리는것이 아닌 그 뒤에서 기다리고 있는 명령어를 동시다발적으로 수행 하는 것을 의미한다. ( 동시에 많은 명령어를 처리함으로써 처리량을 늘리는것)
-
Fetch -> Decode -> Execution -> Write Back
Fetch: 프로그램 카운터 주소값을 따라 다음번에 실행한 명령을 가져옴.
Decode : 명령어 해석 - IR에 저장된 명령을 CPU가 실행할 수 있는 전기코드로 재생성.
execution : 연산 수행.
writeback : 연산 후 아웃풋을 다시 메모리에 적음.
-> 각 프로세스들은 독립적으로 수행 가능
명령어 파이프라인(instruction pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다.
단, 연산에 종속성이 있는 경우 pipeline 불가.
ILP (Instruction-Level Parallelism)

- ILP(명령 수준 병렬화)는 컴퓨터 프로그램에서 일련의 명령을 병렬 또는 동시에 실행하는 것.
Superscalar :
- 1 Cycle 동안에 서로 다른 독립적인 2개의 연산을 동시에 수행하는 기술.
- 프로세서의 다른 부분에서 독립적으로 실행할 개별 명령을 발송하는 것(Superscalar Architecture)
VLiW(Very Long Instruction Word)
![업로드중..]()
- 수행되는 작업은 여러 명령을 하나로 그룹화하여 프로세서에서 사용할 수있는 다른 장치로 함께 보내는 것.
- VLIW는 컴파일러 단에서 명령어의 배치가 이루어지는 방식이기 때문에, 슈퍼스칼라 등의 다른 병렬연산을 위한 방식과 달리 하드웨어 단에서 명령어 스케줄링을 하지 않음. 때문에 회로를 단순하게 개발하는 것이 가능해지며, 프로세서에서 해당 분야를 처리하지 않아도 되므로 회로 활용 효율 상승.
![업로드중..]()
Multi-core architecture

SMP (symmetric multiprocessing)

- 서로 독립적.
- 가장 일반적인 다중 처리기 시스템
- 각 CPU 처리기에는 개별 또는 로컬 캐시뿐만 아니라 자체 레지스터 세트가 존재.
- 모든 프로세서는 시스템 버스를 통해 물리 메모리 공유.
- 장점: 많은 프로세스를 동시에 실행 가능.
단점: 서로 독립적인 CPU의 특성으로 인해 하나가 유후 상태이고 다른 하나가 과부하에 걸려 비효율성 발생 가능.
- SMP 사용시 프로세스 및 메모리와 같은 자원을 다양한 프로세서 간에 동적으로 공유할 수 있으며 프로세서 간의 작업 부하 분산을 낮출 수 있음.

- 기상청 슈퍼컴퓨터의 예
- CPU에 작고 빠른 로컬 버스를 통해 액세스 되는 자체 로컬 메모리 제공.
- 모든 CPU가 공유 시스템 연결로 연결되어 모든 CPU가 하나의 물리 주소 공간을 공유
- 장점: CPU가 로컬 메모리에 액세스 할 때 빠를 뿐만 아니라 ㅣ스템 상호연결에 대한 경합도 없음. 따라서, 더 많은 프로세서가 추가될수록 더 효과적으로 확장가능.
단점: CPU가 시스템 상호 연결을 통해 원격 메모리에 액세스해야 할 때 지연시간이 증가하여 성능 저하 발생 가능.
클러스터형 시스템(Clustered system architecture)

- 클러스터 시스템은 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성.
- 각 노드는 통상 다중 코어 시스템 (약결합(loosely coupled)라고 간주됨)
- 일반적으롭 받아들여지는 정의에 의하면 클러스터 컴퓨터는 저장장치를 공유하고 근거리 통신망(LAN)이나 고속의 상호 연결망(interconnect) 으로 연결된다.
- 클러스터링은 통상 높은 가용성(availability)을 제공하기 위해 사용됨.
- 즉, 클러스터 내 하나 이상의 컴퓨터 시스템이 고장 나더라도 서비스는 계속 제공됨.
- 일반적으로 높은 가용성은 시스템에 중복 기능을 추가함으로써 얻어짐.
- 만약 하나의 노드가 고장나 서비스 중단을 겪어도 다른 노드가 저장장치에 대한 소유권을 넘겨받고 고장난 노드에서 실행중이던 응용 프로그램을 다시 시작하는데 이것을 '성능 저하' 라고 한다.
- 클러스터링은 비대칭적 또는 대칭적으로 구성될 수 있음.
비대칭형 클러스터링: 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 긴급 대기 (hot -standby) 모드 상태 유지.
대칭형 클러스터링: 둘 이상의 호스트들이 응용 프로그램 실행하고 서로를 감시 ( 가용한 하드웨어를 모두 사용하기 때문에 비대칭보다 더 효율적)

Direct I/O
- Direct I/O는 시스템의 read/write 버퍼 캐시를 거치지 않고 CPU가 직접 I/O에게 명령을 내림.
- 파일 시스템 캐시 내에서 메모리 버퍼링을 바이패스하려는 응용 프로그램의 경우 Direct I/O가 제공됨. ( 애플리케이션 수준에서 데이터 캐싱을 관리하므로 이 서비스를 구현하는 데 파일 시스템이 필요하지 않음.)
- Direct I/O는 CPU 사용량을 줄이고 먼저 Disk와 파일 버퍼 캐시 간에 데이터를 두 번 복사한 다음 파일에서 데이터를 복사하는 오버헤드를 제거함으로써 애플리케이션에 이점을 제공.
출처 : https://cloudibee.com/2008/01/29/what-is-direct-i-o/
Memory-mapped I/O (메모리 맵 입출력)
- Memory Mapped I/O는 마이크로프로세서(CPU)가 입출력 장치를 접근할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식.
- 따라서 전체 메모리의 주소공간에 입출력 장치의 메모리나 레지스터를 메모리로 취급하여 전체 메모리의 일부분으로 특정영역에 할당하여 배치하는 방식이다. ( 즉 메모리의 특정영역에 I/O에게 명령을 내리는 부분 존재 , 분리되어있지 X)
- I/O Controller가 CPU 역할 대행.(컴퓨터 안의 작은 컴퓨터)
따라서 IR, DR 을 가지고 있음.
I/O method
programmed I/O
- IO 제어권을 CPU가 가져와서 작업을 진행을 하는 것으로 CPU는 입출력 모듈이 명령어의 수행 완료를 기다립니다. 따라서 이 방식은 CPU의 시간을 소모합니다. 이는 위의 일반적인 입출력 모듈에서 추가적인 순서가 더 들어갑니다.
- 해당 방식은 Polling 방식 -> CPU가 해당 I/O가 수행을 끝냈는지 계속해서 확인하는 방식.
while(1) {
if(조건) break;
if(io1) task1();
if(io2) task2();
}
장점: 간단하며 별도의 하드웨어 필요치 않음.
단점: CPU가 I/O 동작에 매번 관여해야하므로 CPU 비효율성 발생.
Interrupt
- I/O 동작이 진행되는 동안에 CPU가 다른 작업을 처리 할 수 있도록 하는 방식.
- CPU 이용률은 programmed I/O 방식보다 효율적이지만, 인터럽트 반응 시간과 프로그램의 상태 보존 등으로 인하여 평균 전달 속도는 느림.
장점: CPU가 interrupt를 요청한 I/O 장치를 쉽게 발견 가능.
단점: 하드웨어가 복잡하며 제한된 수의 interrupt 만 처리가능.

interrupt 사이클
I/O 초기화수행 -> I/O는 대기상태 -> 특정타이밍에 CPU의 명령에따라 I/O는 해당 명령 수행 -> 수행 완료 후 interrupt 전송 -> CPU가 I/O 명령을 interrupt handler에게 넘겨줌 - 핸들러가 명령 처리 -> CPU는 본래(이전) 프로세스 과정 진행
DMA (Direct Memory Access)
- 엄청난 양의 데이터를 처리하는 과정이 부담스러운 CPU가 본인을 거치지 않고 I/O 디바이스가 직접 메모리에 접근 가능토록 하는 방식.
- I/O에서 요청되는 데이터 크기에 따라 다이렉트 메모리 엑세스를 만들어서 DMA controller에게 컨트롤 능력을 주고 메모리에서 CPU를 거치지 않고 바로 디스크에 저장 또는 디스크에서 바로 메모리로 저장시켜주게 하는 역할.

블로킹 / 논블로킹 (제어권 처리 방식에 따른 차이)
동기 / 비동기 (호출되는 함수의 작업 완료 여부 확인)
참조 : https://bellog.tistory.com/m/220

interrupt : 외부 혹은 CPU 내부에서 급한게 처리해달라는 신호.
I/O Device 내에서 발생되는 Hardware interrupt
- 특정 주기마다 Interupt 발생 : Timer Interrupt, keyboard I/O 요청 등
- 광의적 개념안에 trap, exception 포함.
Trap, Execption : Software interrupt
- 수행하는 프로세스에서 특정 I/O를 사용하고싶으면 운영체제에게 허락을 받아야됨.
- 허락 받을 수 있는 루트가 필요 -> 운영체제가 System call 을 제공해줌.
- OS가 최고 군주로서 여타 프로세스들은 OS에게 필요한 자원을 할당받기 위해 신호를 보내야함 -> System Call 요청하면 I/O 디바이스에게 요청 (trap)
- 예외상황(Exception) 일때 CPU에게 Interrupt 발생기가 있어 인지 가능.