◆ 4과목 프로그래밍 언어 활용
∎ 1장 서버 프로그램 구현
•배치 프로그램(Batch Program)
: 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미한다
- 배치 프로그램이 자동으로 수행되는 주기에 따라 정기 배치, 이벤트성 배치, On-Demand 배치로 구분된다
정기 배치 | 일, 주, 월과 같이 정해진 기간에 정기적으로 수행된다 |
이벤트성 배치 | 특정 조건을 설정해두고 조건이 충족될 때만 수행된다 |
On-Demand 배치 | 사용자 요청 시 수행된다 |
- 배치 프로그램이 갖추어야 하는 필수 요소는 다음과 같다
대용량 데이터 | 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 한다 |
자동화 | 심각한 오류가 바생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 한다 |
견고성 | 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 한다 |
안정성/신뢰성 | 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 한다 |
성능 | 다른 응용 프로그램의 수행을 방해하지 않아야 하고, 지정된 시간 내에 처리가 완료되어야 한다 |
- 배치 스케줄러(Batch Scheduler)
: 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구이다
ㄱ. 특정 업무(Job)를 원하는 시간에 처리할 수 있도록 지원한다는 특성 때문에 잡 스케줄러(Job Scheduler)라고도
불린다
ㄴ. 주로 사용되는 배치 스케줄러에는 스프링 배치, Quartz 등이 있다
- 스프링 배치(Spring Batch)
ㄱ. Spring Source 사와 Accenture 사가 2007년 공동 개발한 오픈 소스 프레임워크이다
ㄴ. 스프링 프레임워크의 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용할 수 있다
ㄷ. 데이터베이스나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공한다
ㄹ. 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공한다
ㅁ. 스프링 배치의 주요 구성 요소와 역할
Job | 수행할 작업 정의 |
Job Launcher | 실행을 위한 인터페이스 |
Step | Job 처리를 위한 제어 정보 |
Job Repository | Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장 |
- Quartz
ㄱ. 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스
라이브러리이다
ㄴ. 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공한다
ㄷ. Quartz의 주요 구성 요소와 역할
Scheduler | 실행 환경 관리 |
Job | 수행할 작업 정의 |
JobDetail | Job의 상세 정보 |
Trigger | Job의 실행 스케줄 정의 |
∎ 2장 프로그래밍 언어 활용
•데이터 타입(Data Type)
: 변수(Variable)에 저장될 데이터의 형식을 나타내는 것으로, 변수에 값을 저장하기 전에 문자형, 정수형, 실수형 등
어떤 형식의 값을 저장할지 데이터 타입을 지정하여 변수를 선언해야 한다
유형 | 기능 | 예 |
정수 타입 (Integer) |
정수, 즉 소수점이 없는 숫자를 저장 | 1, -1, 10, -100 |
부동 소수점 타입 (Floating Point) |
소수점 이하가 있는 실수를 저장 | 0.123X10^2, -1.6X2^3 |
문자 타입 (Character) |
- 한 문자를 저장 - 작은 따옴표(' ') 안에 표시한다 |
'A', 'a', '1', '*' |
문자열 타입 (Character String) |
- 문자열을 저장 - 큰 따옴표(" ") 안에 표시한다 |
"Hello", "1+2=3" |
불린 타입 (Boolean) |
- 조건의 참(True), 거짓(False) 여부를 판단하여 저장 - 기본값은 거짓(False) |
true, false |
배열 타입 (Array) |
- 같은 타입의 데이터 집합을 만들어 저장 - 데이터는 중괄호({}) 안에 콤마(,)로 구분하여 값들을 나열한다 |
[1, 2, 3, 4, 5} |
1. C/C++의 데이터 타입 크기 및 기억 범위
종류 | 데이터 타입 | 크기 | 기억 범위 |
문자 | char | 1Byte | -128 ~ 127 |
부호없는 문자형 | unsigned char | 1Byte | 0 ~ 255 |
정수 | short | 2Byte | -32,768 ~ 32,767 |
int | 4Byte | -2,147,483,648 ~ 2,147,483,647 | |
long | 4Byte | -2,147,483,648 ~ 2,147,483,647 | |
long long | 8Byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
부호없는 정수형 | unsigned short | 2Byte | 0 ~ 65,535 |
unsigned int | 4Byte | 0 ~ 4,294,967,295 | |
unsigned long | 4Byte | 0 ~ 4,294,967,295 | |
실수 | float | 4Byte | 1.2X10^-38 ~ 3.4X10^38 |
double | 8Byte | 2.2X10^-308 ~ 1.8X10^308 | |
long double | 8Byte | 2.2X10^-308 ~ 1.8X10^308 |
+ C언어의 구조체
: 배열이 자료의 형과 크기가 도일한 변수의 모임이라면 구조체는 자료의 종류가 다른 변수의 모임이라고 할 수
있습니다
- 구조체를 정의한다는 것은 int나 char 같은 자료형을 하나 만드는 것을 의미합니다
- 구조체는 'structure(구조)'의 약어인 'struct'를 사용하여 정의합니다
struct sawon { char name[10]; char position[10]; int pay; } |
2. JAVA의 데이터 타입 크기 및 기억 범위
종류 | 데이터 타입 | 크기 | 기억 범위 |
문자 | char | 2Byte | 0 ~ 65,535 |
정수 | byte | 1Byte | -128 ~ 127 |
short | 2Byte | -32,768 ~ 32,767 | |
int | 4Byte | -2,147,483,648 ~ 2,147,438,647 | |
long | 8Byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수 | float | 4Byte | 1.4X10^-45 ~ 3.4X10^38 |
double | 8Byte | 4.9X10^-324 ~ 1.8X10^308 | |
논리 | boolean | 1Byte | true 또는 false |
3. Python의 데이터 타입 크기 및 기억 범위
종류 | 데이터 타입 | 크기 | 기억 범위 |
문자 | str | 무제한 | 무제한 |
정수 | int | 무제한 | 무제한 |
실수 | float | 8Byte | 4.9X10^-324 ~ 1.8X10^308 |
complex | 16Byte | 4.9X10^-324 ~ 1.8X10^308 |
•변수(Variable)
: 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간으로, 변할 수 있는 값을 의미한다
- 저장하는 값에 따라 정수형, 실수형, 문자형, 포인터형 등으로 구분한다
1. 변수명 작성 규칙
- 영문자, 숫자, _(under bar)를 사용할 수 있다
- 첫 글자는 영문자나 _(under bar)로 시작해야 하며, 숫자는 올 수 없다
- 글자 수에 제한이 없다
- 공백이나 *, +, -, / 등의 특수문자를 사용할 수 없다
- 대, 소문자를 구분한다
- 예약어를 변수명으로 사용할 수 없다
- 변수 선언 시 문장 끝에 반드시 세미콜론(;)을 붙여야 한다
- 변수 선언 시 변수명에 데이터 타입을 명시하는 것을 헝가리안 표기법(Hungarian Notation)이라고 한다
+ 예약어
: 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어로, 변수 이름이나 다른 목적으로 사용할 수 없습니다
제어문 | 반복 | do, for, while |
선택 | case, default, else, if, switch | |
분기 | break, continue, goto, return | |
자료형 | char, double, enum, float, int, long, short, signed, struct, typedef, union, unsigned, void | |
기억 클래스 | auto, extern, register, static | |
기타 | const, sizeof, vloatile |
2. 기억 클래스
: 변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데, 할당되는 기억영역에 따라 사용
범위에 제한이 있다 이러한 기억영역을 결정하는 직업을 기억 클래스(Storage Class)라 한다
종류 | 기억영역 | 예약어 | 생존기간 | 사용 범위 |
자동 변수 | 메모리(스택) | auto | 일시적 | 지역적 |
레지스터 변수 | 레지스터 | register | ||
정적 변수(내부) | 메모리(데이터) | static | 영구적 | |
정적 변수(외부) | 전역적 | |||
외부 변수 | extern |
- 자동 변수(Automatic Variable)
: 함수나 코드의 범위를 한정하는 블록 내에서 선언되는 변수이다
ㄱ. 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸된다
ㄴ. 초기화하지 않으면 쓰레기값(Garbage Value)이 저장된다
- 외부 변수(External Variable)
: 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조(reference)하기 위한 변수이다
ㄱ. 외부 변수는 함수 밖에서 선언한다
ㄴ. 함수가 종료된 뒤에도 값이 소멸되지 않는다
ㄷ. 초기화하지 않으면 자동으로 0으로 초기화된다
ㄹ. 다른 파일에서 선언된 변수를 참조할 경우 초기화 할 수 없다
- 정적 변수(Static Variable)
: 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 정적 변수가 있다
ㄱ. 내부 정적 변수는 선언한 함수나 블록 내에서만 사용할 수 있고, 외부 정적 변수는 모든 함수에서 사용할 수 있다
ㄴ. 두 변수 모두 함수나 블록이 종료된 뒤에도 값이 소멸되지 않는다
ㄷ. 초기화는 변수 선언 시 한 번만 할 수 있으며, 초기화를 생략하면 자동으로 0이 초기화 된다
- 레지스터 변수(Register Variable)
: 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수이다
ㄱ. 자주 사용되는 변수를 레지스터에 저장하여 처리 속도를 높이기 위해 사용한다
ㄴ. 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸된다
ㄷ. 레지스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 경우 자동 변수로 취급되어 메모리에
할당된다
ㄹ. CPU에 저장되어 메모리 주소를 가질 수 없기 때문에 변수의 주소를 구하는 주소 연산자(&)를 사용할 수 없다
+ 가비지 콜렉터(Garbage Collector)
: 변수를 선언만 하고 사용하지 않으면 이 변수들이 점유한 메모리 공간은 다른 프로그램들이 사용할 수 없게 됩니다
이렇게 선언만 하고 사용하지 않는 변수들이 점유한 메모리 공간을 강제로 해제하여 다른 프로그램들이 사용할 수
있도록 하는 것을 가비지 콜렉션이라고 하며, 이 기능을 수행하는 모듈을 가비지 콜렉터라고 합니다
3. 변수의 선언
자료형 변수명 = 값; | - 자료형 : 변수에 저장될 자료의 형식을 지정한다 - 변수명 : 사용자가 원하는 이름을 임의로 지정한다 단 변수명 작성 규칙에 맞게 지정해야 한다 - 값 : 변수를 선언하면서 초기화할 값을 지정한다 단 값은 지정하지 않아도 된다 |
•연산자
1. 산술 연산자
: 가(+), 감(-), 승(*), 제(/) 등의 산술 계산에 사용되는 연산자를 말한다
- 일반 산술식과 달리 한 변수의 값을 증가하거나 감소시키는 증감 연산자가 있다
++ | 증가 연산자 | - 전치 : 변수 앞에 증감 연산자가 오는 형태로 먼저 변수의 값을 증감시킨 후 변수를 연산에 사용한다(++a, --a) - 후치 : 변수 뒤에 증감 연산자가 오는 형태로 먼저 변수를 연산에 사용한 후 변수의 값을 증감시킨다(a++, a--) |
-- | 감소 연산자 |
2. 관계 연산자
: 두 수의 관계를 비교하여 참(True) 또는 거짓(False)을 결과로 얻는 연산자이다
- 거짓은 0, 참은 1로 사용되지만 0외의 모든 숫자도 참으로 간주된다
== | 같다 | > | 크다 | < | 작다 |
!= | 같지 않다 | >= | 크거나 같다 | <= | 작거나 같다 |
3. 비트 연산자
: 비트별(0, 1)로 연산하여 결과를 얻는 연산자이다
& | and | 모든 비트가 1일 때만 1 |
^ | xor | 몯느 비트가 같으면 0, 하나라도 다르면 1 |
| | or | 모든 비트 중 한 비트라도 1이면 1 |
~ | not | 각 비트의 부정, 0이면 1, 1이면 0 |
<< | 왼쪽 시프트 | 비트를 왼쪽으로 이동 |
>> | 오른쪽 시프트 | 비트를 오른쪽으로 이동 |
- 패딩 비트
: Shift에서 자리를 이동한 후 생기는 왼쪽이나 오른쪽 끝의 빈 자리에 채워지는 비트를 말합니다 C언어와 JAVA는
모두 부호화 2의 보수법을 사용하기 때문에 부호화 2의 보수법의 음수에 대한 패딩 비트만 알아두면 됩니다
ㄱ. 양수 : Shift Left, Shift Right 모두 0이 채워집니다
ㄴ. 음수 : Shift Left엔 빈 자리에 0이 채워지고 Shift Right엔 빈 자리에 1이 채워집니다
4. 논리 연산자
: 두 개의 논리 값을 연산하여 참(True) 또는 거짓(False)을 결과로 얻는 연산자이다
- 관계 연산자와 마찬가지로 거짓은 0, 참은 1이다
! | not | 부정 |
&& | and | 모두 참이면 참 |
|| | or | 하나라도 참이면 참 |
5. 대입 연산자
: 연산 후 결과를 대입하는 연산식을 간략하게 입력할 수 있도록 대입 연산자를 제공한다
- 산술, 관계, 비트, 논리 연산자에 모두 적용할 수 있다
+= | a += 1 | a = a + 1 |
-= | a -= 1 | a = a - 1 |
*= | a *= 1 | a = a * 1 |
/= | a /= 1 | a = a / 1 |
%= | a %= 1 | a = a % 1 |
<<= | a <<= 1 | a = a << 1 |
>>= | a >>= 1 | a = a >> 1 |
6. 조건 연산자
: 조건에 따라 서로 다른 수식을 수행한다
ex) 조건 ? 수식1 : 수식2; '조건'의 수식이 참이면 '수식1'을, 거짓이며면 '수식2'를 실행한다 |
7. 기타 연산자
sizeof | 자료형의 크기를 표시한다 |
.(콤마) | - 콤마로 구분하여 한 줄에 두 개 이상의 수식을 작성하거나 변수를 정의한다 - 왼쪽에서 오른쪽으로 순서대로 수행되며, 순서 연산자라 부르기도 한다 |
(자료형) | - 사용자가 자료형을 다른 자료형으로 변환할 때 사용하는 것으로, cast(캐스트) 연산자라고 부른다 - 변환할 자료형을 괄호 안에 넣어서 변환할 값이나 변수명 앞에 놓는다 |
8. 연산자 우선순위
- 한 개의 수식에 여러 개의 연산자가 사용되면 기본적으로 아래 표의 순서대로 처리된다
- 아래 표의 한 줄에 가로로 나열된 연산자는 우선순위가 같기 때문에 결합규칙에 따라 ←는 오른쪽에 있는
연산자부터, →는 왼쪽에 있는 연산자부터 차례로 계산된다
대분류 | 중분류 | 연산자 | 결합규칙 | 우선순위 |
단항 연산자 | 단항 연산자 | ! ~ ++ -- sizeof | ← | 높음 |
이항 연산자 | 산술 연산자 | * / % | → | ↑ |
+ - | ||||
시프트 연산자 | << >> | |||
관계 연산자 | < <= >= > | |||
== != | ||||
비트 연산자 | & ^ | | |||
논리 연산자 | && || | |||
삼항 연산자 | 조건 연산자 | ? : | → | |
대입 연산자 | 대입 연산자 | = += -= *= /= %= <<= >>= 등 | ← | ↓ |
순서 연산자 | 순서 연산자 | , | → | 낮음 |
•데이터 입·출력
1. scanf() 함수
- 형식
scanf(서식 문자열, 변수의 주소) | - 서식 문자열 : 입력받을 데이터의 자료형을 지정한다 - 변수의 주소 : 데이터를 입력받을 변수를 적는다 변수의 주소로 입력 받아야 하기 때문에 변수에 주소연산자 &를 붙인다 |
- 특징
ㄱ. 입력받을 데이터의 자료형, 자릿수 등을 지정할 수 있다
ㄴ. 한 번에 여러 개의 데이터를 입력 받을 수 있다
ㄷ. 서식 문자열과 변수 자료형은 일치해야 한다
- 서식 문자열
%d | 정수형 10진수를 입·출력하기 위해 지정한다 | %f | 소수점을 포함하는 실수를 입·출력하기 위해 지정한다 |
%u | 부호없는 정수형 10진수를 입·출력하기 위해 지정한다 | %e | 지수형 실수를 입·출력하기 위해 지정한다 |
%o | 정수형 8진수를 입·출력하기 위해 지정한다 | %ld | long형 10진수를 입·출력하기 위해 지정한다 |
%x | 정수형 16진수를 입·출력하기 위해 지정한다 | %lo | long형 8진수를 입·출력하기 위해 지정한다 |
%c | 문자를 입·출력하기 위해 지정한다 | %lx | long형 16진수를 입·출력하기 위해 지정한다 |
%s | 문자열을 입·출력하기 위해 지정한다 | %p | 주소를 16진수로 입·출력하기 위해 지정한다 |
2. printf() 함수
- 형식
printf(서식 문자열, 변수) | - 서식 문자열 : 변수의 자료형에 맞는 서식 문자열을 입력한다 - 변수 : 서식 문자열의 순서에 맞게 출력할 변수를 적는다 scanf()와 달리 주소 연산자 &를 붙이지 않는다 |
- 주요 제어문자
\n | new line | 커서를 다음 줄 앞으로 이동한다 |
\b | backspace | 커서를 왼쪽으로 한 칸 이동한다 |
\t | tab | 커서를 일정 간격 띄운다 |
\r | carriage return | 커서를 현재 줄의 처음으로 이동한다 |
\0 | null | 널 문자를 출력한다 |
\' | single quote | 작은 따옴표를 출력한다 |
\" | double quote | 큰 따옴표를 출력한다 |
\a | alear | 스피커로 벨 소리를 출력한다 |
\\ | backslash | 역 슬래시를 출력한다 |
\f | form feed | 한 페이지를 넘긴다 |
3. 기타 표준 입·출력 함수
입력 | getchar() | 키보드로 한 문자를 입력받아 변수에 저장하는 함수 |
gets() | 키보드로 문자열을 입력받아 변수에 저장하는 함수로, Enter를 누르기 전까지를 하나의 문자열로 인식하여 저장함 | |
출력 | putchar() | 인수로 주어진 한 문자를 화면에 출력하는 함수 |
puts() | 인수로 주어진 문자열을 화면에 출력한 후 커서를 자동으로 다음 줄 앞으로 이동하는 함수 |
+ JAVA에서의 표준 출력
- System.out.print(), println(), printf() 등을 사용하여 출력한다
- 문자열을 출력할 때는 큰따옴표로 묶어줘야 한다
- 문자열 또는 문자열 변수를 연속으로 출력할 때는 +를 이용한다
- '숫자+숫자'는 두 숫자를 합한 값을 출력하지만, '문자열+숫자' 또는 '숫자+문자열'과 같은 경우에는 모두 문자열로
인식한다
- '문자열+(숫자 + 숫자)'과 같이 괄호가 있는 경우에도 괄호 안에서만 사칙연산이 수행되고 결국은 문자열로
인식한다
•제어문
1. if문
- 형식1 : 조건이 참일 때만 실행한다
if(조건) { 실행할 문장; } |
- 조건이 참일 때 실행할 문장이 하나인 경우 중괄호({}) 없이 사용해도 된다 |
- 형식2 : 조건이 참일 때와 거짓일 때 실행할 문장이 다르다
if(조건) { 실행할 문장1; } else { 실행할 문장2; } |
- 형식3 : 조건이 여러 개 일 때 사용하는 다중 if문
if(조건1) { 실행할 문장1; } else if(조건2) { 실행할 문장2; } else { 실행할 문장3; } |
2. switch문
: 조건에 따라 분기할 곳이 여러 곳인 경우 간단하게 처리할 수 있는 제어문이다
- 형식
swich(수식) { case 레이블1: 실행할 문장1; break; case 레이블2: 실행할 문장2; break; default: 실행할 문장3; } |
- '수식'은 '레이블1' ~ '레이블n'의 값 중 하나를 도출하는 변수나 수식을 입력한다 - '레이블n'은 '수식'의 결과가 될 만한 값 중 하나를 입력한다 - 'default:'는 '수식'의 결과가 '레이블n'에 해당하지 않는 경우 찾아오는 곳이다 - case문의 레이블에는 한 개의 상수만 지정할 수 있으며, int, char, enum형의 상수만 가능하다 - case문의 레이블에는 변수를 지정할 수 없다 - break문은 생략이 가능하지만 생략되면 수식과 레이블이 일치할 때 실행할 문장부터 break문 또는 switch문이 종료될 때까지 모든 문장이 실행된다 |
3. goto문
: 프로그램 실행 중 현재 위치에서 원하는 다른 문장으로 건너뛰어 수행을 계속하기 위해 사용하는 제어문이다
- 형식
goto 레이블; 레이블: 실행할 문장 |
- goto문은 원하는 문장으로 쉽게 이동할 수 있지만 많이 사용하면 프로그램의 이해와 유지 보수가 어려워져 거의 사용하지 않는다 |
•반복문
1. for문
- 형식
for(식1; 식2; 식3) { 실행할 문장; } |
- for문은 초기값을 정한 다음 최종값에 대한 조건이 참이면 실행할 문장을 실행한 후 초기값을 증가값만큼 증가시키면서 반복한다 - 초기값, 최종값, 증가값 중 하나 이상을 생략할 수 있고, 각각의 요소에 여러 개의 수식을 지정할 수도 있다 - for( ; ; )와 같이 수식을 모두 생략하면 무한 반복한다 - 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않는다 - 문자도 for문을 수행할 수 있다 |
2. while문
- 형식
while(조건) { 실행할 문장; } |
- while문은 조건이 참인 동안 실행할 문장을 반복 수행하다가 조건이 거짓이면 while문을 끝낸 후 다음 코드를 실행한다 - 조건이 처음부터 거짓이면 한 번도 수행하지 않는다 |
3. do ~ while문
- 형식
do { 실행할 문장; } while(조건); |
- do~while문은 조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 벗어나는 while문과 같은 동작을 하는데, 다른 점은 실행할 문장을 무조건 한 번 실행한 다음 조건을 판단하여 탈출 여부를 결정한다는 것이다 |
4. break, continue
- break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어난다
- continue : 반복문에서만 사용되며, continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다
•배열과 문자열
: 배열은 동일한 데이터 유형을 여러 개 사용해야 할 경우 이를 손쉽게 처리하기 위해 여러 개의 변수들을 조합해서
하나의 이름으로 정의해 사용하는 것을 말한다
- 하나의 이름으로 여러 기억장소를 가리키기 때문에 배열에 개별적인 요소들의 위치는 첨자를 이용하여 지정한다
- 변수명 뒤에 대괄호 []를 붙이고 그 안에 사용할 개수를 지정한다
- C언어에서 배열의 위치는 0부터 시작된다
- 배열은 행 우선으로 데이터가 기억장소에 할당된다
- C언어에서 배열 위치를 나타내는 첨자 없이 배열 이름을 사용하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다
1. 1차원 배열
- 형식
자료형 변수명[개수]; | - 자료형 : 배열에 저장할 자료의 형을 지정한다 - 변수명 : 사용할 배열의 이름으로 사용자가 임의로 지정한다 - 개수 : 배열의 크기를 지정하는 것으로 생략할 수 있다 |
2. 2차원 배열
- 형식
자료형 변수명[행개수][열개수]; | - 자료형 : 배열에 저장할 자료의 형을 지정한다 - 변수명 : 사용할 배열의 이름으로 사용자가 임의로 지정한다 - 행개수 : 배열의 행 크기를 지정한다 - 열개수 : 배열의 열 크기를 지정한다 |
3. 배열의 초기화
- 배열 선언 시 초기값을 지정할 수 있다
- 배열을 선언할 때 배열의 크기를 생략하는 경우에는 반드시 초기값을 지정해야 초기값을 지정한 개수 만큼의 배열이
선언된다
- 배열의 개수보다 적은 수로 배열을 초기화하면 입력된 값만큼 지정된 숫자가 입력되고, 나머지 요소에는 0이
입력된다
4. 배열 형태의 문자열 변수
- 형식
char 배열이름[크기] = "문자열" | - C언어에서는 큰따옴표(" ")로 묶인 글자는 글자 수에 관계없이 문자열로 처리된다 - C언어에는 문자열을 저장하는 자료형이 없기 때문에 배열, 또는 포인터를 이용하여 처리한다 - 배열에 문자열을 저장하면 문자열의 끝을 알리기 위한 널 문자('\0')가 문자열 끝에 자동으로 삽입된다 - 배열에 문자열을 저장할 때는 배열 선언 시 초기값으로 지정해야 하며, 이미 선언된 배열에는 문자열을 저장할 수 없다 - 문자열 끝에 자동으로 널 문자('\0')가 삽입되므로, 널 문자까지 고려하여 배열 크기를 지정해야 한다 |
•포인터
: 변수의 주소를 말하며, C언어에서는 주소를 제어할 수 있는 기능을 제공한다
- C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라 한다
- 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *를 붙인다
- 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수 앞에 번지 연산자 &를 붙인다
- 실행문에서 포인터 변수에 간접 연산자 *를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 말한다
- 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수이다
- 포인터 변수의 용도
ㄱ. 연결된 자료 구조를 구성하기 위해 사용한다
ㄴ. 동적으로 할당된 자료 구조를 지정하기 위해 사용한다
ㄷ. 배열을 인수로 전달하기 위해 사용한다
ㄹ. 문자열을 표현하기 위해 사용한다
ㅁ. 문자열을 표현하기 위해 사용한다
ㅂ. 커다란 배열에서 요소를 효율적으로 저장하기 위해 사용한다
ㅅ. 메모리에 직접 접근하기 위해 사용한다
1. 포인터와 배열
: 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있다
- 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다
- 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용한다
- 배열의 요소가 포인터인 포인터형 배열을 선언할 수 있다
•Python의 기초
1. 기본 문법
- 변수의 자료형에 대한 선언이 없다
- 문장의 끝을 의미하는 세미콜론(;)을 사용할 필요가 없다
- 변수에 연속하여 값을 저장하는 것이 가능하다
- if나 for와 같이 코드 블록을 포함하는 명령문을 작성할 때 코드 블록은 콜론(:)과 여백으로 구분한다
- 여백은 일반적으로 4칸 또는 한 개의 탭만큼 띄워야하며, 같은 수준의 코드들은 반드시 동일한 여백을 가져야 한다
2. 데이터 입·출력 함수
- input() 함수
변수 = input(출력문자) 변수1, 변수2, ... = input(출력문자).split(분리문자) |
ㄱ. Python의 표준 입력 함수로, 키보드로 입력받아 변수에 저장하는 함수이다
ㄴ. 입력되는 값은 문자열로 취급되어 저장된다
ㄷ. '출력문자'는 생략이 가능하며, '변수'는 사용자가 임의로 지정할 수 있다
ㄹ. 화면에 '출력문자'가 표시되고 입력받은 값을 '분리문자'로 구분하여 각각 변수1, 변수2, ...에 저장한다
ㅁ. '분리문자'를 생략하면 공백으로 값들을 구분한다
- print() 함수
print(출력값1, 출력값2, ..., sep = 분리문자, end = 종료문자) print(서식 문자열* % (출력값1, 출력값2, ...)) |
ㄱ. '출력값'에는 숫자, 문자, 문자열, 변수 등 다양한 값이나 식이 올 수 있다
ㄴ. 'sep'는 여러 값을 출력할 때 값과 값 사이를 구분하기 위해 출력하는 문자로 생략할 경우 기본값은
공백 한 칸(' ')이다
ㄷ. 'end'는 맨 마지막에 표시할 문자로, 생략할 경우 기본값은 줄 나눔이다
- Range
: 연속된 숫자를 생성하는 것으로, 리스트, 반복문 등에서 많이 사용된다
range(최종값) : 0에서 '최종값'-1까지 연속된 숫자를 생성한다 range(초기값, 최종값) : '초기값'에서 '최종값'-1까지 연속된 숫자를 생성한다 range(초기값, 최종값, 증가값) : '초기값'에서 '최종값'-1까지 '증가값'만큼 증가하면서 숫자를 생성한다 |
- 슬라이스(Slice)
: 문자열이나 리스트와 같은 순차형 객체에서 일부를 잘라(slicing) 반환하는 기능이다
객체명[초기위치:최종위치] : '초기위치'에서 '최종위치'-1까지의 요소들을 가져온다 객체명[초기위치:최종위치:증가값] : '초기위치'에서 '최종위치'-1까지 '증가값'만큼 증가하면서 해당 위치의 요소들을 가져온다 객체명[:] 또는 객체명[::] : 객체의 모든 요소를 반환한다 객체명[초기위치:] : 객체의 '초기위치'에서 마지막 위치까지의 요소들을 반환한다 객체명[:최종위치] : 객체의 0번째 위치에서 '최종위치'-1까지의 요소들을 반환한다 객체명[::증가값] : 객체의 0번째 위치에서 마지막 위치까지 '증가값'만큼 증가하면서 해당 위치의 요소들을 반환한다 |
•Python의 활용
1. if문
- 형식1 : 조건이 참일 때만 실행한다
if 조건: 실행할 문장 |
- 형식2 : 조건이 참일 때와 거짓일 때 실행할 문장이 다르다
if 조건: 실행할 문장1 else: 실행할 문장2 |
- 형식3 : 조건이 여러 개이고, 조건마다 실행할 문장이 다르다
if 조건1: 실행할 문장1 elif 조건2: 실행할 문장2 else: 실행할 문장3 |
- 형식4 : if문 안에 if문이 포함된다
if 조건1: if 조건2: 실행할 문장1 else: 실행할 문장2 else: 실행할 문장3 |
2. for문
- 형식1 : range를 이용하는 방식이다
for 변수 in range(최종값): 실행할 문장 |
- 0에서 '최종값'-1까지 연속된 숫자를 순서대로 변수에 저장하며 '실행할' 문장'을 반복 수행 |
- 형식2 : 리스트(List)를 이용하는 방식이다
for 변수 in 리스트 실행할 문장 |
- 리스트의 0번째 요소에서 마지막 요소까지 순서대로 변수에 저장하며 실행할 문장을 반복 수행 |
3. while문
while 조건: 실행할 문장 |
- while 1 또는 while True와 같이 무조건 참이 되도록 조건을 지정하면 while문은 무한 반복한다 |
4. 클래스
- 정의 형식
class 클래스명: 실행할 문장 def 메소드명(self, 인수): 실행할 문장 return 값 |
- def는 메소드를 정의하는 예약어이다 - self는 메소드에서 자기 클래스에 속한 변수에 접근할 때 사용하는 명칭으로, 일반적으로 self를 사용하지만 사용자가 임의로 지정해도 된다 - '인수'는 메소드를 호출하는 곳에서 보낸 값을 저장할 변수로, 사용자가 임의로 지정한다 - return은 메소드를 호출한 위치로 값을 돌려주기 위해 사용하고 없는 경우 생략할 수 있다 |
- 객체의 선언 형식
변수명 = 클래스명() | - 변수명은 사용자가 임의로 지정하고, 사전에 정의한 클래스명과 괄호()를 적는다 |
- C언어의 사용자 정의 함수와 같이 클래스 없이 메소드만 단독으로 사용할 수 있다
•스크립트 언어(Script Language)
: HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 것으로, 기계어로 컴파일 되지 않고 별도의 번역기가
소스를 분석하여 동작하게 만드는 언어이다
- 게시판 입력, 상품 검색, 회원 가입 등과 같은 데이터베이스 처리 작업을 수행하기 위해 주로 사용한다
- 클라이언트의 웹 브라우저에서 해석되어 실행되는 클라이언트용 스크립트 언어와 서버에서 해석되어 실행된 후
결과만 클라이언트로 보내는 서버용 스크립트 언어가 있다
- 서버용 스크립트 언어 : ASP, JSP, PHP, 파이썬
- 클라이언트용 스크립트 언어 : 자바 스크립트(JAVA Script), VB 스크립트(Visual Basic Script)
1. 스크립트 언어의 장·단점
- 컴파일 없이 바로 실행하므로 결과를 바로 확인할 수 있다
- 배우고 코딩하기 쉽다
- 개발 시간이 짧다
- 소스 코드를 쉽고 빠르게 수정할 수 있다
- 코드를 읽고 해석해야 하므로 실행 속도가 느리다
- 런타임 오류가 많이 발생한다
2. 스크립트 언어의 종류
자바스크립트 (JAVA Script) |
- 웹 페이지의 동작을 제어하는 데 사용되는 클라이언트용 스크립트 언어이다 - 클래스 기반의 객체 상속을 지원하여 객체지향 프로그래밍 언어의 성격도 갖고 있다 - Prototype Link와 Prototype Object를 통해 프로토타입 개념을 활용할 수 있다 |
VB 스크립트 (Visual Basic Script) |
마이크로소프트 사에서 자바 스크립트에 대응하기 위해 제작한 언어로 Active X를 사용하여 마이크로소프트 사의 애플리케이션을 컨트롤 할 수 있다 |
ASP (Active Server Page) |
- 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어로 마이크로소프트 사에서 제작하였다 - Windows 계열에서만 수행 가능한 프로그래밍 언어이다 |
JSP (Java Server Page) |
JAVA로 만들어진 서버용 스크립트로, 다양한 운영체제에서 사용이 가능하다 |
PHP (Professional Hypertext Preprocessor) |
- 서버용 스크립트 언어로, Linux, Unix, Windows 운영체제에서 사용 가능하다 - C, Java 등과 문법이 유사하므로 배우기 쉬워 웹 페이지 제작에 많이 사용된다 - 연산자 : @(에러 제어 연산자), <>(관계 연산자), ===(관계 연산자) |
파이썬 (Python) |
- 귀도 반 로섬(Guido van Rossum)이 발표한 대화형 인터프리터 언어이다 - 객체지향 기능을 지원하고 플랫폼에 독립적이며 문법이 간단하여 배우기 쉽다 |
쉘 스크립트 | - 유닉스/리눅스 계열의 쉘(Shell)에서 사용되는 명령어들의 조합으로 구성된 스크립트 언어이다 - 컴파일 단계가 없어 실행 속도가 빠르다 - 저장 시 확장자로 '.sh'가 붙는다 - 쉘의 종류 : Bash Shell, Bourne Shell, C Shell, Korn Shell 등 - 쉘 스크립트에서 사용되는 제어문 ㄱ. 선택형 : if, case ㄴ. 반복형 : for, while, until |
Basic | 절차지향 기능을 지원하는 대화형 인터프리터 언어로, 초보자도 쉽게 사용할 수 있는 문법 구조를 갖는다 |
•라이브러리
: 프로그램을 효율적으로 개발할 수 있도록 자주 사용하는 함수나 데이터들을 미리 만들어 모아 놓은 집합체이다
- 자주 사용하는 함수들의 반복적인 코드 작성을 피하기 위해 미리 만들어 놓은 것으로, 필요할 때는 언제든지 호출하여
사용할 수 있다
- 프로그래밍 언어에 따라 일반적으로 도움말, 설치 파일, 샘플 코드 등을 제공한다
- 라이브러리는 모듈과 패키지 모두를 의미한다
ㄱ. 모듈 : 하나의 기능이 한 개의 파일로 구현된 형태
ㄴ. 패키지 : 하나의 패키지 폴더 안에 여러 개의 모듈을 모아 놓은 형태
- 라이브러리에는 표준 라이브러리와 외부 라이브러리가 있다
ㄱ. 표준 라이브러리 : 프로그래밍 언어에 기본적으로 포함되어 있는 라이브러리로, 여러 종류의 모듈이나 패키지
형태이다
ㄴ. 외부 라이브러리 : 개발자들이 필요한 기능들을 만들어 인터넷 등에 공유해 놓은 것으로, 외부 라이브러리를
다운받아 설치한 후 사용한다
1. C언어의 대표적인 표준 라이브러리
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 등 |
2. JAVA의 대표적인 표준 라이브러리
java.lang | - 자바에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등에 관련된 기능을 제공한다 - import문 없이도 사용할 수 있다 - 주요 클래스 : String, System, Process, Runtime, Math, Error 등 |
java.util | - 날짜 처리, 난수 발생, 복잡한 문자열 처리 등에 관련된 기능을 제공한다 - 주요 클래스 : Date, Calender, Random, StringTokenizer 등 |
java.io | - 파일 입·출력과 관련된 기능 및 프로토콜을 제공한다 - 주요 클래스 : InputStream, OutputStream, Reader, Writer 등 |
java.net | - 네트워크와 관련된 기능을 제공한다 - 주요 클래스 : Socket, URL, InetAddress 등 |
java.awt | - 사용자 인터페이스(UI)와 관련된 기능을 제공한다 - 주요 클래스 : Frame, Panel, Dialog, Button, Checkbox 등 |
•예외 처리
: 프로그램의 정상적인 실행을 방해하는 조건이나 상태를 예외(Exception)라고 하며, 이러한 예외가 발생했을 때
프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴을 수행하도록 하는 것을 예외 처리(Exception Handling)라고
한다
- 예외가 발생했을 때 일반적인 처리 루틴은 프로그램을 종료시키거나 로그를 남기도록 하는 것이다
- C++, Ada, JAVA, 자바스크립트와 같은 언어에는 예외 처리 기능이 내장되어 있으며, 그 외의 언어에서는 필요한 경우
조건문을 이용해 예외 처리 루틴을 작성한다
- 예외의 원인에는 컴퓨터 하드웨어 문제, 운영체제의 설정 실수, 라이브러리 손상, 사용자의 입력 실수, 받아들일 수
없는 연산, 할당하지 못하는 기억장치 접근 등 다양하다
1. JAVA의 예외 처리
: JAVA는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java.lang 패키지에서 제공한다
- JAVA에서는 try ~ catch 문을 이용해 예외를 처리한다
- try 블록 코드를 수행하다 예외가 발생하면 예외를 처리하는 catch 블록으로 이동하여 예외 처리 코드를 수행하므로
예외가 발생한 이후의 코드는 실행되지 않는다
- catch 블록에서 선언한 변수는 해당 catch 블록에서만 유효하다
- try ~ catch 문 안에 또 다른 try ~ catch 문을 포함할 수 있다
- try ~ catch 문 안에서는 실행 코드가 한 줄이라도 중괄호({})를 생략할 수 없다
- 기본 형식
try { 예외가 발생할 가능성이 있는 코드; } catch ( 예외객체1 매개변수 ) { 예외객체1에 해당하는 예외 발생 시 처리 코드; } catch ( 예외객체n 매개변수 ) { 예외객체n에 해당하는 예외 발생 시 처리 코드; } catch (Exception 매개변수) { 예외객체1~n에 해당하지 않는 예외 발생 시 처리 코드; finally { 예외의 발생 여부와 관계없이 무조건 처리되는 코드; } |
2. JAVA의 주요 예외 객체
ClassNotFoundException | 클래스를 찾지 못한 경우 |
NoSuchMethodException | 메소드를 찾지 못한 경우 |
FileNotFoundException | 파일을 찾지 못한 경우 |
InterruptedIOException | 입·출력 처리가 중단된 경우 |
ArithmeticExcetpion | 0으로 나누는 등의 산술 연산에 대한 에외가 발생한 경우 |
IllegalArgumentException | 잘못된 인자를 전달한 경우 |
NumberFormatException | 숫자 형식으로 변환할 수 없는 문자열을 숫자 형식으로 변환한 경우 |
ArrayIndexOutOfBoundsException | 배열의 범위를 벗어난 접근을 시도한 경우 |
NegativeArraySizeException | 0보다 작은 값으로 배열의 크기를 지정한 경우 |
NullPointerException | 존재하지 않는 객체를 참조한 경우 |
∎ 3장 응용 SW 기초 기술 활용
•운영체제의 개념
: 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을
제공하는 여러 프로그램의 모임이다
- 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용
프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다
1. 운영체제의 목적
: 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등이 있고 아래는 성능을 평가하는 기준이다
처리 능력(Throughput) | 일정 시간 내에 시스템이 처리하는 일의 양 |
반환 시간(Turn Around Time) | 시스템에 작업을 이뢰한 시간부터 처리가 완료될 때까지 걸린 시간 |
사용 가능도(Availability) | 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도 |
신뢰도(Reliability) | 시스템이 주어진 문제를 정확하게 해결하는 정도 |
2. 운영체제의 기능
- 프로세서(처리기, Processor), 기억장치(주기억장치, 보조기억장치), 입·출력장치, 파일 및 정보 등의 자원을 관리한다
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공한다
- 사용자와 시스템 간의 편리한 인터페이스를 제공한다
- 시스템의 각종 하드웨어와 네트워크를 관리·제어한다
- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공한다
- 시스템의 오류를 검사하고 복구한다
- 자원 보호 기능을 제공한다
- 입·출력에 대한 보조 기능을 제공한다
- 가상 계산기 기능을 제공한다
3. 운영체제의 구성
- 제어 프로그램(Control Program)
: 컴퓨터 전체의 작동 상태 감시, 작업의 순서 지정, 작업에 사용되는 데이터 관리 등의 역할을 수행하는 것
ㄱ. 감시 프로그램(Supervisor Program) : 제어 프로그램 중 가장 핵심적인 역할을 하는 것으로, 자원의 할당 및
시스템 전체의 작동 상태를 감시하는 프로그램
ㄴ. 작업 관리 프로그램(Job Management Program) : 작업이 정상적으로 처리될 수 있도록 작업의 순서와 방법을
관리하는 프로그램
ㄷ. 데이터 관리 프로그램(Data Management Program) : 작업에 사용되는 데이터와 파일의 표준적인 처리 및
전송을 관리하는 프로그램
- 처리 프로그램(Processing Program)
: 제어 프로그램의 지시를 받아 사용자가 요구한 문제를 해결하기 위한 프로그램
ㄱ. 언어 번역 프로그램 : 사용자가 고급언어로 작성한 원시 프로그램을 기계어 형태의 목적 프로그램으로 변환시키는
것으로, 컴파일러, 어셈블러, 인터프리터 등이 있음
ㄴ. 서비스 프로그램 : 사용자가 컴퓨터를 더욱 효율적으로 사용할 수 있도록 제작된 프로그램으로, 분류/병합
(Sort/Merge), 유틸리티 프로그램 등이 여기에 해당됨
4. 운영체제의 주요 자원 관리
프로세스 관리 | - 프로세스 스케줄링 및 동기화 관리 담당 - 프로세스 생성과 제거, 시작과 정지, 메시지 전달 등의 기능 담당 |
기억장치 관리 | 프로세스에게 메모리 할당 및 회수 관리 담당 |
주변장치 관리 | 입·출력장치 스케줄링 및 전반적인 관리 담당 |
파일 관리 | 파일의 생성과 삭제, 변경, 유지 등의 관리 담당 |
5. 운영체제의 종류
Windows | 마이크로소프트(Microsoft) 사가 개발한 운영체제 | GUI |
UNIX | AT&T 벨(Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제 | CLI |
LINUX | - UNIX와 호환이 가능한 커널(Kernel) 이며, 리누스 토발즈 (Linus Torvalds)가 개발한 운영체제 - 누구나 제한 없이 활용 및 재배포가 가능 |
CLI |
MacOS | 애플(Apple) 사가 UNIX를 기반으로 개발한 운영체제 | GUI |
MS-DOS | Windows 이전에 사용되던 운영체제 | CLI |
- 단일 작업 처리 시스템에는 MS-DOS, 다중 작업 처리 시스템에는 Windows, UNIX, LINUX, MacOS 등이 사용된다
- Windows, MacOS, MS-DOS는 개인용, UNIX, LINUX는 서버용 운영체제이다
+ 단일 작업 처리 시스템 / 다중 작업 처리 시스템
- 단일 작업 처리 시스템(Single Tasking System)
ㄱ. 컴퓨터 시스템을 한 개의 작업이 독점하여 사용하는 방식입니다
ㄴ. 예를 들어 DOS에서 워드 작업을 하다가 PC 통신을 하려면 워드 작업을 종료해야 하는 것을 의미합니다
- 다중 작업 처리 시스템(Multi-Tasking System)
ㄱ. 여러 개의 프로그램을 열어 두고 다양한 작업을 동시에 진행하는 방식입니다
ㄴ. 예를 들어 Windows에서 워드 작업을 하고 있는 상태에서 음악을 들으며 엑셀, 그림판 등의 프로그램을 실행시켜
놓고, 필요할 때마다 해당 프로그램을 바로 바로 전환하여 사용할 수 있는 것을 의미합니다
•UNIX / LINUX / MacOS
1. UNIX의 개요 및 특징
: 1960년대 AT&T 벨(Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제이다
- 시분할 시스템(Time Sharing System)을 위해 설계된 대화식 운영체제로, 소스가 공개된 개방형 시스템(Open System)
이다
- 대부분 C 언어로 작성되어 있어 이식성이 높으며 장치, 프로세스 간의 호환성이 높다
- 크기가 작고 이해하기 쉽다
- 다중 사용자(Multi-User), 다중 작업(Multi-Tasking)을 지원한다
ㄱ. 다중 사용자 : 여러 사용자가 동시에 시스템을 사용하는 것
ㄴ. 다중 작업 : 여러 개의 작업이나 프로그램을 동시에 수행하는 것으로 하나 이상의 작업을 백그라운드에서
수행하므로 여러 작업을 동시에 처리할 수 있다
- 많은 네트워킹 기능을 제공하므로 통신망(Network) 관리용 운영체제로 적합하다
- 트리 구조의 파일 시스템을 갖는다
- 전문적인 프로그램 개발에 용이하다
- 다양한 유틸리티 프로그램들이 존재한다
2. UNIX 시스템의 구성
- 커널(Kernel)
ㄱ. UNIX의 가장 핵심적인 부분이다
ㄴ. 컴퓨터가 부팅될 때 주기억장치에 적재된 후 상주하면서 실행된다
ㄷ. 하드웨어를 보호하고, 프로그램과 하드웨어 간의 인터페이스 역할을 담당한다
ㄹ. 프로세스(CPU 스케줄링) 관리(생성, 종료 등), 기억장치 관리(할당, 회수 등), 파일 시스템 관리, 입·출력 관리,
프로세스간 통신, 데이터 전송 및 변환 등 프로세스와 메모리를 관리하는 여러 가지 기능을 수행한다
- 쉘(Shell)
ㄱ. 사용자의 명령어를 인식하여 프로그램을 호출하고 커널로 전달해 명령을 수행하는 명령어 해석기이다
ㄴ. 시스템과 사용자 간의 인터페이스를 담당한다
ㄷ. DOS의 COMMAND.COM과 같은 기능을 수행한다
ㄹ. 주기억장치에 상주하지 않고 명령어가 포함된 파일 형태로 존재하며 보조 기억장치에서 교체 처리가 가능하다
ㅁ. 파이프라인 기능을 지원하고 입·출력 재지정을 통해 출력과 입력의 방향을 변경할 수 있다
ㅂ. 공용 Shell(Bourne Shell, C Shell, Korn Shell)이나 사용자 자신이 만든 Shell을 사용할 수 있다
ㅅ. 반복적인 명령 프로그램을 만드는 프로그래밍 기능을 제공한다
ㅇ. 초기화 파일을 이용해 사용자 환경을 설정하는 기능을 제공한다
+ LINUX Bash 쉘(Shell)에서 export
- export가 매개변수 없이 쓰일 경우 현재 설정된 환경벼수들이 출력된다
- 사용자가 생성하는 변수는 export 명령어 표시하지 않는 한 현재 쉘에 국한된다
- 변수를 export 시키면 전역(Global) 변수처럼 되어 끝까지 기억된다
- Utility Program
ㄱ. 일반 사용자가 작성한 응용 프로그램을 처리하는데 사용한다
ㄴ. DOS에서의 외부 명령어에 해당된다
ㄷ. 유틸리티 프로그램에는 에디터, 컴파일러, 인터프리터, 디버거 등이 있다
+ UNIX에서의 프로세스 간 통신
: 각 프로세스는 시스템 호출을 통해 커널의 기능을 사용하며, 프로세스 간 통신은 시그널, 파이프, 소켓 등을 사용한다
- 시그널(Signal) : 간단한 메시지를 이용하여 통신하는 것으로 초기 UNIX 시스템에서 사용됨
- 파이프(Pipe) : 한 프로세스의 출력이 다른 프로세스의 입력으로 사용되는 단방향 통신 방식
- 소켓(Socket) : 프로세스 사이의 대화를 가능하게 하는 쌍방향 통신 방식
3. LINUX의 개요 및 특징
: 1991년 리누스 토발즈(Linus Torvalds)가 UNIX를 기반으로 개발한 운영체제이다
- 프로그램 소스 코드가 무료로 공개되어 있기 때문에 프로그래머가 원하는 기능을 추가할 수 있고, 다양한 플랫폼에
설치하여 사용이 가능하며, 재배포가 가능하다
- UNIX와 완벽하게 호환된다
- 대부분의 특징이 UNIX와 동일하다
4. MacOS의 개요 및 특징
: 1980년대 애플(Apple) 사가 UNIX를 기반으로 개발한 운영체제이다
- 아이맥(iMac)과 맥북(MacBook) 등 애플 사에서 생산하는 제품에서만 사용이 가능하다
- 드라이버 설치 및 install과 uninstall의 과정이 단순하다
+ 파일 디스크립터(File Descriptor, 파일 서술자)
: 파일을 관리하기 위한 시스템(운영체제)이 필요로 하는 파일에 대한 정보를 가진 제어 블록을 의미하며, 파일 제어
블록(FCB; File Control Block)이라고도 합니다
- 파일 디스크립터는 파일마다 독립적으로 존재하며, 시스템에 따라 다른 구조를 가질 수 있습니다
- 보통 파일 디스크립터는 보조기억장치 내에 저장되어 있다가 해당 파일이 open될 때 주기억장치로 옮겨집니다
- 파일 디스크립터는 파일 시스템이 관리하므로 사용자가 직접 참조할 수 없습니다
•기억장치 관리의 개요
1. 기억장치 계층 구조의 특징
: 기억장치는 레지스터, 캐시, 기억장치, 주기억장치, 보조기억장치를 다음과 같이 계층 구조로 분류할 수 있다
- 계층 구조에서 상위의 기억장치일수록 접근 속도와 접근 시간이 빠르지만, 기억용량이 적고 고가이다
- 주기억장치는 각기 자신의 주소를 갖는 워드 또는 바이트들로 구성되어 있으며, 주소를 이용하여 액세스할 수 있다
- 레지스터, 캐시 기억장치, 주기억장치의 프로그램과 데이터는 CPU가 직접 액세스 할 수 있으나 보조기억장치에 있는
프로그램이나 데이터는 직접 액세스할 수 없다
- 보조기억장치에 있는 데이터는 주기억장치에 적재된 후 CPU에 의해 액세스될 수 있다
2. 기억장치의 관리 전략의 개요
: 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 적재 위치 등을 지정하여 한정된 주기억장치의 공간을
효율적으로 사용하기 위한 것으로 반입(Fetch) 전략, 배치(Placement) 전략, 교체(Replacement) 전략이 있다
3. 반입(Fetch) 전략
: 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략이다
- 요구 반입(Demand Fetch) : 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법이다
- 예상 반입(Anticipatory Fetch) : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법이다
4. 배치(Placement) 전략
: 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략이다
- 최초 적합(First Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에
배치시키는 방법
- 최적 적합(Best Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는
분할 영역에 배치시키는 방법
- 최악 적합(Worst Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 많이 남기는
분할 영역에 배치시키는 방법
+ 단편화
: 단편화는 주기억장치의 분할된 영역에 프로그램이나 데이터를 할당할 경우, 분할된 영역이 프로그램이나 데이터보다
작거나 커서 생기는 빈 기억 공간을 의미합니다
- 내부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아있는
빈 공간
- 외부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고
빈 공간으로 남아있는 분할된 전체 영역
5. 교체(Replacement) 전략
: 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때,
이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략이다
- 교체 전략에는 FIFO, OPT, LRU, LFU, NUR, SCR 등이 있다
•가상기억장치 구현 기법 / 페이지 교체 알고리즘
1. 가상기억장치의 개요
: 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것으로, 용량이 작은 주기억장치를 마치 큰 용량을
가진 것처럼 사용하는 기법이다
- 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만
주기억장치에 불연속적으로 할당하여 처리한다
- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용한다
- 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다
- 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸는 주소 변환
작업이 필요하다
- 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다
- 가상기억장치의 일반적인 구현 방법에는 블록의 종류에 따라 페이징 기법과 세그먼테이션 기법으로 나눌 수 있다
2. 페이징(Paging) 기법
: 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 고정된 크기로 나눈 후 나눠진 프로그램
(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법이다
- 프로그램을 일정한 크기로 나눈 단위를 페이지(Page)라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의
단위를 페이지 프레임(Page Frame)이라고 한다
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있다
- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블(Page Map Table)이 필요하다
- 페이지 맵 테이블 사용으로 비중이 증가되고, 처리 속도가 감소된다
3. 세그먼테이션(Segmentation) 기법
: 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 가변적인 단위로 나눈 후 주기억장치에 적재시켜
실행시키는 기법
- 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트(Segment)라고 하며, 각 세그먼트는
고유한 이름과 크기를 갖는다
- 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다
- 세그먼테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서이다
- 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블(Segment Map Table)이
필요하다
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치
보호키(Storage Protection Key)가 필요하다
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있다
- 세그먼테이션 기법의 일반적인 주소 변환
ㄱ. 주소 형식에 따른 주소와 세그먼트 맵 테이블의 구성
- 가상주소는 세그먼트 번호를 나타내는 s와 세그먼트 내에 실제 내용이 위치하고 있는 곳까지의 거리를 나타내는
변위값 d로 구성된다
- 실기억주소는 완전주소 형태를 사용하며 이는 세그먼트의 기준번지와 변위값을 더함으로써 얻을 수 있다
- 세그먼트 맵 테이블(Segment Map Table)은 세그먼트 번호 s와 세그먼트의 크기 L(한계번지), 주기억장치 상의
기준번지(시작주소) b로 구성된다
ㄴ. 주소 변환 순서
- 가상주소의 세그먼트 번호로 세그먼트 맵 테이블에서 해당 세그먼트의 기준번지와 세그먼트 크기를 구한다
세그먼트 번호는 세그먼트 맵 테이블에 대한 색인으로 사용된다
- 가상주소의 변위값과 세그먼트의 크기를 비교한다
- 변위값이 작거나 같으면 기준번지와 변위값을 더하여 실기억주소를 만들어 주기억장치를 액세스한다
- 변위값이 크면 다른 영역을 침범하게 되므로 실행 권한을 운영체제에 넘기고 트랩을 발생시킨다
(변위값이 크다는 것은 현재 찾는 세그먼트의 위치가 해당 세그먼트의 크기(한계번지)를 초과하였다는 의미이다)
4. 페이지 교체 알고리즘
: 페이지 부재(Page Fault)가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데, 이때
주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법이다
- OPT(OPTimal replacement, 최적 교체)
ㄱ. 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다
ㄴ. 벨레이디(Belady)가 제안한 것으로, 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘이다
- FIFO(First In First Out)
ㄱ. 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를
교체하는 기법이다
ㄴ. 이해하기 쉽고, 프로그래밍 및 설계가 간단하다
- LRU(Least Recently Used)
ㄱ. 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다
ㄴ. 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래
전에 사용된 페이지를 교체한다
- LFU(Least Frequently Used)
ㄱ. 사용 빈도가 가장 적은 페이지를 교체하는 기법이다
ㄴ. 활발하게 사용되는 페이지는 사용 횟수가 많아 교체되지 않고 사용된다
- NUR(Not Used Recently)
ㄱ. LRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법이다
ㄴ. 최근에 사용되지 않은 페이지는 향후에도 사용되지 않을 가능성이 높다는 것을 전제로, LRU에서 나타나는
시간적인 오버헤드를 줄일 수 있다
ㄷ. 최근의 사용 여부를 확인하기 위해서 각 페이지마다 두 개의 비트, 즉 참조 비트(Reference Bit)와
변형 비트(Modified Bit, Dirty Bit)가 사용된다
ㄹ. 다음과 같이 참조 비트와 변형 비트의 값에 따라 교체될 페이지의 순서가 결정된다
참조 비트 | 0 | 0 | 1 | 1 |
변형 비트 | 0 | 1 | 0 | 1 |
교체 순서 | 1 | 2 | 3 | 4 |
- SCR(Second Chance Replacement, 2차 기회 교체)
ㄱ. 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO 기법의
단점을 보완하는 기법이다
•가상기억장치 기타 관리 사항
1. 페이지 크기
: 페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데, 페이지의 크기에 따라 시스템에 미치는 영향이
다르다
- 페이지 크기가 작을 경우
ㄱ. 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다
ㄴ. 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋을 유지할 수 있다
ㄷ. Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다
ㄹ. 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어진다
ㅁ. 디스크 접근 횟수가 많아져서 전체적인 입·출력 시간은 늘어난다
- 페이지 크기가 클 경우
ㄱ. 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다
ㄴ. 디스크 접근 횟수가 줄어들어 전체적인 입·출력의 효율성이 증가된다
ㄷ. 페이지 단편화가 증가되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어난다
ㄹ. 프로세스(프로그램) 수행에 불필요한 내용까지도 주기억장치에 적재될 수 있다
2. Locality(국부성, 지역성, 구역성, 국소성)
: 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다
- 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 되었다
- 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 된다
- 데닝(Denning) 교수에 의해 구역성의 개념이 증명되었으며 캐시 메모리 시스템의 이론적 근거이다
- 시간 구역성(Temporal Locality)
ㄱ. 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상이다
ㄴ. 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미한다
ㄷ. 시간 구역성이 이루어지는 기억 장소 : Loop(반복, 순환), 스택(Stack), 부프로그램(Sub Routine),
Counting(1씩 증감), 집계(Totaling)에 사용되는 변수(기억장소)
- 공간 구역성(Spatial Locality)
ㄱ. 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상이다
ㄴ. 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미한다
ㄷ. 공간 구역성이 이루어지는 기억장소 : 배열 순회(Array Traversal, 배열 순례), 순차적 코드의 실행,
프로그래머들이 관련된 변수(데이터를 저장할 기억장소)들을 서로 근처에 선언하여 할당되는 기억장소,
같은 영역에 있는 변수를 참조할 때 사용
3. 워킹 셋(Working Set)
: 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다
- 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델로, 프로그램의 Locality 특징을 이용한다
- 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의
기억장치 사용이 안정된다
- 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋은 시간에 따라 변경된다
4. 페이지 부재 빈도 방식
: 페이지 부재(Page Fault)는 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상이며, 페이지 부재 빈도
(PFF, Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미한다
- 페이지 부재율(Page Fault Rate)에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을
적정 수준으로 유지하는 방식이다
- 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당하고, 페이지 부재율을 지속적으로 감시하고 있다가
부재율이 상한선을 넘어가면 좀 더 많은 페이지 프레임을 할당하고, 부재율이 하한선을 넘어가면 페이지 프레임을
회수하는 방식을 사용한다
5. 프리페이징(Prepaging)
: 처음의 과도한 페이지 부재를 방지하기 위해 필요한 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는
기법이다
- 기억장치에 들어온 페이지들 중에서 사용되지 않는 페이지가 많을 수도 있다
6. 스래싱(Thrashing)
: 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다
- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정중 자주 페이지 부재가
발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하된다
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의
정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 된다
- 스래싱 현상 방지 방법
ㄱ. 다중 프로그래밍의 정도를 적정 수준으로 유지한다
ㄴ. 페이지 부재 빈도(Page Fault Frequency)를 조절하여 사용한다
ㄷ. 워킹 셋을 유지한다
ㄹ. 부족한 자원을 증설하고, 일부 프로세스를 중단시킨다
ㅁ. CPU 성능에 대한 자료의 지속적 관리 및 분석으로 임계치를 예상하여 운영한다
ㅂ. 각 프로세스가 필요로 하는 프레임을 제공할 수 있어야 한다
•프로세스의 개요
: 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행 중인 프로그램을
의미하며, 작업(Job), 태스크(Task)라고도 한다
- 프로세스는 다음과 같이 여러 형태로 정의할 수 있다
ㄱ. PCB를 가진 프로그램
ㄴ. 실기억장치에 저장된 프로그램
ㄷ. 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
ㄹ. 프로시저가 활동중인 것
ㅁ. 비동기적 행위를 일으키는 주체
ㅂ. 지정된 결과를 얻기 위한 일련의 계통적 동작
ㅅ. 목적 또는 결과에 따라 발생되는 사건들의 과정
ㅇ. 운영체제가 관리하는 실행 단위
1. PCB(Process Control Block, 프로세스 제어 블록)
: 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 곳으로, Task Control Block 또는 Job Control Block이라고도
한다
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다
- PCB에 저장되어 있는 정보는 다음과 같다
프로세스의 현재 상태 | 준비, 대기, 실행 등의 프로세스 상태 |
포인터 | - 부모 프로세스에 대한 포인터 : 부모 프로세스의 주소 기억 - 자식 프로세스에 대한 포인터 : 자식 프로세스의 주소 기억 - 프로세스가 위치한 메모리에 대한 포인터 : 현재 프로세스가 위치한 주소 기억 - 할당된 자원에 대한 포인터 : 프로세스에 할당된 각 자원에 대한 주소 기억 |
프로세스 고유 식별자 | 프로세스를 구분할 수 있는 고유의 번호 |
스케줄링 및 프로세스의 우선순위 | 스케줄링 정보 및 프로세스가 실행될 우선순위 |
CPU 레지스터 정보 | Accumulator(누산기), 인덱스 레지스터, 범용 레지스터, 프로그램 카운터(PC) 등에 대한 정보 |
주기억장치 관리 보정 | 기준 레지스터(Base Register), 페이지 테이블(Page Table) 에 대한 정보 |
입·출력 상태 정보 | 입·출력장치, 개방된 파일 목록 |
계정 정보 | CPU 사용 시간, 실제 사용 시간, 한정된 시간 |
2. 프로세스 상태 전이
: 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것을 의미하며, 프로세스의 상태를 다음과 같이
상태 전이도로 표시할 수 있다
- 프로세스의 상태는 제출, 접수, 준비, 실행, 대기 상태로 나눌 수 있으며, 이 중 주요 세 가지 상태는 준비, 실행, 대기
상태이다
- 제출(Submit) : 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태이다
- 접수(Hold) : 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태이다
- 준비(Ready)
ㄱ. 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태이다
ㄴ. 프로세스는 준비상태 큐에서 실행을 준비하고 있다
ㄷ. 접수 상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행된다
- 실행(Run)
ㄱ. 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태이다
ㄴ. 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료(Timer Run Out)되면 프로세스는
준비 상태로 전이된다
ㄷ. 실행중인 프로세스에 입·출력(I/O) 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이된다
ㄹ. 준비 상태에서 실행 상태로의 전이는 CPU(프로세서) 스케줄러에 의해 수행된다
- 대기(Wait), 보류, 블록(Block) : 프로세스의 입·출력 처리가 필요하면 현재 실행 중인 프로세스가 중단되고, 입·출력 처리가
완료될 때까지 대기하고 있는 상태이다
- 종료(Terminated, Exit) : 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태이다
3. 프로세스 상태 전이 관련 용어
- Dispatch : 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정이다
- Wake Up : 입·출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이 되는 과정이다
- Spooling : 입·출력장치의 공유 및 상대적으로 느린 입·출력장치의 처리 속도를 보완하고 다중 프로그래밍 시스템의
성능을 향상시키기 위해 입·출력할 데이터를 직접 입·출력장치에 보내지 않고 나중에 한꺼번에 입·출력하기 위해
디스크에 저장하는 과정이다
- 교통량 제어기(Traffic Controller) : 프로세스의 상태에 대한 조사와 통보를 담당한다
- 문맥 교환(Context Switching) : 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를
적재하는 과정
4. 스레드(Thread)
: 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다
- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는
다중 스레드라고 한다
- 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다
- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다
- 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다
- 스레드의 분류
사용자 수준의 스레드 | - 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다 - 속도는 빠르지만 구현이 어렵다 |
커널 수준의 스레드 | - 운영체제의 커널에 의해 스레드를 운용한다 - 구현이 쉽지만 속도가 느리다 |
- 스레드 사용의 장점
ㄱ. 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다
ㄴ. 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다
ㄷ. 응용 프로그램의 응답 시간(Response Time)을 단축시킬 수 있다
ㄹ. 실행 환경을 고유시켜 기억장소의 낭비가 줄어든다
ㅁ. 프로세스들 간의 통신이 향상된다
ㅂ. 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다
•주요 스케줄링 알고리즘
1. FCFS(First Come First Service, 선입 선출) = FIFO(First In First Out)
: 준비상태 큐(대기 큐, 준비 완료 리스트, 작업준비 큐, 스케줄링 큐)에 도착한 순서에 따라 차례로 CPU를 할당하는
기법으로, 가장 간단한 알고리즘이다
- 먼저 도착한 것이 먼저 처리되어 공평성은 유지되지만 짧은 작업이 긴 작업을, 중요한 작업이 중요하지 않은 작업을
기다리게 된다
- 대기 시간 : 프로세스가 대기한 시간으로, 바로 앞 프로세스까지의 진행 시간으로 계산
- 반환 시간 : 프로세스의 대기 시간과 실행 시간의 합
- 평균 시간 : 각 프로세스 시간의 합 / 프로세스의 개수
2. SJF(Shortest Job Firt, 단기 작업 우선)
: 준비상태 큐에서 기다리고 있는 프로세스들 중에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는
기법이다
- 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘이다
- 실행 시간이 긴 프로세스는 실행 시간이 짧은 프로세스에게 할당 순위가 밀려 무한 연기 상태가 발생될 수 있다
- 대기 시간 : 프로세스가 대기한 시간으로, 바로 앞 프로세스까지의 진행 시간에서 제출 시간을 차감하여 계산
- 반환 시간 : 프로세스의 대기 시간과 실행 시간의 합
- 평균 시간 : 각 프로세스 시간의 합 / 프로세스의 개수
3. HRN(Hightest Response-ratio Next)
: 실행시간이 긴 프로세스에 불리한 SJF 기법을 보완하기 위한 것으로, 대기 시간과 서비스(실행) 시간을 이용하는
기법이다
- 우선순위 계산 공식을 이용하여 서비스(실행) 시간이 짧은 프로세스나 대기 시간이 긴 프로세스에게 우선순위를
주어 CPU를 할당한다
- 서비스 실행 시간이 짧거나 대기 시간이 긴 프로세스일 경우 우선순위가 높아진다
- 우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위가 부여된다
- 우선순위 계산식 = (대기 시간 + 서비스 시간) / 서비스 시간
4. SSTF(Shortest Seek Time First)
: 현재 헤드위치에서 가장 가까운 거리에 있는 트랙의 요청을 먼저 서비스
- 가장 가까운 것은 가장 이동 거리가 짧은 것으로 현재 트랙과 남아있는 트랙 중 차이가 가장 적은 것이다
•환경 변수(Environment Variable)
: 시스템 소프트웨어의 동작에 영향을 미치는 동적인 값들의 모임을 의미한다
- 변수명과 값으로 구성된다
- 시스템의 기본 정보를 저장한다
- 자식 프로세스에 상속된다
- 시스템 전반에 걸쳐 적용되는 시스템 환경 변수와 사용자 계정 내에서만 적용되는 사용자 환경 변수로 구분된다
1. Windows의 주요 환경 변수
: Windows에서 환경 변수를 명령어나 스크립트에서 사용하려면 변수명 앞뒤에 '%'를 입력해야 한다
- Windows에서 set을 입력하면 모든 환경 변수와 값을 출력한다
%ALLUSERPROFILE% | 모든 사용자의 프로필이 저장된 폴더 |
%APPDATA% | 설치된 프로그램의 필요 데이터가 저장된 폴더 |
%ComSpec% | 기본 명령 프롬프트로 사용할 프로그램명 |
%HOMEDRIVE% | 로그인한 계정의 정보가 저장된 드라이브 |
%HOMEPATH% | 로그인한 계정의 기본 폴더 |
%LOGONSERVER% | 로그인한 계정이 접속한 서버명 |
%PATH% | 실행 파일을 찾는 경로 |
%PATHEXT% | cmd에서 실행할 수 있는 파일의 확장자 목록 |
%PROGRAMFILES% | 기본 프로그램의 설치 폴더 |
%SYSTEMDRIVE% | Windows가 부팅된 드라이브 |
%SYSTEMROOT% | 부팅된 운영체제가 들어 있는 폴더 |
%TEMP% 또는 %TMP% | 임시 파일이 저장되는 폴더 |
%USERDOMAIN% | 로그인한 시스템의 도메인명 |
%USERNAME% | 로그인한 계정 이름 |
%USERPROFILE% | 로그인한 유저의 프로필이 저장된 폴더명 |
2. UNIX / LINUX의 주요 환경 변수
: UNIX나 LINUX에서 환경 변수를 명령어나 스크립트에서 사용하려면 변수명 앞에 '$'를 입력해야 한다
- UNIX나 LINUX에서는 set, env, printenv, setenv 중 하나를 입력하면 모든 환경 변수와 값을 표시한다
$DISPLAY | 현재 X 윈도 디스플레이 위치 |
$HOME | 사용자의 홈 디렉터리 |
$LANG | 프로그램 사용 시 기본적으로 지원되는 언어 |
메일을 보관하는 경로 | |
$PATH | 실행 파일을 찾는 경로 |
$PS1 | 쉘 프롬프트 정보 |
$PWD | 현재 작업하는 디렉터리 |
$TERM | 로긴 터미널 타입 |
$USER | 사용자의 이름 |
∙운영체제 기본 명령어
- 운영체제를 제어하는 방법은 크게 CLI와 GUI로 구분할 수 있다
- CLI는 키보드로 명령어를 직접 입력하여 작업을 수행하는 사용자 인터페이스를 의미한다
- GUI는 키보드로 명령어를 직접 입력하지 않고, 마우스로 아이콘이나 메뉴를 선택하여 작업을 수행하는 그래픽
사용자 인터페이스를 의미한다
1. Windows 기본 명령어
ㄱ. CLI 기본 명령어 : 명령 프롬프트(Command)창에 명령어를 입력하여 작업을 수행하는 것
DIR | 파일 목록을 표시한다 | CLS | 화면의 내용을 지운다 |
COPY | 파일을 복사한다 | ATTRIB | 파일의 속성을 변경한다 |
TYPE | 파일의 내용을 표시한다 | FIND | 파일을 찾는다 |
REN | 파일의 이름을 변경한다 | CHKDSK | 디스크 상태를 점검한다 |
DEL | 파일을 삭제한다 | FORMAT | 디스크 표면을 트랙과 섹터로 나누어 초기화한다 |
MD | 디렉터리를 생성한다 | MOVE | 파일을 이동한다 |
CD | 디렉터리의 위치를 변경한다 |
ㄴ. GUI 기본 명령어 : 바탕화면이나 Windows 탐색기에서 마우스로 아이콘을 더블클릭하여 프로그램 실행,
파일의 복사 및 이동, 제어판의 기능 실행 등 모든 작업이 GUI 명령어에 해당한다
2. UNIX / LINUX 기본 명령어
ㄱ. CLI 기본 명령어 : 쉘(Shell)에 명령어를 입력하여 작업을 수행하는 것으로, UNIX/LINUX의 주요 기본 명령어는
다음과 같다
cat | 파일 내용을 화면에 표시한다 |
chdir | 현재 사용할 디렉토리의 위치를 변경한다 |
chmod | 파일의 보호 모드를 설정하여 파일의 사용 허가를 지정한다 |
chown | 소유자를 변경한다 |
cp | 파일을 복사한다 |
exec | 새로운 프로세스를 수행한다 |
find | 파일을 찾는다 |
fork | 새로운 프로세스를 생성한다(=하위 프로세스 호출, =프로세스 복제 명령) |
fsck | 파일 시스템을 검사하고 보수한다 |
getpid | 자신의 프로세스 아이디를 얻는다 |
getppid | 부모 프로세스 아이디를 얻는다 |
ls | 현재 디렉토리 내의 파일 목록을 확인한다 |
mount/unmount | 파일 시스템을 마운팅한다(=서브 디렉토리에 연결한다)/마운팅 해제한다 |
rm | 파일을 삭제한다 |
uname | 시스템의 이름과 버전, 네트워크 호스팅명 등의 시스템 정보를 표시한다 |
wait | fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 event를 기다린다 |
pwd | 현재 디렉토리 출력 |
ㄴ. GUI 기본 명령어 : UNIX와 LINUX는 기본적으로 CLI를 기반으로 운영되는 시스템이지만 X Window라는
별도의 프로그램을 설치하여 GUI 방식으로 운영할 수 있다
•인터넷
: TCP/IP 프로토콜을 기반으로 하여 전 세계 수많은 컴퓨터와 네트워크들이 연결된 광범위한 컴퓨터 통신망이다
- 미 국방성의 ARPANET에서 시작되었다
- 유닉스 운영체제를 기반으로 한다
- 통신망과 컴퓨터가 있는 곳이라면 시간과 장소에 구애받지 않고 정보를 교환할 수 있다
- 인터넷에 연결된 모든 컴퓨터는 고유한 IP 주소를 갖는다
- 컴퓨터 또는 네트워크를 서로 연결하기 위해서는 브리지, 라우터, 게이트웨이가 사용된다
- 다른 네트워크 또는 같은 네트워크를 연결하여 중추적 역할을 하는 네트워크로, 보통 인터넷의 주가 되는 기간망을
일컫는 용어를 백본(Backbone)이라고 한다
1. IP 주소(Internet Protocol Address)
: 인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유한 주소이다
- 숫자로 8비트씩 4부분, 총 32비트로 구성되어 있다
- 클래스별로 네트워크와 호스트 주소의 길이가 다르다
- 호스트 주소를 자동으로 설정하며 유니캐스트(Unicast), 멀티캐스트(Multicast), 브로드캐스트(Broadcast)를
지원한다
- 네트워크 부분의 길이에 따라 다음과 같이 A 클래스에서 E 클래스까지 총 5단계로 구성되어 있다
A Class | - 국가나 대형 통신망에 사용(0~127로 시작) - 2^24 = 16,777,216개의 호스트 사용 가능 |
![]() |
B Class | - 중대형 통신망에 사용(128~191로 시작) - 2^16 = 65,536개의 호스트 사용 가능 |
![]() |
C Class | - 소규모 통신망에 사용(192~223으로 시작) - 2^8 = 256개의 호스트 사용 가능 |
![]() |
D Class | 멀티캐스트 용으로 사용(224~239로 시작) | |
E Class | 실험적 주소이며 공용되지 않음 |
2. 서브네팅(Subnetting)
: 할당된 네트워크 주소를 다시 여러 개의 작은 네트워크로 나누어 사용하는 것을 말한다
- 4바이트의 IP 주소 중 네트워크 주소와 호스트 주소를 구분하기 위한 비트를 서브넷 마스크(Subnet Mask)라고 하며,
이를 변경하여 네트워크 주소를 여러 개로 분할하여 사용한다
- 서브넷 마스크는 각 클래스마다 다르게 사용된다
+ 서브네팅(Subnetting)의 예
ex) 192.168.1.0/24 네트워크를 FLSM 방식을 이용하여 3개의 Subnet으로 나누시오. (단, IP Subnet-Zero를 적용했다)
1. 192.168.1.0/24 네트워크의 서브넷 마스크는 1의 개수가 즉 24개 즉, C 클래스에 속하는 네트워크입니다
11111111 | 11111111 | 11111111 | 00000000 |
255 | 255 | 255 | 0 |
2. 서브넷 마스크를 Subnet으로 나눌 때는 서브넷 마스크가 0인 부분 즉, 마지막 8비트를 이용하면 됩니다 Subnet으로 나눌 때 '3개의 Subnet으로 나눈다'는 것처럼 네트워크가 기준일 때는 왼쪽을 기준으로 나눌 네트워크 수에 필요한 비트를 할당하고 나머지 비트로 호스트를 구성하면 됩니다 3개의 Subnet으로 구성하라 했으니 8비트 중 3을 표현하는데 필요한 2비트를 제외하고 나머지 6비트를 호스트로 구성하면 됩니다
네트워크 ID | 호스트 ID | |||
11111111 | 11111111 | 11111111 | 11 | 000000 |
255 | 255 | 255 | 192 |
3. 호스트 ID가 6Bit로 설정되었고, 문제에서 FLSM(Fixed Length Subnet Mask) 즉, 고정된 크기로 주소를 할당하라고 했으므로 3개의 네트워크에 64개(2^6 = 64)씩 고정된 크기로 할당하면 다음과 같습니다
네트워크(ID) | 호스트 수 | IP 주소 범위 |
1(00) | 64 | 192.168.1.0(00000000) ~ 63(00111111 |
2(01) | 64 | 192.168.1.64(01000000) ~ 127(01111111) |
3(10) | 64 | 192.168.1.128(10000000) ~ 191(10111111) |
4. broadcast 주소는 해당 IP 주소 범위에서 가장 마지막 주소를 의미한다
3. IPv6(Internet Protocol version 6)의 개요
: 현재 사용하고 있는 IP 주소 체계인 IPv4의 주소 부족 문제를 해결하기 위해 개발되었고 2^128개의 주소를 표현할
수 있다
- 128비트의 긴 주소를 사용하여 주소 부족 문제를 해결할 수 있으며, IPv4에 비해 자료 전송 속도가 빠르다
- 인증성, 기밀성, 데이터 무결성의 지원으로 보안 문제를 해결할 수 있다
- IPv4와 호환성이 뛰어나다
- 주소의 확장성, 융통성, 연동성이 뛰어나며, 실시간 흐름 제어로 향상된 멀티미디어 기능을 지원한다
- Traffic Class, Flow Label 을 이용한 등급별, 서비스별로 패킷을 구분할 수 있어 품질 보장이 용이하다
- 패킷 크기를 확장할 수 있으므로 패킷 크기에 제한이 없다
- 기본 헤더 뒤에 확장 헤더를 더함으로써 더욱 다양한 정보의 저장이 가능해져 네트워크 기능 확장에 용이하다
- 보안과 인증 확장 헤더와 같은 확장 기능을 통해 인터넷 계층의 보안기능을 강화하였다
- 미리 예약된 알고리즘을 통해 고유성이 보장된 주소를 자동으로 구성할 수 있다 즉, 자동으로 네트워크 환경 구성이
가능하다
4. IPv6의 구성
- 16비트씩 8부분, 총 128비트로 구성되어 있다
- 각 부분을 16진수로 표현하고, 콜론(:)으로 구분한다
- IPv6은 다음과 같이 세 가지 주소 체계로 나누어진다
유니캐스트(Unicast) | 단일 송신자와 단일 수신자 간의 통신(1 대 1 통신에 사용) |
멀티캐스트(Multicast) | 단일 송신자와 다중 수신자 간의 통신(1 대 다 통신에 사용) |
애니캐스트(Anycast) | 단일 송신자와 가장 가까이 있는 단일 수신자 간의 통신(1대 1 통신에 사용) |
5. 도메인 네임(Domain Name)
: 숫자로 된 IP 주소를 사람이 이해하기 쉬운 문자 형태로 표현한 것이다
- 호스트 컴퓨터 이름, 소속 기관 이름, 소속 기관의 종류, 소속 국가명 순으로 구성되며, 왼쪽에서 오른쪽으로 갈수록
상위 도메인을 의미한다
- 문자로 된 도메인 네임을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할을 하는 시스템을
DNS(Domain Name System)라고 하며 이런 역할을 하는 서버를 DNS 서버라고 한다
•OSI(Open System Interconnection) 참조 모델
: 다른 시스템 간의 원활한 통신을 위해 ISO(국제표준화기구)에서 제안한 통신 규약(Protocol)이다
- 개방형 시스템(Open System) 간의 데이터 통신 시 필요한 장비 및 처리 방법 등을 7단계로 표준화하여 규정했다
- OSI 7계층은 1~3 계층을 하위 계층, 4~7 계층을 상위 계층이라고 한다
ㄱ. 하위 계층 : 물리 계층 → 데이터 링크 계층 → 네트워크 계층
ㄴ. 상위 계층 : 전송 계층 → 세션 계층 → 표현 계층 → 응용 계층
1. OSI 참조 모델의 목적
- 서로 다른 시스템 간을 상호 접속하기 위한 개념을 규정한다
- OSI 규격을 개발하기 위한 범위를 정한다
- 관련 규정의 적합성을 조절하기 위한 공통적 기반을 제공한다
2. OSI 참조 모델에서의 데이터 단위
- 프로토콜 데이터 단위(PDU; Protocol Data Unit) : 동일 계층 간에 교환되는 정보의 단위이다
ㄱ. 물리 계층 : 비트
ㄴ. 데이터 링크 계층 : 프레임
ㄷ. 네트워크 계층 : 패킷
ㄹ. 전송 계층 : 세그먼트
ㅁ. 세션, 표현, 응용 계층 : 메시지
- 서비스 데이터 단위(SDU; Service Data Unit) : 서비스 접근점(SAP)을 통해 상·하위 계층끼리 주고받는 정보의
단위이다
3. 물리 계층(Physical Layer)
: 전송에 필요한 두 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의한다
- 물리적 전송 매체와 전송 신호 방식을 정의하며, RS-232C, X.21 등의 표준이 있다
- 관련 장비 : 리피터, 허브
4. 데이터 링크 계층(Data Link Layer)
: 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 시스템 간 연결 설정과 유지 및
종료를 담당한다
- 물리적 연결을 이용해 신뢰성 있는 정보를 전송하려고 동기화, 오류제어, 흐름제어 등의 전송에러를 제어한다
ㄱ. 송신 측과 수신 측의 속도 차이를 해결하기 위한 흐름 제어 기능을 한다
ㄴ. 프레임의 시작과 끝을 구분하기 위한 프레임의 동기화 기능을 한다
ㄷ. 오류의 검출과 회복을 위한 오류 제어 기능을 한다
ㄹ. 프레임의 순서적 전송을 위한 순서 제어 기능을 한다
- HDLC, LAPB, LLC, MAC, LAPD, PPP 등의 표준이 있다
- 관련 장비 : 랜카드, 브리지, 스위치
5. 네트워크 계층(Network Layer, 망 계층)
: 개방 시스템들 간의 네트워크 연결을 관리하는 기능과 데이터의 교환 및 중계 기능을 한다
- 네트워크 연결을 설정, 유지, 해제하는 기능을 한다
- 발신지와 목적지의 논리 주소가 추가된 패킷을 최종 목적지까지 전달하는 책임을 진다
- 경로 설정(Routing), 데이터 교환 및 중계, 트래픽 제어, 패킷 정보 전송을 수행한다
- X.25, IP 등의 표준이 있다
- 관련 장비 : 라우터
6. 전송 계층(Transport Layer)
: 논리적 안정과 균일한 데이터 전송 서비스를 제공함으로써 종단 시스템(End-to-End) 간에 투명한 데이터 전송을
가능하게 한다
- OSI 7계층 중 하위 3계층과 상위 3계층의 인터페이스(Interface)를 담당한다
- 종단 시스템(End-to-End) 간의 전송 연결 설정, 데이터 전송, 연결 해제 기능을 한다
- 단말기 사이에 오류 수정과 흐름 제어를 수행하여 신뢰성 있고 명확한 데이터를 전달한다
- 주소 설정, 다중화(분할 및 재조립), 오류 제어, 흐름 제어를 수행한다
- TCP, UDP 등의 표준이 있다
- 관련 장비 : 게이트웨이
7. 세션 계층(Session Layer)
: 송·수신 측 간의 관련성을 유지하고 대화 제어를 담당한다
- 대화(회화) 구성 및 동기 제어, 데이터 교환 관리 기능을 한다
- 송·수신 측 간의 대화 동기를 위해 전송하는 정보의 일정한 부분에 체크점을 두어 정보의 수신 상태를 체크하며,
이때의 체크점을 동기점(Synchronization Point)이라고 한다
- 동기점은 오류가 있는 데이터의 회복을 위해 사용하는 것으로, 종류에는 소동기점과 대동기점이 있다
8. 표현 계층(Presentation Layer)
: 응용 계층으로부터 받은 데이터를 세션 계층에 보내기 전에 통신에 적당한 형태로 변환하고, 세션 계층에서 받는
데이터는 응용 계층에 맞게 변환하는 기능을 한다
- 서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층이다
- 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식(포맷) 변환, 문맥 관리 기능을 한다
9. 응용 계층(Application Layer)
: 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스를 제공한다
- 응용 프로세스 간의 정보 교환, 전자 사서함, 파일 전송, 가상 터미널 등의 서비스를 제공한다
∙네트워크 관련 장비
1. 네트워크 인터페이스 카드(NIC; Network Interface Card)
: 컴퓨터와 컴퓨터 또는 컴퓨터와 네트워크를 연결하는 장치로, 정보 전송 시 정보가 케이블을 통해 전송될 수
있도록 정보 형태를 변경한다
- 이더넷 카드(LAN 카드) 혹은 네트워크 어댑터라고도 한다
2. 허브(Hub)
: 한 사무실이나 가까운 거리의 컴퓨터들을 연결하는 장치로, 각 회선을 통합적으로 관리하며, 신호 증폭 기능을
하는 리피터의 역할도 포함된다
- 허브의 종류에는 더미 허브, 스위칭 허브가 있다
- 더미 허브(Dummy Hub)
ㄱ. 네트워크에 흐르는 모든 데이터를 단순히 연결하는 기능만을 제공한다
ㄴ. LAN이 보유한 대역폭을 컴퓨터 수만큼 나누어 제공한다
ㄷ. 네트워크에 연결된 각 노드를 물리적인 성형 구조로 연결한다
- 스위칭 허브(Switching Hub)
ㄱ. 네트워크상에 흐르는 데이터의 유무 및 흐름을 제어하여 각각의 노드가 허브의 최대 대역폭을 사용할 수 있는
지능형 허브이다
ㄴ. 최근에 사용되는 허브는 대부분 스위칭 허브이다
3. 리피터(Repeater)
: 전송되는 신호가 전송 선로의 특성 및 외부 충격 등의 요인으로 인해 원래의 형태와 다르게 왜곡되거나 약해질
경우 원래의 신호 형태로 재생하여 다시 전송하는 역할을 수행한다
- OSI 참조 모델의 물리 계층에서 동작하는 장비이다
- 근접한 네트워크 사이에 신호를 전송하는 역할로, 전송 거리의 연장 또는 배선의 자유도를 높이기 위한 용도로
사용한다
4. 브리지(Bridge)
: LAN과 LAN을 연결하거나 LAN 안에서의 컴퓨터 그룹(세그먼트)을 연결하는 기능을 수행한다
- 데이터 링크 계층 중 MAC(Media Access Control) 계층에서 사용되므로 MAC 브리지라고도 한다
- 네트워크 상의 많은 단말기들에 의해 발생되는 트래픽 병목 현상을 줄일 수 있다
- 네트워크를 분산적으로 구성할 수 있어 보안성을 높일 수 있다
- 브리지를 이용한 서브넷(Subnet) 구성 시 전송 가능한 회선 수는 브리지가 n개일 때, n(n-1)/2개이다
5. 스위치(Switch)
: 브리지와 같이 LAN과 LAN을 연결하여 훨씬 더 큰 LAN을 만드는 장치이다
- 하드웨어를 기반으로 처리하므로 전송 속도가 빠르다
- 포트마다 각기 다른 전송 속도를 지원하도록 제어할 수 있고, 수십에서 수백 개의 포트를 제공한다
- OSI 참조 모델의 데이터 링크 계층에서 사용된다
6. 라우터(Router)
: 브리지와 같이 LAN과 LAN의 연결 기능에 데이터 전송의 최적 경로를 선택할 수 있는 기능이 추가된 것으로,
서로 다른 LAN이나 LAN과 WAN의 연결도 수행한다
- OSI 참조 모델의 네트워크 계층에서 동작하는 장비이다
- 접속 가능한 경로에 대한 정보를 라우팅 제어표(Routing Table)에 저장하여 보관한다
- 3계층(네트워크 계층)까지의 프로토콜 구조가 다른 네트워크 간의 연결을 위해 프로토콜 변환 기능을 수행한다
7. 게이트웨이(Gateway)
: 전 계층(1~7계층)의 프로토콜 구조가 다른 네트워크의 연결을 수행한다
- 세션 계층, 표현 계층, 응용 계층 간을 연결하여 데이터 형식 변환, 주소 변환, 프로토콜 변환 등을 수행한다
- LAN에서 다른 네트워크에 데이터를 보내거나 다른 네트워크로부터 데이터를 받아들이는 출입구 역할을 한다
8. 네트워크 장비 설치 시 고려 사항
- 네트워크에 설치된 장비를 최대한 활용해야 한다
- 이후 시스템 확장이나 증설 등을 고려하여 설계한다
- 하드웨어와 소프트웨어는 최신 버전을 선정한다
- 트래픽을 분산시킬 수 있도록 설계한다
- 네트워크 관리나 유지 보수가 용이하게 설계한다
- 장애 발생 시 즉시 조치할 수 있도록 여유 포트를 고려하여 설계한다
- 신기술 도입 시 연동할 수 있는 미래 지향적인 네트워크 시스템을 구축한다
•프로토콜의 개념
: 서로 다른 기기들 간의 데이터 교환을 원활하게 수행할 수 있도록 표준화 시켜 놓은 통신 규약이다
- 통신을 제어하기 위한 표준 규칙과 절차의 집합으로 하드웨어와 소프트웨어, 문서를 모두 규정한다
1. 프로토콜의 기본 요소
- 구문(Syntax) : 전송하고자 하는 데이터의 형식, 부호화, 신호 레벨 등을 규정
- 의미(Semantics) : 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를
규정
- 시간(Timing) : 두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정
2. 프로토콜의 기능
단편화와 재결합 | - 송신 측에서 전송할 데이터를 전송에 알맞은 일정 크기의 작은 블록으로 자르는 작업을 단편화 (Fragmentation)라 하고, 수신 측에서 단편화된 블록을 원래의 데이터로 모으는 것을 재결합 (Reassembly)이라 한다 - 단편화를 통해 세분화된 데이터 블록을 프로토콜 데이터 단위(PDU, Protocol Data Unit)라고 한다 - 데이터를 단편화하여 전송하면 전송 시간이 빠르고, 통신중의 오류를 효과적으로 제어할 수 있다 - 너무 작은 블록으로 단편화할 경우 재결합 시 처리 시간이 길어지고, 실제 데이터 외에 부수적인 데이터가 많아지므로 비효율적이다 |
캡슐화 | - 캡슐화(Encapsulation)는 단편화된 데이터에 송·수신지 주소, 오류 검출 코드, 프로토콜 기능을 구현하기 위한 프로토콜 제어 정보 등의 정보를 부가하는 것으로, 요약화라고도 한다 - 대표적인 예가 데이터 링크 제어 프로토콜의 HDLC 프레임이다 - 정보 데이터를 오류 없이 정확하게 전송하기 위해 캡슐화를 수행한다 |
흐름 제어 | - 흐름 제어(Flow Control)는 수신 측의 처리 능력에 따라 송신 측에서 송신하는 데이터의 전송량이나 전송 속도를 조절하는 기능이다 - 정지-대기(Stop-and-Wait), 슬라이딩 윈도우(Sliding Window) 방식을 이용한다 |
오류 제어 | - 오류 제어(Error Control)는 전송중에 발생하는 오류를 검출하고 정정하여 데이터나 제어 정보의 파손에 대비하는 기능이다 - 자동반복 요청방식(ARQ; Automatic Repeat reQuest) ㄱ. 정지-대기(Stop-and-wait) : 송신 측이 하나의 블록을 전송한 후 수신 측에서 에러의 발생을 점검한 다음, 에러 발생 유무 신호를 보내올 때까지 기다리는 방식 ㄴ. Go-Back-N : 여러 블록을 연속적으로 전송하고, 수신 측에서 부정 응답(NAK)을 보내오면 송신 측이 오류가 발생한 블록부터 모두 재전송 ㄷ. 선택적 재전송(Selective-Repeat) : 여러 블록을 연속적으로 전송하고, 수신측에서 부정 응답(NAK)을 보내오면 송신 측이 오류가 발생한 블록만을 재전송 ㄹ. 적응적(Adaptive) : 전송 효율을 최대로 하기 위해서 데이터 블록의 길이를 채널의 상태에 따라 동적으로 변경하는 방식 |
동기화 | 동기화(SYnchronization)는 송·수신 측이 같은 상태를 유지하도록 타이밍(Timing)을 맞추는 기능이다 |
순서 제어 | - 순서 제어(Sequencing)는 전송되는 데이터 블록(PDU)에 전송 순서를 부여하는 기능으로, 연결 위주의 데이터 전송 방식에만 사용된다 - 송신 데이터들이 순서적으로 전송되도록 함으로써 흐름 제어 및 오류 제어를 용이하게 하는 기능을 한다 |
주소 지정 | - 주소 지정(Addressing)은 데이터가 목적지까지 정확하게 전송될 수 있도록 목적지 이름, 주소, 경로를 부여하는 기능이다 - 목적지 이름은 전송할 데이터가 가리키는 곳, 주소는 목적지의 위치, 경로는 목적지에 도착할 수 있는 방법을 의미한다 |
다중화 | 다중화(Multiplexing)는 한 개의 통신 회선을 여러 가입자들이 동시에 사용하도록 하는 기능이다 |
경로 제어 | 경로 제어(Routing)는 송·수신 측 간의 송신 경로 중에 최적의 패킷 교환 경로를 설정하는 기능이다 |
전송 서비스 | - 전송하려는 데이터가 사용하도록 하는 별도의 부가 서비스이다 - 우선순위 : 특정 메시지를 최대한 빠른 시간 안에 목적지로 전송하기 위하여 메시지 단위에 우선순위를 부여하여 우선순위가 높은 메시지가 먼저 도착하도록 한다 - 서비스 등급 : 데이터의 요구에 따라 서비스 등급을 부여하여 서비스한다 - 보안성 : 액세스 제한과 같은 보안 체제를 구현한다 |
•TCP/IP
: 인터넷에 연결된 서로 다른 기종의 컴퓨터들이 데이터를 주고받을 수 있도록 하는 표준 프로토콜이다
- 1960년대 말 ARPA에서 개발하여 ARPANET(1972)에서 사용하기 시작했다
- UNIX의 기본 프로토콜로 사용되었고, 현재 인터넷 범용 프로토콜로 사용된다
- 다음과 같은 기능을 수행하는 TCP 프로토콜과 IP 프로토콜이 결합된 것을 의미한다
TCP (Transmission Control Protocol) |
- OSI 7계층의 전송(Transport) 계측에 해당 - 신뢰성 있는 연결형 서비스를 제공 - 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능을 제공 - 스트림(Stream) 전송 기능 제공 - 기본 헤더 크기는 최소 20Byte, 최대 60Byte이고 Option값 포함 시 최대 40Byte 추가 가능 - TCP 헤더 ㄱ. Source/Destination Port Number ㄴ. 순서번호(Sequence Number) : 전달하는 바이트마다 번호가 부여된다 ㄷ. 수신번호 확인(Acknowledgment Number) : 상대편 호스트에서 받으려는 바이트의 번호를 정의한다 ㄹ. 체크섬(Checksum) : 데이터를 포함한 세그먼트의 오류를 검사한다 ㅁ. Window Size : 16비트로 2^16 = 65535byte = 64KB이다 |
IP (Internet Protocol) |
- OSI 7계층의 네트워크 계층에 해당 - 데이터그램을 기반으로 하는 비연결형 서비스를 제공 - 패킷의 분해/조립, 주소 지정, 경로 선택 기능을 제공 - 헤더의 길이는 최소 20Byte에서 최대 60Byte이다 - IP 헤더에는 Version, Header Length, Total Packet Length, Header Checksum, Source IP Address, Destination IP Address 등이 포함된다 |
1. TCP/IP의 구조
OSI | TCP/IP | 기능 |
응용 계층 표현 계층 세션 계층 |
응용 계층 | - 응용 프로그램 간의 데이터 송·수신 제공 - TELNET, FTP, SMTP, SNMP, DNS, HTTP 등 |
전송 계층 | 전송 계층 | - 호스트들 간의 신뢰성 있는 통신 제공 - TCP, UDP |
네트워크 계층 | 인터넷 계층 | - 데이터 전송을 위한 주소 지정, 경로 설정을 제공 - IP, ICMP, IGMP, ARP, RARP |
데이터 링크 계층 물리 계층 |
네트워크 액세스 계층 | - 실제 데이터(프레임)를 송·수신하는 역할 - Ethernet, IEEE 802, HDLC, X.25, RS-232C, ARQ 등 |
2. 응용 계층의 주요 프로토콜
FTP (File Transfer Protocol) |
컴퓨터와 컴퓨터 또는 컴퓨터와 인터넷 사이에서 파일을 주고받을 수 있도록 하는 원격 파일 전송 프로토콜 |
SMTP (Simple Mail Transfer Protocol) |
전자 우편을 교환하는 서비스 |
TELNET | - 멀리 떨어져 있는 컴퓨터에 접속하여 자신의 컴퓨터처럼 사용할 수 있도록 해주는 서비스 - 프로그램을 실행하는 등 시스템 관리 작업을 할 수 있는 가상의 터미널(Virtual Terminal) 기능을 수행 |
SNMP (Simple Network Management Protocol) |
TCP/IP의 네트워크 관리 프로토콜로, 라우터나 허브 등 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보내는 데 사용되는 표준 통신 규약 |
DNS (Domain Name System) |
도메인 네임을 IP 주소로 매핑(Mapping)하는 시스템 |
HTTP (HyperText Transfer Protocol) |
월드 와이드 웹(WWW)에서 HTML 문서를 송수신 하기 위한 표준 프로토콜 |
MQTT (Message Queuing Telemetry Transport) |
- 발행-구독 기반의 메시징 프로토콜로 IoT 환경에서 자주 사용됨 - 사물통신, 사물인터넷과 같이 대역폭이 제한된 통신환경에 최적화하여 개발된 푸시기술 기반의 경량 메시지 전송 프로토콜 - 메시지 매개자(Broker)를 통해 송신자가 특정 메시지를 발행하고 수신자가 메시지를 구독하는 방식 - IBM이 주도하여 개발 |
3. 전송 계층의 주요 프로토콜
TCP (Transmission Control Protocol) |
- 양방향 연결(Full Duplex Connection)형 서비스를 제공한다 - 가상 회선 연결(Virtual Circuit Connection) 형태의 서비스를 제공한다 - 스트림 위주의 전달(패킷 단위)을 한다 - 신뢰성 있는 경로를 확립하고 메시지 전송을 감독한다 - 전송 데이터와 응답 데이터를 함께 전송할 수 있다 - 순서 제어, 오류 제어, 흐름 제어 기능을 한다 - 송신 중에 링크를 유지관리하므로 신뢰성이 높다 - 패킷의 분실, 손상, 지연이나 순서가 틀린 것 등이 발생할 때 투명성이 보장되는 통신을 제공한다 - TCP 프로토콜의 헤더는 기본적으로 20Byte에서 60Byte까지 사용할 수 있는데, 선택적으로 40Byte를 더 추가할 수 있으므로 최대 100Byte까지 크기를 확장할 수 있다 - TCP를 사용하는 서비스 : FTP, SMTP, TELNET, HTTP 등 |
UDP (User Datagram Protocol) |
- 데이터 전송 전에 연결을 설정하지 않는 비연결형 서비스를 제공한다 - TCP에 비해 상대적으로 단순한 헤더 구조를 가지므로, 오버헤드가 적고, 흐름 제어나 순서 제어가 없어 전송 속도가 빠르다 - 고속의 안정성 있는 전송 매체를 사용하여 빠른 속도를 필요로 하는 경우, 동시에 여러 사용자에게 데이터를 전달할 경우, 정기적으로 반복해서 전송할 경우에 사용한다 - 실시간 전송에 유리하며, 신뢰성보다는 속도가 중요시되는 네트워크에서 사용된다 - UDP 헤더에는 Source Port Number, Destination Port Number, Length, Checksum 등이 포함된다 |
RTCP (Real-Time Control Protocol) |
- RTP(Real-time Transport Protocol) 패킷의 전송 품질을 제어하기 위한 제어 프로토콜이다 - 세션(Session)에 참여한 각 참여자들에게 주기적으로 제어 정보를 전송한다 - 하위 프로토콜은 데이터 패킷과 제어 패킷의 다중화(Multiplexing)를 제공한다 - 데이터 전송을 모니터링하고 최소한의 제어와 인증 기능만을 제공한다 - RTCP 패킷은 항상 32비트의 경계로 끝난다 |
4. 인터넷 계층의 주요 프로토콜
IP (Internet Protocol) |
- 전송할 데이터에 주소를 지정하고, 경로를 설정하는 기능을 한다 - 비연결형인 데이터그램 방식을 사용하는 것으로 신뢰성이 보장되지 않는다 |
ICMP (Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) |
IP와 조합하여 통신중에 발생하는 오류의 처리와 전송 경로 변경 등을 위한 제어 메시지를 관리하는 역할을 하며, 헤더는 8Byte로 구성된다 |
IGMP (Internet Group Management Protocol, 인터넷 그룹 관리 프로토콜) |
멀티캐스트를 지원하는 호스트나 라우터 사이에서 멀티캐스트 그룹 유지를 위해 사용된다 |
ARP (Address Resolution Protocol, 주소 분석 프로토콜) |
호스트의 IP 주소를 호스트와 연결된 네트워크 접속 장치의 물리적 주소 (MAC Address)로 바꾼다 |
RARP (Reverse Address Resolution Protocol) |
ARP와 반대로 물리적 주소를 IP 주소로 변환하는 기능을 한다 |
5. 네트워크 액세스 계층의 주요 프로토콜
Ethernet (IEEE 802.3) | CSMA/CD 방식의 LAN |
IEEE 802 | LAN을 위한 표준 프로토콜 |
HDLC | 비트 위주의 데이터 링크 제어 프로토콜 |
X.25 | 패킷 교환망을 통한 DTE와 DCE 간의 인터페이스를 제공하는 프로토콜 |
RS-232C | 공중 전화 교환망(PSTN)을 통한 DTE와 DCE 간의 인터페이스를 제공하는 프로토콜 |
● 기타
•상호배제 기법
- 데커의 알고리즘(Dekker Algorithm)
ㄱ. 프로세스가 두개일 때 상호 배제를 보장하는 최초의 알고리즘
ㄴ. Flag와 Turn 변수를 사용하여 조정
- 램퍼드 알고리즘(Lamport Algorithm)
ㄱ. 프로세스 n개의 상호 배제 문제를 해결한 알고리즘
ㄴ. 프로세스에게 고유한 번호를 부여하고, 번호를 기준으로 우선순위를 정하여 우선 순위가 높은 프로세스가 먼저
임계구역에 진입하도록 구현
- 피터슨 알고리즘(Peterson Algorithm)
ㄱ. 프로세스가 두개일 때 상호 배제를 보장, 데커의 알고리즘과 유사하지만 상대방에게 진입 기회를 양보한다는
차이가 있고 보다 더 간단하게 구현됨
- 세마포어(Semaphore)
P(S) : while S <= 0 do skip; S := S - 1; V(S) : S := S + 1; |
ㄱ. 공유된 자원의 데이터 혹은 임계영역 등에 여러 Process 혹은 Thread가 접근하는 것을 막아줌
(동기화 대상이 하나 이상)
'📃 Certification > 정보처리기사' 카테고리의 다른 글
[정보처리기사 필기] 합격수기 (0) | 2022.04.25 |
---|---|
[정보처리기사 필기] 5과목 정보시스템 구축 관리 (0) | 2022.04.17 |
[정보처리기사 필기] 3과목 데이터베이스 구축 (0) | 2022.04.08 |
[정보처리기사 필기] 2과목 소프트웨어 개발 (0) | 2022.04.06 |
[정보처리기사 필기] 1과목 소프트웨어 설계 (0) | 2022.04.04 |