Skip to main content

SSAFY CS 스터디: 1주차 리뷰

리뷰 정보
  • 범위: 이취컴 Chapter 02-1 ~ 02-3 (p.36~89)
  • 참여형태: 🛡️수비조

저장장치 계층구조와 왜 그런 계층구조가 필요한지 설명해주세요.

답변

저장장치 계층구조는 속도가 빠른 순으로 레지스터, 캐시, 주메모리, 보조메모리가 있고, 속도가 빠를수록 비싸고 용량이 작다는 특징이 있습니다.
부품의 물리적인 거리나 구조에 의해 연산 속도에서 차이가 발생하고, 역할에 따라 서로 분리되어 있는 것이 최적화된 성능을 얻을 수 있습니다.
또한 단가에 따라 효율적으로 부품들을 배치해야 하기에 계층 구조가 존재합니다.

레지스터도 용량이 커지면 느려져요

그래서 분산 레지스터라는 구조가 존재함.


왜 부동소수점 오차가 발생하는지 설명해주세요.

답변

2진법으로 정확히 나누어 떨어지지 않는 무한소수는 메모리가 유한하기 때문에 모든 가수부를 저장할 수 없어, 일부 데이터가 생략됩니다.


부동소수점 체계에서 두 실수를 비교하기 위해 어떤 방법이 있는지 말씀해주세요.

답변

수학적으로는 엡실론 값을 설정해서 일정 구간 내의 오차는 허용하는 식으로 비교하고,
라이브러리적으로는 자바에선 BigDecimalcompareTo 메소드를 사용하여 비교합니다.


명령어의 구조와 각각이 무엇을 의미하는지, 그리고 오퍼랜드에 어떤 값이 올 수 있는지 설명해주세요.

답변

명령어는 opcode와 operand로 구성되어 있고, opcode는 수행할 작업, 그리고 operand는 수행할 작업의 대상입니다.
operand에는 데이터 값 자체가 올 수도 있지만, 데이터가 위치한 주소 값이 저장되기도 합니다.


UTF-8이 전세계적으로 널리 사용되는 이유를 말씀해주세요.

답변

ASCII 문자 집합은 표현 가능 범위가 한정되어있어 각 국가별 언어를 지원하는 문자 집합이 별도로 필요한데,
UTF-8은 가변길이 인코딩이어서 효율적으로 여러 국가의 언어를 지원할 수 있기 때문입니다.


CPU가 명령어를 처리하는 과정인 명령어 사이클에서, 간점 사이클이 왜 있어야 하는지 말씀해주세요.

답변

CPU가 명령어를 인출했을 때 오퍼랜드가 주소값으로 되어있으면 메모리에 재접근해야 하므로 이 과정에서 간접 사이클이 필요합니다.


파이프라이닝에 대해 설명해주세요.

답변

CPU가 명령어를 효율적으로 처리하기 위해 인출, 해석, 실행, 저장이라는 여러 과정을 병렬적으로 하나의 파이프라인에 모아 처리하는 명령어 병렬 처리 기법입니다.


CISC와 RISC 중 파이프라이닝에 더 적합한 체계와 그 이유를 말씀해주세요.

답변

파이프라이닝에 더 적합한 체계는 RISC입니다.
RISC는 CISC 대비 명령어의 크기와 수행시간이 규격화되어있어 파이프라이닝에 최적화되어있습니다.


프로그램 카운터의 역할과, 프로그램 카운터가 순차적으로 증가하지 않는 경우를 말씀해주세요.

답변

프로그램 카운터는 메모리에서 실행할 다음 명령어의 주소를 가리키는 용도의 레지스터입니다.
함수 콜이나 리턴, 인터럽트, 그리고 조건문이나 반복문의 jump 시에 프로그램 카운터가 순차적으로 증가하지 않습니다.


1코어 1스레드 CPU가 멀티스레드 프로그램을 실행할 수 있는지 말씀해주세요.

답변

네, 1코어 1스레드 CPU도 멀티스레드 프로그램을 실행할 수 있습니다.
소프트웨어 상의 스레드는 논리적인 스레드로서 실제 병렬적으로 처리되어야 하는 것이 아니라, 마치 그래보이는 것처럼 동시성 처리를 요구하기 때문에 실행이 가능합니다.


동기 인터럽트와 비동기 인터럽트가 왜 그렇게 명명되었는지, 어떤 차이가 있는지 설명해주세요.

답변

동기 인터럽트는 명령어를 실행함에 따라 발생하는 예외 등 직접 제어할 수 있는 인터럽트이고,
비동기 인터럽트는 하드웨어 인터럽트라고도 하며 외부 요인에 의해 갑자기 발생하는 인터럽트입니다.


인터럽트와 폴링의 차이를 설명해주세요.

답변

인터럽트는 인터럽트 요청 신호가 왔을 때만 확인하고, 폴링은 CPU 쪽에서 작업 완료 여부를 주기적으로 지속해서 확인한다는 차이가 있습니다.


인터럽트 발생 전 CPU는 실행중이던 작업을 어디에 백업하고, 왜 백업해야 하나요?

답변

실행 중이던 프로그램을 복귀 후 마저 실행해야 하기에 백업이 필요합니다.
인터럽트 서비스 루틴 수행 전, CPU는 복귀에 필요한 프로그램 정보들을 스택 메모리에 백업합니다.


동기 인터럽트 중 폴트와 트랩의 차이에 대해 설명해주세요.

답변

폴트는 예외가 발생했던 명령어부터 다시 실행하고,
트랩은 예외가 발생했던 명령어 이후부터 복귀하여 실행한다는 차이점이 있습니다.


동시성과 병렬성의 차이는 무엇이고, 하드웨어 파이프라이닝은 어디에 해당하나요?

답변

동시성은 여러 작업을 빠르게 번갈아가며 처리해 동시에 처리하는 것처럼 보이게 하는 논리적 개념이고,
병렬성은 실제로 여러 작업을 동시에 수행하는 물리적 개념입니다.
하드웨어 파이프라이닝은 물리적으로 독립된 하드웨어에서 CPU의 여러 명령어 처리 단계를 겹쳐서 수행하기 때문에, 병렬성에 해당합니다.