61. C언어에서 문자열 처리 함수의 서식과 그 기능의 연결로 틀린것은?
- strlen(s) - s의 길이를 구한다
- strcpy(s1,s2) - s2를 s1으로 복사한다
- strcmp(s1,s2) - s1과 s2를 연결한다
- strrev(s) - s를 거꾸로 변환한다
🎯 문제 해설
C 언어의 문자열 처리 함수 중
정의와 기능이 잘못 연결된 것을 찾는 문제야.
📘 각 함수 설명
| strlen(s) | 문자열 s의 길이(문자 수) 반환 | ✅ 맞음 |
| strcpy(s1, s2) | 문자열 s2를 s1에 복사 (대입) | ✅ 맞음 |
| ❌ strcmp(s1, s2) | s1과 s2를 비교(compare) | |
| → 같으면 0, 다르면 양수/음수 반환 | ❌ 연결이 아니라 비교함 | |
| strrev(s) | 문자열 s를 거꾸로(reverse) 변환 | ✅ 일부 컴파일러만 지원 (표준은 아님) |
✅ 결론
| strcmp(s1, s2) – s1과 s2를 연결한다 | ❌ 연결(X), 비교(O) | ✅ 정답 |
📌 문자열 연결 함수는?
- 문자열을 연결(붙이는) 함수는 strcat(s1, s2)
-
c복사편집strcat(s1, s2); // s2를 s1 뒤에 붙임
✅ 보너스 요약 표
| strlen(s) | 문자열 길이 반환 |
| strcpy(s1, s2) | s2 → s1 복사 |
| strcmp(s1, s2) | 문자열 비교 |
| strcat(s1, s2) | 문자열 연결 |
| strrev(s) | 문자열 뒤집기 (비표준 함수) |
62. 다음 C언어 프로그램의 결과로 옳은 것은
#include <stdio.h>
main( ) {
int a[10];
a[0] = 0;
a[1] = 1;
for (int i = 0; i < 8; i++)
a[i+2] = a[i+1] + a[i]
//34
63. IPv6에 대한 설명으로 틀린 것은?
- 128비트의 주소 공간을 제공
- 인증 및 보안 기능을 포함
- 패킷 크기가 64Kbyte로 고정
- IPv6확장 헤더를 통해 네트워크 기능 확장이 용이
✅ 보기별 설명 정리
| ✅ 128비트의 주소 공간을 제공 | IPv6 주소는 128비트 → 엄청 많은 주소 가능 | ✔ 맞음 |
| ✅ 인증 및 보안 기능을 포함 | IPsec 보안 기능이 기본에 포함됨 (IPv4는 선택) | ✔ 맞음 |
| ❌ 패킷 크기가 64Kbyte로 고정 | ❌ 고정 아님! 기본은 40바이트 헤더 + 가변 크기 Payload, 확장 헤더로 조절 가능 | ❌ 정답 |
| ✅ 확장 헤더로 네트워크 기능 확장이 용이 | 필요할 때만 붙이는 구조 → 모듈형 확장 가능 | ✔ 맞음 |
📘 IPv6 패킷 구조 요약
- 기본 헤더 (40바이트): 필수
- 확장 헤더: 옵션 (라우팅, 인증, 암호화 등 기능 추가 가능)
- Payload (데이터): 최대 64KB, 확장 헤더 사용 시 최대 4GB까지 확장 가능
➡ 따라서 "64Kbyte로 고정"이라는 표현은 틀림
→ 최대 기본 값이 64KB일 뿐이고, 고정은 아니야.
📊 IPv4 vs IPv6 비교표
| 항목 | IPv4 | IPv6 |
| 주소 길이 | 32비트 | 128비트 |
| 주소 표현 | 10진수, 점(.)으로 구분 예: 192.168.0.1 |
16진수, 콜론(:)으로 구분 예: 2001:0db8:85a3::8a2e:0370:7334 |
| 주소 개수 | 약 43억 개 | 사실상 무한대 (2¹²⁸ 개) |
| 주소 고갈 문제 | 심각 | 해결됨 |
| 헤더 크기 | 가변 (20~60바이트) | 고정 (40바이트) |
| 보안(IPSec) | 선택사항 | 기본 내장 |
| 브로드캐스트 | 지원 | ❌ 사용 안 함 (멀티캐스트, 애니캐스트 사용) |
| NAT 필요 | O (주소 부족) | ❌ 필요 없음 |
| 패킷 처리 방식 | 복잡 | 간단하고 효율적 |
| 확장성 | 제한적 | 확장 헤더로 용이 |
64. 파이썬의 변수 작성 규칙 설명으로 옳지 않은 것은? 3
- 첫 자리에 숫자를 사용할 수 없다
- 영문 대문자/소문자, 숫자, 및줄의 사용이 가능
- 변수 이름의 중간에 공백을 사용할 수 있다
- 이미 사용되고 있는 예약어는 사용할 수 없다
✅ 파이썬 변수 이름 작성 규칙 요약
| 1. 첫 글자는 문자 또는 밑줄(_)만 가능 | 숫자로 시작 ❌ | ✅ my_var, ❌ 1var |
| 2. 알파벳, 숫자, 밑줄만 사용 가능 | 특수문자/공백 ❌ | ✅ count_1, ❌ total$sum |
| 3. 공백 사용 ❌ | 변수 이름 안에 공백은 절대 불가 | ❌ user name, ✅ user_name |
| 4. 예약어(키워드) 사용 ❌ | if, for, class, def 등은 변수 이름 불가 | ❌ def = 3 |
65. 스레드(Thread)에 대한 설명으로 옳지 않은 것은?
- 한개의 프로세스에는 여러 개의 스레드를 가질 수 없다.
- 커널 스레드의 경우 운영체제에 의해 스레드를 운용한다.
- 사용자 스레드의 경우 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다.
- 스레드를 사용함으로써 하드웨어 운영체제의 성능과 응용 프로그램의 처리율을 향상 시킬 수 있다.
| 한 개의 프로세스에는 여러 개의 스레드를 가질 수 없다 | ❌ 하나의 프로세스는 여러 스레드를 가질 수 있음 (멀티스레딩) | 틀림 |
| 커널 스레드의 경우 운영체제에 의해 스레드를 운용한다 | ✅ 커널이 직접 스케줄링 등 관리함 | 맞음 |
| 사용자 스레드의 경우 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다 | ✅ pthreads, green threads 등 | 맞음 |
| 스레드를 사용함으로써 하드웨어 운영체제의 성능과 응용 프로그램의 처리율을 향상 시킬 수 있다 | ✅ 병렬 처리 가능 | 맞음 |
✅ 핵심 개념 요약
| 프로세스(Process) | 프로그램이 실행된 독립적인 단위. 고유의 메모리 공간을 가짐. |
| 스레드(Thread) | 프로세스 안에서 실제 작업을 수행하는 실행 단위. 같은 메모리 공간을 공유함. |
✅ 왜 스레드가 필요할까?
- 하나의 프로그램이 여러 작업을 동시에 처리하려면 필요해.
- 예를 들어, 유튜브 앱은:
- 영상을 재생하고 (스레드 1)
- 자막을 표시하고 (스레드 2)
- 다운로드도 하고 (스레드 3)
- 이런 걸 동시에 하려면 스레드를 여러 개 써야 돼.
✅ 스레드의 장점
- 메모리를 따로 안 써도 돼 (같은 공간 사용)
- 여러 작업을 동시에 처리할 수 있어서 속도가 빨라짐
- 응답성이 좋아져서 사용자 입장에서 부드럽게 느껴짐
✅ 단점도 있어
- 메모리를 공유하니까, 잘못하면 충돌이나 오류가 생길 수 있어
- 스레드 간의 동기화(누가 언제 뭘 할지 정하는 것)가 어려움
✅ 쉽게 정리
| 독립적 | 프로세스 안의 구성요소 |
| 각각 메모리 사용 | 같은 메모리 사용 |
| 무겁다 (비용 많이 듦) | 가볍다 (빠르게 생성 가능) |
| 예: 크롬, 엑셀 | 예: 크롬 탭 하나하나 |
66. HRN 방식으로 스케쥴링 할 경우, 입력된 작업이 다음과 같을 때 처리되는 직업 순서로 옳은 것은?
a작업 대기시간 5 서비스(실행)시간 20
b작업 대기시간 40 서비스(실행)시간 20
c작업 대기시간 15 서비스(실행)시간 45
d작업 대기시간 20 서비스(실행)시간 2
HRN(Highest Response Ratio Next) 스케줄링은 **응답률(Response Ratio)**이 가장 높은 작업을 우선 수행하는 방식입니다.
✅ HRN 응답률 계산 공식
응답률 (R)=대기시간+서비스시간서비스시간=1+대기시간서비스시간\text{응답률 (R)} = \frac{\text{대기시간} + \text{서비스시간}}{\text{서비스시간}} = 1 + \frac{\text{대기시간}}{\text{서비스시간}}
📋 주어진 작업 목록
| a | 5 | 20 |
| b | 40 | 20 |
| c | 15 | 45 |
| d | 20 | 2 |
1단계: 각 작업의 응답률 계산
Ra=1+520=1.25Rb=1+4020=3.0Rc=1+1545=1.33Rd=1+202=11.0\begin{align*} R_a &= 1 + \frac{5}{20} = 1.25 \\ R_b &= 1 + \frac{40}{20} = 3.0 \\ R_c &= 1 + \frac{15}{45} = 1.33 \\ R_d &= 1 + \frac{20}{2} = 11.0 \end{align*}
2단계: 첫 번째로 실행할 작업 = 응답률 가장 높은 d
- d 실행 (소요 시간: 2)
시간 흐름
- d는 즉시 실행되며, 나머지 작업들의 대기시간은 2씩 증가함
- 새로운 대기시간:
| a | 5 | +2 | 7 |
| b | 40 | +2 | 42 |
| c | 15 | +2 | 17 |
3단계: 두 번째 작업 선택
Ra=1+720=1.35Rb=1+4220=3.1Rc=1+1745≈1.378\begin{align*} R_a &= 1 + \frac{7}{20} = 1.35 \\ R_b &= 1 + \frac{42}{20} = 3.1 \\ R_c &= 1 + \frac{17}{45} \approx 1.378 \end{align*}
→ b가 제일 높음 → b 실행 (소요 시간 20)
대기시간 +20 증가
| a | 7 | +20 | 27 |
| c | 17 | +20 | 37 |
4단계: 세 번째 작업
Ra=1+2720=2.35Rc=1+3745≈1.822\begin{align*} R_a &= 1 + \frac{27}{20} = 2.35 \\ R_c &= 1 + \frac{37}{45} \approx 1.822 \end{align*}
→ a 실행 (소요 시간 20)
대기시간 +20 증가
| c | 37 | +20 | 57 |
마지막 작업: c
✅ 최종 실행 순서
d → b → a → c
67. 다음 자바 코드를 실행한 결과는?
int x=1, y=6;
while (y--) {
x++;
}
System.out.println("x=" x+ "y=" y);
🔧 원래 코드:
🔧 수정된 코드:
✅ 차이점 1: while (y-- > 0)
- 기존: while (y--) → y가 0이어도 한 번 실행됨 → y = -1까지 감
- 수정: while (y-- > 0) → 0이 되는 순간 실행하지 않고 종료함
즉, y가 0이 되기 전에만 루프를 돎.
→ y = 1일 때 마지막 실행, 그리고 감소되어 y = 0에서 종료
✅ 차이점 2: 출력문
기존:
수정:
공백이 추가되어 "x=7 y=-1"처럼 구분이 잘 되도록 조정함.
✅ 수정된 코드의 실행 흐름
초기값: x = 1, y = 6
- while (y-- > 0):
- y = 6 → x = 2
- y = 5 → x = 3
- y = 4 → x = 4
- y = 3 → x = 5
- y = 2 → x = 6
- y = 1 → x = 7
- 종료 후 y는 0 - 1 = -1
✅ 최종 값
- x = 7
- y = -1
🔚 정답지와 일치하는 결과:
✅ 결론
정답지에 나와 있는 대로:
- while (y-- > 0) 조건으로 바꾸면, y가 0 되기 전에 멈춤
- 그래서 y는 -1, x는 6번 증가 → x = 7
- 이게 "x=7 y=-1"이 되는 이유야.
68. C언어에서 산술 연산자가 아닌 것은? 4
- %
- *
- /
- =
연산자 의미 예시
| + | 덧셈 | a + b |
| - | 뺄셈 | a - b |
| * | 곱셈 | a * b |
| / | 나눗셈 | a / b |
| % | 나머지 연산 | a % b |
- =는 대입 연산자
- 변수에 값을 저장(할당) 할 때 사용
69. 다음 JAVA 프로그램이 실행되었을 때의 결과는?
public class Operator {
public static void main(String[] args) {
int x=5, y=0, z=0;
y = x++;
z=--x;
System.out.print(x+","+y+","+z)
}
}
✅ 변수 변화 흐름
- x = 5
➤ y = x++
- 후위 증가이므로:
- y에 먼저 x값(5) 저장
- 그 후 x는 6이 됨
→ 결과: y = 5, x = 6
➤ z = --x
- 전위 감소이므로:
- x를 먼저 1 줄이고 (x = 5)
- 그 값을 z에 저장
→ 결과: z = 5, x = 5
70. C Class에 속하는 IP address는?
- 200.168.30.1
- 10,3,2,1 4
- 225.2.4.1
- 172.16.98.3
클래스 시작 범위 끝 범위 첫 번째 옥텟 범위
| A | 0.0.0.0 | 127.255.255.255 | 1 ~ 126 |
| B | 128.0.0.0 | 191.255.255.255 | 128 ~ 191 |
| ✅ C | 192.0.0.0 | 223.255.255.255 | 192 ~ 223 |
| D (멀티캐스트) | 224.0.0.0 | 239.255.255.255 | 224 ~ 239 |
| E (실험용) | 240.0.0.0 | 255.255.255.255 | 240 ~ 255 |
사설 IP
클래스 사설 IP 범위 예시
| A | 10.0.0.0 ~ 10.255.255.255 | 10.1.2.3 |
| B | 172.16.0.0 ~ 172.31.255.255 | 172.16.98.3 ✅ |
| C | 192.168.0.0 ~ 192.168.255.255 | 192.168.1.1 ✅ |
71. 빈 기억공간의 크기가 20KB, 16KB, 8KB, 40KB 일 때 기억자치 배치 전략으로 "Best Fit" 을 사용하여 17KB의 프로그램을 적재할 경우 내부 단편화의 크기는 얼마인가?
- 3KB
- 23KB
- 64KB
- 67KB
✅ 용어 정리
- Best Fit:
요청한 크기보다 크거나 같은 블록 중 가장 작은 블록에 배치함
(공간 낭비를 최소화하려는 전략) - 내부 단편화:
메모리 블록에 프로그램을 적재한 후 남는 공간
🔍 주어진 정보
- 빈 기억 공간들: 20KB, 16KB, 8KB, 40KB
- 적재할 프로그램 크기: 17KB
✅ Best Fit 선택 과정
- 17KB보다 큰 블록만 고려:
- 20KB ✅
- 40KB ✅
- 16KB ❌ (작아서 안 됨)
- 8KB ❌ (작아서 안 됨)
🔎 Best Fit 선택: 20KB
(17KB보다 크면서, 가장 작은 크기)
✅ 내부 단편화 = 20KB - 17KB = 3KB
✅ 정답: 3KB
✅ 1. First Fit (최초 적합)
🔧 방식:
- 처음부터 차례대로 메모리 블록을 검사해서,
- 처음으로 충분히 큰 공간에 할당
📦 예시:
빈 공간: 8KB, 20KB, 16KB, 40KB
적재할 프로그램: 17KB
→ 20KB에 배치됨 (처음으로 조건을 만족하는 블록)
✅ 2. Best Fit (최적 적합)
🔧 방식:
- 전체 공간을 다 확인한 다음,
- 크기가 딱 맞거나 가장 가까운 작은 공간에 할당 → 낭비 최소화
📦 예시:
같은 상황에서 20KB가 17KB보다 가장 작으면서 큰 블록 → 20KB에 배치
✅ 3. Worst Fit (최악 적합)
🔧 방식:
- 가장 큰 블록에 넣어서,
- 큰 블록을 쪼개고 나머지를 남겨두자는 전략
📦 예시:
→ 40KB가 가장 크니까 거기에 17KB 배치
→ 나머지 23KB는 남게 됨
🔍 비교 요약
| First Fit | 처음 만나는 충분한 공간 | 빠름 (검색 짧음) | 단편화가 많이 생길 수 있음 |
| Best Fit | 가장 딱 맞는 작은 공간 | 공간 낭비 최소화 (내부 단편화 ↓) | 작은 조각이 남아 외부 단편화 ↑ |
| Worst Fit | 가장 큰 공간 | 큰 조각 유지 → 대형 작업 유리 | 내부 단편화 ↑, 비효율적일 수도 |
💡 실제 운영체제에서는?
현대 OS에서는 이런 전략을 단독으로 사용하기보다는
동적 메모리 할당 알고리즘 + 가비지 컬렉션 + 메모리 풀링 등으로 최적화해.
먼저 둘 다 “메모리 낭비”를 말하는 거야.
- 단편화(Fragmentation):
→ 메모리는 남아 있는데, 프로그램이 쓸 수 없는 상태가 된 것.
🔍 1. 내부 단편화 (Internal Fragmentation)
💬 정의:
메모리를 할당받은 블록 내부에서 일부가 남아서 낭비되는 현상
📦 예시:
- 20KB 블록에 17KB 프로그램을 넣으면
- 3KB가 남는데 이건 다른 데 못 씀 → 낭비
🎯 언제 생김?
- 고정 크기의 블록 할당에서 자주 발생
- 예: "무조건 8KB 단위로 할당" 같은 경우
🔍 2. 외부 단편화 (External Fragmentation)
💬 정의:
메모리 전체적으로는 빈 공간이 충분한데,
조각나 있어서 연속된 공간을 확보하지 못하는 상태
📦 예시:
- 100KB 메모리
- 10KB, 15KB, 20KB, 5KB 처럼 여기저기 쪼개진 상태
- 그런데 30KB 연속 공간이 없어서 큰 프로그램은 못 들어감
→ 실제로는 50KB 남았는데, 쓸 수 없음!
🎯 언제 생김?
- 가변 크기 블록 할당에서 자주 발생
✅ 비교 표
| 발생 위치 | 할당된 블록 내부 | 블록들 사이의 빈 공간 |
| 원인 | 블록 크기 > 프로그램 크기 | 블록이 조각나서 연속 공간 부족 |
| 주로 발생 환경 | 고정 크기 분할 | 가변 크기 분할 |
| 해결 방법 | 블록 크기 줄이기, 동적 할당 | 메모리 압축(compaction), 페이징 등 |
72. 다음의 페이지 참조 열(Page reference)에 대해 페이지 교체 기법으로 선입선출 알고리즘을 사용할 경우 페이지 부재(Page Fault) 횟수는? (단, 할당된 페이지 프레임 수는 3이고, 처음에는 모든 프레임이 비어있다
<페이지참조열>
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0
✅ 주어진 조건 요약
- 알고리즘: FIFO (선입선출)
- 프레임 수: 3개
- 처음에는 모든 프레임이 비어 있음
- 페이지 참조열:
-
복사편집7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0
🧠 FIFO 알고리즘 동작 방식
- 가장 먼저 들어온 페이지를 가장 먼저 제거
- 큐처럼 동작
🔢 단계별 시뮬레이션
프레임 상태와 Page Fault 여부를 추적하자.
| 1 | 7 | 7 _ _ | ✅ | 비어있음 |
| 2 | 0 | 7 0 _ | ✅ | |
| 3 | 1 | 7 0 1 | ✅ | |
| 4 | 2 | 0 1 2 | ✅ | 7 제거 |
| 5 | 0 | 0 1 2 | ❌ | 이미 있음 |
| 6 | 3 | 1 2 3 | ✅ | 0 제거 |
| 7 | 0 | 2 3 0 | ✅ | 1 제거 |
| 8 | 4 | 3 0 4 | ✅ | 2 제거 |
| 9 | 2 | 0 4 2 | ✅ | 3 제거 |
| 10 | 3 | 4 2 3 | ✅ | 0 제거 |
| 11 | 0 | 2 3 0 | ✅ | 4 제거 |
| 12 | 3 | 2 3 0 | ❌ | 이미 있음 |
| 13 | 2 | 2 3 0 | ❌ | 이미 있음 |
| 14 | 1 | 3 0 1 | ✅ | 2 제거 |
| 15 | 2 | 0 1 2 | ✅ | 3 제거 |
| 16 | 0 | 0 1 2 | ❌ | 이미 있음 |
| 17 | 1 | 0 1 2 | ❌ | 이미 있음 |
| 18 | 7 | 1 2 7 | ✅ | 0 제거 |
| 19 | 0 | 2 7 0 | ✅ | 1 제거 |
✅ Page Fault 총합
✔ Page Fault가 발생한 단계:
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 14, 15, 18, 19 → 총 14회
73. UNIX에서 새로운 프로세스를 생성하는 명령어는?
- ls
- cat
- fork
- chmod
명령어 역할/기능 설명 프로세스 생성 여부
| ls | 현재 디렉토리의 파일 목록을 나열하는 명령어 (list) | ❌ 생성 안 함 |
| cat | 파일 내용을 화면에 출력하거나 연결(concatenate) 하는 명령어 | ❌ 생성 안 함 |
| fork | 새로운 프로세스를 생성하는 시스템 콜 (system call) | ✅ 생성함 |
| chmod | 파일이나 디렉토리의 권한(permission) 을 변경하는 명령어 | ❌ 생성 안 함 |
74. 페이징 기법에서 페이지 크기가 작아질수록 발생하는 현상이 아닌것은?
- 기억장소 이용 효율이 증가한다
- 입출력 시간이 늘어난다
- 내부 단편화가 감소한다
- 페이지 맵 테이블의 크기가 감소한다
🔍 보기별 설명:
| 기억장소 이용 효율이 증가한다 | 작은 페이지 → 내부 단편화 ↓ → 낭비 ↓ → 효율 ↑ | ✅ 맞음 |
| 입출력 시간이 늘어난다 | 페이지 많아짐 → 입출력 단위도 많아짐 → 시간 증가 | ✅ 맞음 |
| 내부 단편화가 감소한다 | 작은 페이지는 남는 공간이 작음 → 낭비 ↓ | ✅ 맞음 |
| 페이지 맵 테이블의 크기가 감소한다 | ❌ 작은 페이지 = 페이지 수 증가 → 테이블 항목 수 ↑ → 크기 증가 | ❌ 틀림 |
✅ 결론:
작은 페이지 크기는:
- 단편화는 줄이지만
- 페이지 수는 많아지고
- 그만큼 페이지 맵 테이블도 커진다
✅ 페이징 기법이란?
- 운영체제가 프로세스의 주소 공간을 "페이지" 단위로 쪼갬
- 물리 메모리도 "프레임(Frame)"이라는 동일한 크기로 나눔
- CPU가 논리 주소(가상 주소) 를 사용하면 → 페이지 테이블이 물리 주소로 변환해줘
✅ 페이지 테이블이 하는 일
"이 논리 페이지는 물리 메모리 어디에 있나요?" 를 알려주는 주소록
📦 예시:
| 0 | 5 |
| 1 | 2 |
| 2 | 9 |
| 3 | - (없음, Page Fault) |
- 페이지 1번 → 물리 메모리 프레임 2번에 있음
- 페이지 3번 → 아직 메모리에 없음 → 디스크에서 가져와야 함 (Page Fault)
✅ 페이지 테이블의 구조
- 각 프로세스마다 하나씩 존재
- 각 엔트리에는 다음 정보가 들어있어:
- 해당 페이지가 어느 프레임에 매핑됐는지
- 그 페이지가 메모리에 존재하는지 (valid bit)
- 읽기/쓰기 권한
- 참조 여부/변경 여부 (LRU, dirty bit 등)
✅ 왜 페이지 크기가 작아지면 테이블이 커지나?
예를 들어:
- 1GB 주소 공간이 있고
- 페이지 크기가 1MB → 총 1,024개 페이지
- 페이지 크기가 1KB → 총 1,048,576개 페이지 → 즉, 페이지 수가 많아짐 = 페이지 테이블 엔트리 수가 많아짐 = 페이지 테이블 크기 증가
✅ 요약
| 역할 | 가상 주소 → 물리 주소 변환 |
| 구조 | 페이지 번호 → 프레임 번호 매핑 |
| 특징 | 프로세스마다 하나씩 있음 |
| 크기 영향 | 페이지 크기 작을수록 테이블 커짐 |
75. C언어에서 두개의 논리 값 중 하나라도 참이면 1을, 모두 거짓이면 0을 반환하는 연산자는?
- ||
- &&
- **
- !=
✅ C 언어 논리/비교 연산자 정리표
| 연산자 | 이름 | 의미 /설명 | 반환값 예시 (A=1, B=0) |
| || | 논리합(OR) | 두개의 논리 값 중 하나라도 참이면 1을, 모두 거짓이면 0 | |
| && | 논리곱 (AND) | 둘 다 참이어야 참 (1) | A && B → 0 |
| ! | 논리 부정 (NOT) | 참이면 거짓, 거짓이면 참으로 뒤집음 | !A → 0, !B → 1 |
| != | 같지 않음 | 두 값이 다르면 참 (1), 같으면 거짓 (0) | A != B → 1 |
| == | 같음 | 두 값이 같으면 참 (1) | A == B → 0 |
| ** | ❌ (C에 없음) | C 언어에는 존재하지 않음. (Python의 제곱 연산자) | - |
✅ 문제의 정답은?
|| (논리합)
- "하나라도 참이면 1, 모두 거짓이면 0" → 논리 OR에 해당
🔍 참고로 이런 실수 주의
| ` | ` |
| & | 비트 AND (논리 AND 아님) |
| ** | ❌ C에는 없음 (오타 또는 다른 언어) |
76. IPv6의 주소체계로 거리가 먼것은?
- Unicast
- Anycast
- Broadcast
- Multicast
| 주소 유형 | 설명 |
| Unicast | 1:1 통신 (하나의 송신자 → 하나의 수신자) |
| Multicast | 1:N 통신 (하나의 송신자 → 그룹 수신자에게 전송) |
| Anycast | 1:1 통신처럼 보이지만, 가장 가까운 수신자에게만 전달 |
| Broadcast | ❌ IPv6에서는 존재하지 않음 (IPv4에는 있었음) |
77. 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도형상이 발생하게 되는 결합도는?
- Data Coupling
- Stamp Coupling
- Control Coupling
- Common Coupling
결합도(Coupling)란?
- 모듈 간 의존성/연결 정도
- 낮을수록(Loosely Coupled) 유지보수와 재사용이 좋음
🔍 주요 결합도 비교
| Data Coupling | 단순히 **데이터 값(변수)**만 주고받음 → 가장 이상적 |
| Stamp Coupling | 구조체/레코드 전체를 전달하지만 일부만 사용함 |
| Control Coupling | 제어 플래그, 신호 등을 주고받아 상대 모듈의 논리를 제어함 |
| Common Coupling | 전역 변수를 공유함 → 여러 모듈이 동일 변수 참조 |
⚠️ Control Coupling의 문제점
- 모듈 간 독립성 저하
- 변경에 민감 → 유지보수 어려움
- 특히 하위 모듈이 상위 모듈을 제어하는 경우: 권리 전도 (Inversion of Control)
78. TCP/IP에서 사용되는 논리 주소를 물리 주소로 변환시켜 주는 프로토콜은?
- TCP
- ARP
- FTP
- IP
✅ 문제 해석
TCP/IP에서 "논리 주소(=IP 주소)"를 "물리 주소(=MAC 주소)"로 변환해주는 프로토콜은?
🔍 각 보기 설명
| TCP | 전송 계층, 데이터 전송 제어 (연결 지향) | ❌ |
| ✅ ARP | IP → MAC 주소 변환 (주소 해석 프로토콜) | ✅ |
| FTP | 파일 전송 프로토콜 (Application Layer) | ❌ |
| IP | IP 주소 지정 및 라우팅 (인터넷 계층) | ❌ |
✅ ARP (Address Resolution Protocol)란?
- IP 주소 → MAC 주소로 변환
- 예: 192.168.0.1에 보내려면 해당 장치의 MAC 주소를 알아야 함
- ARP가 브로드캐스트 요청 → 해당 장치가 응답 → MAC 주소 획득
79. 운영체제의 가상기억장치 관리에서 프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합을 의미하는 것은
- Locality
- Deadlock
- Thrashing
- Working Set
보기별 개념 정리
| ✅ Working Set | 일정 시간(윈도우) 동안 프로세스가 자주 접근한 페이지 집합. 메모리 할당/교체 기준으로 사용됨 |
| Locality | 지역성: 프로세스는 일정한 범위의 메모리를 집중적으로 접근하려는 성질 |
| Deadlock | 교착 상태: 서로 자원을 점유한 채 상대의 자원을 기다리며 영원히 대기하는 상황 |
| Thrashing | 페이지 부재가 너무 잦아서 계속 디스크 스왑만 일어나고 실제 작업을 거의 못 하는 상태 |
80. 다음설명에 해당하는 방식은
- 무선 랜에서 데이터 전송 시, 매체가 비어있음을 확인한 뒤 충돌을 회피하기 위해 임의 시간을 기다린 후 데이터를 전송하는 방법
- 네트워크에 데이터의 전송이 없는 경우라도 동시 전송에 의한 충돌에 대비하여 화인 신호를 전송
- STA
- Collision Domain
- CSMA/CA
- CSMA/CD
보기별 상세 설명
| ✅ CSMA/CA | 충돌을 피하려고(avoid) 매체 상태를 확인한 뒤, 랜덤한 시간 대기 후 전송하는 방식. 주로 무선 LAN (Wi-Fi) 에서 사용됨. |
| CSMA/CD | 충돌 후 처리 방식 (detect): 유선 LAN(예: 이더넷)에서 사용됨. 충돌이 일어나면 감지하고 전송 중단 + 재전송. 무선에서는 사용되지 않음. |
| STA (Station) | 무선 LAN의 단말(노드) 를 의미하는 용어. AP에 연결된 노트북, 스마트폰 등이 STA에 해당됨. 방식이 아니라 장비를 가리킴. |
| Collision Domain | 충돌이 발생할 수 있는 네트워크 영역을 의미함. 허브나 공유기 등의 구성에 따라 범위가 달라짐. 전송 방식이 아님. |
✅ CSMA/CA vs CSMA/CD 비교
| 주로 사용 | 무선 LAN (Wi-Fi) | 유선 LAN (Ethernet) |
| 충돌 처리 | 충돌 발생 전 회피(Avoidance) | 충돌 발생 후 감지(Detection) |
| 방식 | Clear Channel 확인 + 랜덤 대기 | 충돌 감지 + 중지 + 재전송 |
'TIL' 카테고리의 다른 글
| 소프트웨어 개발 - 2024 2회 (1) | 2025.05.08 |
|---|---|
| 정보시스템 구축 관리 2024 1회 (0) | 2025.04.30 |
| 데이터베이스 구축 - 2024 1회 (1) | 2025.04.30 |
| 소프트웨어 설계 2024 1회 (0) | 2025.04.30 |
| 소프트 웨어 개발 - 2024 1회 (0) | 2025.04.30 |