[정보처리기사] 프로그래밍 언어 활용 - 4과목 정리

2025. 1. 28. 14:27·📜 Certs/정보처리기사

1. 서버 프로그램 구현

1) 배치 프로그램(Batch Program)

상호작용 없이 여러 작업을 일련/일괄적으로 처리

필수 요소

  • 대용량 데이터 처리 가능
  • 자동화: 사용자 개입X
  • 견고성: 데이터 이상으로 중단 X
  • 안정성/신뢰성: 오류 추적 가능
  • 성능: 다른 프로그램 방해X, 지정된 시간 내 처리

2. 프로그래밍 언어 활용

1) C/C++

데이터 타입 크기, 기억 범위

  • 문자
    • char(1)
    • unsiged char(1)
  • 정수
    • short(2)
    • int(4)
    • long(4)
    • long long(8)
  • 실수
    • float(4)
    • double(8)
    • long double(8)

구조체

데이터 집합체, 자료형을 만드는 것

struct으로 정의

struct sawon {
	char name[10];
	char position[10];
	int pay;
};

2) Java

데이터 타입 크기, 기억 범위

  • 논리: boolean(1)
  • 문자: char(2)
  • 정수
    • byte(1)
    • short(2)
    • int(4)
    • long(8)
  • 실수
    • float(4)
    • double(8)

가비지 콜렉터

선언만 하고 사용하지 않은 메모리 공간 회수

3) Python

시퀀스 자료형

값이 연속적으로 이어진 자료형

  • List: 다양한 자료형의 값을 연속 저장, 개수 업다운 가능
  • 튜플: 요소의 CUD 불가
  • range: 연속된 숫자 생성 → 리스트, 반복문에서 사용 가능

4) 변수

개요

처리 도중 발생하는 값을 저장하는 공간, 변할 수 있는 값을 의미
→ 정수형, 실수형, 문자형, 포인터형

변수명 작성 규칙

  • 영문자, 숫자, 언더바 가능
  • 첫글자 영문자, 언더바 가능 / 숫자 시작 불가
  • 글자수 제한 없음
  • 공백, 특수문자, 예약어 불가
  • 선언 시 세미콜론
  • 헝가리안 표기법: 변수명에 데이터 타입 명시

5) 연산자

산술 연산자

++, --

  • 전치: 변수 값 증감시킨 후 연산에 사용 (++a)
  • 후치: 변수 사용 후 증감 (a++)

관계 연산자

거짓 == 0
참 == 0 빼고 다

비트 연산자

비트별 연산으로 결과 얻기

  • & (and): 모든 비트가 1일 때만 1
  • ^ (xor): 모든 비트가 같으면 0, 다르면 1
  • | (or): 하나라도 1이면 1
  • ~ (not): 각 비트의 부정, 0이면 1 / 1이면 0
  • << : 왼쪽으로 이동
  • >>: 오른쪽으로 이동

논리 연산자

대입 연산자

조건 연산자

a ? b : c

연산자 우선순위 (높은 순)

  • 단항 연산자: !, ~(비트 not), ++, --, sizeof
  • 이항 연산자
    • 산술 연산자: * / %
    • 시프트: + -
    • 관계: << >>
    • 비트: < <= >= > == !=
    • 논리: & ^ | && ||
  • 삼항 연산자: 조건 연산자(? :)
  • 대입 연산자
  • 순서 연산자

6) 입출력

C 언어

scanf(서식 문자열, 변수 주소): 입력

scanf("%3d", &a)

  • %: 서식 문자임을 지정
  • 3: 입력 자리수 == 3자리
  • d: 10진수
  • &: 주소 연산자
  • &a: 입력 받은 데이터를 a 변수 주소에 저장

특징

  • 한 번에 여러 개 데이터 입력 받을 수 있다.
  • 서식 문자열과 변수의 자료형 일치해야 함
  • 예) scanf("%d %f", &i, &j);

서식 문자열

  • %d: 정수형 10진수
  • %u: 부호 없는 정수형 10진수
  • %o: 8진수
  • %x: 16진수
  • %c: 문자
  • %s: 문자열
  • %f: 소수점을 포함하는 실수
  • %e: 지수형 실수
  • %ld: long형 10진수
  • %lx: long형 16진수
  • %p: 주소 16진수

printf(서식 문자열, 변수): 출력

printf("%-8.2f", 200.2);

출력 결과 예시: 200.20 (뒤쪽 빈칸 포함)

  • -: 왼쪽부터 정렬
  • 8: 출력 자릿수 8자리
  • 2: 소수점 이하 2자리
  • f: 실수로 출력

주요 제어 문자

  • \n: new line
  • \b: backspace
  • \t: tab
  • \r: 현재 줄 처음으로 커서 이동
  • \0: null
  • ': 작은따옴표
  • ": 큰따옴표
  • \a: 스피커로 벨소리
  •  
  • \f: 한 페이지 넘김

Java

print(), println(), printf()

7) 조건문

단순 if문

다중 if문

switch문

8) 반복문

for문

초기값, 최종값, 증가값

while문

do ~ while문

무조건 한 번 실행 후 조건 판단

break, continue

9) 배열

개념

동일한 데이터 유형 여러 개

  • 하나의 이름으로 여러 기억장소 가리킴 → 개별 요소 위치는 첨자로 지정
  • 행 우선으로 데이터가 기억장소에 할당
  • C 언어에서 배열의 위치를 나타내는 첨자 없이 배열 이름을 사용하면, 배열 첫번째 요소의 주소를 지정하는 것과 같음

1차원 배열

2차원 배열

[행][열]

초기화

  • 선언 시 초기값 지정 가능
  • 선언 시 배열 크기 생략 → 초기값 지정해야 그 개수만큼의 배열 선언됨

배열 형태의 문자열 변수

C언어에서 ""로 묶인 글자는 수 관계 없이 문자열로 처리됨

  • 문자열 자료형이 없으므로 배열, 포인터로 처리
  • char 배열이름[크기] = "문자열";
  • 문자열의 끝을 알리기 위한 널문자 \0이 자동 삽입됨 → 이도 고려해서 배열 크기 지정
    예) char a[5] = "love" → 'l' 'o' 'v' 'e' '\0'
  • 배열 선언 시 초기값으로 지정해야 하고, 이미 선언된 배열에는 문자열 저장 불가
char a = 'A';
char b[9] = "SINAGONG";
char *c = "SINAGONG"; // "SINAGONG"이 저장된 곳의 주소 저장

printf("%c\n", a); // A
printf("%s\n", b); // SINAGONG
printf("%s\n", c); // SINAGONG (c가 가리키는 곳의 값)

10) 포인터

포인터와 포인터 변수

포인터: 변수의 주소 → C언어에서 주소 제어 기능 제공

  • 포인터 변수: 주소 저장 변수 (예: int *a; // 간접연산자)
  • 변수 주소 알아내기 → a = &b; (번지 연산자 &)
  • 포인터 변수에 *를 붙이면 가리키는 곳의 값을 말함 (c = *a;)
  • 힙 영역에 접근하는 동적 변수
int a = 50;
int *b; // 포인터 변수
b = &a; // a의 주소를 저장
*b = *b + 20; // b가 가리키는 곳(a)의 값에 20 더하기

printf("%d %d", a, *b); // 70 70

포인터와 배열

배열을 포인터 변수에 저장한 후, 포인터를 이용해 배열 요소에 접근할 수 있다

  • 배열 위치를 나타내는 첨자를 생략하고 대표명만 지정하면, 배열의 첫 번째 요소의 주소를 지정하는 것과 같다
  • & 연산자를 사용하여 주소 지정
  • 포인터형 배열 선언 가능
int a[5];
int i;
int *p;

for(i=0; i<5; i++) {
	a[i] = i + 10;
}

p = a; // 배열 a의 시작 위치가 기억됨
// 배열의 이름은 주소이므로 p = &a 가 아님

for(i=0; i<5; i++) {
	printf("%d ", *(p+i)); // 10 11 12 13 14
}

11) Python

기본 문법

  • 자료형 선언, 세미콜론 X
  • 변수에 연속 값 저장 가능: x, y, z = 10, 20, 30
  • 코드블록은 콜론과 여백으로 구분
  • 탭도 문법 역할

데이터 입출력

input(출력문자): 입력

  • 출력문자 생략 가능
  • a = input("입력하세요")
    • 화면에 "입력하세요"가 출력되고, 키보드 입력값이 a에 저장

print(출력값1, 2, ..., sep = 분리문자, end = 종료문자): 출력

print(82, 24, sep = '-', end = ',')
# 결과: 82-24,

입력값 형변환

input은 입력값을 무조건 문자열로 저장

  • 변환할 데이터가 1개일 때
    • 변수 = int(input())
    • 변수 = float(input())
  • 2개 이상
    • a, b = map(int, input().split())

List

크기 동적, 배열과 달리 여러 자료형 섞어서 저장 가능

a = [값1, 값2, 값3, ...]
b = list([값1, 값2, 값3, ...])

a[0] = 1

Dictionary

연관된 값을 묶어서 저장하는 용도

  • key, value 구조
  • 딕셔너리명 = {키1:값1, 키2:값2, ...}
  • 딕셔너리명 = dict({키1:값1, 키2:값2, ...})
a = {}
a['이름'] = "이순신"

slice

문자열, 리스트 같은 순차형 객체에서 일부를 잘라 반환

  • 객체명[초기위치: 최종위치]
    • 초기위치 ~ 최종위치-1까지 가져옴
  • 객체명[초기위치: 최종위치: 증가값]
    • 초기위치 ~ 최종위치-1까지 증가값만큼 증가하며 가져옴
    • 증가값이 음수인 경우 초기위치에서 최종위치+1까지 감소하며 가져옴
  • 일부 인수 생략 가능
    • 객체명[:], 객체명[::]
      • 모든 요소 반환
    • 객체명[초기위치:]
      • 초기위치부터 마지막 위치까지
    • 객체명[:최종위치]
      • 0부터 최종위치-1까지
    • 객체명[::증가값]
a = ['a', 'b', 'c', 'd', 'e']

print(a[1:3])    # b c
print(a[0:5:2])  # a c e
print(a[3:])     # d e
print(a[:3])     # a b c
print(a[::3])    # a d

if문

for문

range

for 변수 in range(최종값):
	실행할 문장
for i in range(10):   # 0~9
	sum += i          # i를 sum에 누적 (결과 45)

for i in range(11, 20): # 11~19
	sum += i           # 결과 135

for i in range(-10, 20, 2): # -10부터 19까지 2씩 증가
	...
# list
a = [35, 55, 65, 84, 45]
hap = 0

for i in a:
	hap += i

avg = hap / len(a)
print(hap, avg)

while문

i, hap = 0, 0

while i < 5:
	i += 1
	hap += i

print(hap)

클래스

class Cls:
	x, y = 10, 20

	def chg(self):
		temp = self.x
		self.x = self.y
		self.y = temp

a = Cls()
print(a.x, a.y)  # 10 20
a.chg()
print(a.x, a.y)  # 20 10

클래스 없는 메소드의 사용

C언어의 사용자 정의 함수처럼 클래스 없이 메소드만 단독 사용 가능

def calc(x, y):
	x *= 3
	y /= 3
	print(x, y)
	return x

a, b = 3, 12
a = calc(a, b)  # 콘솔 출력: 9 4.0  / a == 9

print(a, b)     # 9 12

12) 언어 종류

절차적 프로그래밍 언어

  • C
    • 데니스 리치
    • 시스템 프로그래밍 언어
    • 포인터 제공(자료 주소 조작)
    • 고급/저급 프로그래밍 언어 특징 모두 갖춤
    • UNIX의 일부가 C로 구현됨
    • 컴파일러 방식 언어
    • 이식성 좋음
  • ALGOL
    • 수치 계산, 논리 연산을 위한 과학 기술 계산용 언어
    • PASCAL과 C의 모체
  • COBOL
    • 사무 처리용
    • 영어 문장 형식 → 배우기 쉬움
    • 4개의 DIVISION
  • FORTRAN
    • 과학 기술 계산용 언어
    • 공식, 수식 형태로 프로그래밍 가능

객체지향 프로그래밍 언어

  • JAVA
    • 분산 네트워크, 멀티 스레드
    • 운영체제, 하드웨어 독립적, 이식성 강함
    • 캡슐화, 재사용성
  • C++
    • C + 객체지향
    • 모든 문제를 객체로 모델링하여 표현
  • Smalltalk
    • 1세대 객체지향 프로그래밍 언어
    • 최초로 GUI 제공

스크립트 언어

  • JavaScript
    • 웹 페이지 동작 제어용 클라이언트 스크립트 언어
    • 클래스X, 변수 선언 X
  • VB 스크립트
    • 마이크로소프트, Active X
  • ASP(Active Server Page)
    • 서버측에서 동적으로 수행되는 페이지를 만들기 위한 언어
    • 마이크로소프트
    • window 계열에서만 수행 가능
  • JSP(Java Server Page)
    • 자바 기반 서버용 스크립트, 다양한 운영체제
  • PHP
    • 서버용 스크립트 언어, Linux, Unix, Windows
    • C, Java와 문법 유사
  • Python
    • 객체지향 지원 대화형 인터프리터 언어
    • 플랫폼 독립적, 문법 간단
  • 쉘 스크립트
    • Unix/Linux 계열의 Shell에서 사용되는 명령어 조합 스크립트 언어
    • 컴파일X → 실행속도 빠름
    • 확장자 .sh
    • Bash Shell, Bourne Shell, C Shell, Korn Shell
    • 제어문: if, case / for, while, until
  • Basic
    • 절차지향 대화형 인터프리터 언어
    • 초보자도 사용가능

선언형 프로그래밍 언어

  • HTML
  • LISP
    • 인공지능, 기본자료구조 == 연결리스트, 재귀 호출
  • PROLOG
    • 논리학 기반 고급 언어, 인공지능, 리스트 처리
  • XML
    • HTML 보완, 웹 문서 상호 교환, 새로운 태그 정의, 내용과 표현 독립
  • Haskell
    • 함수형 프로그래밍 언어
    • 사이드이펙트X
    • 간결 코드, 에러↓(정적 타이핑)

14) 라이브러리

자주 사용하는 함수 데이터 모음

  • 반복적인 코드 작성 피하기 위해, 필요할 때 호출
  • 표준 라이브러리: 언어에 포함
  • 외부 라이브러리: 설치해서 사용

C언어의 대표적인 표준 라이브러리

라이브러리를 헤더파일로 제공

예) #include <stdio.h> 처럼 선언 후 사용

  • stdio.h
    • 데이터 입출력
    • printf, scanf, fprintf, fscanf, fclose, fopen
  • math.h
    • 수학 함수, sqrt, pow, abs
  • string.h
    • 문자열, strlen, strcpy, strcmp
  • stdlib.h
    • 자료형 변환, 난수 발생, 메모리 할당
    • atoi, atof, srand, rand, malloc, free
  • time.h
    • 시간 처리, time, clock

15) 예외처리

  • 프로그램 종료 or 로그 남기기
  • C++, Ada, JAVA, JavaScript → 예외처리 기능 내장
  • 그 외 언어는 조건문으로 예외처리 루틴 작성
  • 원인: 하드웨어 문제, 운영체제 설정 실수, 라이브러리 손상, 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근

3. 응용 SW 기초 기술 활용

1) 운영체제

정의, 목적

컴퓨터 시스템 자원 관리, 사용자가 컴퓨터를 편리하게 사용할 환경 제공 프로그램의 모임

  • 사용자와 하드웨어 간 인터페이스로 동작하는 시스템 소프트웨어의 일종
  • 다른 응용프로그램의 환경 제공
  • 목적: 처리능력, 사용 가능도, 신뢰도 향상 / 반환 시간 단축
  • 운영체제 성능 평가 기준
    • 처리 능력: 일정 시간 내에 시스템이 처리하는 일의 양
    • 반환 시간: 작업 의뢰~처리 완료까지 기간
    • 사용 가능도: 즉시 사용 가능한 정도
    • 신뢰도: 정확히 해결

구성

제어 프로그램

컴퓨터 전체의 작동 상태 감시, 작업 순서 지정, 작업 데이터 관리

  • 감시 프로그램: 핵심, 자원 할당/시스템 전체의 작동상태 감시
  • 작업 관리 프로그램: 작업 순서, 방법 관리
  • 데이터 관리 프로그램: 데이터, 파일의 처리, 전송

처리 프로그램

제어 프로그램의 지시를 받아 문제 해결

  • 언어 번역 프로그램
    • 사용자의 원시 프로그램(고급 언어) → 목적 프로그램(기계어)
    • 컴파일러, 어셈블러, 인터프리터
  • 서비스 프로그램
    • 사용자의 효율적인 컴퓨터 사용
    • 분류/병합, 유틸리티 프로그램

기능

  • 프로세서(처리기), 기억장치(주/보조 기억장치), 입출력장치, 파일, 정보 등의 자원 관리
  • 자원의 스케줄링 기능
  • 사용자와 시스템 간 인터페이스 제공
  • 하드웨어, 네트워크 관리 제어
  • 데이터 관리, 데이터/자원의 공유 기능 제공
  • 시스템 오류 검사, 복구
  • 자원 보호 기능 제공
  • 입출력 보조 기능
  • 가상 계산기 기능

종류

Windows

  • 90년대 마이크로소프트
  • GUI
  • 선점형 멀티태스킹: 멀티태스킹 중 문제 발생 시 해당 프로그램 강제 종료, 자원 반환
  • PnP(Plug and Play, 자동 감지 기능): 새 하드웨어 환경 자동 구성
  • OLE(Object Linking and Embedding): 응용 프로그래밍 간 개체 연결, 삽입
  • 255자의 긴 파일명
  • Single-User 시스템

UNIX

  • AT&T 벨 연구소, MIT, General Electric 공동 개발
  • 시분할 시스템(time)을 위해 설계된 대화식 운영체제, 오픈 소스
  • C언어로 작성, 이식성 높음, 호환성도 높음
  • 크기가 작고 이해하기 쉬움
  • 다중 사용자, 다중 작업 지원
  • 네트워크 관리용 운영체제로 적합
  • 트리 구조 파일 시스템
  • 전문적인 프로그램 개발에 용이
  • 다양한 유틸 프로그램

UNIX 시스템 구성

  • 커널(Kernel)
    • 핵심. 부팅 시 주기억장치에 적재, 상주하며 실행
    • 하드웨어 보호, 프로그램-하드웨어 간 인터페이스 역할
    • 프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일/입출력 관리, 프로세스 간 통신, 데이터 전송 및 변환 기능 수행
  • 쉘(Shell)
    • 사용자의 명령어를 인식, 프로그램 호출, 명령 수행 → 명령어 해석기
    • 시스템과 사용자 간 인터페이스 담당
    • DOS의 COMMAND.COM
    • 주기억장치 상주 X, 파일 형태로 존재, 보조 기억장치에서 교체 가능
    • 파이프라인 지원, 입출력 재지정 가능
    • Bourne Shell, C Shell, Korn Shell 등이 존재
  • Utility Program
    • 일반 사용자가 작성한 응용 프로그램 처리
    • DOS의 외부 명령어
    • 에디터, 컴파일러, 인터프리터, 디버거

2) 파일 디스크립터

시스템(운영체제)이 필요로 하는 파일에 대한 정보를 가진 제어 블록
파일 제어 블록(FCB)

  • 파일마다 독립적으로 존재, 시스템에 따라 구조 다름
  • 보조기억장치에 저장되어 있다가 해당 파일이 open될 때 주 기억장치로 옮겨짐
  • 사용자가 직접 참조X, 파일 시스템이 관리

3) 기억장치 관리

배치 전략

새로 반입되는 프로그램, 데이터를 주 기억장치 어디에 위치시킬 것인지 결정하는 전략

  • 최초적합(First Fit): 들어갈 수 있는 빈 영역 중 첫 번째 분할 영역
  • 최적적합(Best Fit): 단편화를 가장 작게 남기는 분할 영역
  • 최악적합(worst fit): 가장 많이 남기는 분할 영역

페이징 기법

  • 가상기억장치의 프로그램과 주 기억장치의 영역을 동일한 크기로 나눈 후, 나눠진 프로그램(페이지)을 나눠진 주기억장치 영역(페이지 프레임)에 적재
  • 외부 단편화 X, 내부 단편화 O
  • 페이지 맵 테이블: 주소 변환용 페이지 위치 정보

세그먼테이션 기법

  • 가상기억장치의 프로그램을 논리적 단위로 나눈 후(세그먼트) 주 기억장치에 적재
  • 세그먼트는 고유한 이름, 크기를 가짐
  • 세그먼트 맵 테이블: 세그먼트 위치 정보
  • 내부 단편화 X, 외부 단편화 O

4) 페이지 교체 알고리즘

페이지 부재(Page Fault) 시 가상기억장치에서 필요한 페이지를 주 기억장치에 적재해야 하는데,
이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 교체할지 결정하는 기법

  • OPT(최적 교체): 앞으로 가장 오래 사용하지 않을 페이지 교체, 벨레이디 알고리즘, 페이지 부재 횟수 최소
  • FIFO
  • LRU(Least Recently Used): 최근에 가장 오랫동안 사용하지 않은 페이지, 각 페이지마다 계수기 or 스택
  • LFU(Frequently Used): 사용 빈도가 가장 적은 페이지
  • SCR(2차 기회 교체): FIFO 보완, 자주 사용되는 페이지의 교체 방지
  • NUR(Not Used Recently): LRU와 비슷하지만 시간적 오버헤드 감소, 참조비트/변형비트로 사용 여부 확인

페이지 크기

작을 경우

  • 페이지 단편화 감소, 한 페이지를 주기억장치로 이동하는 시간 ↓
  • 불필요한 내용이 적재될 확률↓ → 효율적 워킹셋
  • Locality에 더 일치 → 기억장치 효율 좋아짐
  • 페이지 맵 테이블의 크기가 커지고, 매핑 속도 ↓
  • 디스크 접근 횟수 많아져 입출력 시간 증가

클 경우

  • 맵 테이블 크기 ↓, 매핑 속도 ↑
  • 디스크 접근 횟수 ↓ → 입출력 효율 ↑
  • 페이지 단편화 증가, 한 페이지 이동 시간 ↑
  • 불필요한 내용까지도 적재 가능

Locality

프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조

  • 스래싱 방지용 워킹셋 이론의 기반
  • 시간 구역성, 공간 구역성

시간 구역성(Temporal Locality)

  • 일정 시간대에 집중적으로 액세스
  • 한 번 참조한 페이지는 곧 다시 참조될 확률↑
  • Loop, Stack, 부프로그램, Counting, 집계변수 등

공간 구역성(Spatial Locality)

  • 일정 위치 페이지 집중 액세스
  • 어느 한 페이지를 참조하면 그 근처 페이지 참조 확률↑
  • 배열 순회, 순차적 코드 실행

Working Set

프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합

  • Denning이 제안
  • 자주 참조되는 페이지를 주기억장치에 상주 → 페이지 부재·교체↓ → 효율↑
  • 시간 경과에 따라 계속 변경

스레싱(Thrashing)

프로세스 처리 시간 < 페이지 교체 소요 시간

  • 페이지 부재 과다 발생 → 전체 시스템 성능 저하
  • 다중 프로그래밍의 정도가 높아짐 → CPU 이용률 특정 지점까지↑ → 스래싱 → CPU 이용률 급락

방지 방법

  • 다중 프로그래밍 정도를 적정 수준으로
  • 페이지 부재 빈도 제어
  • 워킹셋 유지
  • 부족한 자원 증설, 일부 프로세스 중단
  • CPU 임계치 예상

5) 프로세스

실행중인 프로그램

  • 프로세서(처리기, CPU)가 처리하는 사용자/시스템 프로그램
  • 작업, 태스크라고도 함
  • PCB를 가진 프로그램
  • 실기억장치에 저장된 프로그램
  • 프로세서가 할당되는 실체, 디스패치 가능한 단위
  • 프로시저가 활동 중인 것
  • 비동기적 행위를 일으키는 주체
  • 지정된 결과를 얻기 위한 일련의 계통적 동작
  • 목적, 결과에 따라 발생되는 사건의 과정
  • 운영체제가 관리하는 실행단위

PCB (Process Control Block)

운영체제가 프로세스에 대한 중요 정보를 저장해놓는 곳

  • 각 프로세스 생성 시 고유 PCB 생성, 완료 시 제거

PCB에 저장된 정보

  • 프로세스의 현재 상태
  • 포인터(부모/자식 프로세스, 메모리 위치, 자원 포인터)
  • 식별자
  • 스케줄링/우선순위
  • CPU 레지스터 정보
  • 주기억장치 관리 정보
  • 입출력 상태
  • 계정

프로세스 상태 전이

프로세스 상태가 변하는 것, 상태전이도로 표현 → 제출, 접수, 준비, 실행, 대기

  • 제출
  • 접수: 제출된 작업이 스풀 공간 디스크에 저장
  • 준비
  • 실행
  • 대기(보류, 블록)
  • 종료

관련 용어

  • Dispatch: 준비상태 프로세스에 CPU 할당
  • Wake Up: 입출력 완료 → 대기->준비
  • Spooling: 입출력을 모아서 처리하기 위해 디스크에 저장
  • 교통량 제어기: 프로세스 상태 조사, 통보

스레드

프로세스 내에서의 작업 단위, 경량 프로세스(Lightweight Process)

  • 단일 스레드, 다중 스레드
  • 독립적인 스케줄링의 최소 단위
  • 동일 프로세스 환경에서 독립 다중 수행 가능

스레드 분류

  • 사용자 수준 스레드
    • 라이브러리로 스레드 운용
    • 빠른 속도, 구현 어려움
  • 커널 수준 스레드
    • 커널에서 스레드 운용
    • 구현 쉬우나 속도 느림

장점

  • 병행성 증진
  • HW, OS 성능/응용 처리율 향상
  • 응답 시간 단축
  • 프로세스 내 자원 공유 → 기억장소 낭비↓
  • 프로세스 간 통신 향상

6) 스케줄링

주요 스케줄링 알고리즘

FCFS(First Come First Service) = FIFO

  • 준비상태 큐 도착 순서대로 CPU 할당
  • 공평하지만, 짧은 작업이 긴 작업 기다려야 할 수 있음

SJF(Shortest Job First)

  • 실행시간 가장 짧은 프로세스에 CPU 할당
  • 평균 대기 시간 최소화

HRN(Highest Response-ratio Next)

  • SJF의 단점 보완 (긴 프로세스에 불리)
  • 대기시간, 서비스 시간을 이용 우선순위 계산
    • (대기시간 + 서비스 시간) / 서비스 시간

7) UNIX/LINUX

환경변수

명령어, 스크립트에서 사용 시 변수명 앞에 $ 붙임

set, env, printenv, setenv 중 하나 입력 시 모든 환경변수 표시

  • $DISPLAY: 현재 X 윈도 디스플레이 위치
  • $PS1: 쉘 프롬프트 정보
  • $HOME: 사용자 홈 디렉토리
  • $PWD: 현재 디렉토리
  • $LANG: 기본 언어
  • $TERM: 로그인 터미널 타입
  • $MAIL: 메일 보관 경로
  • $USER: 사용자 이름
  • $PATH: 실행 파일 경로

기본 명령어

명령어 기능

cat 파일 내용 표시
chdir change directory
chmod 파일의 보호 모드 설정
chown 파일 소유자 변경
cp 파일 복사
exec 새로운 프로세스 수행
find 파일 찾기
fork 새로운 프로세스 생성
fsck 파일 시스템 검사, 보수
getpid 프로세스 아이디 얻음
getppid 부모 프로세스 아이디 얻기
ls 파일 목록
mount/unmount 파일 시스템 마운팅/해제
rm 파일/디렉토리 삭제
wait fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 대기

8) 인터넷

IP 주소

Internet Protocol Address

인터넷 연결된 모든 컴퓨터 자원을 구분하기 위한 고유 주소

  • 8비트씩 4부분, 총 32비트
  • 네트워크 부분의 길이에 따라 A~E 클래스로 구분

서브네팅(Subnetting)

할당된 네트워크를 여러 작은 네트워크로 나누어 사용

  • 서브넷 마스크: IP 주소 중 네트워크/호스트 구분하는 비트
  • 이를 변경하여 네트워크 주소를 여러 개로 분할
  • 클래스마다 다르게 활용

IPv6

IPv4 주소 부족 문제 해결 위해 개발

  • 128비트 주소, 속도↑
  • 인증, 기밀성, 무결성 지원 → 보안↑
  • IPv4와 호환성 좋음
  • 주소 확장성, 융통성, 연동성 ↑
  • 실시간 흐름 제어 → 멀티미디어 기능 향상
  • 패킷 크기 확장 가능(제한 없음)

구성

16비트씩 8부분 → 총 128비트
각 부분 16진수, 콜론(:)으로 구분

주소 체계

  • 유니캐스트: 1:1 통신
  • 멀티캐스트: 1:다
  • 애니캐스트: 단일 송신자와 가장 가까운 단일 수신자(1:1)

9) OSI 참조 모델

ISO(국제 표준화 기구) 제안한 통신 규약

OSI 7계층

하위: 물리, 데이터 링크, 네트워크
상위: 전송, 세션, 표현, 응용

  1. 물리 계층
    • 장치 간 전기적, 물리적 규칙
  2. 데이터 링크 계층
    • 시스템 간 연결 설정, 유지, 종료
    • 송수신 속도 차이 조절(흐름 제어)
    • 프레임 동기화
    • 오류 제어
  3. 네트워크 계층
    • 네트워크 연결 관리, 데이터 교환/중계
    • 경로설정(routing), 트래픽 제어, 패킷 정보 전송
  4. 전송 계층
    • 종단 간(end-to-end) 투명 데이터 전송
    • 주소 설정, 다중화(분할, 재조립), 오류/흐름 제어
  5. 세션 계층
    • 송수신 측 대화 제어, 동기 제어
    • 데이터 교환 관리
  6. 표현 계층
    • 세션-응용 계층 간 데이터 가공
    • 코드 변환, 암호화, 압축, 구문 검색, 형식 변환
  7. 응용 계층
    • 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스 제공

10) 네트워크 관련 장비

  • 네트워크 인터페이스 카드(NIC)
    • 컴퓨터 - 네트워크 연결, 케이블로 신호 전송 가능한 형태 변환
  • 허브(Hub)
    • 가까운 거리 컴퓨터 연결
    • 신호 증폭(리피터 역할)
    • 더미허브, 스위치 허브
  • 리피터(Repeater)
    • 디지털 신호 증폭
  • 브리지(Bridge)
    • LAN과 LAN 연결
    • 네트워크 분산 구성 → 보안↑
  • 스위치(Switch)
    • LAN + LAN = 더 큰 LAN
  • 라우터(Router)
    • 브리지 + 데이터 전송 최적 경로
    • 서로 다른 LAN이나 WAN 연결
  • 게이트웨이(Gateway)
    • 전계층 프로토콜 구조 다른 네트워크 연결

11) 프로토콜

응용 계층 주요 프로토콜

  • FTP: 원격 파일 전송
  • SMTP: 전자우편 교환
  • TELNET: 원격 연결
  • SNMP: 네트워크 기기 정보를 네트워크 관리 시스템에 보낼 때의 표준 통신 규약
  • DNS: 도메인 이름 → IP 변환
  • HTTP: www의 HTML 전송 프로토콜

전송 계층

  • TCP: 양방향 연결, 스트림 위주, 패킷 단위, 헤더 20~100바이트
  • UDP: 비연결형, 헤더 단순, 흐름/순서 제어X, 신뢰성 < 속도
  • RTCP: RTP 전송 품질 제어, 세션 참여자들에게 제어 정보 전송

인터넷 계층

  • IP: 비연결형 데이터그램 방식, 신뢰성 보장X, 패킷의 주소 지정/경로 설정
  • ICMP: IP와 조합, 오류 처리, 경로 변경 등 제어 메시지 관리(헤더 8Byte)
  • IGMP: 멀티캐스트 그룹 유지
  • ARP: IP주소 → 물리주소(MAC) 변환
  • RARP: 물리주소(MAC) → IP주소 변환

네트워크 액세스 계층

  • Ethernet: CSMA/CD 방식 LAN
  • IEEE 802: LAN을 위한 표준 프로토콜
  • HDLC: 비트 위주의 데이터 링크 제어 프로토콜
  • X.25: 패킷 교환망을 통한 DTE-DCE 인터페이스
  • RS-232C: 공중전화망 통한 DTE-DCE 인터페이스

'📜 Certs > 정보처리기사' 카테고리의 다른 글

[정보처리기사] 정보 시스템 구축 관리 - 5과목 정리  (4) 2025.01.30
[정보처리기사] 데이터베이스 구축 - 3과목 정리  (3) 2025.01.28
[정보처리기사] 소프트웨어 개발 - 2과목 정리  (2) 2025.01.23
[정보처리기사] 소프트웨어 설계 - 1과목 정리  (3) 2025.01.22
'📜 Certs/정보처리기사' 카테고리의 다른 글
  • [정보처리기사] 정보 시스템 구축 관리 - 5과목 정리
  • [정보처리기사] 데이터베이스 구축 - 3과목 정리
  • [정보처리기사] 소프트웨어 개발 - 2과목 정리
  • [정보처리기사] 소프트웨어 설계 - 1과목 정리
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    쿼리
    스프링부트
    데이터베이스
    정보처리기사
    GCP
    springboot
    정처기
    백엔드
    DML
    Spring
    스프링
    http
    jsp
    ADsP
    SQL
    java
    백준
    java기초
    AWS
    자바
  • 최근 댓글

  • 최근 글

hjwjo
[정보처리기사] 프로그래밍 언어 활용 - 4과목 정리
상단으로

티스토리툴바