시스템 소프트웨어란 운영체제,컴파일러와 같이 사용자들이 컴퓨터를 효율적으로 사용할수 있도록 도와주는 소프트웨어입니다.
응용소프트웨어는 특정 목적을 달성하기 위해 만들어진 프로그램으로서 보통 일반 사용자들이 사용하는 프로그램을 의미합니다.
시스템 버스란 하드웨어의 각각의 구성요소 간 데이터 통신을 위해 필요한 통로입니다.
용도에 따라 데이터 버스, 주소버스, 제어 버스로 나누어집니다.
데이터 버스란 말그대로 중앙처리장치와 기타 장치 사이에서 데이터를 전송하기 위한 버스이고 양방향입니다.
📝주소버스?
주소버스는 데이터를 전송하기 위해 주소를 전달하는 버스이고 중앙처리장치에서 주기억장치,입출력장치로 향하는 단방향버스 입니다.
📝데이터버스?
제어버스는 중앙처리장치가 기억,입출력 장치에 제어신호를 전달하기 위해 필요한 버스입니다.
제어신호의 종류는 인터럽트 요청,기억장치 (읽기,쓰기), 버스사용 요청등이 있고 양방향버스입니다.
명령어 처리 과정은 fetch cycle(인출사이클) 과 execute cycle(실행사이클) 두개로 나누어집니다.
인출사이클은 우선 PC에 저장된 주소를 MAR로 전달하고 해당 주소에서 명령어를 인출합니다.
그리고 해당 명령어를 명령어 버퍼 레지스터(MBR) 에 저장하고 PC값을 1증가시킵니다.
마지막으로 명령어를 명령어 레지스터(IR) 에 전달하면 인출 사이클이 완료됩니다.
📝실행 사이클
실행 사이클의 경우 데이터를 인출하고 데이터 처리 그리고 처리된 데이터를 저장하는 과정을 거쳐서 완료됩니다.
고정소수점은 10진수를 2진수로 변경해서 그대로 사용하는 방식입니다. 부호부,정수부,소수부로 나누어서 표현합니다.
반면에 부동소수점은 2진수로 변경한 값을 그대로 사용하는 것이 아니라 정규화의 과정을 거친 다음 IEEE 부동소수점 표현방식인 부호부,지수부,가수부로 나누어서 표현합니다.
Risc는 단순한 명령어의 조합으로 이루어져 있어서 설계가 간단하고 비용이 줄어듭니다.
따라서 복잡한 명령어를 소프트웨어적으로 구현해야 하므로 sw부담이 상대적으로 더 큽니다. 보통 안드로이드에서 사용됩니다.
Cisc는 복잡한 명령어들로 구성되어있습니다.
따라서 명령어 해석에 시간이 필요하고 회로도 상대적으로 복잡합니다. 주로 윈도우 환경에서 사용됩니다.
명령어를 처리할때 한번에 하나씩 순차적으로 처리하는 것이 아니라 명령어가 처리되는 도중에 다른 명령어의 처리를 시작하는 방식으로 동시에 여러개의 명령어를 처리해 처리량을 올리는 것입니다.
명령어의 처리시간을 단축시키는 것이지 동작속도를 증가시키는 것은 아닙니다.
이때 처리시간과 처리단계가 균등하지 않아서 ‘해저드’ 라는 오류가 발생할수 있습니다.
해저드란 파이프라이닝에서 나타나는 문제점을 뜻합니다. 명령어의 처리시간과 처리단계가 균등하지 않아서 발생합니다.
해저드의 종류는 구조적 해저드, 데이터 해저드, 제어 해저드로 나뉩니다.
- 구조적 해저드
구조적 해저드는 하나의 자원을 여러개의 명령어에서 동시에 사용하려 할 때 발생합니다.
구조적 해저드를 해결하기 위해서는 데이터 처리와 명령어 처리를 동시에 할 수 있게 자원을 추가하거나 명령어 처리를 지연시켜서 해결합니다.- 데이터 해저드
데이터 해저드는 이전 명령어의 결과값이 다음 명령어의 입력으로 사용될 경우 발생합니다.
이를 해결하기 위해 결과를 저장하기 전에 다음 명령어를 입력으로 넣어줘서 해결하거나 이전 명령어의 값이 저장되기 전까지 기다렸다가 진행하는 방식을 사용합니다.- 제어 해저드
제어 해저드는 분기처리시 다음 명령어가 어떤 것인지 특정하지 못하기 때문에 발생합니다.
이를 해결하기 위해 분기 처리에 영향을 받지 않는 명령어를 우선 수행하거나 명령어 분기를 예측하여 명령어를 수행하거나 지연시키는 방법으로 해결합니다.
👉분기를 예측하는 방법은 항상 하나의 결과를 예측하는(True or False) 정적 예측이나 이전의 분기를 기록해두고 이를 바탕으로 예측하는 동적예측 2가지가 있습니다.
캐시메모리는 속도가 빠른 장치와 느린 장치 사이의 병목현상을 줄이기 위한 메모리입니다.
메인메모리와 cpu사이에서 자주 사용되는 데이터를 캐시에 저장해서 사용해서 속도를 향상시킵니다. 대신 용량이 작고 비싸다는 단점이 있습니다.
그리고 캐시 적중률(hit) 을 높이기 위해 지역성의 원리를 사용합니다.
캐시메모리 적중률을 상승시키기 위해 지역성 원리를 사용합니다. 공간지역성,시간지역성이 있습니다.
시간 지역성이란 한번 캐싱된 데이터는 다시 참조될 가능성이 높은 것을 의미하고 공간지역성은 참조된 데이터 주변의 데이터가 참조될 가능성이 높은것을 의미합니다.
캐시 미스란 가져오려는 데이터가 캐시메모리에 없는 경우를 의미합니다.
캐시 미스의 종류는 Cold miss, Conflict miss, Capacity miss가 있습니다.
Cold miss는 해당 데이터를 처음 호출해서 없는 경우를 의미합니다.
Conflict miss는 여러개의 명령어 주소가 같은 캐시메모리 주소에 저장되어있는 경우 발생합니다.
Capacity miss는 캐시메모리의 공간이 부족해서 발생합니다.
캐시에 데이터 주소를 저장하는 방식을 의미합니다. 그리고 직접(direct),연관(associate),집합 연관(set associate) 맵핑이있습니다.
직접사상
직접 사상은 캐시와 메모리를 같은 크기로 나누어서 순서대로 매핑하는 것을 말합니다, 블럭단위로 저장하기 때문에 캐시의 공간활용을 제대로 할수 없다는 단점이있습니다.
연관사상
연관 사상은 비어있는 캐시 메모리 공간이 있으면 저장하는 방식입니다. 적중률이 높다는 장점이 있고 저장할때는 간단하다는 장점이 있습니다. 하지만 데이터를 규칙이 없어서 검색할때 시간이 오래걸립니다.
세트연관사상
세트 연관 사상은 직접사상과 연관사상의 장점을 합친 사상방법입니다.
캐시메모리는 세트로 구분되고 세트내에 2개 이상의 슬롯을 가집니다.
만약 세트가 n개있고 세트당 슬롯이 1개라면 직접 연관사상입니다. 그리고 세트가 1개있고 세트당 슬롯이 n개라면 연관사상입니다.
따라서 세트번호로 먼저 탐색해서 탐색 수를 줄이고 무작위로 배치해서 직접사상의 단점을 보완하였습니다.