CS

내가 보려고 정리한 컴퓨터 구조 면접 질문 정리 - (1)

Patti Smith 2024. 1. 19.

1. 파이프라이닝
명령어를 하나의 단계 여러 개로 나누어 각각을 독립적인 장치에 동시에 실행시켜 실행시간을 단축시키는 프로세스 기법입니다. 명령어를 실행하는 데 걸리는 시간인 지연시간과 프로세서 대역폭 간 균형을 유지할 수 있습니다.

이론 적으로 파이프라인 단계 수만큼 빨라지지만 실제로는 이를 방해하는 요소가 있는데 이를 해저드라고 합니다. 

앞의 명령 결과가 다음 명령 입력으로 사용될 때 문제가 발생되는 것을 데이터 해저드, 분기 명령 시 이미 파이프 라인에 적재되어 실행되고 있는 이어지는 다른 명령들이 필요가 없어져 발생하는 제어 해저드, 서로 다른 단계에서 실행되는 명령이 컴퓨터 내의 장치 하나를 동시에 사용하려고 할 때 발생하는 구조적 해저드가 있습니다.

2. 프로세스, 스레드
프로그램은 저장장치에는 저장되어 있지만 메모리에는 올라가있지 않은 정적인 상태다. 프로세스는 프로그램이 메모리에 로드되어 작업중인 인스턴스를 뜻하며 스레드는 프로세스 내에서 동시에 작업되는 흐름의 단위입니다.

프로세스가 메모리에 할당될 때 운영체제로 부터 별도의 메모리를 할당받습니다.

3. 멀티 스레드의 장단점
멀티 스레드는 스택 영역을 제외한 메모리 영역을 공유하기 때문에 프로세스처럼 별도의 통신 기법도 필요 없고 메모리도 절약할 수 있지만 하나의 스레드가 문제가 발생하면 같은 프로세스 내 다른 스레드가 강제로 종료됩니다. 게다가 운영체제가 스케줄링을 관리해주는 프로세스와 다르게 스레드끼리 충돌이 발생하는 동기화 문제로 디버깅이 까다로워집니다.

4. 캐시 메모리
캐시는 cpu와 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용합니다. 따라서 디스크나 네트워크에서 새로 요청하는 것보다 훨씬 빠른 속도로 데이터에 접근해서 성능 부하나 속도개선 효과를 얻을 수 있습니다. 단점으로는 캐시 메모리의 용량에 한계가 있어 큰 용량을 다루기 어려운 데다 코드의 복잡성이 증가해 유지보수가 어렵습니다.

캐시의 고단가 및 용량 때문에 캐시에 저장된 메모리는 선별되어야 하는데 이때 캐시 메모리에 어떤 데이터를 저장할지는 캐시의 지역성을 바탕으로 결정합니다.

지역성은 cpu가 자주 참조하는 데이터가 고르게 분포하지 않고 특정 부분에 몰려있는 것을 말한다. 

시간적 지역성은 특정 데이터가 미래에 또 한 번 접근할 가능성이 높은 경우, 공간적 지역성은 특정 데이터와 가까운 주소가 순서대로 접근된 경우를 말합니다.

5. 컴퓨터의 구성요소
메모리로 부터 명령어를 받아와 기계어로 변환 및 연산을 수행하는 cpu
메모리 및 데이터를 저장하는 기억장치
외부에서 데이터를 입력및 출력하는 장치

6. Cpu
메모리로부터 명령어를 얻어 기계어로 변환 후 alu에게 전달하는 제어유닛
명령어 주소 코드 데이터를 임시로 저장하는 레지스터
Alu는 제어 유닛으로부터 받은 명령어를 바탕으로 산술 논리 비트 연산을 수행한 뒤 제어유닛에 전달

7.고급언어 일반적인 프로그래밍 언어
어셈블리어 기계 사고 방식의 언어 어셈블리어를 어셈블러가 기계어로 변환
기계어 컴퓨터가 이해할 수 있는 비트의 집합

8. 32비트 컴퓨터와 64비트 컴퓨터
프로그렘 실행을 요청받은 컴퓨터가 한번에 실행할 수 있는 메모리 크키

9. Base64
Base64는 말 그대로 64진법을 뜻하며, 8비트의 이진 데이터를 공통 아스키 영역의 문자들만 사용한 문자열로 바꾸는 인코딩 방식입니다. Base64는 6비트 당 2비트의 오버헤드가 발생해서 기존 데이터보다 30% 이상 길어지고 거기에 인코딩 및 디코딩 로직이 추가되면 성능이 떨어진다는 단점이 있습니다. 

10.gpu와 cpu의 차이?
Cpu 최상위 계층의 중앙처리장치로써, 데이터 처리와 더불이 프로그램에서 분석한 알고리즘에 따라 다음 행동을 결정하고 멀티 태스킹을 위해 나눈 작업들의 우선 순위를 지정 및 전환하며 가상 메모리를 관리하는 등 컴퓨터를 지휘하는 역할을 수행합니다.

 

GPU는 반복적이고 비슷한 대량의 연산을 병렬적으로 수행하며 특히 영상, 렌더링을 비롯한 그래픽 작업의 경우 픽셀 하나하나에 대해 연산을 하기 때문에 연산 능력이 비교적 떨어지는 CPU가 GPU로 데이터를 보내 빠르게 처리합니다.

CPU는 GPU보다 적은 코어를 갖고 있지만 각 코어가 GPU보다 강력하므로 순차 작업(Sequential task)에 좋습니다. 반면 GPU는 병렬 작업을 효율적으로 처리할 수 있는 수천 개의 코어를 가지므로 병렬 작업(Paralell task)에 좋습니다.

11. CISC 와 RISC
(하나의 명령어가 실행되는 데 걸리는 시간보다 초당 얼마나 많은 명령어를 시작할 수 있는지가 더 중요하다.)

CISC는 하나의 프로그램에 사용되는 명령어의 개수를 최소화하고, 명령어 사이클의 개수를 희생하는 접근법이다. 반대로 RISC는 명령어 사이클의 개수를 줄이고 프로그램당 명령어 개수에 가치를 부여한다.

 

12. 프로그램 실행순서?

사용자가 운영체제에게 프로그램 실행을 요청하면, OS는 프로그램 정보를 기억장치에서 읽어 메모리에 적재합니다. 이후 CPU는 메인 메모리에서 읽어온 정보를 바탕으로 코드를 실행합니다.

 

13. 메인 메모리의 영역

언어마다 조금씩 차이는 있지만 기본적으로 4가지 영역으로 구분됩니다.

 

가장 낮은 순서대로(0에 가까운 순서)

텍스트 영역은 소스 코드를 실행하기 위해 저장되어 있는 영역입니다. 제어문, 함수, 상수 등이 이 영역에 지정됩니다.

데이터 영역은 코드 중 정적 변수, 지역 변수가 저장되어 있는 영역입니다. 프로그램이 시작되어 끝날 때까지 메모리에 남아있습니다.

힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역입니다. 런타임 시 영역의 크기가 결정됩니다.

스택 영역은 프로그램이 사용하는 임시 메모리 영역이며 함수를 호출할 때 지역 변수, 매개변수들이 저장되는 영역입니다. 함수가 종료되면 함수에 할당된 변수들을 해제시킵니다. 컴파일 시 영역의 크기가 결정됩니다.

 

힙 영역과 스택 영역은 사실 같은 공간을 공유하기 때문에 각 영역이 상대 공간을 침범하는 일이 발생할 수 있습니다. 이때 이를 각각 힙 오버플로우, 스택 오버플로우라고 합니다. 물론 데이터 버퍼의 오버플로우와 메모리 영역에 대한 오버플로우도 존재합니다.

 

14. 컴파일과 인터프리터

둘은 모드 소스 코드를 변환하고 실행시키는 방식을 말합니다.

 

컴파일은 런타임 이전에 코드를 기계어로 해석하는 작업방식입니다. 런타임 이전에 어셈블리어로 변환하기 때문에 구동시간이 오래 걸리지만, 구동 후에는 빠르게 작동합니다. OS나 빌드 환경에 종속적입니다.

 

인터프리터는 런타임 이후에 줄 단위로 해석하며 프로그램을 구동시킵니다. 코드를 기계어로 바꾸지 않고 중간 단계를 거친 뒤 런타임에서 즉시 해석하기 때문에 실제 실행시간이 느리지만 실시간 디버깅 및 코드 수정이 가능합니다.

 

프로젝트 규모에 따라 적용되는 장단점도 달라집니다.

인터프리터는 한 줄씩 번역하기 때문에 규모가 작은 프로젝트에서 수정 및 디버깅이 유리하여 개발 속도가 빠르지만, ㅓㅁ파일러는 초기 실행파일을 만들어서 실행할 경우 빠르게 번역할 수 있어 규모가 커질 수록 컴파일러를 사용하는 것이 좋을 것입니다. 

 

15. 자료형의 종류와 크기

char : 1byte 

short : 2byte

int : 4byte

float : 4byte

long : 4byte

double : 8byte

 

16. 시스템 소프트웨어와 응용소프트웨어의 차이

시스템 소프트웨어는 응용 소프트웨어를 실행하기 위한 플랫폼을 제공하고 컴퓨터 하드웨어를 동작 및 접근할 수 있도록 설계된 소프트웨어입니다. os, 언어 번역 프로그램, 유틸리티 프로그램 등이 속한다.

응용 소프트웨어는 넓은 의미로는 os에서 실행되는 모든 소프트웨어를 말하고 좁은 의미로는 os에서 사용자가 직접 사용하게 되는 소프트 웨어를 뜻합니다. 

 

17. 시스템 버스

중앙 처리장치와 기억장치 및 io장치 사이에 정보를 교환하는 통로로 주소버스, 데이터버스, 제어버스가 있습니다.

 

주소 버스는 기억장치, io장치를 지정하는 주소 정보를 전송하는 신호 선들의 집합입니다. 주소 선의 수는 중앙 처리 장치와 접속할 수 있는 최대 기억 장치 용량을 결정합니다. cpu에서 발생되어 기억장치나 io장치로 보내지는 정보기 때문에 단방향성입니다.

데이터 버스는 기억장치나 io장치 사이에 데이터를 전송하기 위한 신호선들의 집합이며 읽기와 쓰기 동작 모두 지원해야 하므로 양방향 전송이 가능해야 합니다.

제어 버스는 cpu가 시스템 내 각종 요소의 동작을 제어하는 데 필요한 신호선들의 집합입니다. 기억장치 읽기 쓰기 신호, io장치 읽기 쓰기 신호 등으로 제어 버스도 단방향성입니다.

 

18. 명령어 처리 과정

프로세서는 각 명령을 더 작은 마이크로 명령 단계로 나누어 처리합니다.
인출, 해독, 실행 사이클로 구성되며 이를 주 사이클이라고 합니다. 

1. 다음에 실행할 명령어를 메모리에서 읽어 명령 레지스터 IR로 가져옵니다.
2. 프로그램 카운터 pc는 그 다음에 가져올 명령어의 주소로 변경된다.
3. 제어장치는 방금 가져온 명령어를 해독하고 유형을 결정합니다.
4. 명령어가 메모리에 있는 데이터에 있는 경우 그 위치를 결정합니다.
5. 필요한 경우 데이터를 메모리에서 레지스터로 가져옵니다.
6. 명령어를 실행합니다.


19. 고정 소숫점 부동 소숫점
고정 소수점은 정수를 표현하는 비트와 소수를 표현하는 비트를 미리 고정하고 해당 비트만을 활용하여 실수를 표현하는 기법입니다.
부동 소수점은 소수점의 위치를 고정시키지 않고 정규화 과정을 거친 다음 IEEE 부동 소수점 방식으로 가수와 지수를 사용해 실수를 표현합니다. 

고정 소수점은 구현하기 편리하지만 사용하는 비트수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 범용 시스템에서는 거의 쓰이지 않습니다
 

'CS' 카테고리의 다른 글

[네트워크] 데이터 링크 계층  (0) 2024.08.05
[네트워크] 데이터 통신 용어 정리  (0) 2024.08.05
FDM (frequency division multiplexing)  (0) 2024.06.14
컴퓨터의 기본 구조  (2) 2022.04.07

댓글