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