컴퓨터 구조 Flashcards
Q1) 메모리의 영역에 대해서 아시는 대로 말씀을 해주세요.
메모리는 크게 Code, Data, Heap, Stack 영역 4가지로 나눠집니다
Code영역을 프로그램을 실행시키기 위해 구성되는 명령문을 저장하는 공간으로 제어문, 함수, 상수 등이 이 영역에 저장되는데 코드영역 은 코드의 안정성을 위해 읽기만 가능한 영역입니다. Data 영역은 전역변수와 Static 변수 등이 저장되는 공간으로, 프로그램 종료까지 데이터가 남아있게 됩니다. Heap 영역은 사용자가 관리할 수 있는, 동적 할당 할 변수가 저장되는 공간이고, stack 영역은 지역변수, 매개변수들 이 저장되는 공간으로, 함수가 종료되면 함수에 할당된 변수들이 메모리에서 해제됩니다. Heap 영역은 낮은 주소값에서 높은 주소값으로 stack 영역은 높은 주소값에서 낮은 주소값순으로 저장됩니다.
중요 키워드 :
Code - 코드문, 함수, 상수, 제어문 저장
Data - 전역변수, 정적변수 저장
Heap - 동적 할당 stack - 지역변수, 매개변수 저장
BSS- 초기화되지 않은 전역변수를 저장
커널- 운영체제를 관리하기 위한 코드를 저장
03) 인출 사이클의 레지스터와 그 과정이 어떻게 되는지 설명해주세요.
인출 사이클에 사용되는 레지스터는 PC > MAR -> MBR > IR 순으로 이루어집니다.
PC는 Program Counter로 메모리에서 가져올 명령어의 주소를 저장하며, 특별한 경우를 제외하면 순차적으로 주소 값이 증가합니다. MAR 은 Memory AddressRegister로 PC에서의 주소 값을 받아 메모리로 접근하는 레지스터입니다. 제어장치의 제어신호와 함께 메모리의 값에 접근합니다. MBR은 MAR은 Memory Butter Register로 MAR에서 접근한 메모리의 명령어나 데이터를 저장하는 레지스터입니다. 마지막 IR 은 Instruction Register로 MBR에서 저장된 명령어나 데이터를 해석할 레지스터입니다.
중요 키워드 : PC -> MAR -> MBR -> IR
PC*가려올 명령어 주소 저장
MAR - PC에서 받은 주소에 접근
MBR - 접근한 주소에서 받은 명령어나 데이터 저장
IR -명령어나 데이터를 해석
Q2) 컴파일 과정의 순서마다 이뤄지는 과정에 대해서 설명해주세요.
컴파일 과정은 전처리기 - 컴파일러 -> 어셈블러 -> 링킹 순으로 진행됩니다.
전처리기 과정에선 외부에 선언된 소스코드와 라이브러리를 포함하고, 주석을 제거하며, 매크로를 치환하여 적용해줍니다.
컴파일러 과정에선 전처리된 소스코드파일을 어셈블리어로 변환하고, 언어문법 검사을 진행하고 정적 영역들의 메모리 할당을 수행합니다.
어셈블리 과정에선 어셈블리어 파일을 오브젝트 파일로 변환합니다.
링킹 과정에선 오브젝트 파일들과 프로그램에 사용되는 라이브러리 파일들을 링크해서 하나의 실행 파일을 만듭니다.
중요 키워드 :
전처리기 * 컴파일러 - 어셈블리 - 링킹
+추가
각 과정에서 생성되는 파일
전처리기(1) * 컴파일러(.S) - 어셈블리(.o) - 링킹(.exe)
iso 암기
Q4) 인터럽트란 어떤거고 과정이 어떻게 되는지 얘기해주세요.
인터럽트는 CPU가 진행하고 있던 작업을 중단시키는 상황을 알합니다. CPU가 직접 작업을 중단하는 동기 인터럽트, 입출력장치 등에 의 한 발생하는 비동기 인터럽트가 있는데, 보통, 비동기 인터럽트를 인터럽트라 칭합니다. 입출력장치에서 인터럽트 요청신호를 보내면 CPU 는 Flag Register내의 IF(Interupt enable Flag)의 활성화 여부에 따라 인터럽트를 받을지 말지를 결정합니다.인터럽트를 받는다면 CPU는 하 던 작업을 스택에 백업하고, 인터럽트 백터를 확인 후 해당 장치에 대한 인터럽스 서비스 루틴을 실행합니다. 서비스 루틴이 완료되면 cPu 는 백업했던 작업을 불러와 재개합니다.
중요 키워드 : 인터럽트는 ‘CPU의 작업을 중단시키는 행위이다
Q5) 명령어 파이프라이은 어떤 것인지와, 파이프라이인이 잘 동작되지 않는 3가지 경우에 대해서 말씀해주세요.
명령어가 처리되는 일련의 과정을 순차적으로 처리할 수 있도록 해주는 기법을 명령어 파이프라이인이라 하고, CPU의 빠른 작업속도에 중 요한 역할을 합니다. 그런데 파이프라이인이 특정 상황에서 효율을 낼 수가 없는데 이를 파이프라인 해저드라고 합니다. 크게 데이터 해저 드, 컨트롤 해저드. 스트럭쳐(구조적) 해저드 3가지가 있는데. 우선 데이터 해저드는 데이터가 의존적인 두 명령어가 동시에 실행되어 한 명령어를 처리하는 동안 다른 명령어를 처리하지 못해 파이프라인이 제대로 동작하지 않는 상태입니다. 컨트롤 해저드는 분기 등으로 인한 프로그램 카운터의 변화로 미리 가져와 처리하면 명령어가 쓸모 없어지는 상태를 말합니다. 구조적 해저드는 명령어들이 겁쳐 실행하는 과정 에서 서로 다른 명령어가 같은 자원에 접근하려고 할 때 발생합니다.
중요 키워드 :
데이터 해저드 - 데이터가 ‘의존적’ 일 때
컨트롤 해저드 - 분기로 인한 PC의 갑작스러운 변화 - 쓸모없어진 명령어
스트럭처 해저드 -‘서로 다른 명령어’가 ‘같은 지점의 자원’에 접근
Q6) 비순차적 명령어 처리라는 것이 있습니다. 이건 어떤거고 왜 사용하는 걸까요?
비순차적 명령어 처리는 Out of Order Execution의 약자로, 명령어들이 순차적으로 실행되지 않아도 되는 기법입니다. 순서가 바뀌어도 순차적 진행에 영향을 주지 않는 명령어를 우선적으로 처리하여, 명령어 처리의 딜레이로 파이프라인에 로스가 발생하지 않도록 효율성을 주 는 장점이 있습니다.
중요 키워드 : 이전 명렁어와 ‘무관한’ 명령어를 우선 실행
Q7) CISC와 RISC는 각각 어떤 것이고 차이점은 무엇인지 말씀해주세요.
CISC는 가변길이 명령어를 활용하여 복잡하고 다양한 기능을 제공해주기 때문에 메모리 관리에 효율적이지만, 명령어 의 크기와 실행 시간이 일정하지 않은 점이 있고, RISC는 명령어의 종류를 줄여 짧고 규격화된 명령어를 제공하지만 CISC에 비해 작성되는 명령어의 양이 늘어난다. 두 명령어 집합의 차이점은 파이프라이닝에 있는데 가변길이 명령어인 CISC는 길이가 일정하지 않아 파이프라이닝을 효율적으로 하기에 불리하지만 RISC는 명령어가 짧고 1클럭 내외로 실행 되어 파이프라이닝을 하기 쉽다.
중요 키워드 :
CISC * 복잡한 명령어 - 가변길이 명령어 * 메모리관리에 효율적 - 파이프라이닝에 불리
RIsC * 줄여진 명령어 * 고정길이 명령어 * 한 클럭 내외에 실행 - 파이프라이닝에 유리
Q8) RAM의 종류는 무엇이 있는지 말씀해주세요.
크게 DRAM과 SRAM으로 나뉘며, DRAM은 일정시간 이후 데이터가 점차 사라지기 때문에 데이터 소멸을 막기 위해 데 이터를 재활성화 합니다. 하지만 소비전력이 낮고, 저렴하며, 집적도가 높아 대용량 설계에 용이하기 때문에 주기억장치 로 사용됩니다. SRAM은 시간이 지나도 사라지지않고 DRAM보다 속도가 빠릅니다. 하지만 집적도는 낮고, 소비 전력은 DRAM에 비해 높으며 비용이 비싸 대용량으로 만들 필요는 없지만 속도가 빨라야 하는 캐시메모리에 사용됩니다.
중요 키워드 :
DRAM - 데이터 소멸를 막기위한 재활성화 - 주기억장치에 사용
SRAM . 데이터 소멸이 없어서 속도가 빠름 * 캐시메모리에 사용
09) 캐시메모리의 역할과 캐시메모리가 사용하는 원칙에 대해서 말씀해주세요.
캐시메모리는 CPU에서 사용된 것으로 예측되면 데이터를 미리 확보해놓고 CPU에 제공하는 메모리 공간으로 코어내에 서 개별의 메모리를 할당받는 L1캐시, L2캐시와 코어 외에서 각 코어의 캐시메모리를 공유하는 L3캐시로 나닙니다. 캐시 메모리는 지역 참조성 원칙에 의해 CPU가 사용할 데이터를 예측하는데 CPU가 한번 접근한 곳은 또다시 접근 할 가능성 이 있다는 시간 지역성과, CPU가 관련 기능에 인접한 메모리 공간에 접근했다면 또다시 접근할 가능성이 있다는 공간 지 역성을 고려하여 데이터를 예측합니다.
Q10) 컴파일 언어와 인터프리터 언어의 차이점에 대해서 말씀해주세요.
컴파일 언어는 소스코드 전체를 검사한 후 저급언어로 변환하고 실행파일을 만들고, 인터프리터 언어는 코드를 한줄씩 저급 언어로 변환하 면서 실행해서 컴파일 하는 시간은 소요되지 않습니다. 하지만 실행파일을 별도로 생성하지 않아서 실행 때마다 인터프리트 과정을 반복 수 행 해야한다는 차이점이 있습니다.
중요 키워드 :
컴파일 언어 - 전체 검사후 변환 - 실행파일 생성
인터프리터 언어 * 한준씩 변환 - 실행파일 X - 실행 때마다 인터프리터 과정 필요