W3C가 구조화된 웹 문서 작성을 위해 제정한 확장 가능한 마크업 언어는 XML(eXtensible Markup Language)이다.
XML은 SGML을 웹 환경에 맞게 단순화한 것으로, 사용자가 태그를 직접 정의해 데이터의 구조와 의미를 기술할 수 있다.
- HTML: 미리 정해진 태그로 웹 문서의 표현을 기술하는 언어로, 태그를 확장할 수 없다.
- CSS: 마크업 언어가 아니라 문서의 글꼴·색·배치 등 스타일을 지정하는 스타일 시트 언어이다.
- SGML: XML·HTML의 모태가 된 ISO 표준 범용 마크업 언어로, W3C가 웹용으로 제정한 언어가 아니며 구조가 복잡하다.
CPU가 한 번에 처리할 수 있는 데이터의 기본 단위는 워드(word)이다.
워드 크기는 CPU의 레지스터 폭·데이터 버스 폭과 관련되며, 시스템에 따라 32비트·64비트 등으로 달라진다.
- 바이트: 8비트 묶음으로, 문자 하나를 표현하거나 주소를 지정하는 기본 단위이다.
- 비트: 0 또는 1을 나타내는 정보의 최소 단위이다.
- 니블: 4비트 묶음으로, 16진수 한 자리에 해당한다.
A XOR B
B의 값은 11110000이다.
XOR 연산은 1과 연산하면 비트가 반전되고(1의 보수), 0과 연산하면 비트가 그대로 유지된다. 따라서 상위 4비트는 1111, 하위 4비트는 0000이어야 한다.
- 00001111: 상위 4비트는 유지되고 하위 4비트가 반전되어 조건과 반대이다.
- 10010000: 상위 4비트 중 일부만 반전되어 1의 보수가 되지 않는다.
- 00001001: 상위 4비트는 유지되고 하위 4비트 일부가 반전된다.
기업 활동 전반의 기간 업무를 통합 관리해 경영 자원 활용을 최적화하는 시스템은 ERP(전사적 자원 관리)이다.
ERP는 생산·구매·재고·회계·인사 등 부서별 업무를 하나의 통합 데이터베이스로 연결해 경영 상태를 실시간으로 파악하고 정보를 공유하게 한다.
- EAI: 기업 내 서로 다른 애플리케이션들을 연계·통합하는 기술로, 경영 자원 관리 자체가 목적이 아니다.
- BPR: 업무 프로세스를 근본적으로 재설계하는 경영 혁신 기법이다.
- KMS: 조직 내 지식을 축적·공유·활용하기 위한 지식 관리 시스템이다.
#include <stdio.h>
int main(void) {
int i;
int a[ ] = {10, 20, 30, 40, 50, 60, 70,
80, 90, 100};
int *ptr = a + 3;
for (i = 0; i < 5; ++i) {
printf("%d ", *(ptr + i) - 3);
}
}
출력 값은 37 47 57 67 77이다.
ptr = a + 3 이므로 ptr은 a[3](값 40)을 가리킨다. *(ptr + i)는 a[3+i]이므로 i = 0~4에서 40, 50, 60, 70, 80을 읽고, 각각에서 3을 뺀 값을 출력한다.
- 27 37 47 57 67: a[2]부터 읽은 경우로, ptr이 a + 2를 가리킬 때의 결과이다.
- 47 57 67 77 87: a[4]부터 읽은 경우의 결과이다.
- 43 53 63 73 83: 3을 빼지 않고 더한 결과이다.
교착상태의 필요조건이 아닌 것은 선점(preemption)이다. 필요조건은 선점이 아니라 비선점(no preemption)이다.
교착상태는 상호배제, 점유와 대기, 비선점, 순환 대기의 네 조건이 동시에 성립할 때 발생할 수 있다. 자원을 강제로 빼앗을 수 있으면 비선점 조건이 깨져 교착상태를 예방할 수 있다.
- 상호배제: 한 자원을 한 번에 하나의 프로세스만 사용할 수 있다는 조건으로, 필요조건이다.
- 점유와 대기: 자원을 점유한 채 다른 자원을 기다리는 조건으로, 필요조건이다.
- 순환 대기: 프로세스들이 원형으로 서로의 자원을 기다리는 조건으로, 필요조건이다.
옳지 않은 설명은 원시 코드가 형상 관리 항목에 포함되지 않는다는 것이다.
형상 관리 항목(SCI)에는 요구사항 명세서·설계서뿐 아니라 원시 코드, 테스트 자료, 매뉴얼 등 개발 과정의 산출물이 모두 포함된다.
- 형상 관리는 소프트웨어에 가해지는 변경을 식별·제어·관리하는 활동이므로 옳다.
- 기준선(baseline)은 공식 검토를 거친 산출물이므로, 변경은 형상 통제 위원회 등 공식 절차를 거친다.
- 형상 관리는 개발 단계부터 운용·유지보수 단계까지 생명주기 전반에 적용된다.
옳지 않은 설명은 모든 노드가 개별 운영체제 없이 단일 운영체제로 동작한다는 것이다.
클러스터는 독립된 컴퓨터(노드)들을 네트워크로 묶은 시스템으로, 각 노드가 자신의 운영체제를 갖고 동작하며 미들웨어 등으로 하나의 시스템처럼 보이게 한다.
- 노드 간 연결에는 전용 상호연결망이나 LAN을 사용할 수 있다.
- 노드를 추가하는 방식으로 성능과 규모를 확장할 수 있다.
- 일부 노드가 고장 나도 다른 노드가 서비스를 이어받아 높은 가용성을 추구한다.
네 개의 주소 블록을 하나의 서브넷으로 묶는 마스크는 255.255.252.0(/22)이다.
셋째 옥텟을 2진수로 쓰면 32 = 00100000, 33 = 00100001, 34 = 00100010, 35 = 00100011이다.
앞 6비트(001000)가 공통이고 하위 2비트만 달라지므로, 네트워크 부분은 16 + 6 = 22비트이다.
셋째 옥텟의 마스크는 11111100 = 252이므로 255.255.252.0이 된다.
- 255.255.253.0: 셋째 옥텟 11111101은 1이 연속되지 않아 유효한 서브넷 마스크가 아니다.
- 255.255.254.0: /23으로 두 블록(32~33 또는 34~35)만 묶을 수 있다.
- 255.255.255.0: /24로 한 블록만 포함한다.
옳지 않은 설명은 기본키로 선택되지 않은 후보키를 외래키라고 한다는 것이다. 이러한 키는 대체키(alternate key)이다.
외래키는 다른 릴레이션의 기본키를 참조하는 속성으로, 릴레이션 간 참조 무결성을 유지하는 데 쓰인다.
- 수퍼키는 각 투플을 유일하게 식별하는 속성 또는 속성 집합으로, 최소성은 요구하지 않는다.
- 후보키는 유일성과 최소성을 모두 만족하는 키이다.
- 기본키는 후보키 중 투플 식별의 기준으로 선택된 키이다.
도메인 이름을 IP 주소로 변환하는 것은 DNS(Domain Name System)이다.
DNS는 계층적 분산 데이터베이스로, 사람이 기억하기 쉬운 도메인 이름을 IP 주소로 바꾸어 준다.
- NAT: 사설 IP 주소와 공인 IP 주소를 상호 변환하는 기술이다.
- ARP: IP 주소를 물리 주소(MAC 주소)로 변환하는 프로토콜이다.
- DHCP: 호스트에 IP 주소 등 네트워크 설정을 자동으로 할당하는 프로토콜이다.
덧셈 결과는 10진수 -1이다.
0011 + 1100 = 1111이며, 최상위 비트가 1이므로 음수이다. 2의 보수를 취하면 0000 + 1 = 0001이므로 크기는 1, 즉 -1이다.
검산: 0011은 3, 1100은 -4이므로 3 + (-4) = -1이다.
- 0: 두 수의 합이 0이 되려면 1100이 -3이어야 하지만 실제로는 -4이다.
- -7: 1111을 부호-크기 방식으로 해석한 값으로, 2의 보수 해석이 아니다.
- 15: 1111을 부호 없는 정수로 해석한 값이다.
후입선출(LIFO) 구조로 한쪽 끝에서만 삽입·삭제가 일어나는 자료구조는 스택(stack)이다.
스택은 top 한 곳에서 push(삽입)와 pop(삭제)이 이루어져 가장 나중에 들어온 자료가 먼저 나간다.
- 큐: 한쪽(rear)에서 삽입하고 다른 쪽(front)에서 삭제하는 선입선출(FIFO) 구조이다.
- 트리: 노드들이 계층적으로 연결된 비선형 자료구조이다.
- 그래프: 정점과 간선으로 이루어진 비선형 자료구조이다.
IEEE 802.15.1 표준으로 채택된 PAN용 통신 규격은 블루투스(Bluetooth)이다.
블루투스는 근거리의 다양한 장치를 무선으로 연결하는 개인 영역 네트워크 기술이다.
- Wi-Fi: IEEE 802.11 계열의 무선 LAN 규격이다.
- RFID: 전자 태그를 무선 주파수로 인식하는 기술로, IEEE 802.15.1 규격이 아니다.
- USB: 주변기기를 연결하는 유선 직렬 버스 규격이다.
옳지 않은 설명은 Java가 클래스 다중 상속과 포인터를 지원한다는 것이다.
Java는 C++의 복잡성을 줄이기 위해 클래스의 다중 상속과 포인터를 지원하지 않으며, 다중 상속 효과는 인터페이스로 얻는다.
- C#은 마이크로소프트가 .NET 프레임워크용으로 개발한 언어이다.
- JavaScript, PHP, Ruby는 인터프리터 방식으로 실행되는 스크립트 언어이다.
- C++는 다형성, 오버로딩, 예외 처리 등 객체지향 특징을 갖는다.
옳지 않은 구성은 4K×8비트 칩 8개를 사용하는 방법이다.
필요 용량은 8K×64비트 = 512K비트이다.
4K×8비트 칩 8개는 8×32K비트 = 256K비트로 용량이 절반뿐이다. 8K×64비트를 만들려면 이 칩이 16개(폭 8개×깊이 2개) 필요하다.
- 2K×64비트 칩 4개: 폭이 그대로 64비트이고 깊이를 4배로 늘려 8K×64비트가 된다.
- 1K×16비트 칩 32개: 폭 4개(64비트)×깊이 8개(8K)로 구성된다.
- 8K×16비트 칩 4개: 깊이는 그대로 8K이고 폭 4개를 나란히 놓아 64비트가 된다.
참조된 항목 근처의 항목이 곧 참조될 가능성이 높다는 특성은 공간적 지역성(spatial locality)이다.
캐시 블록을 여러 워드로 구성하면 한 번의 적재로 인접 데이터를 함께 가져와 배열 순회 같은 접근에서 적중률이 높아진다.
- 시간적 지역성: 최근 참조된 항목이 가까운 미래에 다시 참조될 가능성이 높다는 특성이다.
- 캐시 일관성: 여러 캐시에 있는 같은 데이터의 값을 일치시키는 문제로, 참조 특성이 아니다.
- 영속적 바인딩: 메모리 참조의 지역성과 관련이 없는 개념이다.
옳지 않은 설명은 DRAM이 SRAM보다 접근 속도가 빠르다는 것이다.
DRAM은 커패시터에 전하를 저장해 집적도는 높지만, SRAM보다 접근 속도가 느리다. 그래서 빠른 SRAM은 캐시에, DRAM은 주기억장치에 쓰인다.
- DRAM은 전원이 끊기면 내용이 사라지는 휘발성 메모리이다.
- 커패시터의 전하가 누설되므로 주기적인 재충전(refresh)이 필요하다.
- 대용량을 저렴하게 구성할 수 있어 주기억장치로 주로 사용된다.
파이프라인 해저드의 유형이 아닌 것은 병렬 해저드이다.
파이프라인 해저드는 일반적으로 구조적·데이터·제어 해저드의 세 가지로 분류한다.
- 구조적 해저드: 여러 명령어가 같은 하드웨어 자원을 동시에 사용하려 할 때 발생한다.
- 데이터 해저드: 앞 명령어의 결과를 뒤 명령어가 사용해야 하는데 아직 결과가 준비되지 않았을 때 발생한다.
- 제어 해저드: 분기 명령어 때문에 다음에 실행할 명령어가 정해지지 않을 때 발생한다.
- ㄱ. FCFS(First-Come First-Served)
- ㄴ. 라운드 로빈(RR : Round Robin)
- ㄷ. SJF(Shortest Job First)
- ㄹ. HRRN(Highest Response Ratio Next)
기아상태가 발생하지 않는 기법은 FCFS, 라운드 로빈, HRRN이다.
SJF는 실행 시간이 짧은 작업을 계속 먼저 처리하므로, 짧은 작업이 계속 도착하면 긴 작업이 무한히 밀리는 기아상태가 생길 수 있다.
- FCFS: 도착 순서대로 처리하므로 모든 작업이 결국 실행된다.
- 라운드 로빈: 모든 프로세스에 시간 할당량을 돌아가며 주므로 기아가 없다.
- HRRN: 응답률 (대기 시간 + 서비스 시간) / 서비스 시간을 쓰므로 오래 기다린 작업의 우선순위가 올라가 SJF의 기아를 해결한다.