TIL

프로그래밍 언어 활용 - 2024 1회

ds3hfj 2025. 4. 30. 11:38

61. C언어에서 문자열 처리 함수의 서식과 그 기능의 연결로 틀린것은?

  1. strlen(s) - s의 길이를 구한다
  2. strcpy(s1,s2) - s2를 s1으로 복사한다
  3. strcmp(s1,s2) - s1과 s2를 연결한다
  4. 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에 대한 설명으로 틀린 것은?

  1. 128비트의 주소 공간을 제공
  2. 인증 및 보안 기능을 포함
  3. 패킷 크기가 64Kbyte로 고정
  4. 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. 첫 자리에 숫자를 사용할 수 없다
  2. 영문 대문자/소문자, 숫자, 및줄의 사용이 가능
  3. 변수 이름의 중간에 공백을 사용할 수 있다
  4. 이미 사용되고 있는 예약어는 사용할 수 없다

✅ 파이썬 변수 이름 작성 규칙 요약

규칙 항목설명예시
1. 첫 글자는 문자 또는 밑줄(_)만 가능 숫자로 시작 ❌ ✅ my_var, ❌ 1var
2. 알파벳, 숫자, 밑줄만 사용 가능 특수문자/공백 ❌ ✅ count_1, ❌ total$sum
3. 공백 사용 ❌ 변수 이름 안에 공백은 절대 불가 ❌ user name, ✅ user_name
4. 예약어(키워드) 사용 ❌ if, for, class, def 등은 변수 이름 불가 ❌ def = 3

 

65. 스레드(Thread)에 대한 설명으로 옳지 않은 것은?

  1. 한개의 프로세스에는 여러 개의 스레드를 가질 수 없다.
  2. 커널 스레드의 경우 운영체제에 의해 스레드를 운용한다.
  3. 사용자 스레드의 경우 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다.
  4. 스레드를 사용함으로써 하드웨어 운영체제의 성능과 응용 프로그램의 처리율을 향상 시킬 수 있다.
한 개의 프로세스에는 여러 개의 스레드를 가질 수 없다 ❌ 하나의 프로세스는 여러 스레드를 가질 수 있음 (멀티스레딩) 틀림
커널 스레드의 경우 운영체제에 의해 스레드를 운용한다 ✅ 커널이 직접 스케줄링 등 관리함 맞음
사용자 스레드의 경우 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다 ✅ 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{서비스시간}}


📋 주어진 작업 목록

작업대기시간(W)서비스시간(S)
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씩 증가
  • 새로운 대기시간:
작업이전 대기시간+2 (d 수행 시간)새로운 대기시간
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 증가

작업이전 대기시간+20 (b 수행 시간)새로운 대기시간
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 증가

작업이전 대기시간+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);

🔧 원래 코드:

 
int x = 1, y = 6;
while (y--) {
    x++;
}
System.out.println("x=" + x + "y=" + y);

🔧 수정된 코드:

int x = 1, y = 6;
while (y-- > 0) {
    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: 출력문

기존:

java
복사편집
System.out.println("x=" + x + "y=" + y);

수정:

java
복사편집
System.out.println("x=" + x + " y=" + y);

공백이 추가되어 "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

🔚 정답지와 일치하는 결과:

makefile
복사편집
결과: x=7 y=-1

✅ 결론

정답지에 나와 있는 대로:

  • while (y-- > 0) 조건으로 바꾸면, y가 0 되기 전에 멈춤
  • 그래서 y는 -1, x는 6번 증가 → x = 7
  • 이게 "x=7 y=-1"이 되는 이유야.

68. C언어에서 산술 연산자가 아닌 것은? 4

  1. %
  2. *
  3. /
  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)
    }
}

 

✅ 변수 변화 흐름

  1. 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는?

  1. 200.168.30.1
  2. 10,3,2,1 4
  3. 225.2.4.1
  4. 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의 프로그램을 적재할 경우 내부 단편화의 크기는 얼마인가?

  1. 3KB
  2. 23KB
  3. 64KB
  4. 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 여부를 추적하자.

단계참조 페이지프레임 상태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에서 새로운 프로세스를 생성하는 명령어는?

  1. ls
  2. cat
  3. fork
  4. chmod

명령어 역할/기능 설명 프로세스 생성 여부

ls 현재 디렉토리의 파일 목록을 나열하는 명령어 (list) ❌ 생성 안 함
cat 파일 내용을 화면에 출력하거나 연결(concatenate) 하는 명령어 ❌ 생성 안 함
fork 새로운 프로세스를 생성하는 시스템 콜 (system call) ✅ 생성함
chmod 파일이나 디렉토리의 권한(permission) 을 변경하는 명령어 ❌ 생성 안 함

 

 

74. 페이징 기법에서 페이지 크기가 작아질수록 발생하는 현상이 아닌것은?

  1. 기억장소 이용 효율이 증가한다
  2. 입출력 시간이 늘어난다
  3. 내부 단편화가 감소한다
  4. 페이지 맵 테이블의 크기가 감소한다

🔍 보기별 설명:

보기설명정/오
기억장소 이용 효율이 증가한다 작은 페이지 → 내부 단편화 ↓ → 낭비 ↓ → 효율 ↑ ✅ 맞음
입출력 시간이 늘어난다 페이지 많아짐 → 입출력 단위도 많아짐 → 시간 증가 ✅ 맞음
내부 단편화가 감소한다 작은 페이지는 남는 공간이 작음 → 낭비 ↓ ✅ 맞음
페이지 맵 테이블의 크기가 감소한다 작은 페이지 = 페이지 수 증가 → 테이블 항목 수 ↑ → 크기 증가 ❌ 틀림

✅ 결론:

작은 페이지 크기는:

  • 단편화는 줄이지만
  • 페이지 수는 많아지고
  • 그만큼 페이지 맵 테이블도 커진다

✅ 페이징 기법이란?

  • 운영체제가 프로세스의 주소 공간을 "페이지" 단위로 쪼갬
  • 물리 메모리도 "프레임(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을 반환하는 연산자는?

  1. ||
  2. &&
  3. **
  4. !=

✅ 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의 주소체계로 거리가 먼것은?

  1. Unicast
  2. Anycast
  3. Broadcast
  4. Multicast

 

주소 유형 설명
Unicast 1:1 통신 (하나의 송신자 → 하나의 수신자)
Multicast 1:N 통신 (하나의 송신자 → 그룹 수신자에게 전송)
Anycast 1:1 통신처럼 보이지만, 가장 가까운 수신자에게만 전달
Broadcast ❌ IPv6에서는 존재하지 않음 (IPv4에는 있었음)

77. 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도형상이 발생하게 되는 결합도는?

  1. Data Coupling
  2. Stamp Coupling
  3. Control Coupling
  4. Common Coupling

결합도(Coupling)란?

  • 모듈 간 의존성/연결 정도
  • 낮을수록(Loosely Coupled) 유지보수와 재사용이 좋음

🔍 주요 결합도 비교

결합도 유형설명
Data Coupling 단순히 **데이터 값(변수)**만 주고받음 → 가장 이상적
Stamp Coupling 구조체/레코드 전체를 전달하지만 일부만 사용함
Control Coupling 제어 플래그, 신호 등을 주고받아 상대 모듈의 논리를 제어
Common Coupling 전역 변수를 공유함 → 여러 모듈이 동일 변수 참조

⚠️ Control Coupling의 문제점

  • 모듈 간 독립성 저하
  • 변경에 민감 → 유지보수 어려움
  • 특히 하위 모듈이 상위 모듈을 제어하는 경우: 권리 전도 (Inversion of Control)

78. TCP/IP에서 사용되는 논리 주소를 물리 주소로 변환시켜 주는 프로토콜은?

  1. TCP
  2. ARP
  3. FTP
  4. 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. 운영체제의 가상기억장치 관리에서 프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합을 의미하는 것은

  1. Locality
  2. Deadlock
  3. Thrashing
  4. Working Set

보기별 개념 정리

용어설명
✅ Working Set 일정 시간(윈도우) 동안 프로세스가 자주 접근한 페이지 집합. 메모리 할당/교체 기준으로 사용됨
Locality 지역성: 프로세스는 일정한 범위의 메모리를 집중적으로 접근하려는 성질
Deadlock 교착 상태: 서로 자원을 점유한 채 상대의 자원을 기다리며 영원히 대기하는 상황
Thrashing 페이지 부재가 너무 잦아서 계속 디스크 스왑만 일어나고 실제 작업을 거의 못 하는 상태

80. 다음설명에 해당하는 방식은

  • 무선 랜에서 데이터 전송 시, 매체가 비어있음을 확인한 뒤 충돌을 회피하기 위해 임의 시간을 기다린 후 데이터를 전송하는 방법
  • 네트워크에 데이터의 전송이 없는 경우라도 동시 전송에 의한 충돌에 대비하여 화인 신호를 전송
  1. STA
  2. Collision Domain
  3. CSMA/CA
  4. CSMA/CD

보기별 상세 설명

보기설명
✅ CSMA/CA 충돌을 피하려고(avoid) 매체 상태를 확인한 뒤, 랜덤한 시간 대기 후 전송하는 방식. 주로 무선 LAN (Wi-Fi) 에서 사용됨.
CSMA/CD 충돌 후 처리 방식 (detect): 유선 LAN(예: 이더넷)에서 사용됨. 충돌이 일어나면 감지하고 전송 중단 + 재전송. 무선에서는 사용되지 않음.
STA (Station) 무선 LAN의 단말(노드) 를 의미하는 용어. AP에 연결된 노트북, 스마트폰 등이 STA에 해당됨. 방식이 아니라 장비를 가리킴.
Collision Domain 충돌이 발생할 수 있는 네트워크 영역을 의미함. 허브나 공유기 등의 구성에 따라 범위가 달라짐. 전송 방식이 아님.

✅ CSMA/CA vs CSMA/CD 비교

항목CSMA/CACSMA/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