정처기 22년 3월 5일 기출 오답정리_04
2025. 2. 6. 15:32

[4과목 : 프로그래밍 언어 활용]

 

* IP주소체계

 1) IPv4

  - 패킷 헤더는 20~60Byte의 가변된 길이

  - 주소길이 32bit (2^32개) / 8비트씩 4부분의 10진수로 표시

  - 클래스별로 네트워크와 호스트 주소 길이가 다름 

  - 유니캐스트 / 멀티캐스트 / 브로드캐스트

  - 품질 보장 곤란

  - IPSec, SSL, SHTTP를 별도로 설치하여 보안

 2) IPv6

  - 패킷 헤더는 40Byte의 고정된 길이

  - 주소길이 128bit (2^128개) / 16비트씩 8부분의 16진수로 표시

  - 유니캐스트 / 멀티캐스트 / 애니캐스트

  - 확장 기능을 통해 보안기능 제공

 

* IP주소 변환 방법 (3가지라서 사지선다로 딱이야. 영어로도 알아두)

- 듀얼스택

- 터널링

- 변환

 

* IPv4 주소체계(3가지)

- 유니캐스트 : 1대1 통신

- 멀티캐스트 : 1대다 통신

- 브로드캐스트 : 방송용

 

* IPv6 주소체계(3가지)

- 유니캐스트 : 1대1 통신

- 멀티캐스트 : 1대다 통신

- 애니캐스트 : 인접에 있는 것들에 전달

 

* OSI 7계층

7. 응용 계층 Application - 예) HTTP

6. 표현 계층 Presentation
5. 세션 계층 Session
4. 전송 계층 Transport - 단말기 간에 / 신뢰성 있는 정보 전달
3. 네트워크 계층 Network - 라우터 / 전달만!
2. 데이터링크 계층 Data Link - 인접한 노드들 간에 / 신뢰성 있는 정보 전달 / 브릿지, 스위치

1. 물리 계층 Physical - 허브,리피터

 

* IP 프로토콜

- ARP : IP주소 >>> MAC주소로 변환

- RARP : MAC >>> IP주소로 변환

- ICMP(Internet Control Message Protocol)

 : IP 패킷 전송 과정에서 발생하는 오류를 감지하고 오류 정보를 전달하는 역할

 

* 프로토콜의 3요소 (4지선다, 실기에도 나옴)

: 구문 / 타이밍 / 의미 

 

*응집도(시절통한 대가 가막혔는데)

- 순차적 응집도, 절차적 응집도 내용 구분하기

 

* 동기화 기법

- 세마포어 Semaphore : 임계구역의 접근을 제어하는 상호배제 기법

   각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법

   p와 v라는 2개의 연산에 의해서 동기화를 유지시키고, 상호 배제의 원리를 보장.

   p는 임계구역에 들어가기 전에 수행되고, v는 임계구역에서 나올 때 수행

- 모니터 Monitor

 : 프로그래밍 언어 수준에서 동시성을 제어하여 타이밍 오류를 해결한 상호 배제 기

 

* 배치 전략

1. First Fit : 첫번째 공간에 집어넣기

2. Best Fit : 내부단편화가 가장 적게 생기도록

3. Worst Fit : 가장 큰 공간에 집어넣기

- 내부단편화 : 내부에 생기는 자투리 공간

- 외부단편화 : 프로그램이 들어가지 못하고 남아도는 공간 (해당 메모리의 크기!!!)

>>> Q. 빈 기억공간 크기가 20KB, 16KB, 8KB, 40KB일 때 17KB의 프로그램을 적재할 경우

>> First Fit 일 때, 20KB에 넣기

>> Best Fit 일 때, 20KB에 넣기 (20KB는 3KB의 내부단편화 발생, 17KB는 23KB의 내부단편화 발생)

>> Worst Fit 일 때, 40KB에 넣기

>>> Q. 외부단편화 또는 내부단편화 크기 구하기

>> 20KB에 21KB 넣으려 할 때, 외부단편화 21KB 발생

>> 15KB에 12KB 넣으면, 내부단편화 3KB 발생

>> 30KB에 10KB 넣으면, 내부단편화 20KB 발생

 

* 개발 환경 구성을 위한 빌드(Build) 도구

 : Ant앤트, Maven메이븐, Gradle그래들...

 

* 유닉스/리눅스

- 쉘 shell : 사용자와 interface하는 명령어 해석

- 커널 : 쉘에서 전달받음 / 실행을 위한 프로세스와 메모리 관리

 

프로그래밍언어_C언어

Q1. 2차원 배열에서 포인터를 이용한 메모리 접근 방식

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
    int (*p)[3] = NULL;
    p = arr;
    printf("%d, ", *(p[0] + 1) + *(p[1] + 2));         // 8
    printf("%d", *(*(p + 1) + 0) + *(*(p + 1) + 1));   // 9
    return 0;
}

>> 풀이

int (*p)[3] = NULL;

= 뒤의 인자 값대로 배열을 재구성 하겠다!

= 배열 포인터 p를 (2차원) 3열로 재구성하라

p = 100

p[0] = 100

p[1] = 103

이때, *(p+1)은 p[0]의 다음 행의 대표 주소인 p[1]을 가리킴!

*(p[0] + 1) + *(p[1] + 2) = *(p[0][1]) + *(p[1][2]) = 2 + 6 = 8

*(*(p + 1) + 0) + *(*(p + 1) + 1) = *(p[1][0] + *(p[1][1]) = 4 + 5 = 9

 

프로그래밍언어_JAVA

* JAVA 예외(exception)

- 문법오류는 예외 아님. 컴파일 오류.

 

프로그래밍언어_Python

* 파이썬을 실행하면 자동으로 개행 발생

a = ["대", "한", "민", "국"]
for i in a:
    print(i)
    
    // 대
    // 한
    // 민
    // 국