옳지 않은 설명은 장애 투명성을 장애 예방으로 풀이한 것이다.
장애 투명성은 장애가 발생하지 않게 막는 것이 아니라, 장애가 발생하더라도 사용자가 이를 의식하지 않고 쓸 수 있도록 트랜잭션의 원자성과 데이터 무결성을 유지하는 성질이다.
- 위치 투명성: 저장 위치를 몰라도 논리적인 이름만으로 접근할 수 있으므로 옳다.
- 중복 투명성: 여러 지역에 복제되어 있어도 하나의 데이터처럼 사용할 수 있으므로 옳다.
- 단편화 투명성: 데이터의 분할 방식에는 수직적·수평적·혼합 단편화가 있으므로 옳다.
(단, 문맥 교환(context switching) 시간은 0으로 하며, 두 프로세스의 입출력은 없는 것으로 한다)
두 프로세스의 평균 대기 시간은 22이다.
실행 순서는 P1(0~12) → P2(12~24) → P1(24~36) → P2(36~44, 종료) → P1(44~100, 종료)이다.
대기 시간 = 종료 시각 − 도착 시각 − CPU 사용 시간이다.
P1:
P2:
평균:
- 20: P1 한 프로세스의 대기 시간일 뿐 평균이 아니다.
- 24: P2 한 프로세스의 대기 시간일 뿐 평균이 아니다.
- 26: 대기 시간의 합이 52여야 나오는 값인데 실제 합은 44이다.
| 리스트 : {10, 11, 15, 23, 30, 58, 70} |
옳은 설명은 정렬이 안 된 리스트에서는 순차탐색만 사용할 수 있다는 것이다.
이진탐색은 중앙값과 비교해 탐색 범위를 절반으로 줄이므로 데이터가 정렬되어 있어야 동작한다. 순차탐색은 앞에서부터 하나씩 비교하므로 정렬 여부와 상관없이 쓸 수 있다.
- 평균 시간복잡도 비교: 순차탐색은 , 이진탐색은 이므로 이진탐색이 더 작다.
- 10을 검색할 때의 비교 횟수: 이진탐색은 23, 11, 10 순으로 세 번 비교하고, 순차탐색은 첫 원소에서 한 번에 찾는다.
- 정렬된 리스트에서 순차탐색의 평균 시간복잡도: 정렬되어 있어도 차례로 비교하므로 이 아니라 이다.
인터넷 계층 프로토콜이 아닌 것은 FDDI이다.
FDDI는 광섬유를 이용하는 근거리 통신망 기술로, TCP/IP 모델에서 네트워크 접속 계층(OSI의 물리·데이터 링크 계층)에 해당한다.
- ICMP: IP 통신의 오류와 제어 메시지를 전달하는 인터넷 계층 프로토콜이다.
- ARP: IP 주소에 대응하는 물리 주소를 찾는 프로토콜로, 인터넷 계층으로 분류된다.
- IP: 패킷의 주소 지정과 경로 전달을 맡는 인터넷 계층의 핵심 프로토콜이다.

이 회로의 논리식은 Y = A·B로, 전체가 AND 게이트와 같은 동작을 한다.
입력 A, B는 각각 NOT 게이트를 거쳐 OR 게이트로 들어가고, OR 출력이 다시 NOT 게이트에서 반전된다. 여기에 드모르간 법칙을 적용하면 식이 정리된다.
- Y = A+B는 A=1, B=0에서 1이 되지만, 실제 회로는 NOT 출력 0과 1의 OR인 1이 마지막에 반전되어 0을 낸다.
- Y = A'+B'는 마지막 NOT 게이트를 지나기 전, OR 게이트의 출력에 해당한다.
- Y = A'·B'는 A=B=0에서 1이 되지만, 실제 회로는 OR 출력 1이 반전되어 0을 낸다.
| #include <stdio.h> void sub(int x, int *y); int main(void) { int a = 1, b = 5; sub(a, &b); printf(“%d, %d\n”, a, b); } void sub(int x, int *y) { x = x + 2; *y = *y + x; } |
프로그램의 출력은 1, 8이다.
x는 값으로 전달되어 a의 복사본이고, y는 b의 주소를 받는 포인터이다.
sub 호출 시: x = 1, y는 b를 가리킴
x = x + 2 실행: x = 3 (a는 1 그대로)
*y = *y + x 실행: b = 5 + 3 = 8
- 1, 5: 포인터를 통해 바뀐 b의 값을 반영하지 않은 결과이다.
- 3, 5: a와 b의 변화를 모두 반대로 판단한 결과이다.
- 3, 8: 값 전달인 x의 변경이 a에 반영된다고 본 결과이다.
교착상태를 없애는 필요충분조건은 p ≤ 4이다.
최악의 경우는 모든 프로세스가 1개씩 점유한 채 1개를 더 기다리는 상태이다. 이때 자원이 1개라도 남아 있으면 어느 한 프로세스가 2개를 채워 끝내고 자원을 반납하므로 교착상태가 생기지 않는다.
조건식:
정리하면
- p ≤ 5: 프로세스가 5개이면 각각 1개씩 점유해 남는 자원이 없으므로 교착상태가 발생할 수 있다.
- p ≤ 3: 프로세스가 4개일 때도 안전하므로 필요조건이 되지 못한다.
- p ≤ 2: 마찬가지로 프로세스가 3개나 4개일 때도 안전하므로 필요조건이 되지 못한다.
운영체제는 가상메모리를 사용해 부족한 주메모리를 보완하고 D를 실행한다.
가상메모리는 보조기억장치의 일부를 주메모리처럼 활용하는 기법이다. 당장 쓰지 않는 페이지를 스왑 영역으로 내보내고 그 자리에 D에 필요한 페이지를 올린다.
- 실행 거부: 주메모리가 차 있어도 가상메모리로 실행할 수 있으므로 거부되지 않는다.
- 주메모리 확보까지 대기: 필요한 페이지를 교체해 바로 올릴 수 있으므로 기다릴 필요가 없다.
- 오래된 프로그램 강제 종료: 프로그램을 종료하지 않고 일부 페이지만 내보내면 된다.
HTTPS가 더 안전한 이유는 인증서를 사용한 암호화 통신을 제공하기 때문이다.
HTTPS는 HTTP를 TLS 위에서 동작시켜 인증서로 서버의 신원을 확인하고, 주고받는 데이터를 암호화해 도청과 위변조를 막는다.
- 포트 번호의 차이: HTTPS가 다른 기본 포트를 쓰는 것은 사실이지만 포트 자체가 안전성을 주지는 않는다.
- 텍스트 파일로 작동: 안전성과 관계없는 설명이다.
- 빠른 응답 속도: 암호화 협상 과정이 더해지므로 HTTP보다 빠르다고 볼 근거가 없다.
클래스 설계 원칙에 해당하지 않는 것은 인터페이스 통합의 원칙이다.
객체지향 설계 원칙(SOLID)의 해당 항목은 인터페이스 분리 원칙으로, 클라이언트가 쓰지 않는 메서드에 의존하지 않도록 큰 인터페이스를 작게 나누라는 뜻이다. 통합은 이와 반대되는 방향이다.
- 의존성 역전의 원칙: 구체 클래스가 아니라 추상화에 의존하라는 원칙이다.
- 개방 폐쇄의 원칙: 확장에는 열려 있고 수정에는 닫혀 있어야 한다는 원칙이다.
- 리스코프 교체의 원칙: 하위 타입은 상위 타입을 대체할 수 있어야 한다는 원칙으로, 리스코프 치환 원칙이라고도 한다.
옳지 않은 설명은 인터럽트 처리 후 항상 이전 프로세스가 다시 실행된다는 것이다.
인터럽트 처리가 끝나면 스케줄러가 다음에 실행할 프로세스를 다시 정할 수 있다. 예를 들어 타이머 인터럽트로 시간 할당량이 끝났다면 다른 프로세스가 실행될 수 있다.
- 문맥 교환의 발생: 인터럽트를 계기로 다른 프로세스로 전환될 수 있으므로 옳다.
- 실행 중인 기계어 명령의 완료: 외부 인터럽트는 보통 명령 실행이 끝난 뒤 확인하므로 옳다.
- 핸들러의 실행 모드: 인터럽트 핸들러는 운영체제 코드이므로 커널 모드에서 실행된다.
옳지 않은 설명은 DNS의 변환 방향을 IP 주소 → 도메인 네임으로 쓴 것이다.
DNS의 기본 역할은 사람이 읽기 쉬운 도메인 네임을 IP 주소로 변환하는 것이다. IP 주소로 이름을 찾는 역방향 조회는 부가 기능이다.
- DNS의 계층적 이름 체계: 루트, 최상위, 하위 도메인으로 이어지는 계층 구조이므로 옳다.
- IPv4 주소 체계: 32비트 주소이며 네트워크와 호스트 부분에 따라 A~E 클래스로 나뉘므로 옳다.
- IPv6 주소 체계: 주소 부족을 해결하기 위한 128비트 체계이며 콜론으로 구분하므로 옳다.
Round Robin은 준비 상태의 모든 프로세스에 CPU 시간을 돌아가면서 나누어 주는 기법이다.
각 프로세스는 정해진 시간 할당량만큼 실행하고, 끝나지 않으면 준비 큐의 맨 뒤로 돌아가 다음 차례를 기다린다.
- 가장 먼저 들어온 프로세스 우선: FCFS(선입선출) 기법의 설명이다.
- 자원을 가장 적게 쓰는 프로세스 우선: 순서대로 시간을 나누어 주는 방식이 아니므로 Round Robin이 아니다.
- CPU 실행시간이 가장 짧은 프로세스 우선: SJF 기법의 설명이다.
T1은 T2가 할당받은 자원을 선점하여 할당받는다.
wound-wait 기법에서 우선순위가 높은 트랜잭션이 낮은 쪽의 자원을 요청하면 낮은 쪽을 철회(wound)시키고 자원을 빼앗는다. 반대로 우선순위가 낮은 쪽이 요청하면 대기한다.
- T1의 대기: 우선순위가 낮은 트랜잭션이 요청했을 때의 동작이다.
- T1의 취소와 재실행: 우선순위가 높은 T1이 아니라 T2가 철회되는 대상이다.
- T1의 busy-waiting: wound-wait 기법의 동작이 아니다.
옳지 않은 설명은 역전 페이지 테이블이 주소 변환 시간을 개선한다는 것이다.
역전 페이지 테이블은 물리 프레임마다 항목을 하나씩 두어 테이블이 차지하는 메모리를 줄이는 기법이다. 대신 원하는 페이지를 찾기 위해 테이블을 탐색해야 하므로 변환 시간 면에서는 불리하다.
- 프레임과 페이지의 크기: 페이지를 프레임에 그대로 적재하므로 두 크기는 같다.
- TLB의 사용: 최근 변환 결과를 캐시해 주소 변환을 빠르게 하므로 옳다.
- 페이지 폴트와 문맥 교환: 디스크 입출력을 기다리는 동안 다른 프로세스로 전환되므로 옳다.
옳지 않은 설명은 작업공간 배치와 가상공간 제공까지 프로세스 관리로 묶은 것이다.
프로세스 관리는 프로세스에 CPU를 배분하는 역할이고, 작업공간을 배치하고 실제 메모리보다 큰 가상공간을 제공하는 것은 메모리 관리의 역할이다.
- 커널 구조의 구분: 단일형, 계층형, 마이크로 구조로 나눌 수 있으므로 옳다.
- 운영체제의 구성: 커널과 인터페이스로 이루어지며 인터페이스가 사용자·응용 프로그램과 맞닿으므로 옳다.
- 단일형 구조 커널: 모듈이 거의 분리되지 않아 모듈 간 통신비용이 적으므로 옳다.
옳지 않은 설명은 문서 기반 데이터베이스를 컬럼 기반 모델의 확장이라고 한 것이다.
문서 기반 데이터베이스는 키-값 모델을 확장한 형태로, 값 부분에 JSON·XML 같은 반정형 문서를 저장한다.
- 컬럼 기반 데이터베이스: 키와 컬럼 패밀리의 쌍으로 데이터를 저장하므로 옳다.
- 그래프 기반 데이터베이스: 노드와 간선으로 관계를 표현해 추천이나 친구 찾기 질의에 적합하다.
- 키-값 데이터베이스: 키와 값의 쌍으로 저장하는 가장 단순한 구조이므로 옳다.
기능 분할과 배치 방법에 해당하지 않는 것은 데이터 흐름 스타일이다.
데이터 흐름 스타일은 데이터가 처리 단계를 거쳐 전달되는 방식을 다루므로, 구성요소를 어떻게 나누어 놓느냐보다 제어 관계 쪽에 속한다.
- MVC 스타일: 모델, 뷰, 컨트롤러로 기능을 나누어 배치하는 방식이다.
- 클라이언트-서버 스타일: 서비스를 요청하는 쪽과 제공하는 쪽으로 기능을 나누어 배치한다.
- 계층 스타일: 기능을 수준별 계층으로 나누어 배치하는 방식이다.
설명에 해당하는 기법은 시분할 시스템이다.
시분할 시스템은 CPU 시간을 타임 슬라이스로 나누어 사용자에게 번갈아 할당한다. 전환이 빠르기 때문에 사용자는 시스템을 혼자 쓰는 것처럼 느낀다.
- 오버레이: 프로그램을 나누어 필요한 부분만 메모리에 교대로 올리는 메모리 관리 기법이다.
- 분산 처리 시스템: 여러 컴퓨터가 네트워크로 연결되어 작업을 나누어 처리하는 방식이다.
- 실시간 처리 시스템: 정해진 시간 안에 응답하는 것을 목표로 데이터를 즉시 처리하는 방식이다.
옳지 않은 설명은 기본키가 널 값을 가질 수 있다는 것이다.
개체 무결성 제약조건에 따라 기본키를 구성하는 속성은 널 값을 가질 수 없다. 널을 허용하면 튜플을 유일하게 식별할 수 없기 때문이다.
- 상태 변화와 무결성: 데이터베이스 상태가 바뀌어도 무결성은 항상 지켜져야 하므로 옳다.
- 제약조건의 목적: 데이터베이스의 일관성이 손상되지 않도록 보장하는 수단이므로 옳다.
- 참조 무결성: 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이므로 옳다.
옳지 않은 설명은 폭포수 모델이 변경에 유연하다는 것이다.
폭포수 모델은 단계를 순차적으로 진행하고 앞 단계로 되돌아가기 어려워 요구사항 변경에 취약하다. 유연한 대응은 애자일 모델의 특징이다.
- 폭포수 모델의 진행 방식: 전체 기능을 먼저 확정하고 단계별로 진행하므로 옳다.
- 애자일 모델의 개발 주기: 짧은 주기로 만들어 빠르게 피드백을 받으므로 옳다.
- 애자일 모델의 요구사항 수용: 변화를 받아들이며 반복적·점진적으로 개발하므로 옳다.
옳지 않은 설명은 단말기 간 오류수정과 흐름제어를 3계층의 역할로 쓴 것이다.
단말기 사이의 신뢰성 있는 데이터 전송은 4계층인 전송 계층의 역할이다. 3계층인 네트워크 계층은 경로 설정과 패킷 전달을 맡는다.
- 5계층 세션 계층: 응용 사이의 연결을 설정·관리·해제하므로 옳다.
- 1계층 물리 계층: 연결의 기계적·전기적·기능적·절차적 특성을 정의하므로 옳다.
- 상위와 하위 계층의 구분: 응용에 가까운 쪽과 전송 매체에 가까운 쪽으로 나눌 수 있으므로 옳다.
설명에 해당하는 기술은 가상화이다.
가상화는 하나의 물리적 하드웨어를 추상화해 여러 개의 독립된 실행 환경을 만들고, 각 환경이 별도의 컴퓨터처럼 보이게 하는 기술이다.
- 병렬처리 기술: 여러 처리 장치가 작업을 동시에 수행해 속도를 높이는 기술이다.
- 클라우드 컴퓨팅 기술: 컴퓨팅 자원을 네트워크를 통해 서비스 형태로 제공하는 방식이다.
- 분산 컴퓨팅 기술: 여러 컴퓨터가 네트워크로 연결되어 하나의 작업을 나누어 처리하는 기술이다.
| #include <stdio.h> int find_Max(int *a, int len) { int maxval = 0; for(int i = 0; i < len; i = i + 2) { if (maxval < a[i]) maxval = a[i]; } return maxval; } void main() { int arr[10] = {2, 88, 3, 23, 30, 17, 43, 77, 26, 65}; int max = find_Max(arr, 10); printf(“MAX = %d \n”, max); } |
함수가 돌려주는 MAX 값은 43이다.
반복문이 i = i + 2로 증가하므로 짝수 인덱스 원소만 비교한다.
a[0] = 2 → maxval = 2
a[2] = 3 → maxval = 3
a[4] = 30 → maxval = 30
a[6] = 43 → maxval = 43
a[8] = 26 → 변경 없음
- 88: a[1]의 값으로, 홀수 인덱스라 비교 대상이 아니다.
- 30: 중간에 maxval이 되지만 a[6]의 43으로 갱신된다.
- 77: a[7]의 값으로, 홀수 인덱스라 비교 대상이 아니다.
옳지 않은 설명은 다른 릴레이션의 기본키를 속성으로 갖는 키를 후보키라고 한 것이다.
다른 릴레이션의 기본키를 참조하는 속성은 외래키이다.
- 기본키의 개수: 한 릴레이션에 하나만 정의되므로 옳다.
- 후보키의 조건: 유일성과 최소성을 모두 만족하는 키이므로 옳다.
- 기본키의 정의: 후보키 중에서 대표로 지정한 키이므로 옳다.