[면접질문] 컴퓨터 구조 면접 질문 정리
메모리
Q. 통상적인 메모리 구조 내의 4가지 구성에 대해 간단하게 설명해주세요
A. 메모리는 code, data, heap, stack 영역으로 구성되어 있습니다. code 영역에는 코드 내부의 함수나 명령문 혹은 상수가 저장됩니다. data 영역에는 프로그램의 전역변수나 정적변수가 저장됩니다. heap 영역에는 사용자가 동적으로 생성하는 변수가 저장됩니다. 마지막으로 stack 영역에는 함수를 실행할 때 생성되는 매개변수나 지역변수가 저장됩니다.
Q. BSS와 Data의 영역을 나누는 이유에 대해 간단하게 설명해주세요.
A. Data 영역은 초기화 된 변수와 초기화 되지 않은 변수를 저장하는 BSS 로 나뉘어집니다. BSS 영역이 존재하는 이유는 초기화된 변수와 초기화 되지 않은 변수를 구분해 관리함으로써 실행 파일의 크기를 최적화하고 메모리 사용을 효율적으로 관리할 수 있기 때문입니다.
컴퓨터 구성
Q. 컴퓨터를 크게 무엇과 무엇으로 나눌 수 있는지와, 각각이 어떻게 구성되어 있는지 간단하게 설명해주세요.
컴퓨터는 크게 소프트웨어와 하드웨어로 구분됩니다. 소프트웨어는 크게 두가지로 크롬, 워드 프로세서와 같은 응용 소프트웨어와 OS 와 같은 시스템 소프트웨어로 구성됩니다. 하드웨어는 CPU, 기억장치, 입출력장치로 구성됩니다.
Q. 시스템 버스의 기본 동작에 대해 간단하게 설명해주세요.
시스템 버스는 하드웨어 구성 요소를 연결하는 일종의 통로라고 할 수 있습니다. 시스템 버스는 읽기와 쓰기 동작을 통해 각 영역에서 데이터, 주소, 제어 신호 등을 주고 받습니다.
Q. 시스템 버스의 구성에 대해서 간단하게 설명해주세요.
시스템 버스는 크게 세가지가 있습니다. 첫번째로 데이터 버스는 CPU와 주기억장치, 제어 장치들이 데이터를 주고받는 통로입니다. 두번째로 주소 버스는 CPU가 다른 장치들로 주소를 전달하는 통로입니다. 마지막으로 제어 버스는 시스템 버스를 통해 전송되는 데이터와 주소의 흐름을 제어하는 신호를 운반하는 통로입니다.
CPU 작동 원리
Q. CPU 내부의 각 구성 장치의 종류와 기능에 대해 설명해주세요
A. CPU 내부에는 ALU, 제어장치, 레지스터가 있습니다. ALU는 연산을 처리하는 장치 즉, 논리 연산, 산술 연산 을 담당하고 제어장치는 제어 신호를 발생시켜 명령어의 흐름을 관리합니다. 마지막으로 레지스터는 CPU 내부의 임시 저장 장치로 프로그램 속 명령어나 데이터를 실행 전후로 저장합니다. 레지스터에는 여러 종류가 있으며 각각 특정 목적으로 사용합니다.
Q. CPU 내부의 ALU가 하는 일에 대해 간단하게 설명해주세요
A. ALU는 간단하게 연산을 담당하는 역할을 합니다. 인풋으로 피연산자와 수행할 연산을 받아 아웃풋으로 실행 결과 값을 레지스터에 내보냅니다.
Q. CPU 내부의 제어장치가 하는 일에 대해 간단하게 설명해주세요
A.제어 장치는 제어 신호를 발생시켜 데이터와 명령어의 흐름을 관리합니다. 즉, 명령어의 해석과 실행 순서를 결정하고 메모리, ALU, 입출력 장치들 사이의 데이터 흐름을 제어합니다.
Q. CPU 명령어 사이클에 대해 설명해주세요
A. 명령어 사이클은 CPU가 명령어를 실행하는 주기입니다. 명령어 사이클에는 크게 fetch와 execute가 있습니다. fetch는 메모리 내부에 존재하는 프로그램을 실행하기 위해 메모리에 저장된 값을 CPU 내부로 가져오는 사이클을 말합니다. execute는 가져온 명령어를 실행하는 사이클을 얘기합니다
Q. fetch 가 필요한 이유에 대해 설명해주세요
A. 어떤 프로그램을 실행하기 위해 해당 프로그램에 대한 정보와 명령어를 가져와야 합니다. 따라서, 메인 메모리에 존재하는 프로그램의 명령어와 데이터를 가져오기 위해 fetch 사이클이 필요합니다.
Q. 간접 사이클이 필요한 경우를 예시를 들어 설명해주세요
A. 메인 메모리에서 정보를 가져왔지만 만약 주소가 간접 주소 지정 방식과 같이 실행을 위해서는 추가적인 메모리 접근으로 실제 주소값을 가져와야 하는 경우가 있습니다. 이를 위해 간접 사이클이 존재하고 간접 사이클에서는 fetch 후 추가적인 메모리 접근이 가능한 사이클입니다.
Q. CPU가 인터럽트 요청을 받았을 때 처리하는 과정에 대해 설명해주세요
A. 키보드 입력을 예시로 말씀드리겠습니다. 만약 사용자가 키보드를 입력해 CPU에 인터럽트 요청이 들어오면 CPU는 진행하고 있던 사이클을 마저 실행 후 다음 명령 사이클 실행 전 인터럽트 처리 여부를 결정합니다. 인터럽트 처리 여부는 플래그 레지스터에 저장됩니다. 만약 CPU가 인터럽트 처리를 한다면 인터럽트 벡터를 사용해 해당 인터럽트에 대한 정보를 알아냅니다. 인터럽트 벡터에는 인터럽트 서비스 루틴 시작 주소가 들어있습니다. 이때, 인터럽트 서비스 루틴은 인터럽트를 처리하는 프로그램이고 이는 메모리 내부에 존재합니다. 인터럽트 벡터로 시작주소를 알아내면 인터럽트 서비스 루틴 첫 시작주소로 점프해 해당 프로그램을 실행하여 인터럽트를 처리합니다. 모든 처리가 완료되면 이전에 저장해둔 실행중인 프로그램 정보를 다시 백업하여 프로그램을 실행합니다
캐시 메모리
Q. 캐시 메모리가 필요한 이유가 무엇이가요
A. CPU가 메인 메모리에 접근하는 속도는 CPU의 연산 속도보다 현저히 느립니다. 이는 CPU 성능에 큰 영향을 주기 때문에, 캐시 메모리를 CPU와 메인 메모리 사이에 두어 메인 메모리의 일부 정보들을 저장 시킵니다. 캐시 메모리를 사용해 CPU 연산 속도와 메모리 접근 속도 차이를 줄일 수 있습니다
Q. MMU의 개념을 물리주소와 논리주소를 연관지어 설명해주세요
A. 물리 주소는 실제 하드웨어에 저장되어 있는 주소이고 논리 주소는 실행중인 프로그램마다 가지는 주소입니다. CPU는 논리 주소만을 가지고 있기 때문에 실제 명령어를 실행하려면 물리 주소 값이 필요합니다. 따라서 MMU를 사용해 논라 주소에 베이스 레지스터 값을 더해 물리 주소를 계산합니다
Q. 저장 장치에 대해 계층이 높을수록 어떤 특징을 가지고 있는지 설명해주세요
A. 계층이 높을 수록 빠르지만 용량이 작고 가격이 비싸다는 단점을 가지고 있습니다.
레지스터 > 캐시 메모리 > 메인 메모리 > 보조 기억 장치
Q. 캐시 메모리의 참조 지역성에 대해 설명해주세요
A. 캐시 메모리의 정보들은 참조 지역성 원리에 의해 저장됩니다.
1. 한 번 참조된 정보는 가까운 미래에 다시 참조될 가능성이 높다 (시간 지역성)
2. 참조된 정보 주변 정보들은 참조될 확률이 높다 (공간 지역성)
즉, 캐시 메모리는 빈번하게 사용되거나 최근 사용된 데이터를 저장해 CPU가 다시 그 데이터에 접근할 때 빠르게 로드할 수 있도록 하여 전체 시스템의 전체 성능을 향상시킵니다.
Q. 캐시 메모리의 성능을 캐시 적중률을 사용해 설명해주세요
A. CPU의 메모리 접근 속도를 높이기 위해 캐시 메모리가 사용됩니다. cache hit란 CPU가 사용할 정보가 캐시 메모리에 존재할 때 발생하고, cache miss는 그렇지 않을 때 발생합니다 따라서 캐시 적중률은 cache hit / cache hit + cache miss이고 캐시 적중률이 높아야 캐시 성능이 좋습니다.
파이프라이닝
Q. 파이프라이닝에 대해 설명해주세요
A. 파이프라이닝은 한 명령어 사이클이 끝날 때를 기다리지 않고 병렬적으로 수행하는 기법입니다.
Q. 단일 사이클에 비해 파이프라인의 장점은 무엇인가요
A. 단일 사이클에 비해 파이프라인으로 병렬적으로 명령어 사이클을 수행하면 총 명령어 수행 시간을 단축시키고 단위 시간 내 CPU 처리량을 늘려 CPU 성능을 증가시킬 수 있습니다.
Q. 파이프라인 해저드에는 어떤 것들이 있을까요
A. 파이프라인 해저드는 명령어 사이클을 병렬적으로 수행했을 때 발생하는 문제점입니다. 파이프라인 해저드는 구조적 해저드, 데이터 해저드, 제어 해저드가 있습니다.
RISC vs CISC
Q. RISC와 CISC에 대해 설명해주세요
A. RISC는 단순 명령어 처리 기법으로 한 명령어마다 한 기능을 수행합니다. 따라서 명령어 길이가 고정되어 있고 CPU 가 작아 모바일이나 테블릿에 많이 사용됩니다. CISC는 복잡 명령어 집합 처리로 한 명령어마다 다양한 기능을 수행합니다. 따라서 명령어 길이와 수행시간이 다양해 CPU가 커서 서버나 데스크톱에 많이 사용됩니다.
Q. RISC와 CISC 중 어떤 것이 CPU 성능이 더 좋을까요
두가지 각자 다른 CPU 프로세서 설계 기법이라 상황에 따라 성능이 다를 것 같습니다. 모바일이나 테블릿의 경우 CPU가 작은 RISC가 용이하고 서버나 큰 데스크톱 같은 경우 CPU가 크고 복잡하여 CISC가 용이할 것 같습니다.
고정 소수점 vs 부동소수점
Q. 10진수를 2진수로 바꾸는 방법을 말씀해주세요.
10진수를 몫이 1이 될 때까지 2로 나눠가면서 나머지를 구하고, 1인 몫부터 구한 나머지들을 거꾸로 읽으면 됩니다.
Q. 컴퓨터에서 실수를 저장하는 방식이 무엇이 있는지 말씀해주세요.
실수를 저장하기 위해 고정소수점방식과 부동소수점방식이 있습니다.
Q. 두 방식의 차이에 대해서 아는만큼 설명해주세요.
부동소수점방식은 실수를 지수부와 가수부로 나누어 정규화된 실수의 가수, 지수를 각각 할당합니다.
고정소수점방식은 실수를 정수부와 소수부의 공간에 나누어 이진수로 변환된 정수, 소수를 각각 할당합니다.
Q. 부동소수점방식의 실수 변환 과정에 대해서 구체적으로 말씀해주세요.
먼저, 실수를 정수, 소수 각각 이진수로 변환합니다.
정규화된 식의 가수 부분의 비트를 가수부에 할당하고, 지수는 bias 를 더해 지수부에 할당합니다.
이진수로 변환된 실수를 정규화를 통해 가수와 지수로 나타냅니다.추가로 음수, 양수에 따라 맨 앞 1bit 부호 비트에 0 또는 1를 할당합니다.
추가로 음수, 양수에 따라 맨 앞 1bit 부호 비트에 0 또는 1를 할당합니다.
ARM 프로세서
Q. ARM 프로세서에 대해 말씀해주세요.
A. ARM 프로세서는 Advanced RISC Machine 의 약자로, 말그대로 RISC 아키텍쳐 기반의 프로세서입니다. RISC 기반이기 때문에 칩의 크기를 더 작고, 전력 소모를 줄일 수 있기 때문에 모바일, 태블릿, 임베디드와 같은 작은 크기의 기기들에 주로 탑재하는 것으로 알고 있습니다.