1. 서버 프로그램 구현
1) 배치 프로그램(Batch Program)
상호작용 없이 여러 작업을 일련/일괄적으로 처리
- 필수 요소
- 대용량 데이터 처리 가능
- 자동화: 사용자 개입X
- 견고성: 데이터 이상으로 중단 X
- 안정성/신뢰성: 오류 추적 가능
- 성능: 다른 프로그램 방해X, 지정된 시간 내 처리
2. 프로그래밍 언어 활용
1) C/C++
- 데이터 타입 크기, 기억 범위
- 문자
- 정수
- 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
- 실수
- 가비지 콜렉터
선언만 하고 사용하지 않은 메모리 공간 회수
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.20VV (V는 빈칸을 의미)
- -: 왼쪽부터 정렬
- 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";
printf("%c\n", a);
printf("%s\n", b);
printf("%s\n", c);
10) 포인터
- 포인터와 포인터 변수
포인터: 변수의 주소 → C언어에서 주소 제어 기능 제공
- 포인터 변수: 주소 저장 변수 (int *a) 간접연산자
- 변수 주소 알아내기 → a = &b (번지 연산자 &)
- 포인터 변수에 를 붙이면 가리키는 곳의 값을 말함 (c = a)
- 힙 영역에 접근하는 동적 변수
int a = 50;
int *b;
b = &a;
*b = *b + 20;
printf("%d %d", a, *b);
- 포인터와 배열
배열을 포인터 변수에 저장한 후, 포인터를 이용해 배열 요소에 접근할 수 있다
- 배열 위치를 나타내는 첨자를 생략하고 대표명만 지정하면, 배열의 첫번째 요소의 주소를 지정하는 것과 같다
- & 연산자를 사용하여 주소 지정
- 포인터형 배열 선언 가능
int a[5];
int i;
int *p;
for(i=0; i<5; i++) {
a[i] = i + 10;
}
p = a;
for(i=0; i<5; i++) {
printf("%d", *(p+i));
}
11) Python
- 기본 문법
- 자료형 선언, 세미콜론 X
- 변수에 연속 값 저장 가능 (x, y, z = 10, 20, 30)
- 코드블록은 콜론과 여백으로 구분
- 탭도 문법
- 데이터 입출력
- 출력문자 생략 가능
- 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['이름'] = "이순신"
- slice
문자열, 리스트 같은 순차형 객체에서 일부를 잘라 반환
- 객체명[초기위치: 최종위치]
- 객체명[초기위치: 최종위치: 증가값]
- 초기위치~ 최종위치-1까지 증가값만큼 증가하며 가져옴
- 증가값이 음수인 경우 초기위치에서 최종위치+1까지 증가값만큼 감소하며 가져옴
- 일부 인수 생략 가능
- 객체명[:], 객체명 [::]
- 객체명[초기위치:]
- 객체명[:최종위치]
- 객체명[::증가값]
a = ['a', 'b', 'c', 'd', 'e']
a[1:3] // b c
a[0:5:2] // a c e
a[3:] // d e
a[:3] // a b c
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
for 변수 in 리스트
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) // print: 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 스크립트
- 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 <studio.h>
처럼 선언 후 사용
- studio.h
- 데이터 입출력
- printf, scanf, fprintf, fscantf, fclose, fopen
- math.h
- string.h
- 문자열, strlen, strcpy, strcmp
- stdlib.h
- 자료형 변환, 난수 발생, 메모리 할당
- atoi, atof, srand, rand, malloc, free
- time.h
15) 예외처리
- 프로그램 종료 or 로그 남기기
- C++, Ada, JAVA, JavaScript → 예외처리 기능 내장
- 그 외 언어는 조건문으로 예외처리 루틴 작성
- 원인: 하드웨어 문제, 운영체제 설정 실수, 라이브러리 손상, 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근
3. 응용 SW 기초 기술 활용
1) 운영체제
- 정의, 목적
컴퓨터 시스템 자원 관리, 사용자가 컴퓨터를 편리하게 사용할 환경 제공 프로그램의 모임
- 사용자와 하드웨어 간 인터페이스로 동작하는 시스템 소프트웨어의 일종
- 다른 응용프로그램의 환경 제공
- 목적: 처리능력, 사용 가능도, 신뢰도 향상 / 반환 시간 단축
- 운영체제 성능 평가 기준
- 처리 능력: 일정 시간 내에 시스템이 처리하는 일의 양
- 반환 시간: 작업 의뢰~처리 완료까지 기간
- 사용 가능도: 즉시 사용 가능한 정도
- 신뢰도: 정확히 해결
- 구성
> 제어 프로그램
컴퓨터 전체의 작동 상태 감시, 작업 순서 지정, 작업 데이터 관리
- 감시 프로그램: 핵심, 자원 할당/시스템 전체의 작동상태 감시
- 작업 관리 프로그램: 작업 순서, 방법 관리
- 데이터 관리 프로그램: 데이터, 파일의 처리, 전송
> 처리 프로그램
제어 프로그램의 지시를 받아 문제 해결
- 언어 번역 프로그램
- 사용자의 원시 프로그램(고급 언어) → 목적 프로그램(기계어)
- 컴파일러, 어셈블러, 인터프리터
- 서비스 프로그램
- 사용자의 효율적인 컴퓨터 사용
- 분류/병합, 유틸리티 프로그램
- 기능
- 프로세서(처리기), 기억장치(주/보조 기억장치), 입출력장치, 파일, 정보 등의 자원 관리
- 자원의 스케줄링 기능
- 사용자와 시스템 간 인터페이스 제공
- 하드웨어, 네트워크 관리 제어
- 데이터 관리, 데이터/자원의 공유기능 제공
- 시스템 오류 검사, 복구
- 자원 보호 기능 제공
- 입출력 보조 기능
- 가상 계산기 기능
- 종류
> Windows
90s. 마이크로소프트
- 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, 파일 형태로 존재, 보조 기억장치에서 교체 가능
- 파이프라인 지원, 입출력 재지정 가능
- 공용 Shell(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): 최근에 가장 오랫동안 사용하지 않은 페이지 교체, 각 페이지마다 계수기(counter)/스택(stack)
- LFU(Frequently): 사용 빈도가 가장 적은 페이지
- SCR(2차 기회 교체): the oldest 주기억장치의 페이지 중 자주 사용되는 페이지의 교체 방지, FIFO 보완
- NUR(Not Used Recently): LRU와 비슷, LRU의 시간적인 오버헤드 줄이기, 참조비트/변형비트로 사용여부 확인
- 페이지 크기
> 작을 경우
- 페이지 단편화 감소, 한 페이지를 주기억장치로 이동하는 시간 ↓
- 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹셋
- Locality에 더 일치 → 기억장치 효율 좋아짐
- 페이지 맵 테이블의 크기가 커지고, 매핑속도 ↓
- 디스크 접근 횟수가 많아져서 전체적 입출력 시간 늘어남
> 클 경우
- 맵 테이블 크기 감소, 매핑 속도 증가
- 디스크 접근 횟수 감소 → 입출력 효율 증가
- 페이지 단편화 증가, 한 페이지를 주기억장치로 이동하는 시간 증가
- 프로세스 수행에 불필요한 내용까지도 주기억장치에 적재됨
- Locality
프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다
- 스래싱 방지용 워킹 셋 이론의 기반
- 시간 구역성, 공간 구역성으로 분류
> 시간 구역성(Temporal Locality)
- 일정시간 집중적 액세스 현상
- 한 번 참조한 페이지는 금방 또 참조할 가능성이 높음
- 기억장소: Loop, Stack, 부 프로그램, Counting, 집계에 사용되는 변수
> 공간 구역성(Spatial Locality)
- 일정 위치의 페이지에 집중적 엑세스
- 어느 한 페이지를 참조하면 그 근처 페이지 계속 참조 가능성 높음
- 기억장소: 배열 순회, 순차적 코드 실행, 근처에 선언/할당된 변수들, 같은 영역에 있는 변수
- Working Set
프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합
- Denning이 제안한 프로그램 움직임에 대한 모델, 프로그램의 Locality 특징 이용
- 자주 참조되는 워킹셋을 주기억장치에 상주 → 페이지 부재, 교체 현상 감소 → 기억장치 사용 안정
- 시간에 따라 변경됨
- 스레싱
프로세스 처리 시간 < 페이지 교체 소요 시간
- 페이지 부재가 자주 발생해서 나타나는 현상 → 전체 시스템 성능 저하
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU 이용율은 특정 시점까지 높아짐 → 스래싱 발생 → CPU 이용률 급격히 감소
방지 방법
- 다중 프로그래밍 정도를 적정 수준으로 유지
- 페이지 부재 빈도 조절하여 사용
- 워킹셋 유지
- 부족한 자원 증설, 일부 프로세스 중단
- CPU 임계치 예상하여 운영
5) 프로세스
실행중인 프로그램
프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램
작업, 태스크라고도 함
- PCB를 가진 프로그램
- 실 기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적, 결과에 따라 발생되는 사건의 과정
- 운영체제가 관리하는 실행단위
- PCB
프로세스 제어 블록
운영체제가 프로세스에 대한 중요 정보를 저장해놓는 곳
Task Control Block, Job Control Block
- 각 프로세스 생성 시 고유의 PCB가 생성되고, 완료시 제거됨
> PCB에 저장된 정보
- 프로세스의 현재 상태
- 포인터
- 부모/자식 프로세스의 포인터
- 프로세스 위치한 메모리 포인터
- 할당된 자원 포인터
- 식별자
- 스케줄링/프로세스의 우선순위
- CPU 레지스터 정보
- 주기억장치 관리 정보
- 입출력 상태
- 계정
- 프로세스 상태 전이
프로세스 상태가 변하는 것
상태전이도로 표시
=> 제출, 접수, 준비, 실행, 대기
- 제출
- 접수: 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장
- 준비
- 실행: 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행됨
- 대기: 보류, 블록 / 입출력이 필요하면 중단되고, 입출력 처리가 완료될 때까지 기다림
- 종료: 프로세스 할당 해제
> 관련 용어
- Dispatch: 준비 상태의 프로세스가 프로세서를 할당받아 실행상태로 전이되는 과정
- Wake Up: 입출력 작업 완료 → 프로세스가 대기에서 준비상태로
- Spooling: 입출력 한번에 하려고 디스크에 저장
- 교통량 제어기: 프로세스 상태에 대한 조사, 통보
- 스레드
프로세스 내에서의 작업 단위
시스템의 자원을 할당받아 실행하는 프로그램의 단위
- 단일 스레드, 다중 스레드
- 경량 프로세스라고도 함
- 스레드 기반 시스템 → 독립적인 스케줄링의 최소단위로서 프로세스의 역할 담당
- 동일 프로세스 환경에서 독립적인 다중 수행 가능
> 스레드의 분류
사용자 수준의 스레드
- 사용자가 만든 라이브러리로 스레드 운용
- 빠른 속도, 구현 어려움
커널 수준 스레드
- 운영체제 커널에 의해 스레드 운용
- 구현 쉽지만 속도 느림
> 장점
- 병행성 증진
- 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 클래스로 구성
- 서브네팅
할당된 네트워크를 다시 여러개의 작은 네트워크로 나누어 사용
- 서브넷 마스크: 4바이트의 IP 주소 중 네트워크, 호스트 주소를 구분하기 위한 비트
- 이를 변경하여 네트워크 주소를 여러개로 분할
- 각 클래스마다 다르게 사용됨
- IPv6
IPv4 주소 부족 문제 해결을 위해 개발
- 128비트의 주소, 속도 빠름
- 인증성, 기밀성, 데이터 무결성 지원 → 보안문제 해결
- IPv4와 호환성 뛰어남
- 주소의 확장성, 융통성, 연동성 ↑ / 실시간 흐름 제어로 향상된 멀티미디어 기능
- 패킷 크기 확장 가능 → 즉 크기 제한 없음
> 구성
16비트씩 8부분 → 총 128 비트
각 부분 16진수 표현, 콜론으로 구분
세 가지 주소 체계로 나누어짐
- 유니캐스트: 단일 송신자 - 단일 수신자 (1:1통신)
- 멀티캐스트: 단일 송신자 - 다중 수신자
- 애니캐스트: 단일 송신자와 가장 가까이 있는 단일 수신자 통신
9) OSI 참조 모델
ISO(국제 표준화 기구)에서 제안한 통신 규약
> OSI 7계층
하위계층: 물리, 데이터 링크, 네트워크
상위계층: 전송, 세션, 표현, 응용
- 물리 계층: 장치간 규칙
- 데이터 링크 계층
- 시스템간 연결 설정과 유지 및 종료
- 송수신 속도 차이를 위한 흐름 제어
- 프레임의 시작, 끝 구분을 위한 프레임 동기화 기능
- 오류제어
- 네트워크 계층, 망 계층
- 네트워크 연결 관리, 데이터 교환/중계
- 네트워크 연결 설정, 유지, 해제
- 경로설정(routing), 데이터 교환 및 종계, 트래픽 제어, 패킷 정보 전송
- 전송 계층
- 종단 시스템(end-to-end)간 투명한 데이터 전송
- 주소 설정, 다중화(분할, 재조립), 오류 제어, 흐름 제어
- 세션 계층
- 송수신 측 간의 관련성 유지, 대화 제어
- 대화 구성 및 동기 제어, 데이터 교환 관리
- 표현 계층
- 세션-응용 계층간 데이터 가공
- 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식 변환, 문맥 관리
- 응용 계층
- 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스 제공
10) 네트워크 관련 장비
- 네트워크 인터페이스 카드
- 컴퓨터-컴퓨터, 컴퓨터-네트워크 연결 장치 / 정보 전송 시 케이블을 통해 전달될 수 있도록 형태 변경
- 허브: 가까운 거리 컴퓨터 연결, 신호 증폭(리피터) 역할도 포함 / 더미허브, 스위치 허브
- 리피터
- 브리지: LAN과 LAN을 연결, LAN 안에서 컴퓨터 그룹(세그먼트) 연결 / 네트워크 분산 구성 → 보안↑
- 스위치: LAN + LAN = 더 큰 LAN
- 라우터: 브리지 + 데이터 전송 최적 경로 선택 기능 / 서로다른 LAN이나 WAN과의 연결도 수행
- 게이트웨이: 전계층 프로토콜 구조가 다른 네트워크의 연결
11) 프로토콜
- 응용 계층의 주요 프로토콜
- FTP: 원격 파일 전송 프로토콜
- SMTP: 전자우편 교환
- TELNET: 원격연결
- SNMP: 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보낼 때의 표준 통신 규약
- DNS
- HTTP: www의 html 송수신 프로토콜
- 전송 계층
- TCP: 양방향 연결, 스트림 위주 전달(패킷 단위), 헤더(20~100Byte)
- UDP: 비연결형 서비스, 헤더 단순, 오버헤드 적고 흐름/순서 제어 X, 실시간 전송에 유지, 신뢰 < 속도
- RTCP: RTP 전송 품질 제어 프로토콜, 세션에 참여한 각 참여자들에게 제어정보 전송
- 인터넷 계층
- IP: 전송할 데이터에 주소 지정 → 경로 설정, 비연결형 데이터그램 방식 사용 → 신뢰성 보장X
- ICMP: IP와 조합, 오류 처리, 전송 경로 변경 등의 제어 메시지 관리, 헤더 8Byte
- IGMP: 멀티캐스트 그룹 유지
- ARP: 호스트 IP를 연결된 장치의 물리적 주소(MAC Address)로 바꿈
- RARP: ARP의 반대. 물리적 주소를 IP 주소로
- 네트워크 액세스 계층
- Ethernet: CSMA/CD 방식의 LAN
- IEEE 802: LAN을 위한 표준 프로토콜
- HDLC: 비트 위주의 데이터 링크 제어 프로토콜
- X.25: 패킷 교환망을 통한 DTE와 DCE간 인터페이스 제공 프로토콜
- RS-232C: 공중전화 교환망을 통한 DTE와 DCE간 인터페이스 제공