정처기 필기: 4과목 - 프로그래밍 언어 활용

윤뿔소·2024년 2월 19일
0

정보처리기사

목록 보기
6/7
post-thumbnail

네트워크 계산 방식
페이지 교체 알고리즘
운영체제나 네트워크의 경우 스케줄링 방식이나 유닉스 개념, 네트워크 계산 방식 등의 문제가 출제됩니다.

네트워크 쪽에서 계산 관련 문제가 너무 어려우시면 네트워크 계층 개념을 숙지하시는데 시간을 쏟으셔도 좋습니다. 특히 프로토콜 중 IP와 TCP/UDP는 빈번하게 출제됩니다!

C언어

  • 컴파일러 방식의 언어이다.
  • 시스템 프로그래밍에 가장 적합한 언어이다.
  • 포인터에 의한 번지 연산 등 다양한 연산 기능을 가진다.
  • 이식성이 뛰어나 컴퓨터 기종에 관계없이 프로그램을 작성할 수 있다.
  • UNIX 운영체제를 구성한다.

출력(서식) 문자

  • %d(decimal): 10진 정수형 출력
  • %u: 부호 없는 10진 정수형 출력
  • %o: 8진 정수형 출력
  • %x: 16진 정수형 출력
  • %c: 문자 출력
  • %s: 문자열 출력
  • %f: 실수형 출력
  • %e: 지수형 출력
  • %g: e와 f 중에서 출력할 자리를 덜 차지하는 형태로 출력
  • %p: 포인터의 주소값 출력

변수명 규칙

  • 영문 대소문자(A~Z, a~z), 숫자(0~9), ‘_’를 혼용하여 사용할 수 있다.
  • 첫 글자는 숫자로 시작할 수 없고, 영문자나 ‘_’로 시작해야 한다.
  • 영문자는 대소문자는 구분한다.
  • 공백을 포함할 수 없다.
  • auto, beak, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigend, void, volatile, while 32개 예약어(reserved word)를 사용할 수 없다.

우선순위

(높음)
괄호( )
산술 연산자
비트 이동 연산자
관계 연산자
비트 논리 연산자
논리 연산자
(낮음)

  • 산술 연산자 : *, /, %, +, -
  • 비트 이동 연산자 : <<, >>
  • 관계 연산자 : <, <=, >, =, ==, !=
  • 비트 논리 연산자 : &, ^, |
  • 논리 연산자 : &&, ||

논리 연산자

C언어에서는 true는 1로, false는 0으로 된다는 배경 지식이 필수다. ||, &&, ! 이 3개가 있다.

예제를 보고 감을 익히자.

#include 〈stdio.h〉
int main(int argc, char *argv[]) {
  int a = 5, b = 3, c = 12;
   int t1, t2, t3; 
   t1 = a && b; // 1번
   t2 = a || b; // 2번
   t3 = !c;// 3번
   printf("%d", t1 + t2 + t3); // ?
   return 0;
}

a, b, c 각각 변수에 실제 데이터 int가 있고, Truthy한 값으로 판단되기에 1번, 2번은 전부 true다. 즉, 1이다.
하지만 부정 연산자인 !은 그 변수의 값이 true 및 Truthy한 경우 false를 반환하기에 0으로 반환된다.

답은 2.

포인터 변수

  • 다른 변수의 주소값을 저장할 수 있다.
  • 포인터 변수는 자료형에 상관없이 메모리 큰기가 동일하다.
  • 가리키고 있는 변수값을 읽기 위해서는 *(포인터) 연산자를 사용한다. 출력 문자는 %p
  • 포인터 변수에 일반 변수의 주소를 대입하기 위해서는 &(주소) 연산자를 사용한다.
  • 포인터 변수를 가리키는 포인터 변수를 선언할 수 있다.

걍 메모리 주소랑 그 메모리에 어떤 데이터가 들어갔는지 추론만 하면 된다.

예시

int a = 10; 
int *p;
p = &a;
print("%p\n", p); // 1. 00FFFF
print("%d\n", *p); // 2. 1
  1. 변수 p에 변수 a의 주소값을 저장했고 그것을 프린트 한것이기 때문에 00FFFF가 나옴
  2. 포인터 p에 저장된 주소값(00FFFF)에 저장된 값을 도출! 그래서 1로 반환.

stdlib.h 함수 종류

stdlib.h : C 표준 유틸리티 함수를 모아놓은 헤더파일. #include 〈stdlib.h〉를 써서 사용한다.

문자형 변환, 수치를 문자형으로 변환하는 등 동적 할당 관련 함수, 난수 생성 함수, 정수의 연산 함수, 검색 및 정렬 함수 등이다.

  • atoi() : 문자열을 정수형(int)으로 변환
  • atof() : 문자열을 실수형(float)으로 변환
  • atol() : 문자열을 log형 정수로 변환
  • itoa() : 숫자를 문자열로 변환
  • ceil() : 자리 올림
  • floor() : 자리 버림
  • rand() : 난수 발생
  • div : 정수 나눗셈

JAVA

  • 객체지향 언어이다.
  • 추상화, 상속화, 다형성과 같은 특징을 가진다.
  • 네트워크 환경에서 분산 작업이 가능하도록 설계되 었다.
  • 특정 컴퓨터 구조와 무관한 가상 바이트 머신 코드 를 사용하므로 플랫폼이 독립적이다.
  • GC(Garbage Collector)를 사용해 불필요 메모리 정리해준다.
  • JAVA는 변수에 C언어 규칙 포함해 $까지 사용 가능하다.

JAVA 출력 함수

C언어의 printf() 함수 같은 거

  • System.out.print() : print 여러 개 나란히 사용 시 줄바꿈 X.
  • System.out.println() : println 여러 개 나란히 사용 시 줄바꿈 O.
  • System.out.printf() : printf()와 같이 출력 문자를 같이 넣어줘 사용.

제어문

내가 했던 JS와 전부 같다. 틀린 거 위주로 작성하겠다.

  • while(조건) { 명령 } : while의 조건이 해당될 시 명령이 실행.
  • do { 명령 } while(조건) : 일반 while문과 달리 조건과 상관없이 처음 무조건 한번은 실행됨.

프로세스 스케쥴링

  • 프로세스의 생성 및 실행에 필요한 시스템의 자원 을 해당 프로세스에 할당하는 작업이다.
  • 다중 프로그래밍 운영체제에서 자원의 성능을 향상 시키고 효율적인 프로세서의 관리를 위해 작업 순서를 결정하는 것이다.

비선점 스케쥴링

한 프로세스가 일단 CPU를 할당받으면 다른 프로 세스가 CPU를 강제로 빼앗을 수 없고, 사용이 끝 날 때까지 기다리는 방식이다.

FCFS = FIFO

First Come First Service, 준비 상태 큐에 도착한 순서대로 CPU에 할당하는 기법.

활용: FIFO 페이지 교체 알고리즘

페이지 참조 순서: 1, 2, 1, 0, 4, 1, 3
페이지 프레임: 3개

과정, 부재 수 및 마지막 프레임에 담긴 페이지는?

  1. 참조: 1
    • 프레임: [1, , ]
    • 페이지 부재 발생 (1 로드)
  2. 참조: 2
    • 프레임: [1, 2, ]
    • 페이지 부재 발생 (2 로드)
  3. 참조: 1
    • 프레임: [1, 2, ]
    • 페이지 부재 없음 (1 이미 로드됨)
  4. 참조: 0
    • 프레임: [1, 2, 0]
    • 페이지 부재 발생 (0 로드)
  5. 참조: 4
    • 프레임: [4, 2, 0]
    • 페이지 부재 발생 (1 교체됨)
  6. 참조: 1
    • 프레임: [4, 1, 0]
    • 페이지 부재 발생 (2 교체됨)
  7. 참조: 3
    • 프레임: [4, 1, 3]
    • 페이지 부재 발생 (0 교체됨)

부재 수: 5번
마지막 프레임: [4, 1, 3]

SJF

도착 시간은 없고 실행 시간이 짧은 순으로 실행

작업이 P1 ~ P4까지 있고 1부터 실행 시간이 6, 3, 8, 7이라면 짧은 순으로 P2, P1, P4, P3 이렇게 실행됨.
실행 시간 : P2(0), P1(3), P4(9), P3(16)

SJF를 보완해서 나온 것이 HRN(Highest Response-ratio Next) 우선순위 계산식이 높은 것 부터 처리
=> 우선순위 계산식 = (대기 시간 + 서비스를 받을 시간) / 서비스를 받을 시간

UNIX 유닉스 OS

C언어로 만든 대화식 운영 체제

구성 요소

  • 커널(Kernel): UNIX 시스템의 핵심
    프로세스, 메모리, 파일, 입/출력 관리 등을 수행한다.
  • 쉘, 유틸리티 등

OSI 7계층

  • ISO(국제표준화기구)에서 제안한 통신 규약(Protocol)
  • 물리 -> 데이터 링크 -> 네트워크 -> 전송 -> 세션 -> 표현 -> 응용 계층 순으로 1~7 계층을 구성

시험에 나오는 것만 정리, 키워드만 잘 보기

  • 물리 계층 프로토콜 종류 : RS-232C, V.24, X.21
  • 데이터 링크 계층 : 신뢰성 정보 위해 동기화, 오류제어, 흐름제어 등 역할, 데이터 전달 링크.
    프로토콜 종류 : HDLC, PPP, LLC, LAPB,
    LAPD, ADCCP
  • 네트워크 계층 : 경로를 설정하여 Packet을 전송하는 책임을 짐.
    프로토콜 : X.25(X.25가 나오면 무조건 네트워크!)
  • 전송 계층 : 데이터 전달.
    프로토콜 : TCP, UDP
  • 세션 계층 : 응용 간의 대화 제어를 담당, 그냥 통신 안끊기게 도와주는 계층
  • 응용 계층 : HTTP, FTP, SMTP 등

TCP/IP 프로토콜

인터넷에 연결된 서로 다른 기종의 컴퓨터들이 데이터를 주고받을 수 있도록 하는 표준 프로토콜이다.

TCP(Transmission Control Protocol)

  • OSI 7계층의 전송 계층.
  • 신뢰성 있는 연결형 서비스.
  • 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능.
  • 스트림(stream) 전송 기능 => 유튜브 같은 큰 용량을 처리.
  • IP 장점(비연결, 비신뢰)을 받은 UDP도 있다.

TCP/IP 인터넷 계층

OSI 7계층의 네트워크 계층에 해당하므로, IP로 주소 지정, 경로 설정 등을 하는 계층.

ICMP(Internet Control Message protocol, 인터넷 제어 메시지 프로토콜)

  • TCP/IP 계층의 인터넷 계층에 해당한다. 네트워크 컴퓨터에서 운영체제의 오류 메시지를 전송받는 데 주로 쓰이며, 인터넷 프로토콜에 의존하여 작업을 수행한다.
  • IP의 동작 과정에서의 전송 오류가 발생하는 경우에 대비해 오류 정보를 전송하는 목적으로 사용하는 프로토콜이다.

ARP 20.9

TCP/IP 네트워크에서 IP 주소를 MAC 주소로 변환하는 프로토콜
TCP/IP에서 사용되는 논리주소를 물리주소로 변환시켜 주는 프로토콜

즉 MAC 주소는? 우리 호스트의 컴퓨터 하드웨어 물리 주소를 뜻한다.

IP(Internet Protocol)

  • OSI 7계층의 네트워크 계층.
  • 데이터그램을 기반으로 하는 비연결형 서비스(비신뢰성).
  • 패킷의 분해/조립, 주소 지정, 경로 선택 기능.
  • 헤더의 길이는 최소 20Byte에서 최대 60Byte.

IPv4와 IPv6의 주소 체계

  • 패킷 크기가 64Kbyte로 고정된 것은 IPv4이며, IPv6는 임의의 크기의 패킷을 주고받을 수 있도록 패킷 크기 제한이 없다.

IPv4(Internet Protocol version 4) 특징

  • 32비트 길이의 IP 주소이다.
  • 각 자릿수가 32 octet(0~255)를 가진다.

IPv6(Internet Protocol version 6) 특징

  • 128비트 길이의 IP 주소이다.
  • 16비트씩 8개의 필드로 분리 표기된다.
  • 패킷 크기가 무제한이다.
  • 인증 및 보안 기능을 포함하고 있어 IPv4보다 보안성이 강화되었다.
  • IPv6 확장 헤더를 통해 네트워크 기능 확장이 용이하다.
  • 멀티미디어의 실시간 처리가 가능하다.
  • 유니캐스트(Unicast), 멀티캐스트(Multicast), 애니캐스트(Anycast)를 지원한다.
    • 유니캐스트: 1:1 통신
    • 멀티캐스트: 1:N 통신
    • 애니캐스트: 가장 가까운 1명과 1:1 통신 => Anyone이라 생각

그 외 짜잘

기억 장치 배치 전략

사용 중(In use)말고 공백(Free)에만 포커싱하자.

  • 최초 적합(First Fit) : 가능한 영역 중에서 첫 번째 분할 영역에 배치시키는 방법
  • 최적 적합(Best Fit) : 가능한 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치하는 방법
  • 최악 적합(Worst Fit) : 가능한 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치하는 방법
영역번호영역크기상태
15K공백
214K공백
310K사용중
412K공백
516K공백

위 표에서 10K 프로그램을 할당하려고 한다.

  • First Fit은?
    영역 번호가 제일 빠른 2번 영역.
  • Best Fit은?
    프로그램 삽입 후 단편화 가장 작게 남기는 4번 영역.
  • Worst Fit은?
    프로그램 삽입 후 단편화를 가장 많이 남기는 5번 영역.
profile
코뿔소처럼 저돌적으로

0개의 댓글