2진수 는 16진수로 2AE.이다.
16진수 한 자리는 2진수 4비트에 대응하므로, 소수점을 기준으로 정수부는 왼쪽으로, 소수부는 오른쪽으로 4비트씩 묶는다.
- 정수부: 10 | 1010 | 1110 → 2, A, E
- 소수부: 11을 오른쪽에 0을 채워 1100 → C
- 소수부를 0011로 잘못 채우면 3이 되어 2AE.3이 나오고, 정수부를 왼쪽부터 묶으면 AB2가 되는 오류가 생긴다.
옳지 않은 것은 바이오스의 동작 여부와 상관없이 컴퓨터가 제대로 동작한다는 설명이다.
BIOS는 ROM(펌웨어)에 저장된 기본 입출력 프로그램으로, 전원이 켜지면 가장 먼저 실행되어 하드웨어를 초기화하고 점검(POST)한 뒤 부트 로더를 통해 운영체제를 적재한다. 따라서 BIOS가 동작하지 않으면 부팅 자체가 불가능하다.
- 전원이 들어올 때 시스템을 초기화한다 — 옳다.
- 시스템의 이상 유무를 점검한다 — 옳다(POST).
- 운영체제를 적재하는 과정을 담당한다 — 옳다.
옳지 않은 것은 복수 개의 주변기기를 연결할 수 없다는 설명이다.
USB는 직렬 방식의 범용 인터페이스로, 허브를 이용해 하나의 호스트에 최대 127개의 장치를 연결할 수 있다.
- 직렬 포트의 일종이다 — 옳다(Universal Serial Bus).
- 플러그 앤 플레이 인터페이스이다 — 옳다.
- 사용 도중 연결해도 인식한다 — 옳다(핫 플러그).
(A+B)·(C+A)+A·B·C+A·B'·C+A·B·C'
논리식을 간략화하면 A+B·C이다.
분배 법칙에 의해 (A+B)·(A+C) = A+B·C이다.
나머지 항 A·B·C, A·B'·C, A·B·C'는 모두 A를 인수로 가지므로 흡수 법칙(A+A·X = A)에 의해 A에 흡수된다.
- A'+B·C — A=1, B=C=0이면 원식은 1이지만 이 식은 0이다.
- A+B·C' — A=0, B=C=1이면 원식은 1이지만 이 식은 0이다.
- A+B'·C — A=0, B=C=1이면 원식은 1이지만 이 식은 0이다.
스택을 사용하는 예가 아닌 것은 트리의 너비 우선 탐색이다.
너비 우선 탐색(BFS)은 먼저 방문한 노드의 자식부터 차례로 꺼내야 하므로 선입선출 구조인 큐를 사용한다. 스택(후입선출)은 깊이 우선 탐색에 쓰인다.
- 함수의 재귀호출 — 호출 정보(복귀 주소·지역 변수)를 스택에 쌓는다.
- 부프로그램의 호출 — 복귀 주소를 스택에 저장한다.
- 후위표기식의 계산 — 피연산자를 스택에 넣고 연산자를 만나면 꺼내 계산한다.
01112 - 00112 = 01112 + ( )2 = 뺄셈결과 값
괄호에 들어갈 값은 감수 0011의 2의 보수인 1101이다.
2의 보수는 1의 보수에 1을 더해 구한다.
0011 → 1의 보수 1100 → 1100+1 = 1101
검산: 0111+1101 = 1 0100에서 자리올림을 버리면 0100(=4)이 되어 7−3과 같다.
- 1100은 1의 보수일 뿐이다.
- 0011은 감수 자체이다.
- 1011은 0011의 2의 보수가 아니다(1011+0011 = 1110으로 0이 되지 않는다).
옳지 않은 것은 DLL의 연결 작업이 프로그램 실행 전에 이루어진다는 설명이다.
DLL(동적 링크 라이브러리)은 프로그램이 실행되는 시점(적재 시 또는 실행 중)에 연결된다. 실행 전에 실행 파일에 포함시키는 것은 정적 링크 라이브러리(SLL)의 방식이다.
- 여러 프로그램이 한 DLL을 공유할 수 있다 — 옳다.
- DLL 파일만 교체하면 되므로 변경·갱신이 SLL보다 용이하다 — 옳다.
- 라이브러리 코드를 프로그램마다 중복 포함하지 않으므로 메모리와 디스크 공간을 절약한다 — 옳다.
void main()
{
int a = 10;
int b;
int *c = &b;
b = a++;
b += 10;
printf(" a=%d \n", a);
printf("b=%d \n", b);
printf("c=%d \n", *c);
}b=20
c=20
b=21
c=21
b=20
c=20
b=21
c=21
출력은 a=11, b=20, c=20이다.
b = a++는 후위 증가이므로 a의 현재 값 10을 b에 먼저 대입한 뒤 a를 11로 증가시킨다.
b += 10 → b = 20
c는 b의 주소를 가리키는 포인터이므로 *c는 b의 값 20과 같다.
- a=10으로 보는 것 — 후위 증가로 a는 11이 된다.
- b=21로 보는 것 — 전위 증가로 착각한 결과이다.
ㄱ. 캐쉬의 write-through방법을 사용하면 메모리 쓰기의 경우에 접근시간이 개선된다.
ㄴ. 메모리 인터리빙은 단위시간에 여러 메모리에 동시 접근이 가능하도록 하여 메모리의 대역폭을 높이기 위한 구조이다.
ㄷ. 가상메모리는 메모리의 주소공간을 확장할 뿐만 아니라 메모리의 접근시간도 절약하는 데 효과적이다.
ㄹ. 메모리시스템은 CPU↔캐쉬↔주메모리↔보조메모리 순서로 계층구조를 이룰 수 있다.
옳은 것은 ㄴ(메모리 인터리빙)과 ㄹ(계층 구조)이다.
인터리빙은 메모리를 여러 모듈로 나눠 동시에 접근하게 함으로써 대역폭을 높이고, 메모리는 CPU↔캐시↔주기억↔보조기억의 계층 구조를 이룬다.
- ㄱ(write-through) — 쓰기마다 주기억 장치에도 함께 기록하므로 쓰기 접근 시간은 오히려 길어진다. 쓰기 시간을 줄이는 것은 write-back 방식이다.
- ㄷ(가상 메모리) — 주소 공간은 확장하지만 주소 변환과 페이지 부재 처리 때문에 접근 시간은 오히려 늘어난다.
옳지 않은 것은 동시에 수행되는 트랜잭션들이 상호작용할 수 있다는 설명이다.
트랜잭션의 ACID 속성 중 고립성(Isolation)은 동시에 실행되는 트랜잭션이 서로의 중간 결과에 간섭하지 않아야 한다는 성질이다.
- 오류 시 어떤 연산도 수행되지 않은 상태로 되돌린다 — 원자성(Atomicity).
- 실행 전후 모두 일관된 상태를 유지한다 — 일관성(Consistency).
- 완료된 변경은 시스템 오류 후에도 보존된다 — 지속성(Durability).
옳지 않은 것은 기억 장치에서 꺼낸 명령어를 누산기가 기억한다는 설명이다.
인출된 명령어는 명령 레지스터(IR)에 저장되어 해독된다. 누산기(AC)는 연산 결과를 일시적으로 저장하는 레지스터이다.
- 다음에 실행될 명령어의 번지는 명령 계수기(PC)가 기억한다 — 옳다.
- 명령 해독기는 명령어를 해독해 제어 신호를 보낸다 — 옳다.
- 번지 레지스터(MAR)는 접근할 주기억 장치의 번지를 기억한다 — 옳다.
우선순위는 괄호 안의 수식 → 산술 연산자 → 관계 연산자 → 논리 연산자 순이다.
괄호가 가장 먼저 계산되고, 산술 연산 결과를 관계 연산자로 비교한 뒤, 그 참·거짓 결과를 논리 연산자로 결합하는 것이 일반적인 순서이다.
- 괄호를 가장 나중에 두는 배열 — 괄호는 우선순위가 가장 높으므로 틀렸다.
- 논리 연산자를 관계 연산자보다 앞에 두는 배열 — 비교 결과를 결합하는 논리 연산이 나중이므로 틀렸다.
링커와 로더에 관련된 작업이 아닌 것은 코드 최적화이다.
코드 최적화는 컴파일러가 목적 코드를 생성하는 과정에서 수행하는 작업이다.
- 연결(linking) — 여러 목적 모듈과 라이브러리를 하나로 묶는 링커의 작업이다.
- 재배치(relocation) — 상대 주소를 실제 적재 주소에 맞게 조정하는 작업이다.
- 적재(loading) — 실행 프로그램을 주기억 장치에 올리는 로더의 작업이다.
- 순서제어 : 정보의 순차적 전송을 위한 프레임 번호 부여
- 흐름제어 : 연속적인 프레임 전송 시 수신 여부의 확인
- 프레임 동기 : 정보 전송 시 컴퓨터에서 처리가 용이하도록 프레임 단위로 전송
설명된 계층은 데이터 링크 계층이다.
데이터 링크 계층은 인접 노드 간 전송 단위인 프레임을 다루며, 프레임 동기화·순서 제어·흐름 제어·오류 제어를 수행한다.
- 세션 계층 — 응용 간 대화(세션)의 설정·동기점 관리를 담당한다.
- 네트워크 계층 — 패킷의 경로 설정(라우팅)을 담당한다.
- 트랜스포트 계층 — 종단 간(end-to-end) 신뢰성 있는 세그먼트 전송을 담당한다.
링크 고장으로 통신 두절이 가장 심하게 발생하는 구조는 링(ring)형이다.
링형은 모든 노드가 하나의 원형 경로로 연결되어 데이터가 한 방향으로 순환하므로 링크 하나만 끊어져도 전체 통신이 마비될 수 있다.
- 메쉬 — 노드 간 다중 경로가 있어 링크 고장에 가장 강하다.
- 스타 — 링크 하나가 고장 나면 해당 노드만 단절된다.
- 트리 — 고장 난 링크 아래 가지만 단절된다.
옳지 않은 것은 IP가 데이터의 목적지 도달을 보장한다는 설명이다.
IP는 비연결형·최선형(best-effort) 프로토콜로, 경로 설정과 전달만 담당할 뿐 도착·순서를 보장하지 않는다. 신뢰성은 상위의 TCP가 책임진다.
- TCP는 흐름 제어와 신뢰성 있는 전송을 관리한다 — 옳다.
- TCP/IP는 서로 다른 기종 간 통신을 위한 인터넷 통신 규약이다 — 옳다.
- UDP는 손실 가능성이 있지만 빠른 전송이 필요한 서비스에 쓰인다 — 옳다.
옳지 않은 것은 인터럽트 서비스 프로그램의 시작 주소가 명령어의 주소 영역에 지정된다는 설명이다.
인터럽트는 명령어 실행과 무관하게 비동기적으로 발생하므로, 서비스 루틴의 시작 주소는 명령어가 아니라 인터럽트 벡터(테이블)나 하드웨어가 정한 고정 위치에서 얻는다.
- 연산 오류(0으로 나누기 등) 시 인터럽트가 발생한다 — 옳다.
- 메모리 보호 구역 접근 시도 시 인터럽트가 발생한다 — 옳다.
- 입출력 완료 시 인터럽트가 발생한다 — 옳다.
int fib(int n)
{ if(n <= 0) return 0;
if(n == 1) return 1;
else return (fib(n-1) + fib(n-2));
}총 호출 횟수는 15회, 최종 리턴 값은 5이다.
호출 횟수 C(n)은 자기 자신 1회에 fib(n−1)·fib(n−2)의 호출 수를 더한 값이다(C(0)=C(1)=1).
C(2)=1+1+1=3, C(3)=1+3+1=5, C(4)=1+5+3=9, C(5)=1+9+5=15
리턴 값은 fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2, fib(4)=3, fib(5)=5이다.
- 리턴 값 8은 fib(6)에 해당한다.
- 호출 횟수 20은 점화식을 잘못 센 값이다.
옳지 않은 것은 IPv6 헤더에 헤더 체크섬 필드가 존재한다는 설명이다.
IPv6는 라우터의 처리 부담을 줄이기 위해 헤더 체크섬 필드를 제거했다. 오류 검출은 데이터 링크 계층과 상위 계층(TCP·UDP)에 맡긴다.
- 128비트 주소 — 옳다.
- 40바이트 고정 길이 기본 헤더 — 옳다.
- 중간 라우터는 조각화하지 않고 송신 호스트만 조각화한다 — 옳다.
옳지 않은 것은 다중 상속이 두 개 이상의 클래스가 한 클래스로부터 상속받는 것이라는 설명이다.
다중 상속은 반대로 한 클래스가 두 개 이상의 상위 클래스로부터 상속받는 것이다. 여러 클래스가 한 클래스를 상속하는 것은 일반적인 단일 상속이 여러 번 일어난 것에 불과하다.
- 객체 간 상호작용은 메시지로 이루어진다 — 옳다.
- 클래스는 인스턴스의 변수와 메소드를 정의한다 — 옳다.
- 객체의 데이터를 처리하는 연산을 메소드라 한다 — 옳다.