컴퓨터 구조 2장 연습문제 해설
컴퓨터 시스템의 기본 구조와 자료구조에 대한 연습문제와 자세한 해설
📚 객관식 문제 (1-10번)
데이터의 이동 통로를 나타내는 것은?
- 입력장치
- CPU
- 출력장치
- 버스
📌 해설
버스(Bus)는 컴퓨터 내부에서 데이터가 이동하는 통로입니다.
- 버스는 CPU, 메모리, 입출력 장치 등의 컴퓨터 구성 요소 간에 데이터를 전송하는 역할을 합니다.
- 주요 버스 유형으로는 주소 버스, 데이터 버스, 제어 버스가 있으며, 이들을 합쳐 시스템 버스라고 부릅니다.
- 컴퓨터 내부의 데이터는 이 버스를 통해 각 장치 간 이동하므로 데이터의 이동 통로라고 할 수 있습니다.
CPU와 메모리 등 다양한 부품을 연결하고 전원을 공급해 주는 커다란 판을 나타내는 것은?
- 메인메모리
- USB 드라이브
- 메인보드
- SSD
📌 해설
메인보드(Mainboard)는 컴퓨터의 모든 하드웨어 구성요소를 연결하는 중앙 회로판입니다.
- 메인보드는 CPU, 메모리(RAM), 그래픽 카드, 저장 장치 등 모든 주요 구성 요소가 연결되는 기본 판입니다.
- 내부에는 시스템 버스, 칩셋, 슬롯 등 다양한 연결 장치가 포함되어 있습니다.
- 전원 공급 장치(PSU)를 통해 각 구성 요소에 전력을 분배하는 역할도 합니다.
- 마더보드(Motherboard)라고도 불립니다.
First In, First Out의 자료구조는?
- 큐(queue)
- 배열(array)
- 연결 리스트(linked list)
- 스택(stack)
📌 해설
큐(Queue)는 First In, First Out(FIFO) 원칙을 따르는 자료구조입니다.
- 큐는 먼저 들어온 데이터가 먼저 나가는 구조로, 일상에서 줄서기와 유사한 방식으로 작동합니다.
- 기본 연산으로는 enqueue(삽입)와 dequeue(제거)가 있습니다.
- 큐는 프린터 스풀링, 프로세스 스케줄링, 네트워크 패킷 전송 등 순서가 중요한 다양한 시스템에서 활용됩니다.
- 반면, 스택(Stack)은 Last In, First Out(LIFO) 원칙을 따릅니다.
Last In, First Out의 자료구조는?
- queue
- array
- linked list
- stack
📌 해설
스택(Stack)은 Last In, First Out(LIFO) 원칙을 따르는 자료구조입니다.
- 스택은 가장 나중에 들어온 데이터가 가장 먼저 나가는 구조로, 쌓아올린 접시나 책과 같은 방식으로 작동합니다.
- 기본 연산으로는 push(삽입)와 pop(제거)이 있습니다.
- 스택은 함수 호출 관리, 괄호 검사, 수식 계산, 웹 브라우저의 뒤로가기 기능 등 다양한 알고리즘과 시스템에서 활용됩니다.
- 문제 3의 큐(Queue)는 First In, First Out(FIFO) 원칙을 따르는 것과 대조적입니다.
동적 메모리 할당을 사용하여 공간 관리가 편리한 자료구조는?
- 큐
- 배열
- 연결 리스트
- 스택
📌 해설
연결 리스트(Linked List)는 동적 메모리 할당을 사용하여 구현되는 자료구조입니다.
- 연결 리스트는 각 노드가 데이터와 다음 노드를 가리키는 포인터로 구성됩니다.
- 메모리를 필요에 따라 동적으로 할당하고 해제할 수 있어 크기가 가변적이며 메모리 관리가 효율적입니다.
- 노드의 삽입과 삭제가 배열보다 효율적으로 이루어집니다(O(1) 시간 복잡도).
- 단일 연결 리스트, 이중 연결 리스트, 원형 연결 리스트 등 다양한 형태로 구현할 수 있습니다.
- 반면 배열은 정적인 크기를 가지며, 큐와 스택은 연결 리스트나 배열을 이용해 구현할 수 있는 추상적인 자료구조입니다.
폰노이만 구조에서 모든 프로그램은 ( )에 올라와야 실행할 수 있다.
- 하드디스크
- 메인메모리
- 마우스
- 키보드
📌 해설
폰노이만 구조(von Neumann architecture)에서는 모든 프로그램이 실행되기 전에 메인메모리에 로드되어야 합니다.
- 폰노이만 구조는 프로그램과 데이터를 같은 메모리에 저장하는 저장 프로그램 방식을 특징으로 합니다.
- 프로그램은 보조 기억 장치(하드디스크, SSD 등)에 저장되어 있다가 실행을 위해 반드시 메인메모리(RAM)로 로드되어야 합니다.
- CPU는 메인메모리에서 명령어를 가져와 해석하고 실행하는 사이클을 반복합니다.
- 이것이 "프로그램 적재(program loading)"의 기본 원리이며, 현대 컴퓨터 아키텍처의 핵심 개념입니다.
요리사 모형의 도마(작업 공간)와 가장 관련이 높은 것은?
- 프로세스
- CPU
- 저장장치
- 메모리
📌 해설
요리사 모형에서 도마(작업 공간)는 컴퓨터의 메모리(Memory)에 해당합니다.
- 요리사 모형은 컴퓨터 시스템을 이해하기 위한 비유적 모델로, 여기서 요리사는 CPU에 해당하고 도마는 메모리에 해당합니다.
- 도마(메모리)는 요리사(CPU)가 재료를 준비하고 작업을 수행하는 공간으로, 현재 처리 중인 데이터와 명령어가 위치합니다.
- CPU가 작업을 수행하기 위해서는 필요한 데이터와 명령어가 메모리에 로드되어 있어야 합니다.
- 요리 재료(데이터)는 냉장고나 저장 공간(저장 장치)에서 가져와 도마(메모리)에 올려놓고 작업을 합니다.
1초당 변화를 나타낼 때 사용되는 단위는?
- Hz
- TB
- PB
- GB
📌 해설
Hz(헤르츠)는 1초당 진동 또는 사이클의 횟수를 나타내는 단위입니다.
- Hz는 주파수를 측정하는 국제 단위로, 1Hz는 1초에 한 번의 진동이나 사이클이 발생함을 의미합니다.
- 컴퓨터에서는 클럭 속도를 측정하는 데 사용되며, 이는 CPU가 1초에 몇 번의 사이클을 실행할 수 있는지를 나타냅니다.
- 현대 CPU는 보통 GHz(기가헤르츠, 10^9 Hz) 단위로 클럭 속도를 표현합니다.
- 반면, TB(테라바이트), PB(페타바이트), GB(기가바이트)는 데이터 저장 용량을 나타내는 단위입니다.
CPU의 구성 요소와 거리가 먼 것은?
- 산술논리 연산장치(ALU)
- 제어장치(control unit)
- 레지스터(register)
- 시스템 버스(FSB)
📌 해설
시스템 버스(FSB, Front Side Bus)는 CPU의 구성 요소가 아니라 CPU와 다른 구성 요소를 연결하는 통로입니다.
- CPU의 주요 구성 요소는 산술논리 연산장치(ALU), 제어장치(Control Unit), 레지스터(Register)입니다.
- ALU는 산술 연산(덧셈, 뺄셈 등)과 논리 연산(AND, OR, NOT 등)을 수행합니다.
- 제어장치는 명령어를 해석하고 CPU의 다른 부분에 필요한 제어 신호를 보냅니다.
- 레지스터는 CPU 내에서 데이터를 임시로 저장하는 고속 메모리입니다.
- 반면, 시스템 버스(FSB)는 CPU와 메인 메모리 및 다른 시스템 구성 요소 간의 데이터 전송 통로로, CPU의 외부에 위치합니다.
CPU의 구성 요소 중 연산을 담당하는 것은?
- ALU
- control unit
- register
- FSB
📌 해설
ALU(Arithmetic Logic Unit, 산술논리 연산장치)는 CPU 내에서 모든 수학적, 논리적 연산을 수행하는 부분입니다.
- ALU는 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술 연산을 수행합니다.
- AND, OR, NOT, XOR 등의 논리 연산도 ALU에서 처리됩니다.
- 비교 연산(크다, 작다, 같다 등)도 ALU의 중요한 기능 중 하나입니다.
- 데이터 이동 연산(shift, rotate)도 ALU에서 담당합니다.
- 제어장치(Control Unit)는 명령어 해석과 제어 신호 생성을, 레지스터(Register)는 데이터의 임시 저장을 담당하며, FSB는 CPU 구성 요소가 아닙니다.
📚 객관식 문제 (11-20번)
실행할 주소를 가진 레지스터는?
- IR
- PC
- MBR
- MAR
📌 해설
PC(Program Counter)는 다음에 실행할 명령어의 주소를 가리키는 레지스터입니다.
- PC는 명령어 포인터(Instruction Pointer, IP)라고도 불립니다.
- CPU는 PC가 가리키는 주소에서 다음 실행할 명령어를 가져옵니다.
- 일반적으로, 명령어가 실행된 후 PC는 자동으로 다음 명령어 위치로 증가합니다.
- 분기나 점프 명령어가 실행되면 PC 값이 새로운 주소로 변경됩니다.
- 다른 레지스터들의 역할:
- IR(Instruction Register): 현재 실행 중인 명령어를 저장
- MBR(Memory Buffer Register): 메모리에서 가져온 데이터를 임시 저장
- MAR(Memory Address Register): 메모리 접근 시 사용할 주소를 저장
현재 실행 중인 명령어를 저장한 레지스터는?
- IR
- PC
- MBR
- MAR
📌 해설
IR(Instruction Register)는 현재 실행 중인 명령어를 저장하는 레지스터입니다.
- CPU가 메모리로부터 명령어를 가져온 후, 해당 명령어는 IR에 저장됩니다.
- IR에 저장된 명령어는 제어장치(Control Unit)에 의해 해석되고 실행됩니다.
- IR은 명령어 실행 사이클의 가져오기(Fetch) 단계에서 중요한 역할을 합니다.
- PC(Program Counter)가 다음에 실행할 명령어의 주소를 가리키는 반면, IR은 현재 처리 중인 명령어 자체를 포함합니다.
데이터를 가져오거나 반대로 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용하는 레지스터는?
- IR
- PC
- MBR
- MAR
📌 해설
MAR(Memory Address Register)는 메모리 접근 시 사용할 주소를 저장하는 레지스터입니다.
- CPU가 메모리에서 데이터를 읽거나 쓸 때, 접근하려는 메모리의 주소를 MAR에 저장합니다.
- MAR은 주소 버스와 직접 연결되어 있어, MAR에 저장된 주소가 주소 버스를 통해 메모리로 전송됩니다.
- 메모리 읽기 연산에서 MAR에 지정된 주소의 데이터가 데이터 버스를 통해 CPU로 전달됩니다.
- 메모리 쓰기 연산에서는 MAR에 지정된 주소에 MBR의 데이터가 저장됩니다.
메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장하는 레지스터는?
- IR
- PC
- MBR
- MAR
📌 해설
MBR(Memory Buffer Register)는 메모리와 CPU 사이에서 데이터를 임시 저장하는 레지스터입니다.
- 메모리 읽기 연산에서 메모리로부터 읽어온 데이터는 MBR에 임시 저장됩니다.
- 메모리 쓰기 연산에서 CPU가 메모리에 저장하려는 데이터는 먼저 MBR에 저장된 후 메모리로 전송됩니다.
- MBR은 데이터 버스와 직접 연결되어 있어, 데이터의 입출력 통로 역할을 합니다.
- MBR은 MDR(Memory Data Register)이라고도 불립니다.
분기를 위한 연산 결과를 저장하는 레지스터는?
- PSR
- PC
- MBR
- AR
📌 해설
PSR(Program Status Register)는 CPU의 현재 상태와 연산 결과의 상태 정보를 저장하는 레지스터입니다.
- PSR은 플래그 레지스터(Flag Register) 또는 상태 레지스터(Status Register)라고도 불립니다.
- PSR에는 연산 결과의 부호(Sign), 영(Zero), 오버플로우(Overflow), 캐리(Carry) 등의 상태 플래그가 포함됩니다.
- 이러한 상태 플래그는 조건부 분기 명령어(conditional branch)의 조건 평가에 사용됩니다.
- 예를 들어, '결과가 0이면 점프'와 같은 명령어는 PSR의 Zero 플래그를 참조하여 분기 여부를 결정합니다.
단방향 버스는?
- 후면버스
- 데이터버스
- 제어버스
- 주소버스
📌 해설
주소버스(Address Bus)는 CPU에서 메모리나 I/O 장치로 주소 정보를 전송하는 단방향 버스입니다.
- 주소버스는 CPU에서 메모리로 항상 단방향으로만 주소 정보를 전송하기 때문에 단방향 버스입니다.
- 반면, 데이터버스(Data Bus)는 CPU와 메모리 간에 데이터를 주고받는 양방향 버스입니다.
- 제어버스(Control Bus)도 일반적으로 양방향으로 작동하며, 읽기/쓰기 신호, 인터럽트 등의 제어 신호를 전달합니다.
- 주소버스의 폭(width)은 CPU가 접근할 수 있는 메모리의 크기를 결정합니다. 예를 들어, 32비트 주소버스는 2^32(4GB)의 메모리 공간에 접근할 수 있습니다.
32bit CPU에서 같은 크기가 아닌 것은?
- MBR의 크기
- MAR의 크기
- 버스의 대역폭
- 메모리에 저장할 수 있는 양
📌 해설
32비트 CPU에서 MBR, MAR, 버스의 대역폭은 모두 32비트의 크기를, 메모리에 저장할 수 있는 양은 이와 다른 크기를 가집니다.
- 32비트 CPU에서 MBR(Memory Buffer Register)은 일반적으로 32비트의 크기를 가집니다.
- MAR(Memory Address Register)도 32비트로, 이는 CPU가 최대 2^32(4GB)의 메모리 주소 공간에 접근할 수 있음을 의미합니다.
- 버스의 대역폭(데이터 버스 폭)도 보통 32비트입니다.
- 그러나 메모리에 저장할 수 있는 양은 실제 컴퓨터에 설치된 물리적 메모리(RAM)의 용량에 따라 달라지며, 32비트 주소 버스가 접근할 수 있는 최대 4GB보다 작을 수도, 64비트 시스템에서는 훨씬 클 수도 있습니다.
나머지 3개와 종류가 다른 것은?
- 플래시 메모리
- SDRAM
- DRAM
- EPROM
📌 해설
EPROM(Erasable Programmable Read-Only Memory)은 다른 세 가지와 달리 비휘발성 메모리(ROM)의 한 종류입니다.
- EPROM은 전원이 꺼져도 데이터가 유지되는 비휘발성 메모리이며, 특수한 장비(UV 소거기)를 사용해 내용을 지우고 다시 프로그래밍할 수 있습니다.
- 반면, SDRAM(Synchronous Dynamic Random Access Memory)과 DRAM(Dynamic Random Access Memory)은 모두 휘발성 메모리(RAM)의 종류로, 전원이 꺼지면 데이터가 사라집니다.
- 플래시 메모리는 비휘발성 메모리이지만, 일반적으로 보조 저장장치로 사용되며 쓰기/지우기가 EPROM보다 훨씬 용이합니다.
- SDRAM과 DRAM은 주기적인 리프레시가، 필요하다는 공통점이 있지만, SDRAM은 시스템 클럭에 동기화되어 동작하는 발전된 형태의 DRAM입니다.
운영체제를 실행하기 위한 작은 코드를 나타내는 것은?
- bootstrap
- master boot record
- control unit
- BIOS
📌 해설
부트스트랩(Bootstrap)은 컴퓨터 시스템이 시작될 때 운영체제를 로드하기 위한 초기화 과정과 그에 필요한 작은 코드를 의미합니다.
- 부트스트랩 코드는 컴퓨터가 전원을 켰을 때 가장 먼저 실행되는 작은 프로그램으로, 운영체제를 메모리에 로드하고 실행하는 역할을 합니다.
- 이 과정은 종종 "컴퓨터를 부팅한다"라고 표현되며, 부트스트랩이라는 용어는 "신발끈을 스스로 묶다"라는 의미의 관용구에서 유래했습니다.
- 부트스트랩 과정은 일반적으로 다음 단계를 포함합니다:
- BIOS/UEFI 초기화 및 하드웨어 검사(POST)
- 부팅 장치 확인
- 마스터 부트 레코드(MBR) 또는 GUID 파티션 테이블(GPT) 로드
- 부트로더 실행
- 운영체제 커널 로드 및 초기화
입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼는?
- BSB
- spool
- CPU cache
- Web cache
📌 해설
스풀(SPOOL, Simultaneous Peripheral Operation On-Line)은 입출력 장치와 CPU 간의 속도 차이를 보완하기 위한 소프트웨어적 버퍼링 기법입니다.
- 스풀링은 주로 프린터와 같은 느린 입출력 장치를 효율적으로 사용하기 위해 도입되었습니다.
- 스풀링 시스템에서는 출력할 데이터를 디스크의 특정 영역(스풀 영역)에 임시 저장한 후, 백그라운드에서 천천히 실제 출력 장치로 전송합니다.
- 이를 통해 CPU는 입출력 작업이 완료될 때까지 기다리지 않고 다음 작업을 처리할 수 있어 시스템 효율성이 향상됩니다.
- 프린터 스풀링이 가장 대표적인 예로, 인쇄 명령이 내려진 문서는 스풀 영역에 저장되었다가 프린터가 준비되면 인쇄됩니다.
- 반면, CPU 캐시는 CPU와 메인 메모리 간의 속도 차이를 줄이기 위한 하드웨어적 버퍼입니다.
📚 객관식 문제 (21-28번)
앞으로 사용할 것을 미리 가져와 속도를 향상하는 장치는?
- BSB
- spool
- cache
- FSB
📌 해설
캐시(Cache)는 자주 접근하거나 앞으로 사용할 가능성이 높은 데이터를 미리 가져와 빠르게 접근할 수 있는 고속 메모리입니다.
- 캐시는 CPU와 메인 메모리 사이의 속도 차이를 줄이기 위해 사용되는 고속의 임시 저장소입니다.
- 데이터 지역성(Locality) 원리에 기반하여, 최근에 접근한 데이터나 인접한 데이터는 곧 다시 접근할 가능성이 높다는 점을 활용합니다.
- 캐시는 여러 레벨(L1, L2, L3 등)로 구성될 수 있으며, CPU에 가까울수록 더 빠르지만 용량이 작습니다.
- 웹 브라우저 캐시, 디스크 캐시, DNS 캐시 등 다양한 환경에서 캐시 개념이 적용됩니다.
- 반면, 스풀(spool)은 느린 입출력 장치를 위한 버퍼링 기술이며, FSB(Front Side Bus)는 CPU와 메모리를 연결하는 버스입니다.
캐시에 원하는 데이터가 있는 경우를 나타내는 것은?
- cache hit
- cache miss
- cache hit ratio
- cache size
📌 해설
캐시 히트(Cache Hit)는 CPU가 요청한 데이터가 캐시 메모리에 이미 존재하는 상황을 의미합니다.
- 캐시 히트가 발생하면 CPU는 상대적으로 느린 메인 메모리에 접근할 필요 없이 빠른 캐시에서 데이터를 가져올 수 있습니다.
- 캐시 히트는 시스템 성능 향상에 직접적인 영향을 미치며, 캐시 히트율(Cache Hit Ratio)이 높을수록 시스템 성능이 향상됩니다.
- 반면, 캐시 미스(Cache Miss)는 요청한 데이터가 캐시에 없어 메인 메모리에서 데이터를 가져와야 하는 상황을 의미합니다.
- 캐시 히트율은 전체 메모리 접근 중 캐시 히트가 발생한 비율을 나타내며, 시스템 성능을 평가하는 중요한 지표입니다.
캐시에 원하는 데이터가 없는 경우를 나타내는 것은?
- 캐시 히트
- 캐시 미스
- 캐시 적중률
- 캐시 크기
📌 해설
캐시 미스(Cache Miss)는 CPU가 요청한 데이터가 캐시 메모리에 존재하지 않는 상황을 의미합니다.
- 캐시 미스가 발생하면 CPU는 원하는 데이터를 메인 메모리에서 가져와야 하므로, 추가적인 시간이 소요됩니다.
- 일반적으로 메인 메모리 접근은 캐시 접근보다 수십 배 이상 느리기 때문에, 캐시 미스는 성능 저하의 주요 원인이 됩니다.
- 캐시 미스가 발생하면 요청한 데이터를 메모리에서 가져오면서, 해당 데이터 및 주변 데이터를 캐시에 저장하여 향후 접근을 위해 준비합니다.
- 캐시 미스는 강제적 미스(Compulsory Miss), 용량 미스(Capacity Miss), 충돌 미스(Conflict Miss) 등으로 분류됩니다.
저렴한 가격으로 속도를 레지스터처럼, 용량은 하드디스크처럼 시스템을 구성해 주는 것은?
- 저장장치의 계층 구조
- 인터럽트
- 직접 메모리 접근
- 메모리 맵 입출력
📌 해설
저장장치의 계층 구조(Memory Hierarchy)는 다양한 속도와 용량의 저장장치를 계층적으로 구성하여 비용 효율적으로 성능을 최적화하는 구조입니다.
- 저장장치 계층 구조는 일반적으로 다음과 같은 단계로 구성됩니다(위에서 아래로 속도 감소, 용량 증가, 비용 감소):
- 레지스터(Registers): CPU 내부의 초고속 저장소
- 캐시 메모리(Cache): L1, L2, L3 등의 고속 버퍼 메모리
- 메인 메모리(Main Memory, RAM): 프로그램과 데이터의 주 저장소
- 보조 저장장치(Secondary Storage): SSD, HDD 등
- 아카이브 저장소(Archive Storage): 테이프, 광학 미디어 등
- 이러한 계층 구조를 통해 상위 계층의 빠른 속도와 하위 계층의 큰 용량을 조합하여, 경제적인 비용으로 높은 성능을 제공합니다.
- 각 계층 간에는 데이터 이동이 발생하며, 데이터 지역성(Locality) 원리를 활용하여 자주 사용되는 데이터는 상위 계층에 유지됩니다.
CPU 작업과 입출력 작업을 분리하여 효율을 높이는 기법은?
- 저장장치의 계층 구조
- 인터럽트
- 직접 메모리 접근
- 메모리 맵 입출력
📌 해설
인터럽트(Interrupt)는 CPU가 프로그램을 실행하는 도중에 예외 상황이나 입출력 작업 완료와 같은 외부 이벤트가 발생했을 때, 현재 실행 중인 작업을 일시 중단하고 해당 이벤트를 처리하는 메커니즘입니다.
- 인터럽트 방식에서는 입출력 장치가 작업을 시작한 후, CPU는 다른 작업을 수행할 수 있어 시스템 효율성이 향상됩니다.
- 입출력 작업이 완료되면 장치는 인터럽트 신호를 발생시켜 CPU에게 알립니다.
- CPU는 현재 작업의 상태를 저장하고(문맥 전환), 인터럽트 처리 루틴으로 제어를 이동하여 해당 이벤트를 처리합니다.
- 인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트(트랩), 예외 등으로 분류될 수 있습니다.
- 인터럽트 방식은 폴링(polling) 방식에 비해 CPU 시간을 효율적으로 사용할 수 있게 해줍니다.
메모리의 일정 공간을 입출력에 할당하는 기법은?
- 사이클 훔치기
- 인터럽트
- 직접 메모리 접근
- 메모리 맵 입출력
📌 해설
메모리 맵 입출력(Memory-Mapped I/O, MMIO)은 입출력 장치의 레지스터를 메모리 주소 공간의 일부로 할당하여 접근하는 기법입니다.
- MMIO에서는 CPU가 입출력 장치에 접근할 때 특별한 입출력 명령어를 사용하지 않고, 일반 메모리 읽기/쓰기 명령어를 사용합니다.
- 각 입출력 장치는 메모리 주소 공간의 특정 범위에 매핑되며, 해당 주소에 대한 읽기/쓰기 동작은 실제로 해당 장치에 대한 접근으로 처리됩니다.
- 이러한 방식은 입출력을 위한 별도의 명령어 세트가 필요 없어 CPU 설계가 단순해지는 장점이 있습니다.
- 대부분의 현대 컴퓨터 시스템에서는 메모리 맵 입출력과 별도의 I/O 포트를 사용하는 방식을 함께 채택하고 있습니다.
입출력 관리자에게 CPU의 허락 없이 메모리에 접근할 수 있게 하는 권한은?
- cycle stealing
- interript
- DMA
- MMIO
📌 해설
DMA(Direct Memory Access)는 CPU의 개입 없이 입출력 장치가 메모리에 직접 접근할 수 있게 하는 기술입니다.
- DMA는 대용량 데이터 전송 시 CPU 부담을 줄이기 위해 사용됩니다.
- DMA 컨트롤러는 CPU 대신 메모리 제어를 담당하여 입출력 장치와 메모리 간의 데이터 전송을 관리합니다.
- DMA 작동 과정:
- CPU가 DMA 컨트롤러에 전송할 데이터의 시작 주소, 크기, 방향 등을 설정
- CPU는 다른 작업을 계속 수행
- DMA 컨트롤러가 메모리와 입출력 장치 간 데이터 전송을 처리
- 전송 완료 후 DMA 컨트롤러가 CPU에 인터럽트 신호 발생
- DMA는 디스크 I/O, 네트워크 패킷 전송, 그래픽 처리 등 대용량 데이터 전송이 필요한 작업에서 시스템 성능을 크게 향상시킵니다.
CPU가 메모리 사용 권한을 장치 관리자에게 양보하는 것을 나타내는 용어는?
- 사이클 훔치기
- 인터럽트
- 직접 메모리 접근
- 메모리 맵 입출력
📌 해설
사이클 훔치기(Cycle Stealing)는 DMA 동작 중에 CPU와 DMA 컨트롤러가 메모리 버스 사용 권한을 번갈아 가면서 사용하는 기법입니다.
- CPU와 DMA 컨트롤러는 메모리에 동시에 접근할 수 없기 때문에, DMA 작동 시 CPU의 메모리 사이클 일부를 '훔쳐서' 사용합니다.
- CPU가 메모리에 접근하지 않는 시간(예: 캐시에서 데이터를 처리하는 동안)에 DMA 컨트롤러가 메모리 접근을 수행합니다.
- 이 방법은 CPU와 DMA 간의 메모리 접근 충돌을 방지하고, CPU 성능 저하를 최소화합니다.
- DMA 전송량이 많을 경우 CPU 성능이 일부 저하될 수 있지만, CPU가 모든 입출력 작업을 직접 처리하는 것보다는 훨씬 효율적입니다.
📚 주관식 문제 (29-61번)
컴퓨터의 필수장치는 CPU와 ( )다.
📌 해설
컴퓨터의 기본 구성에서 가장 필수적인 두 요소는 CPU와 메인메모리(Main Memory)입니다.
- CPU(중앙처리장치)는 컴퓨터의 '두뇌' 역할을 하며 명령어를 해석하고 실행하는 핵심 구성 요소입니다.
- 메인메모리(RAM)는 프로그램과 데이터를 저장하는 공간으로, CPU가 직접 접근할 수 있는 주기억장치입니다.
- 폰노이만 구조에 따르면, 프로그램은 실행되기 위해 반드시 메인메모리에 로드되어야 합니다.
- CPU와 메모리가 없다면 컴퓨터로서의 기본적인 기능을 수행할 수 없으며, 다른 장치들(입출력 장치, 저장 장치 등)은 이 두 요소에 비해 상대적으로 부가적인 요소로 볼 수 있습니다.
( ) 컴퓨터에서 데이터의 이동 통로다.
📌 해설
버스(Bus)는 컴퓨터 내부에서 데이터가 이동하는 통로입니다.
- 버스는 CPU, 메모리, 입출력 장치 등 컴퓨터의 다양한 구성 요소 간에 데이터가 전송되는 경로입니다.
- 주요 버스 유형에는 다음이 포함됩니다:
- 주소 버스(Address Bus): CPU가 메모리나 입출력 장치에 주소 정보를 전송하는 버스
- 데이터 버스(Data Bus): 실제 데이터가 이동하는 양방향 버스
- 제어 버스(Control Bus): 읽기/쓰기 신호 등 제어 신호를 전송하는 버스
- 버스의 대역폭(width)은 한 번에 전송할 수 있는 데이터의 양을 결정하며, 컴퓨터 성능에 중요한 영향을 미칩니다.
( )는 CPU와 메모리 등 다양한 부품을 연결하고 전원을 공급해주는 커다란 판이다.
📌 해설
메인보드(Mainboard)는 컴퓨터의 모든 핵심 구성 요소가 장착되고 연결되는 주요 회로판입니다.
- 메인보드는 마더보드(Motherboard) 또는 시스템보드(System Board)라고도 불립니다.
- 메인보드는 다음과 같은 주요 구성 요소들이 연결되는 플랫폼 역할을 합니다:
- CPU 소켓: 프로세서를 장착하는 공간
- 메모리 슬롯: RAM 모듈을 장착하는 공간
- 확장 슬롯: 그래픽카드, 사운드카드 등의 확장 카드를 장착하는 공간
- 칩셋: CPU와 다른 구성 요소 간의 통신을 관리
- BIOS/UEFI 칩: 기본 입출력 시스템을 저장
- 저장 장치 커넥터: SSD, HDD 등을 연결
- 전원 공급 장치(PSU)와 연결되어 각 구성 요소에 적절한 전원을 분배합니다.
폰노이만 구조에서 모든 프로그램은 ( )에 올라와야 실행할 수 있다.
📌 해설
폰노이만 구조(von Neumann architecture)에서는 모든 프로그램이 실행되기 위해 반드시 메모리(Memory)에 로드되어야 합니다.
- 폰노이만 구조는 1945년 수학자 존 폰 노이만이 제안한 컴퓨터 아키텍처로, 현대 대부분의 컴퓨터가 따르는 기본 설계입니다.
- 이 구조의 핵심 개념은 '저장 프로그램 방식(Stored Program Concept)'으로, 프로그램 코드와 데이터를 동일한 메모리에 저장합니다.
- 프로그램은 하드 디스크와 같은 보조 기억 장치에 영구적으로 저장되어 있다가, 실행을 위해 메인 메모리(RAM)에 로드됩니다.
- CPU는 메모리에서 명령어를 순차적으로 가져와(fetch) 해석(decode)하고 실행(execute)하는 사이클을 반복합니다.
- 이 구조가 채택되기 전에는 프로그램을 실행하기 위해 물리적으로 회로를 재구성해야 했습니다(하드와이어링 방식).
( )는 컴퓨터가 이해할 수 있는 숫자로만 이루어진 언어다.
📌 해설
기계어(Machine Language)는 컴퓨터가 직접 이해하고 실행할 수 있는 이진수(0과 1)로 구성된 프로그래밍 언어입니다.
- 기계어는 CPU가 직접 해석하고 실행할 수 있는 가장 저수준의 프로그래밍 언어입니다.
- 모든 프로그램은 최종적으로 기계어로 변환되어 실행됩니다.
- 기계어는 CPU 아키텍처에 따라 다르며, 특정 프로세서 계열에 맞게 설계됩니다(예: x86, ARM, RISC-V 등).
- 기계어는 사람이 직접 작성하고 이해하기 매우 어렵기 때문에, 어셈블리어나 고급 프로그래밍 언어를 통해 프로그램을 작성한 후 컴파일러나 어셈블러를 통해 기계어로 변환합니다.
- 예를 들어, x86 아키텍처에서 "10110000 01100001"는 "AL 레지스터에 97(ASCII 코드로 'a')을 저장하라"는 명령어입니다.
( )는 기계어를 사람이 이해할 수 있는 문자 형태로 바꿔놓은 프로그래밍 언어다.
📌 해설
어셈블리어(Assembly Language)는 기계어의 명령어와 1:1로 대응되는 기호(니모닉)를 사용하여 표현한 저수준 프로그래밍 언어입니다.
- 어셈블리어는 기계어보다 사람이 이해하기 쉽도록 설계되었지만, 여전히 하드웨어에 매우 밀접한 저수준 언어입니다.
- 예를 들어, 기계어 "10110000 01100001"는 어셈블리어에서 "MOV AL, 61h"와 같이 표현될 수 있습니다.
- 어셈블리어 프로그램은 어셈블러(Assembler)를 통해 기계어로 변환됩니다.
- CPU 아키텍처마다 고유한 어셈블리어를 가지고 있습니다(예: x86 어셈블리, ARM 어셈블리 등).
- 어셈블리어는 시스템 프로그래밍, 디바이스 드라이버, 실시간 시스템, 임베디드 시스템 등 하드웨어 제어가 중요한 영역에서 여전히 사용됩니다.
( )은 프로그래밍 언어로 작성된 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역하여 실행 파일을 만든 후 한꺼번에 실행하는 것이다.
📌 해설
컴파일(Compile)은 고급 프로그래밍 언어로 작성된 소스 코드를 기계어 또는 중간 코드로 변환하는 과정입니다.
- 컴파일 과정은 다음과 같은 단계를 포함합니다:
- 어휘 분석(Lexical Analysis): 소스 코드를 토큰으로 분해
- 구문 분석(Syntax Analysis): 토큰을 구문 트리로 변환
- 의미 분석(Semantic Analysis): 코드의 의미 검사
- 중간 코드 생성(Intermediate Code Generation): 최적화를 위한 중간 형태 생성
- 코드 최적화(Code Optimization): 실행 속도나 메모리 사용량 개선
- 목적 코드 생성(Target Code Generation): 최종 기계어 코드 생성
- 컴파일된 프로그램은 실행 파일 형태로 저장되며, 이후 실행 시에는 별도의 변환 과정 없이 바로 실행됩니다.
- 컴파일 방식을 사용하는 프로그래밍 언어로는 C, C++, Fortran, COBOL 등이 있습니다.
- 이와 대조적으로, 인터프리터(Interpreter) 방식은 소스 코드를 한 줄씩 해석하며 바로 실행합니다.
( )는 First In, First Out의 자료구조다.
📌 해설
큐(Queue)는 First In, First Out(FIFO) 원칙을 따르는 자료구조입니다.
- 큐는 데이터가 들어온 순서대로 처리되는 구조로, 일상생활의 대기줄(줄서기)과 유사한 개념입니다.
- 큐의 주요 연산:
- Enqueue: 큐의 뒤쪽(rear/tail)에 요소를 추가
- Dequeue: 큐의 앞쪽(front/head)에서 요소를 제거
- Peek/Front: 제거하지 않고 앞쪽 요소를 확인
- IsEmpty: 큐가 비어있는지 확인
- 큐의 응용 분야:
- 프로세스 스케줄링(CPU 스케줄링의 FCFS 알고리즘)
- 비동기식 데이터 전송(파일 I/O, 소켓 통신 등)
- 대기열 관리(프린터 큐, 메시지 큐 등)
- 너비 우선 탐색(BFS) 알고리즘
- 큐의 구현 방법으로는 배열, 연결 리스트, 원형 큐 등이 있습니다.
( )은 Last In, First Out의 자료구조다.
📌 해설
스택(Stack)은 Last In, First Out(LIFO) 원칙을 따르는 자료구조입니다.
- 스택은 가장 최근에 추가된 항목이 가장 먼저 제거되는 구조로, 접시 더미나 책 더미와 같은 개념입니다.
- 스택의 주요 연산:
- Push: 스택의 맨 위에 요소를 추가
- Pop: 스택의 맨 위에서 요소를 제거
- Peek/Top: 제거하지 않고 맨 위 요소를 확인
- IsEmpty: 스택이 비어있는지 확인
- 스택의 응용 분야:
- 함수 호출 관리(호출 스택)
- 수식 계산 및 괄호 검사
- 웹 브라우저의 뒤로가기 기능
- 실행 취소(Undo) 기능
- 깊이 우선 탐색(DFS) 알고리즘
- 스택의 구현 방법으로는 배열, 연결 리스트 등이 있습니다.
( )는 동적 메모리 할당을 사용하여 공간 관리가 편리한 자료구조다.
📌 해설
연결 리스트(Linked List)는 동적 메모리 할당을 사용하여 구현되는 자료구조입니다.
- 연결 리스트는 각 노드가 데이터와 다음 노드를 가리키는 포인터로 구성됩니다.
- 메모리를 필요에 따라 동적으로 할당하고 해제할 수 있어 크기가 가변적이며 메모리 관리가 효율적입니다.
- 연결 리스트의 주요 특징:
- 데이터의 삽입과 삭제가 효율적 (O(1) 시간 복잡도)
- 임의 접근이 불가능하여 특정 위치의 데이터 접근에 O(n) 시간 소요
- 포인터를 사용하여 데이터 간의 논리적 순서 유지
- 메모리 공간이 연속적일 필요가 없음
- 연결 리스트의 종류:
- 단일 연결 리스트: 각 노드가 다음 노드만 가리킴
- 이중 연결 리스트: 각 노드가 이전 노드와 다음 노드 모두 가리킴
- 원형 연결 리스트: 마지막 노드가 첫 번째 노드를 가리켜 원형을 형성
( )는 1초당 변화를 나타낼 때 사용하는 단위다.
📌 해설
Hz(헤르츠)는 주파수의 국제 단위로, 1초당 진동 또는 사이클의 횟수를 나타냅니다.
- Hz는 독일의 물리학자 하인리히 헤르츠(Heinrich Hertz)의 이름에서 유래되었습니다.
- 1Hz는 1초에 한 번의 진동이나 사이클이 발생함을 의미합니다.
- 컴퓨터 분야에서의 Hz 활용:
- CPU 클럭 속도: CPU가 1초에 수행할 수 있는 기본 연산 주기 (예: 3.2GHz)
- 메모리 클럭 속도: 메모리의 데이터 전송 속도 측정
- 모니터 주사율: 화면이 1초에 갱신되는 횟수 (예: 144Hz)
- 네트워크 기기의 주파수: 무선 라우터 등이 사용하는 주파수 대역 (예: 2.4GHz, 5GHz)
- 일반적으로 더 높은 Hz 값은 더 빠른 처리 속도나 더 매끄러운 표시를 의미합니다.
( )는 메인보드의 시스템 버스를 나타내는 단어다.
📌 해설
FSB(Front Side Bus)는 CPU와 메모리 컨트롤러 허브(MCH) 또는 노스브리지(Northbridge)를 연결하는 시스템 버스입니다.
- FSB는 전통적인 컴퓨터 아키텍처에서 사용되던 용어로, CPU와 메인 메모리 및 기타 주요 구성 요소 간의 통신을 처리하는 주요 데이터 경로였습니다.
- FSB의 중요한 특성:
- 클럭 속도: FSB의 동작 주파수 (예: 1066MHz)
- 대역폭: 버스 폭(비트 수)과 클럭 속도의 곱으로 결정되는 데이터 전송 속도
- 버스 폭: 한 번에 전송할 수 있는 데이터 비트 수 (예: 64비트)
- 현대 컴퓨터 시스템에서는 FSB가 대부분 QPI(Quick Path Interconnect), DMI(Direct Media Interface), 또는 HyperTransport와 같은 더 고속의 포인트-투-포인트 연결 방식으로 대체되었습니다.
- 새로운 아키텍처에서는 메모리 컨트롤러가 CPU 내부로 통합되어 메모리와의 통신에 별도의 메모리 버스를 사용합니다.
CPU의 구성 요소는 산술논리 연산장치, ( ),( )다.
📌 해설
CPU(중앙처리장치)의 세 가지 주요 구성 요소는 산술논리 연산장치(ALU), 레지스터(Register), 제어장치(Control Unit)입니다.
- 산술논리 연산장치(ALU, Arithmetic Logic Unit):
- 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술 연산 수행
- AND, OR, NOT, XOR 등의 논리 연산 수행
- 비교 연산과 데이터 이동 연산 처리
- 레지스터(Register):
- CPU 내부의 고속 임시 저장소
- 현재 처리 중인 데이터, 명령어, 주소 등을 저장
- 다양한 종류의 레지스터가 존재: PC(Program Counter), IR(Instruction Register), MAR, MBR, 범용 레지스터 등
- 제어장치(Control Unit):
- CPU의 모든 동작을 지휘하고 제어
- 명령어를 해석하고 필요한 신호를 생성
- 명령어 실행 사이클(인출-해석-실행-저장) 관리
- 메모리와 I/O 장치 간의 데이터 이동 제어
이 세 가지 구성 요소가 함께 작동하여 CPU의 기본 기능인 명령어 실행과 데이터 처리를 수행합니다.
( )는 CPU의 구성 요소 중 연산을 담당한다.
📌 해설
ALU(Arithmetic Logic Unit, 산술논리 연산장치)는 CPU 내에서 모든 수학적, 논리적 연산을 담당하는 구성 요소입니다.
- ALU의 주요 기능:
- 산술 연산: 덧셈, 뺄셈, 곱셈, 나눗셈 등의 수치 계산
- 논리 연산: AND, OR, NOT, XOR 등의 논리 게이트 연산
- 비교 연산: 두 값의 크기 비교 (등호, 부등호 관계)
- 시프트 연산: 비트 단위의 이동 연산 (좌/우 시프트)
- 회전 연산: 비트 단위의 순환 이동
- ALU는 제어장치로부터 수행할 연산 종류와 피연산자를 전달받아 연산을 수행한 후, 그 결과를 레지스터에 저장합니다.
- 연산 결과에 따라 상태 플래그(Zero, Carry, Overflow, Sign 등)를 설정하여 제어장치가 다음 동작을 결정하는 데 사용합니다.
- 현대 CPU에서는 여러 개의 ALU를 포함하여 병렬 처리 능력을 향상시키기도 합니다.
( )는 다음에 실행할 주소를 가진 레지스터다.
📌 해설
PC(Program Counter)는 다음에 실행할 명령어의 메모리 주소를 저장하는 CPU 내의 특수 레지스터입니다.
- PC는 명령어 포인터(Instruction Pointer, IP)라고도 불립니다.
- PC의 주요 기능:
- CPU의 명령어 인출(fetch) 단계에서 다음에 가져올 명령어의 주소를 지정
- 명령어가 실행된 후 자동으로 증가하여 다음 명령어를 가리킴
- 분기 명령(branch)이나 점프 명령(jump) 실행 시 새로운 주소로 갱신됨
- 프로그램의 순차적인 실행 흐름을 제어
- 프로그램 실행 과정에서 PC의 역할:
- PC가 메모리의 특정 주소를 가리킴
- CPU는 해당 주소에서 명령어를 인출(fetch)
- 인출된 명령어는 명령어 레지스터(IR)에 저장됨
- PC는 다음 명령어의 주소로 자동 증가 (명령어 길이에 따라)
- 분기나 점프 명령이 실행되면 PC 값이 해당 목적지 주소로 변경됨
( )는 현재 실행 중인 명령어를 저장한 레지스터다.
📌 해설
IR(Instruction Register)는 현재 실행 중인 명령어를 저장하는 CPU 내의 특수 레지스터입니다.
- IR의 주요 기능:
- 메모리에서 인출(fetch)된 명령어 코드를 저장
- 제어장치가 해당 명령어를 해석(decode)하는 동안 명령어 유지
- 명령어의 연산 코드(opcode)와 피연산자(operand) 정보 포함
- 명령어 실행 사이클에서 IR의 역할:
- PC가 가리키는 메모리 주소에서 명령어를 인출
- 인출된 명령어를 IR에 저장
- 제어장치가 IR의 내용을 해석하여 수행할 작업 결정
- 명령어 실행에 필요한 제어 신호 생성
- 명령어 실행 완료 후 다음 명령어를 위해 과정 반복
- IR은 명령어 실행 사이클의 인출(fetch) 단계와 해석(decode) 단계 사이의 중요한 연결 고리 역할을 합니다.
( )는 데이터를 가져오거나 반대로 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용하는 레지스터다.
📌 해설
MAR(Memory Address Register)는 메모리 접근 시 사용할 주소를 저장하는 CPU 내의 특수 레지스터입니다.
- MAR의 주요 기능:
- CPU가 접근하려는 메모리 위치의 주소를 저장
- 메모리 읽기/쓰기 연산 시 대상 주소 지정
- 주소 버스와 직접 연결되어 메모리 시스템에 주소 정보 전달
- 메모리 접근 과정에서 MAR의 역할:
- CPU는 접근하려는 메모리 주소를 MAR에 로드
- MAR의 주소가 주소 버스를 통해 메모리 시스템으로 전송
- 메모리 읽기 연산의 경우, 해당 주소의 데이터가 데이터 버스를 통해 MBR(Memory Buffer Register)로 전송
- 메모리 쓰기 연산의 경우, MBR의 데이터가 MAR이 지정한 주소에 저장
- MAR의 크기(비트 수)는 CPU가 접근할 수 있는 메모리 공간의 크기를 결정합니다. 예를 들어, 32비트 MAR은 2^32(4GB)의 메모리 주소 공간에 접근할 수 있습니다.
( )는 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장하는 레지스터다.
📌 해설
MBR(Memory Buffer Register)는 메모리와 CPU 사이에서 데이터를 임시 저장하는 레지스터입니다.
- MBR은 때로 MDR(Memory Data Register)이라고도 불립니다.
- MBR의 주요 기능:
- 메모리에서 읽어온 데이터를 CPU로 전달하기 전에 임시 저장
- 메모리에 쓸 데이터를 임시 저장
- 데이터 버스와 직접 연결되어 메모리 시스템과 데이터 교환
- 메모리 접근 과정에서 MBR의 역할:
- 메모리 읽기(Memory Read) 연산:
- MAR이 지정한 메모리 주소의 데이터가 데이터 버스를 통해 MBR로 전송
- MBR에 저장된 데이터가 CPU의 다른 레지스터나 ALU로 전달
- 메모리 쓰기(Memory Write) 연산:
- CPU가 메모리에 저장할 데이터를 MBR에 로드
- MBR의 데이터가 데이터 버스를 통해 MAR이 지정한 메모리 주소로 전송
- 메모리 읽기(Memory Read) 연산:
- MBR의 크기(비트 수)는 일반적으로 CPU의 데이터 버스 폭과 일치하며, 한 번에 전송할 수 있는 데이터의 양을 결정합니다.
시스템 버스(FSB)는 제어 버스, ( ), ( )로 구성된다.
📌 해설
시스템 버스(FSB, Front Side Bus)는 제어 버스(Control Bus), 주소 버스(Address Bus), 데이터 버스(Data Bus)로 구성됩니다.
- 제어 버스(Control Bus):
- CPU가 다른 하드웨어 구성 요소에 제어 신호를 보내는 데 사용
- 읽기/쓰기 신호, 인터럽트 신호, 클럭 신호 등 전송
- 양방향으로 작동하며, CPU와 다른 장치 간의 통신을 조정
- 예: 메모리 읽기/쓰기 신호, I/O 읽기/쓰기 신호, 인터럽트 요청, 승인 신호 등
- 주소 버스(Address Bus):
- CPU가 메모리나 I/O 장치의 특정 위치를 지정하는 데 사용
- CPU에서 메모리나 I/O 장치로 단방향으로 작동
- 버스 폭(비트 수)에 따라 접근 가능한 메모리 공간 결정 (예: 32비트 주소 버스 → 2^32 바이트 주소 지정 가능)
- 데이터 버스(Data Bus):
- CPU와 다른 하드웨어 구성 요소 간에 실제 데이터를 전송
- 양방향으로 작동하여 데이터 읽기/쓰기 모두 지원
- 버스 폭에 따라 한 번에 전송할 수 있는 데이터 비트 수 결정 (예: 64비트 데이터 버스 → 한 번에 64비트 데이터 전송 가능)
- 대역폭(bandwidth)은 버스 폭과 클럭 속도에 비례
이 세 가지 버스 유형이 함께 작동하여 CPU와 다른 하드웨어 구성 요소 간의 모든 데이터 및 제어 정보 교환을 처리합니다.
( )는 시스템 버스(FSB) 중 단방향 버스다.
📌 해설
주소 버스(Address Bus)는 시스템 버스 중 유일하게 단방향으로 작동하는 버스입니다.
- 주소 버스의 단방향 특성:
- CPU에서 메모리나 I/O 장치로만 데이터(주소 정보)가 전송됨
- 항상 CPU가 주소를 지정하는 주체이기 때문에 단방향 통신만 필요
- 이와 달리, 데이터 버스와 제어 버스는 양방향으로 작동
- 주소 버스의 주요 기능:
- CPU가 접근하고자 하는 메모리 위치나 I/O 장치의 주소 전달
- MAR(Memory Address Register)의 내용이 주소 버스를 통해 전송됨
- 메모리 읽기/쓰기 및 I/O 연산에서 모두 사용됨
- 주소 버스의 폭(비트 수)이 시스템의 메모리 주소 지정 능력을 결정합니다:
- 8비트 주소 버스: 최대 2^8(256) 바이트 주소 지정 가능
- 16비트 주소 버스: 최대 2^16(64KB) 주소 지정 가능
- 32비트 주소 버스: 최대 2^32(4GB) 주소 지정 가능
- 64비트 주소 버스: 최대 2^64(16EB) 주소 지정 가능
시스템 버스(FSB) 중 제어 버스는 CPU의 ( )와 연결된다.
📌 해설
시스템 버스(FSB) 중 제어 버스는 CPU의 제어장치(Control Unit)와 연결됩니다.
- 제어장치는 CPU 내부에서 모든 동작을 지휘하고 제어하는 부분으로, 외부 장치와의 통신을 조정하기 위해 제어 버스를 통해 신호를 주고받습니다.
- 제어 버스와 제어장치의 관계:
- 제어장치는 명령어를 해석하고 그에 따른 제어 신호를 생성
- 생성된 제어 신호는 제어 버스를 통해 메모리, I/O 장치 등에 전달
- 외부 장치에서 발생한 인터럽트 요청 신호도 제어 버스를 통해 CPU의 제어장치로 전달됨
- 제어장치는 이러한 신호를 처리하여 시스템의 모든 구성 요소 간의 조화로운 작동을 조정
- 제어 버스를 통해 전송되는 주요 신호들:
- 메모리 읽기/쓰기 신호(Memory Read/Write)
- I/O 읽기/쓰기 신호(I/O Read/Write)
- 인터럽트 요청과 응답(Interrupt Request/Acknowledge)
- 버스 요청과 승인(Bus Request/Grant)
- 클럭 신호(Clock Signal)
- 리셋 신호(Reset Signal)
시스템 버스(FSB) 중 주소 버스는 CPU의 ( )와 연결된다.
📌 해설
시스템 버스(FSB) 중 주소 버스는 CPU의 MAR(Memory Address Register)과 연결됩니다.
- MAR은 CPU가 접근하려는 메모리 위치의 주소를 저장하는 레지스터입니다.
- 주소 버스와 MAR의 관계:
- CPU가 메모리나 I/O 장치에 접근할 때 해당 주소를 MAR에 저장
- MAR의 내용(주소 정보)이 주소 버스를 통해 메모리 시스템이나 I/O 장치로 전송
- 이를 통해 CPU가 접근하려는 정확한 메모리 위치나 I/O 포트가 식별됨
- 메모리 접근 과정에서 MAR과 주소 버스의 역할:
- CPU가 접근하려는 메모리 주소를 MAR에 로드
- MAR의 내용이 주소 버스를 통해 메모리 시스템으로 전송
- 메모리 시스템은 해당 주소를 디코딩하여 정확한 메모리 셀 또는 I/O 장치를 활성화
- 메모리 읽기 연산의 경우, 해당 주소의 데이터가 데이터 버스를 통해 MBR로 전송
- 메모리 쓰기 연산의 경우, MBR의 데이터가 해당 주소에 저장
시스템 버스(FSB) 중 데이터 버스는 CPU의 ( )와 연결된다.
📌 해설
시스템 버스(FSB) 중 데이터 버스는 CPU의 MBR(Memory Buffer Register)과 연결됩니다.
- MBR은 메모리에서 읽어온 데이터나 메모리에 쓸 데이터를 임시로 저장하는 레지스터입니다.
- 데이터 버스와 MBR의 관계:
- MBR은 데이터 버스와 직접 연결되어 메모리 시스템이나 I/O 장치와 데이터를 교환
- 메모리 읽기 연산 시, 메모리에서 읽은 데이터가 데이터 버스를 통해 MBR로 전송
- 메모리 쓰기 연산 시, MBR에 저장된 데이터가 데이터 버스를 통해 메모리로 전송
- 데이터 전송 과정에서 MBR과 데이터 버스의 역할:
- 메모리 읽기(Memory Read) 연산:
- MAR이 지정한 주소의 데이터가 메모리에서 데이터 버스로 전송
- 데이터 버스를 통해 전송된 데이터가 MBR에 저장
- MBR에 저장된 데이터가 CPU의 내부 레지스터나 ALU로 전달
- 메모리 쓰기(Memory Write) 연산:
- CPU가 메모리에 저장할 데이터를 MBR에 로드
- MBR의 데이터가 데이터 버스를 통해 MAR이 지정한 메모리 주소로 전송
- 메모리 읽기(Memory Read) 연산:
( )은 부팅 과정에서 운영체제를 실행하기 위한 작은 코드다.
📌 해설
부트스트랩(Bootstrap)은 컴퓨터 시스템이 시작될 때 운영체제를 로드하기 위한 초기화 과정과 그에 필요한 작은 코드를 의미합니다.
- 부트스트랩 과정의 주요 단계:
- 전원 공급 및 하드웨어 초기화: 컴퓨터에 전원이 공급되면 CPU, 메모리 등 기본 하드웨어가 초기화됨
- POST(Power-On Self-Test): 하드웨어 구성 요소의 동작 상태를 검사
- 부트 코드 실행: BIOS/UEFI가 부팅 장치(하드 디스크, SSD 등)에서 부트 코드를 읽어옴
- 부트로더 로드: 부트 코드가 부트로더(예: GRUB, Windows Boot Manager)를 메모리에 로드
- 운영체제 커널 로드: 부트로더가 운영체제 커널을 메모리에 로드
- 커널 초기화: 커널이 시스템 초기화를 수행하고 운영체제의 나머지 부분을 로드
- 부트스트랩 코드의 특징:
- 매우 작은 크기의 코드로 시작하여 점차 더 큰 프로그램을 로드하는 과정
- ROM이나 펌웨어에 저장되어 있으며, 전원이 켜질 때 자동으로 실행됨
- 하드웨어를 초기화하고 기본적인 입출력 기능을 설정
- '스스로 신발끈을 묶다'라는 의미의 관용구에서 유래된 이름으로, 적은 초기 자원으로 더 복잡한 시스템을 시작하는 과정을 의미
( )는 두 장치 사이에서 속도의 차이를 완화하는 역할을 한다.
📌 해설
버퍼(Buffer)는 속도가 다른 두 장치 또는 프로세스 사이에서 데이터를 임시 저장하여 속도 차이를 완화하는 메모리 영역입니다.
- 버퍼의 주요 기능:
- 속도가 다른 두 장치 간의 데이터 전송 효율성 향상
- 빠른 장치가 느린 장치를 기다려야 하는 시간 감소
- 데이터 처리 과정에서 일시적인 부하 변동 흡수
- 입출력 작업의 효율성 증가
- 컴퓨터 시스템에서 버퍼의 예:
- 키보드 버퍼: 사용자가 입력한 키 값을 임시 저장하여 프로그램이 처리할 수 있게 함
- 프린터 버퍼: 인쇄할 데이터를 임시 저장하여 CPU가 다른 작업을 수행할 수 있게 함
- 디스크 버퍼: 디스크와 메인 메모리 간의 데이터 전송 속도 차이를 완화
- 네트워크 버퍼: 네트워크를 통해 수신한 데이터를 임시 저장하여 처리 속도 차이 조정
- 비디오/오디오 버퍼: 미디어 스트리밍 시 데이터를 미리 저장하여 재생 끊김 방지
- 버퍼링 기법:
- 단일 버퍼링: 하나의 버퍼를 사용
- 이중 버퍼링: 두 개의 버퍼를 번갈아 사용하여 효율성 향상
- 순환 버퍼(원형 버퍼): 여러 개의 버퍼를 순환적으로 사용
( )은 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼다.
📌 해설
스풀(SPOOL, Simultaneous Peripheral Operation On-Line)은 입출력 장치와 CPU 간의 속도 차이를 보완하기 위한 소프트웨어적 버퍼링 기법입니다.
- 스풀의 주요 기능:
- CPU와 입출력 장치의 작업을 분리하여 시스템 효율성 향상
- 느린 입출력 장치가 작업을 완료할 때까지 CPU가 기다릴 필요 없이 다음 작업 수행 가능
- 여러 사용자나 프로그램의 입출력 요청을 관리하고 순차적으로 처리
- 스풀링의 작동 원리:
- 입출력 요청이 발생하면 해당 데이터를 디스크의 스풀 영역(임시 저장소)에 저장
- CPU는 데이터를 스풀 영역에 저장한 후 즉시 다른 작업 수행
- 별도의 스풀링 프로그램이 백그라운드에서 스풀 영역의 데이터를 입출력 장치로 전송
- 입출력 작업이 완료되면 해당 작업이 스풀 영역에서 제거됨
- 스풀링의 응용 예:
- 프린트 스풀링: 가장 대표적인 예로, 인쇄 데이터를 디스크에 임시 저장한 후 프린터가 준비되면 인쇄
- 디스크 스풀링: 메인 메모리와 디스크 간의 데이터 전송 관리
- 이메일 큐: 발송할 이메일을 임시 저장하고 순차적으로 처리
( )는 버퍼 중 앞으로 사용할 것을 미리 가져와 속도를 향상하는 장치다.
📌 해설
캐시(Cache)는 자주 접근하거나 앞으로 사용할 가능성이 높은 데이터를 미리 가져와 빠르게 접근할 수 있는 고속 메모리입니다.
- 캐시의 주요 특징:
- 주 메모리보다 빠르지만 용량이 작은 고속 메모리
- 데이터 지역성(Locality) 원리를 활용하여 성능 향상
- CPU와 주 메모리 사이의 속도 차이를 완화
- 자주 사용되는 데이터를 저장하여 접근 시간 단축
- 데이터 지역성의 종류:
- 시간적 지역성(Temporal Locality): 최근에 접근한 데이터는 곧 다시 접근할 가능성이 높음
- 공간적 지역성(Spatial Locality): 접근한 데이터 주변의 데이터도 곧 접근할 가능성이 높음
- 캐시의 종류:
- CPU 캐시: L1, L2, L3 등 CPU 내부나 근처에 위치한 고속 메모리
- 디스크 캐시: 디스크에서 자주 사용하는 데이터를 메인 메모리에 저장
- 웹 캐시: 웹 페이지, 이미지 등을 로컬에 저장하여 빠른 접근 제공
- DNS 캐시: 자주 접속하는 웹사이트의 IP 주소를 저장
- 캐시 동작 방식:
- CPU가 데이터 요청
- 캐시 확인(캐시 히트 또는 캐시 미스 발생)
- 캐시 히트 시 캐시에서 데이터 제공, 미스 시 주 메모리에서 데이터 로드
- 주 메모리에서 가져온 데이터는 캐시에 저장(캐시 라인 업데이트)
( )는 저렴한 가격으로는 속도를 레지스터처럼, 용량은 하드디스크처럼 시스템을 구성해준다.
📌 해설
저장장치 계층 구조(Memory Hierarchy)는 다양한 속도와 용량의 저장장치를 계층적으로 구성하여 비용 효율적으로 성능을 최적화하는 구조입니다.
- 저장장치 계층 구조의 특징:
- 상위 계층일수록 속도가 빠르지만 용량이 작고 비용이 높음
- 하위 계층일수록 속도가 느리지만 용량이 크고 비용이 낮음
- 데이터 지역성 원리를 활용하여 자주 사용되는 데이터는 상위 계층에 유지
- 경제적인 비용으로 높은 성능과 대용량 저장 공간을 모두 제공
- 일반적인 저장장치 계층 구조(상위에서 하위 순):
- 레지스터(Register): CPU 내부의 초고속 저장소, 가장 빠르지만 매우 적은 용량
- 캐시 메모리(Cache): L1, L2, L3 등 여러 수준의 고속 버퍼 메모리
- 메인 메모리(Main Memory, RAM): 프로그램과 데이터의 주 저장소
- 보조 저장장치(Secondary Storage): SSD, HDD 등 비휘발성 저장 장치
- 아카이브 저장소(Archive Storage): 테이프, 광학 미디어 등 대용량 백업용 저장 장치
- 저장장치 계층 구조의 작동 원리:
- CPU는 먼저 가장 빠른 상위 계층(레지스터, 캐시)에서 데이터를 찾음
- 상위 계층에서 찾지 못할 경우 다음 하위 계층으로 검색을 확장
- 하위 계층에서 데이터를 찾으면 해당 데이터와 주변 데이터를 상위 계층으로 복사(캐싱)
- 이후 동일한 데이터에 접근할 때 상위 계층에서 빠르게 찾을 수 있음
저장장치의 계층 구조는 저장장치 사이에서 데이터의 ( )가 문제다.
📌 해설
저장장치 계층 구조에서 가장 중요한 문제 중 하나는 여러 계층에 걸쳐 있는 데이터의 일관성 유지(Consistency)입니다.
- 데이터 일관성 문제의 발생 원인:
- 동일한 데이터가 여러 계층(캐시, 메인 메모리, 디스크 등)에 동시에 존재할 수 있음
- 한 계층에서 데이터가 변경되었을 때 다른 계층의 복사본도 업데이트되어야 함
- 다중 프로세서 환경에서는 여러 CPU 캐시에 같은 데이터의 복사본이 존재할 수 있음
- 일관성 유지를 위한 기법:
- 쓰기 정책(Write Policy):
- 쓰기 전파(Write Through): 캐시의 데이터가 변경될 때 즉시 하위 계층(메인 메모리)도 업데이트
- 쓰기 후 기록(Write Back): 캐시의 데이터만 변경하고, 나중에 필요할 때 하위 계층에 업데이트
- 캐시 일관성 프로토콜(Cache Coherence Protocol):
- MESI, MOESI 등의 프로토콜을 사용하여 다중 캐시 환경에서 일관성 유지
- 스누핑(Snooping), 디렉토리 기반(Directory-based) 방식 등 구현
- 트랜잭션(Transaction): 데이터베이스 등에서 일관성 있는 상태 전환을 보장하는 작업 단위
- 쓰기 정책(Write Policy):
- 일관성 유지의 중요성:
- 데이터 손실이나 손상 방지
- 잘못된 데이터로 인한 연산 오류 방지
- 다중 프로세서 또는 다중 코어 환경에서의 정확한 동작 보장
- 시스템 안정성과 신뢰성 유지
( )는 CPU와 작업과 입출력 작업을 분리하여 효율을 높이는 방식이다.
📌 해설
인터럽트(Interrupt)는 CPU가 프로그램을 실행하는 도중에 예외 상황이나 입출력 작업 완료와 같은 외부 이벤트가 발생했을 때, 현재 실행 중인 작업을 일시 중단하고 해당 이벤트를 처리하는 메커니즘입니다.
- 인터럽트의 주요 목적과 장점:
- CPU와 입출력 작업을 분리하여 CPU 효율성 향상
- 느린 입출력 장치가 작업을 수행하는 동안 CPU가 다른 작업 수행 가능
- 실시간 이벤트에 빠르게 대응 가능
- 하드웨어 자원의 효율적인 사용
- 인터럽트 처리 과정:
- 인터럽트 신호 발생(하드웨어 장치 또는 소프트웨어에서)
- 현재 실행 중인 명령어 완료
- 현재 프로그램의 상태(PC, 레지스터 등) 저장
- 인터럽트 벡터 테이블을 참조하여 적절한 인터럽트 처리 루틴(ISR) 위치 확인
- 인터럽트 서비스 루틴(ISR) 실행
- 인터럽트 처리 완료 후 저장된 상태 복원
- 중단된 프로그램 계속 실행
- 인터럽트의 종류:
- 하드웨어 인터럽트: 외부 장치(키보드, 마우스, 타이머, 디스크 등)에 의해 발생
- 소프트웨어 인터럽트(트랩): 프로그램에 의해 의도적으로 발생(시스템 호출 등)
- 예외(Exception): 프로그램 실행 중 오류 상황(0으로 나누기, 페이지 폴트 등)으로 인해 발생
( )은 메모리의 일정 공간을 입출력에 할당하는 기법이다.
📌 해설
MMIO(Memory-Mapped I/O, 메모리 맵 입출력)은 입출력 장치의 레지스터를 메모리 주소 공간의 일부로 할당하여 접근하는 기법입니다.
- MMIO의 기본 원리:
- 입출력 장치의 레지스터와 데이터 포트에 메모리 주소를 할당
- CPU가 입출력 장치에 접근할 때 일반 메모리 접근 명령어(load/store)를 사용
- 특정 메모리 주소 범위를 입출력 장치에 매핑하여 해당 주소로의 접근이 실제로 입출력 장치로 연결
- MMIO의 장점:
- 특별한 입출력 명령어가 필요 없어 CPU 설계가 단순해짐
- 메모리 관련 모든 주소 지정 모드를 입출력에도 사용 가능
- 캐시와 같은 메모리 관리 메커니즘을 입출력에도 적용 가능
- 메모리와 입출력을 위한 단일 주소 공간 사용으로 프로그래밍 모델 단순화
- MMIO의 단점:
- 입출력 장치가 메모리 주소 공간의 일부를 차지하여 사용 가능한 메모리 공간 감소
- 캐싱으로 인한 문제가 발생할 수 있어 특정 영역은 비캐시(non-cacheable)로 설정 필요
- 일부 입출력 장치는 특수한 타이밍 요구사항이 있어 메모리 접근 방식과 맞지 않을 수 있음
- 대안적 방식으로 포트 맵 입출력(Port-Mapped I/O, PMIO)이 있으며, 이는 별도의 입출력 주소 공간과 전용 입출력 명령어를 사용합니다.
( )은 입출력 관리자가 CPU 허락 없이 메모리에 접근할 수 있는 권한이다.
📌 해설
직접 메모리 접근(DMA, Direct Memory Access)은 CPU의 개입 없이 입출력 장치와 메모리 간의 데이터 전송을 가능하게 하는 기술입니다.
- DMA의 주요 목적:
- 대용량 데이터 전송 시 CPU 부담 감소
- 데이터 전송 작업을 전문화된 하드웨어(DMA 컨트롤러)에 위임
- 시스템 전체의 성능 향상
- DMA 작동 과정:
- CPU가 DMA 컨트롤러에 전송 작업 설정(소스 주소, 목적지 주소, 전송 크기 등)
- CPU는 DMA 컨트롤러에 전송 시작 신호를 보내고 다른 작업 수행
- DMA 컨트롤러가 메모리 버스 제어권을 획득(사이클 훔치기)
- DMA 컨트롤러가 데이터 전송 수행(메모리와 I/O 장치 간)
- 전송 완료 후 DMA 컨트롤러가 CPU에 인터럽트 신호를 보내 작업 완료 알림
- DMA 전송 모드:
- 단일 전송 모드: 한 번에 하나의 데이터 워드 전송
- 블록 전송 모드: 버스를 획득한 후 데이터 블록 전체 전송
- 요구 모드: 장치가 준비될 때마다 데이터 전송
- 투명 모드: CPU가 메모리를 사용하지 않을 때만 DMA 전송 수행
- DMA의 응용 분야:
- 대용량 저장 장치(하드 디스크, SSD 등) 데이터 전송
- 네트워크 인터페이스 카드의 패킷 송수신
- 그래픽 카드의 프레임 버퍼 업데이트
- 멀티미디어 스트리밍 데이터 처리
( )는 CPU가 메모리 사용 권한을 장치 관리자에게 양보하는 것을 말한다.
📌 해설
사이클 훔치기(Cycle Stealing)는 DMA 작동 중에 CPU와 DMA 컨트롤러가 메모리 버스 사용 권한을 번갈아 가며 사용하는 기법입니다.
- 사이클 훔치기의 기본 개념:
- DMA 컨트롤러가 CPU의 메모리 사이클 중 일부를 '훔쳐서' 사용
- CPU가 메모리에 접근하지 않는 사이클 동안 DMA 컨트롤러가 메모리 접근 수행
- CPU와 DMA 컨트롤러가 메모리 버스를 시분할하여 사용
- 사이클 훔치기의 장점:
- CPU와 DMA의 병렬 작업 가능
- CPU의 성능 저하 최소화
- 메모리 버스 사용률 향상
- 효율적인 시스템 자원 활용
- 사이클 훔치기의 구현 방식:
- CPU 유휴 사이클 활용: CPU가 내부 연산을 수행하거나 캐시에서 데이터를 처리할 때 메모리 버스 사용
- 메모리 인터리빙: 여러 메모리 뱅크를 번갈아 접근하여 충돌 최소화
- 우선순위 중재: 메모리 버스 접근 요청 충돌 시 우선순위에 따라 결정
- 사이클 훔치기와 관련된 고려사항:
- 많은 DMA 장치가 동시에 작동할 경우 CPU 성능 저하 가능성
- 실시간 시스템에서는 최악의 경우 CPU 지연 시간 예측 필요
- CPU와 DMA 컨트롤러 간의 효율적인 메모리 버스 중재 메커니즘 필요
📚 서술형 문제
CPU의 기본 구성 요소를 설명하시오.
📌 해설
CPU(중앙처리장치)는 컴퓨터 시스템의 두뇌 역할을 하는 핵심 구성 요소로, 크게 세 가지 주요 부분으로 구성됩니다.
1. 산술논리 연산장치(ALU, Arithmetic Logic Unit)
- 모든 수학적, 논리적 연산을 수행하는 CPU의 핵심 구성 요소입니다.
- 산술 연산: 덧셈, 뺄셈, 곱셈, 나눗셈 등의 수치 계산을 담당합니다.
- 논리 연산: AND, OR, NOT, XOR 등의 논리 게이트 연산을 수행합니다.
- 비교 연산: 두 값의 크기 비교(등호, 부등호 관계) 연산을 처리합니다.
- 시프트/회전 연산: 비트 단위의 이동 및 순환 연산을 수행합니다.
- 연산 결과에 따라 상태 플래그(캐리, 제로, 오버플로우, 부호 등)를 설정합니다.
2. 제어장치(Control Unit)
- CPU의 모든 동작을 지휘하고 제어하는 부분입니다.
- 명령어 인출(Fetch): 메모리에서 다음 실행할 명령어를 가져옵니다.
- 명령어 해석(Decode): 인출된 명령어의 의미를 해석합니다.
- 명령어 실행(Execute): 해석된 명령어에 따라 필요한 동작을 수행하기 위한 제어 신호를 생성합니다.
- 메모리 접근(Memory Access): 필요시 메모리에서 데이터를 읽거나 쓰는 작업을 제어합니다.
- 결과 저장(Write Back): 연산 결과를 적절한 위치에 저장하는 과정을 제어합니다.
- 인터럽트 신호를 처리하고 적절한 서비스 루틴으로 제어를 이동시킵니다.
3. 레지스터(Register)
- CPU 내부에 위치한 고속의 소용량 임시 저장소입니다.
- 범용 레지스터: 데이터와 주소를 임시 저장하는 다목적 레지스터입니다.
- 특수 목적 레지스터: 특정 기능을 위해 사용되는 레지스터입니다.
- PC(Program Counter): 다음에 실행할 명령어의 주소를 저장합니다.
- IR(Instruction Register): 현재 실행 중인 명령어를 저장합니다.
- PSR(Program Status Register): 프로그램 상태 정보와 플래그를 저장합니다.
- MAR(Memory Address Register): 메모리 접근 시 사용할 주소를 저장합니다.
- MBR(Memory Buffer Register): 메모리와 CPU 간 데이터 교환을 위한 버퍼 역할을 합니다.
- 레지스터는 CPU의 데이터 처리 속도를 높이는 데 중요한 역할을 합니다.
이 세 가지 구성 요소가 유기적으로 상호작용하며 CPU의 명령어 실행 사이클(인출-해석-실행-저장)을 수행합니다. 현대의 CPU는 이러한 기본 구성에 캐시, 파이프라인, 분기 예측기 등 다양한 성능 향상 요소가 추가되어 있지만, 기본적인 동작 원리는 이 세 가지 구성 요소의 기능에 기반합니다.
사용자 불가시 레지스터들을 간단히 설명하시오.
📌 해설
사용자 불가시 레지스터(User-Invisible Registers)는 일반 프로그래머가 직접 접근할 수 없고, 주로 CPU의 내부 작동과 시스템 제어를 위해 사용되는 특수 목적 레지스터입니다. 이들은 CPU 내부 동작과 시스템의 효율적인 운영을 위해 필수적인 역할을 합니다.
1. PC(Program Counter) / 명령어 포인터(Instruction Pointer)
- 다음에 실행할 명령어의 메모리 주소를 저장합니다.
- CPU가 명령어를 순차적으로 실행할 수 있도록 프로그램의 실행 흐름을 추적합니다.
- 명령어 실행 후 자동으로 증가하여 다음 명령어를 가리키며, 분기나 점프 명령어 실행 시 새로운 주소로 갱신됩니다.
2. IR(Instruction Register)
- 현재 실행 중인 명령어 코드를 저장합니다.
- 메모리에서 인출된 명령어가 이 레지스터에 저장되고, 제어장치가 이를 해석하여 필요한 연산을 수행합니다.
- 명령어의 연산 코드(opcode)와 피연산자(operand) 정보를 포함합니다.
3. MAR(Memory Address Register)
- 메모리 접근 시 사용할 주소를 저장합니다.
- CPU가 메모리를 읽거나 쓸 때, 접근하려는 메모리 위치의 주소를 이 레지스터에 저장합니다.
- 주소 버스와 직접 연결되어 있어, MAR의 내용이 주소 버스를 통해 메모리 시스템으로 전송됩니다.
4. MBR(Memory Buffer Register) / MDR(Memory Data Register)
- 메모리와 CPU 사이에서 데이터를 임시 저장하는 레지스터입니다.
- 메모리 읽기 연산에서 메모리로부터 읽어온 데이터가 이 레지스터에 저장됩니다.
- 메모리 쓰기 연산에서는 CPU가 메모리에 저장하려는 데이터를 이 레지스터에 저장한 후 메모리로 전송합니다.
- 데이터 버스와 직접 연결되어 메모리 시스템과 데이터를 교환합니다.
5. PSR(Program Status Register) / 플래그 레지스터(Flag Register)
- CPU의 현재 상태와 연산 결과의 상태 정보를 저장하는 레지스터입니다.
- 주요 상태 플래그:
- Zero(Z) 플래그: 연산 결과가az 0인 경우 설정
- Sign(S) 플래그: 연산 결과가 음수인 경우 설정
- Carry(C) 플래그: 산술 연산에서 자리 올림이 발생한 경우 설정
- Overflow(V) 플래그: 산술 연산 결과가 표현 가능한 범위를 초과한 경우 설정
- Interrupt(I) 플래그: 인터럽트 허용/금지 상태를 나타냄
- 조건부 분기 명령어의 조건 평가에 활용됩니다.
6. 기타 시스템 레지스터
- 스택 포인터(Stack Pointer): 스택의 최상단 주소를 가리키는 레지스터로, 함수 호출과 반환 시 중요한 역할을 합니다.
- 베이스 레지스터(Base Register): 메모리 접근 시 기준 주소를 저장하여 상대 주소 지정에 사용됩니다.
- 인덱스 레지스터(Index Register): 배열이나 테이블 등의 요소에 접근할 때 오프셋 값을 저장합니다.
- 세그먼트 레지스터(Segment Register): 세그먼트 주소 지정 방식에서 세그먼트의 시작 주소를 저장합니다.
이러한 사용자 불가시 레지스터들은 일반 프로그래머가 직접 조작할 수 없지만, 시스템 프로그래밍이나 운영체제 개발 시에는 특수한 명령어나 권한을 통해 간접적으로 접근하거나 제어할 수 있는 경우도 있습니다. 이들 레지스터는 CPU의 효율적인 작동과 메모리 관리, 프로그램 실행 흐름 제어 등에 필수적인 역할을 합니다.
시스템 버스를 구성하는 세 가지 버스의 특징을 간단히 설명하시오.
📌 해설
시스템 버스(System Bus)는 CPU, 메모리, 입출력 장치 등 컴퓨터 내부의 주요 구성 요소 간에 데이터를 전송하는 통로로, 세 가지 주요 버스로 구성됩니다.
1. 주소 버스(Address Bus)
- 기능: CPU가 메모리나 입출력 장치의 특정 위치를 지정하기 위해 사용합니다.
- 방향성: 단방향(Unidirectional) 버스로, CPU에서 메모리/IO 장치로만 신호가 전송됩니다.
- 특징:
- 버스의 폭(width)이 CPU가 접근할 수 있는 메모리 공간의 크기를 결정합니다.
- 예: 32비트 주소 버스는 2^32(4GB)의 메모리 주소 공간을 지정할 수 있습니다.
- CPU의 MAR(Memory Address Register)과 직접 연결되어 있습니다.
- 메모리나 입출력 장치는 주소 버스를 통해 전송된 주소를 디코딩하여 접근할 특정 위치를 결정합니다.
2. 데이터 버스(Data Bus)
- 기능: CPU, 메모리, 입출력 장치 간에 실제 데이터를 전송하는 통로입니다.
- 방향성: 양방향(Bidirectional) 버스로, 데이터가 양쪽 방향으로 이동할 수 있습니다.
- 특징:
- 버스의 폭이 한 번에 전송할 수 있는 데이터의 양(비트 수)을 결정합니다.
- 예: 64비트 데이터 버스는 한 번에 64비트(8바이트)의 데이터를 전송할 수 있습니다.
- CPU의 MBR(Memory Buffer Register)과 직접 연결되어 있습니다.
- 데이터 버스의 폭은 CPU의 워드 크기와 관련이 있으며, 시스템의 데이터 처리 능력에 직접적인 영향을 미칩니다.
3. 제어 버스(Control Bus)
- 기능: CPU가 메모리와 입출력 장치의 동작을 제어하고 조정하는 신호를 전송합니다.
- 방향성: 양방향 또는 혼합 방향 버스로, 제어 신호의 종류에 따라 방향이 다를 수 있습니다.
- 특징:
- CPU의 제어장치(Control Unit)와 연결되어 있습니다.
- 주요 제어 신호에는 다음이 포함됩니다:
- 메모리 읽기/쓰기 신호(Memory Read/Write)
- 입출력 장치 읽기/쓰기 신호(I/O Read/Write)
- 인터럽트 요청 및 응답 신호(Interrupt Request/Acknowledge)
- 버스 요청 및 허가 신호(Bus Request/Grant)
- 클럭 신호(Clock Signal)
- 리셋 신호(Reset Signal)
- 각 신호선은 특정 제어 기능을 수행하며, 이들의 조합으로 복잡한 시스템 동작이 조정됩니다.
'컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[쉽게 배우는 운영체제] Chapter 02. 컴퓨터의 구조와 성능 향상 (0) | 2025.03.27 |
---|---|
[쉽게 배우는 운영체제] Chapter 01. 운영체제의 개요 (3) | 2025.03.20 |
CS D2 [ 컴퓨터 구조 ] (0) | 2025.03.13 |
[쉽게 배우는 운영체제] Ch1 연습문제 (0) | 2025.03.12 |