ㄱ. 순차적으로 다음 명령어가 아닌 다른 명령어 주소에서 부터 명령어들을 실행한다.
ㄴ. 호출되는 루틴(routine)을 사용자(user) 프로그램이 선택할 수 있다.
ㄷ. 호출되는 루틴으로부터 돌아오기 위해 필요한 복귀주소(return address)를 저장한다.
ㄹ. 프로그램의 명령어 실행에 의해서만 발생한다.
공통 특징은 ㄱ(다른 주소의 명령어로 분기)과 ㄷ(복귀 주소 저장)이다.
인터럽트와 서브루틴 호출 모두 실행 흐름을 다른 루틴으로 옮겼다가 원래 위치로 돌아와야 하므로 복귀 주소를 저장한다.
- ㄴ — 호출할 루틴을 사용자 프로그램이 고르는 것은 서브루틴 호출뿐이고, 인터럽트 서비스 루틴은 인터럽트 원인에 따라 정해진다.
- ㄹ — 서브루틴은 호출 명령어로만 발생하지만, 인터럽트는 입출력 완료·정전 등 외부 요인으로도 발생한다.
옳지 않은 것은 수신측 윈도우가 프레임을 수신할 때마다 늘어나고 응답을 전송할 때마다 줄어든다는 설명이다.
수신측 윈도우는 반대로 프레임을 수신하면 줄어들고, 확인 응답(ACK)을 보내면 그만큼 늘어난다. 받을 수 있는 버퍼 여유가 수신으로 줄고 응답 후 다시 확보되기 때문이다.
- 윈도우 크기만큼 연속 전송하는 흐름·오류 제어 기법이다 — 옳다.
- 윈도우 크기로 응답 없이 보낼 수 있는 최대 프레임 수를 제한한다 — 옳다.
- 송신측 윈도우는 전송 시 줄고 응답 수신 시 늘어난다 — 옳다.
IEEE 802.11 무선 LAN의 매체 접근 제어 방식은 CSMA/CA이다.
무선 환경에서는 송신 중 충돌을 감지하기 어려우므로, 전송 전에 대기 시간과 RTS/CTS 등을 이용해 충돌을 회피(Collision Avoidance)한다.
- CDMA — 코드 분할 다중 접속으로 이동통신에 쓰인다.
- CSMA/CD — 충돌을 감지하는 방식으로 유선 이더넷(IEEE 802.3)에 쓰인다.
- ALOHA — 초기 무선 패킷망의 임의 접근 방식이다.
데이터 링크 계층의 기능이 아닌 것으로 제시된 것은 연결제어이다.
데이터 링크 계층은 인접 노드 간 프레임 전송을 위해 프레임 구성(프레임 기법), 오류 제어, 흐름 제어를 수행한다. 종단 간 연결의 설정·유지·해제를 관리하는 연결 제어는 전송 계층의 기능으로 분류된다.
- 프레임 기법 — 비트열을 프레임 단위로 구분하는 데이터 링크 계층 기능이다.
- 오류제어 — 오류 검출·재전송(ARQ)을 수행한다.
- 흐름제어 — 정지-대기, 슬라이딩 윈도우 등으로 전송량을 조절한다.
전자우편 프로토콜이 아닌 것은 VPN이다.
VPN(Virtual Private Network)은 공중망 위에 암호화된 터널을 만들어 사설망처럼 쓰는 기술로, 전자우편과는 무관하다.
- IMAP — 메일 서버의 메일을 서버에 둔 채 조회·관리하는 수신 프로토콜이다.
- SMTP — 메일을 전송(송신)하는 프로토콜이다.
- POP3 — 메일 서버의 메일을 내려받는 수신 프로토콜이다.
옳지 않은 연결은 전송 계층 - ISDN이다.
ISDN은 음성과 데이터를 디지털로 통합 전송하는 통신망 규격으로, 주로 하위 계층(물리·데이터 링크·네트워크)에 걸쳐 정의되며 전송 계층 표준이 아니다.
- 물리 계층 - RS-232C — 직렬 인터페이스 규격으로 옳다.
- 데이터 링크 계층 - HDLC — 비트 지향 링크 제어 프로토콜로 옳다.
- 네트워크 계층 - X.25 — 패킷 교환망 인터페이스 규격으로 옳다.
10 I=0 20 SUM=0 30 I=I+1 40 ( ) 50 IF (I < 100) THEN GOTO 30 60 PRINT I, SUM 70 END
괄호에 들어갈 명령문은 SUM=SUM+ I이다.
30행에서 I를 1씩 증가시키고 40행에서 그 I를 SUM에 누적한다. I가 100이 되면 100까지 더한 뒤 50행의 조건 I < 100이 거짓이 되어 반복을 마치므로 SUM = 1+2+…+100 = 5050이 된다.
- SUM=SUM — 아무것도 더하지 않아 0이 된다.
- SUM=SUM+ 1 — 반복 횟수(100)만 센다.
- SUM=SUM+ 100 — 100을 100회 더해 10000이 된다.
옳은 것은 매크로 호출은 내용이 호출 위치에 복사되어 컴파일되므로 함수 호출보다 일반적으로 실행 속도가 빠르다는 설명이다.
매크로는 전처리 단계에서 본문이 그대로 펼쳐지므로(매크로 확장) 호출·복귀에 따른 스택 처리 부담이 없다.
- 코드 양이 감소한다 — 호출 위치마다 본문이 복사되므로 오히려 증가한다.
- 인터럽트에 의해 발생해 플래그를 스택에 저장한다 — 매크로는 인터럽트와 무관한 텍스트 치환이다.
- 형식 인자를 사용할 수 없다 — 매크로도 인자를 받을 수 있다.
가장 큰 수는 (2001)이다.
모두 10진수로 바꿔 비교한다.
- (10000000000) = = 1024
- (302) = 3×256 + 2 = 770
- (2001) = 2×512 + 1 = 1025
- (33333) = − 1 = 1023
#include <stdio.h>
int func(int n)
{
if(n%2==1)
n=n-1;
if(n==0)
return 0;
return (func(n-2)+n);
}
void main()
{
int result;
result = func(19);
printf("result = %d", result);
}출력은 result = 90이다.
func(19)에서 19는 홀수이므로 n=18로 바뀌고, 이후 func(n−2)+n 형태로 n이 0이 될 때까지 짝수를 더한다.
func(19) = 18 + func(16) = 18+16+14+…+2+func(0)
func(0)=0이므로 결과는 2+4+…+18 = 90이다.
- result = 60 — 2부터 18까지 짝수 9개의 합 90과 다르다.
- result = 70 — 같은 이유로 90과 다르다.
- result = 80 — 같은 이유로 90과 다르다.
옳지 않은 것은 레지스터가 DRAM으로 구성된다는 설명이다.
레지스터는 CPU 내부의 가장 빠른 기억 소자로 플립플롭(정적 회로)으로 구성된다. 재충전이 필요한 DRAM은 주기억 장치에 주로 쓰인다.
- CPU는 산술·논리 연산을 하는 ALU를 갖는다 — 옳다.
- MIPS는 초당 백만 명령어 단위의 처리 속도 척도이다 — 옳다.
- CPU는 명령어를 읽어 해독하고 실행한다 — 옳다.
범람이 발생하는 것은 1100+1010이다.
2의 보수 4비트의 표현 범위는 −8~7이다. 1100(−4)+1010(−6) = −10으로 범위를 벗어나며, 실제 결과 0110은 양수로 나와 같은 부호끼리 더했는데 부호가 바뀌는 범람이 생긴다.
- 0100+0010 = 4+2 = 6 — 범위 안이다.
- 1011+0111 = −5+7 = 2 — 부호가 다른 수의 덧셈은 범람이 없다.
- 0110+1001 = 6+(−7) = −1 — 범위 안이다.
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 1 | 1 | 1 | 1 |
| 01 | 1 | 1 | 1 | 1 |
| 11 | 0 | 1 | 1 | 0 |
| 10 | 1 | 0 | 0 | 1 |
간략화 결과는 A'+B·D+B'·D'이다.
카르노 맵에서 1을 가장 크게 묶는다.
AB=00, 01 두 행 8칸이 모두 1 → A'
AB=01, 11 행의 CD=01, 11 열(B=1, D=1) → B·D
AB=00, 10 행의 CD=00, 10 열(B=0, D=0, 양 끝 인접) → B'·D'
- A+B·D+B'·D' — A 항 때문에 0인 칸 AB=11, CD=00이 1이 된다.
- D+A·B+B'·D' — A·B 항 때문에 같은 칸 AB=11, CD=00이 1이 된다.
- D'+A·B+B'·D' — 역시 A·B 항 때문에 AB=11, CD=00이 1이 된다.

옳지 않은 것은 Q'=0, Q=1일 때 A=1, B=0이면 Q와 Q'에 변화가 없다는 설명이다.
회로는 NOR 게이트 두 개를 교차 결합한 SR 래치로, Q = (A+Q')', Q' = (B+Q)'이다. A=1이면 위쪽 NOR 출력 Q가 무조건 0이 되므로 Q=1이던 상태가 Q=0, Q'=1로 바뀐다.
- B=1, A=0 — Q'=0이 되고 Q=(0+0)'=1이 되므로 옳다.
- Q'=1, Q=0에서 A=B=0 — 각 NOR 출력이 상대 출력에 의해서만 정해져 이전 상태(Q=0)를 유지하므로 옳다.
- Q'=0, Q=1에서 A=B=0 — 같은 이유로 이전 상태(Q=1)를 유지하므로 옳다.

그림의 플립플롭은 D 플립플롭으로 동작한다.
입력 in이 J에 그대로, K에는 인버터를 거쳐 반전되어 들어가므로 J와 K는 항상 서로 반대 값이다.
- in=1 → J=1, K=0 → 클록에서 Q=1(세트)
- in=0 → J=0, K=1 → 클록에서 Q=0(리셋)
즉 클록마다 입력값이 그대로 Q에 저장된다. J=K=1이 될 수 없으므로 토글(T)이나 JK의 동작은 나타나지 않는다.
옳지 않은 것은 캐시 일관성 문제를 고려할 필요가 없다는 설명이다.
다중 프로세서에서는 각 프로세서가 자기 캐시에 같은 데이터의 사본을 가질 수 있으므로, 한 곳의 변경이 다른 캐시에 반영되도록 하는 캐시 일관성(coherence) 유지가 핵심 문제이다.
- 하나의 운영체제 아래 여러 프로세서가 동작한다 — 옳다.
- 밀결합 시스템은 공유 기억장치로 통신한다 — 옳다.
- 데이터 의존성이 없는 부분을 분류해 병렬 처리할 수 있다 — 옳다.
ㄱ. 폰 노이만(von Neumann) 컴퓨터에서는 명령어 메모리와 데이터 메모리가 분리되어 존재하기 때문에, 명령어와 데이터를 동시에 접근할 수 있다.
ㄴ. 다섯 단계(stage)의 파이프라이닝(pipelining)을 사용하는 CPU는 파이프라이닝을 사용하지 않는 CPU보다 5배 더 빠르다.
ㄷ. 파이프라이닝을 사용하는 CPU의 각 파이프라인 단계는 서로 다른 하드웨어 자원을 사용한다.
ㄹ. 파이프라이닝을 사용하는 CPU에서는 파이프라인 해저드 (pipeline hazard)로 인해 일부 명령어의 실행이 잠시 지연되기도 한다.
옳은 것은 ㄷ과 ㄹ이다.
파이프라인은 각 단계가 서로 다른 하드웨어 자원을 써서 여러 명령어를 겹쳐 실행하며, 자원 충돌·데이터 의존·분기 등 해저드가 생기면 일부 명령어가 지연(stall)된다.
- ㄱ — 명령어 메모리와 데이터 메모리를 분리한 것은 하버드 구조이다. 폰 노이만 구조는 하나의 메모리를 공유한다.
- ㄴ — 5단계 파이프라인의 속도 향상은 이상적인 경우의 최대치일 뿐, 단계 간 불균형과 해저드 때문에 실제로는 5배에 못 미친다.
옳지 않은 것은 임베디드 소프트웨어가 하드웨어와 밀접하게 연관되어 있지 않다는 설명이다.
임베디드 소프트웨어는 특정 하드웨어를 제어하도록 만들어지므로 하드웨어와 밀접하게 결합되어 있다.
- 제품에 내장된 특정 용도의 컴퓨터 시스템이다 — 옳다.
- 실시간 제약을 갖는 경우가 많다 — 옳다.
- 휴대전화, PDA, 게임기 등이 예이다 — 옳다.
객체지향 시스템의 특성이 아닌 것은 재귀용법(Recursion)이다.
재귀는 함수가 자기 자신을 호출하는 일반적인 프로그래밍 기법으로, 절차적 언어에서도 쓰이며 객체지향 고유 특성이 아니다.
- 캡슐화 — 데이터와 연산을 객체로 묶고 내부를 은닉한다.
- 상속성 — 상위 클래스의 속성과 메소드를 하위 클래스가 물려받는다.
- 다형성 — 같은 메시지에 객체마다 다르게 반응한다.
RISC의 특징으로 옳지 않은 것은 많은 수의 주소지정모드를 사용한다는 설명이다.
RISC는 명령어와 주소지정 방식을 단순하고 적게 두어 고정 길이 명령어를 빠르게 처리한다. 다양한 주소지정 모드는 CISC의 특징이다.
- 명령어 집합 구조가 단순하다 — 옳다.
- 많은 범용 레지스터를 사용한다 — 옳다(적재/저장 구조).
- 효율적인 파이프라인 구조를 사용한다 — 옳다.