정처기4: 프로그래밍 언어 활용

Starman·2021년 7월 29일
0

[ 프로그래밍 언어 활용 ]

1장. 서버 프로그램 구현

121 개발 환경 구축

하드웨어 환경

웹 서버(Web Server)의 기능
  • HTTP/HTTPS 지원
  • 통신 기록(Communication Log): 처리한 요청들을 로그 파일로 기록하는 기능
  • 정적 파일 관리(Managing Static Files): HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하는 기능
  • 대역폭 제한(Bandwidth Throttling): 네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한하는 기능
  • 가상 호스팅(Virtual Hosting): 하나의 서버로 여러 개의 도메인 이름을 연결하는 기능
  • 인증(Authentication): 사용자가 합법적인 사용자인지를 확인하는 기능

소프트웨어 환경

  • 시스템 소프트웨어
  • 개발 소프트웨어
개발 언어의 선정 기준
  • 적정성
  • 효율성
  • 이식성
  • 친밀성
  • 범용성

122 서버 개발

서버 개발 프레임워크

  • 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
프레임워크의 특성
  • 모듈화(Modularity): 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로서 소프트웨어의 품질을 향상시킴.
  • 재사용성(Reusability): 프레임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킴.
  • 확장성(Extensibility): 프레임워크는 다형성을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능함.
  • 제어의 역흐름(Inversion of Control): 개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킴.

서버 프로그램 구현

  • 서버 프로그램은 응용 소프트웨어와 동일하게 모듈 및 공통 모듈을 개발한 후, 모듈들을 통합하는 방식으로 구현됨.

123 보안 및 API

  • 소프트웨어 개발 보안은 데이터의 기밀성, 무결성, 가용성을 유지하는 것을 목표로 함.
  • 정부에서 제공하는 소프트웨어 개발 보안 가이드를 참고하여 소프트웨어 개발 과정에서 점검해야 할 보안 항목들을 점검함.

소프트웨어 개발 보안 점검 항목

  • 세션 통제
  • 입력 데이터 검증 및 표현
  • 보안 기능
  • 시간 및 상태
  • 에러 처리
  • 코드 오류
  • 캡슐화

124 배치 프로그램 (Batch Program)

  • 사용자와 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미
  • 자동으로 수행되는 주기에 따른 구분
    • 정기 배치
    • 이벤트성 배치
    • On-Demand 배치: 사용자 요청 시 수행
  • 배치 프로그램이 갖추어야 하는 필수 요소
    • 대용량 데이터
    • 자동화
    • 견고성
    • 안정성/신뢰성
    • 성능

배치 스케줄러 (Batch Scheduler)

  • 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
  • 잡 스케줄러(Job Scheduler)라고도 함.
  • ex) 스프링 배치, Quartz 등
스프링 배치 (Spring Batch)
  • 스프링 프레임워크의 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용할 수 있음.
  • 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능 제공
  • 주요 구성 요소와 역할
    • Job: 수행할 작업 정의
    • Job Launcher: 실행을 위한 인터페이스
    • Step: Job 처리를 위한 제어 정보
    • Job Repository: Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장
Quartz
  • 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리
  • 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공함.
  • 주요 구성 요소와 역할
    • Scheduler: 실행 환경 관리
    • Job: 수행할 작업 정의
    • JobDetail: Job의 상세 정보
    • Trigger: Job의 실행 스케줄 정의

125 패키지 소프트웨어 (Package Software)

  • 기업에서 일반적으로 사용하는 여러 기능들을 통합하여 제공하는 소프트웨어
  • 기업에서는 패키지 소프트웨어를 구입하여 기업 환경에 적합하게 커스터마이징하여 사용함.
  • 패키지 소프트웨어를 이용하여 시스템을 구축하는 방식을 패키지 개발 방식이라 함.
  • 기능 요구사항을 70% 이상 충족시키는 패키지 소프트웨어가 있을 때만 사용하는 것이 적합함.

2장. 프로그래밍 언어 활용

126 데이터 타입

127 변수

기억 클래스

  • 변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데, 할당되는 기억영역에 따라 사용 범위에 제한이 있음. 이러한 기억영역을 결정하는 작업을 기억 클래스(Storage Class)라 함.
  • C언어의 5가지 기억 클래스
    • 자동 변수(Automatic Variable)
      • 함수나 코드의 범위를 한정하는 블록 내에서 선언되는 변수
      • 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸됨.
      • 초기화하지 않으면 쓰레기값(Garbage Value)이 저장됨.
      • 예약어 auto (생략 가능)
    • 외부 변수(External Variable)
      • 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조하기 위한 변수
      • 함수 밖에서 선언함.
      • 함수가 종료된 뒤에도 값이 소멸되지 않음.
      • 초기화하지 않으면 자동으로 0으로 초기화됨.
      • 다른 파일에서 선언된 변수를 참조할 경우 초기화할 수 없음.
      • 예약어 extern
    • 정적 변수(Static Variable)
      • 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 정적 변수가 있음.
      • 내부 정적 변수는 선언한 함수나 블록 내에서만 사용할 수 있고, 외부 정적 변수는 모든 함수에서 사용할 수 있음.
      • 두 변수 모두 함수나 블록이 종료된 뒤에도 값이 소멸되지 않음.
      • 초기화는 변수 선언 시 한 번만 할 수 있으며, 초기화를 생략하면 자동으로 0으로 초기화됨.
      • 예약어 static
    • 레지스터 변수(Register Variable)
      • 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수
      • 자주 사용되는 변수를 레지스터에 저장하여 처리 속도를 높이기 위해 사용함.
      • 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸됨.
      • 레지스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 경우 자동 변수로 취급되어 메모리에 할당됨.
      • CPU에 저장되어 메모리 주소를 가질 수 없기 때문에 변수의 주소를 구하는 주소연산자(&)를 사용할 수 없음.
      • 예약어 register

128 연산자

비트 연산자

(p.563)

129 제어문

130 반복문

131 배열과 문자열

배열 형태의 문자열 변수

  • C언어에서는 큰따옴표(" ")로 묶인 글자는 글자 수에 관계없이 문자열로 처리됨.
  • C언어에서는 문자열을 저장하는 자료형이 없기 때문에 배열, 또는 포인터를 이용하여 처리함.
  • 형식
    • char 배열이름[크기] = "문자열"
  • 배열에 문자열을 저장하면 문자열의 끝을 알리기 위한 널 문자('\0')가 문자열 끝에 자동으로 삽입됨.
  • 배열에 문자열을 저장할 때는 배열 선언 시 초기값으로 지정해야 하며, 이미 선언된 배열에는 문자열을 저장할 수 없음.
  • 문자열 끝에 자동으로 널 문자('\0')가 삽입되므로, 널 문자까지 고려하여 배열 크기를 지정해야 함.
JAVA의 문자열
  • 자바는 문자열을 처리할 수 있도록 클래스를 제공함.

132 포인터

  • 포인터는 변수의 주소
  • C언어에서는 주소를 제어할 수 있는 기능을 제공함.
  • C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라 함.
    • ex) int *a; a = &b;
    • ex) c = *a; // c에는 포인터 변수 a가 가리키는 곳의 값이 저장됨.
  • 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수
메모리 영역
  • 운영체제는 다음과 같이 메모리 영역을 할당하여 프로그램을 관리함
    • 코드 영역: 실행할 프로그램의 코드가 저장됨.
    • 데이터 영역: 전역 변수와 정적 변수가 저장됨.
    • 힙 영역: 필요에 의해 동적으로 할당되는 영역임.
    • 스택 영역: 함수의 매개 변수와 지역 변수가 저장됨.

포인터와 배열

  • 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있음.
  • 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같음.
  • 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용함.
int a[3], *b;
b = a       // 배열의 대표명을 적었으므로 a 배열의 시작 주소인 a[0]의 주소를 b에 저장함.
b = &a[0]   // a 배열의 첫 번째 요소인 a[0]의 주소(&)를 b에 저장함.
/*
a[0]  -->  *(a+0)
a[1]  -->  *(a+1)
a[2]  -->  *(a+2)
*/
  • 배열의 요소가 포인터인 포인터형 배열을 선언할 수 있음.

133 절차적 프로그래밍 언어

134 객체지향 프로그래밍 언어

객체지향 프로그래밍 언어의 구성 요소

  • 객체(Object)
  • 클래스(Class)
  • 메시지(Message)
    • 객체들 간에 상호작용을 하는데 사용되는 수단으로 객체의 메소드(동작, 연산)를 일으키는 외부의 요구 사항
    • 메시지를 받은 객체는 대응하는 연산을 수행하여 예상된 결과를 반환하게 됨.

객체지향 프로그래밍 언어의 특징

  • 캡슐화(Encapsulation)
  • 정보 은닉(Information Hiding)
  • 추상화(Abstraction)
  • 상속성(Inheritance)
  • 다형성(Polymorphism)

135 스크립트 언어

136 선언형 언어

  • 선언형 언어는 명령형 언어와 반대되는 개념의 언어로, 명령형 언어가 문제를 해결하기 위한 방법을 기술한다면 선언형 언어는 프로그램이 수행해야 할 문제를 기술하는 언어
  • 선언형 언어는 목표를 명시하고 알고리즘은 명시하지 않음.
  • 함수형 언어와 논리형 언어 등이 있음.
    • 함수형 언어
      • 수학적 함수를 조합하여 문제를 해결하는 언어로, 알려진 값을 함수에 적용하는 것을 기반으로 함.
      • 적용형 언어라고도 함.
      • 재귀호출이 자주 이용됨.
      • 병렬 처리에 유리함
      • 종류: LISP
    • 논리형 언어
      • 기호 논리학에 기반을 둔 언어로, 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행함.
      • 선언적 언어라고도 함.
      • 반복문이나 선택문을 사용하지 않음.
      • 비절차적 언어
      • 종류: PROLOG
    • 그외... (HTML의 경우 선언형 언어지만 함수형 언어도, 논리형 언어도 아님.)
명령형 언어
  • 순차적인 명령 수행을 기본으로 하는 언어로, 문제를 처리하기 위한 방법에 초점을 두고 코드를 작성함.
  • 폰노이만 구조에 개념적인 기초를 두고 있음.
  • 명령형 언어는 알고리즘을 명시하고 목표는 명시하지 않음.
  • 개체의 동작과 상태를 중요시함.
  • 명령형 언어에는 절차적 언어와 객체지향 언어가 있음.

선언형 언어의 장·단점

  • 가독성이나 재사용성이 좋음.
  • 작동 순서를 구체적으로 작성하지 않기 때문에 오류가 적음.
  • 프로그램 동작을 변경하지 않고도 관련 값을 대체할 수 있음.

선언형 프로그래밍 언어 종류

  • HTML
  • LISP
    • 인공지능 분야에 사용되는 언어
    • 기본 자료 구조가 연결 리스트 구조이며, 재귀 호출을 많이 사용함.
  • PROLOG
    • 논리학을 기초로 한 고급 언어로, 인공 지능 분야에서의 논리적인 추론이나 리스트 처리 등에 주료 사용됨.
  • XML
  • Haskell
    • 함수형 프로그래밍 언어로 부작용(Side Effect)이 없음.
    • 코드가 간결하고 에러 발생 가능성이 낮음.

137 라이브러리

138 데이터 입·출력

C언어의 표준 입·출력 함수의 개요

  • 표준 입출력 함수(Input-Output Functions)란 키보드로 입력받아 화면으로 출력할 때 사용하는 함수
  • 대표적으로 scanf(), getchar(), gets(), printf(), putchar(), puts() 등이 있음.

scanf() 함수

  • C언어의 표준 입력 함수로, 키보드로 입력받아 변수에 저장하는 함수
  • scanf(서식 문자열, 변수의 주소)
    • 서식 문자열: 입력받을 데이터의 자료형을 지정
    • 변수의 주소: 데이터를 입력받을 변수를 적음. 변수에 주소연산자 &을 붙임.
    • ex) scanf("%3d", &a)
  • 입력받을 데이터의 자료형, 자릿수 등을 지정할 수 있음.
  • 한 번에 여러 개의 데이터를 입력 받을 수 있음.
  • 서식 문자열과 변수의 자료형은 일치해야 함.
서식 문자열
  • %d : 정수형 10진수를 입·출력하기 위해 지정
  • %u : 부호없는 정수형 10진수를 입·출력하기 위해 지정
  • %o : 정수형 8진수를 입·출력하기 위해 지정
  • %x : 정수형 16진수를 입·출력하기 위해 지정
  • %c : 문자를 입·출력하기 위해 지정
  • %s : 문자열을 입·출력하기 위해 지정
  • %f : 소수점을 포함하는 실수를 입·출력하기 위해 지정
  • %e : 지수형 실수를 입·출력하기 위해 지정
  • %ld: long형 10진수를 입·출력하기 위해 지정
  • %lo: long형 8진수를 입·출력하기 위해 지정
  • %lx: long형 16진수를 입·출력하기 위해 지정
  • %p : 주소를 16진수로 입·출력하기 위해 지정
  • 서식 문자열은 printf() 함수로 출력할 때도 동일하게 적용됨.

printf() 함수

  • C언어의 표준 출력 함수로, 인수로 주어진 값을 화면에 출력하는 함수
  • printf(서식 문자열, 변수)
주요 제어문자
  • 제어문자란 입력 혹은 출력 내용을 제어하는 문자
  • \n
    (생략. p.614)

기타 표준 입·출력 함수

  • 입력
    • getchar() : 키보드로 한 문자를 입력받아 변수에 저장하는 함수
    • gets() : 키보드로 문자열을 입력받아 변수에 저장하는 함수로, Enter를 누르기 전까지를 하나의 문자열로 인식하여 저장함.
  • 출력
    • putchar() : 인수로 주어진 한 문자를 화면에 출력하는 함수
    • puts() : 인수로 주어진 문자열을 화면에 출력한 후 커서를 자동으로 다음 줄 앞으로 이동하는 함수

139 예외 처리

JAVA의 예외 처리

  • JAVA는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java.lang 패키지에서 제공함.

140 프로토타입 (Prototype)

  • 프로그래밍 언어에서 프로토타입이란 함수 원형(Function Prototype)이라는 의미로, 컴파일러에게 사용될 함수에 대한 정보를 미리 알리는 것
  • 함수가 호출되기 전에 함수가 미리 정의되는 경우에는 프로토타입을 정의하지 않아도 됨.
  • 프로토타입은 본문이 없다는 점을 제외하고 함수 정의와 형태가 동일함.
  • 프로토타입에 정의된 반환 형식은 함수 정의에 지정된 반환 형식과 반드시 일치해야 함.

C언어에서의 프로토타입 선언

  • C언어에서 프로토타입은 main() 함수 바깥쪽에 선언해야 함.

3장. 응용 SW 기초 기술 활용

141 운영체제의 개념

운영체제의 성능 평가 기준

  • 처리 능력 (Throughput): 일정 시간 내에 시스템이 처리하는 일의 양
  • 반환 시간 (Turn Around Time): 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
  • 사용 가능도 (Availability): 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
  • 신뢰도 (Reliability): 시스템이 주어진 문제를 정확하게 해결하는 정도

운영체제의 주요 자원 관리

  • 프로세스 관리
    • 프로세스 스케줄링 및 동기화 관리 담당
    • 프로세스 생성과 제거, 시작과 정지, 메시지 전달 당의 기능 담당
  • 기억장치 관리
    • 프로세스에게 메모리 할당 및 회수 관리 담당
  • 주변장치 관리
    • 입·출력 장치 스케줄링 및 전반적인 관리 담당
  • 파일 관리
    • 파일의 생성과 삭제, 변경, 유지 등의 관리 담당

142 Windows

  • 주요 특징에는 GUI, 선점형 멀티태스킹, OLE, PnP 등
선점형 멀티태스킹 (Preemptive Multi-Tasking)
  • 동시에 여러 개의 프로그램을 실행하는 멀티태스킹을 하면서 운영체제가 각 작업의 CPU 이용 시간을 제어하여 응용 프로그램 실행중 문제가 발생하면 해당 프로그램을 강제 종료시키고 모든 시스템 자원을 반환하는 방식
  • 하나의 응용 프로그램이 CPU를 독점하는 것을 방지할 수 있어 시스템 다운 현상 없이 더욱 안정적인 작업 가능
PnP (Plug and Play, 자동 감지 기능)
  • 하드웨어와 소프트웨어가 모두 PnP를 지원해야 함.
OLE (Object Linking and Embedding)
  • 다른 여러 응용 프로그램에서 작성된 문자나 그림 등의 개체(Object)를 현재 작성 중인 문서에 자유롭게 연결(Linking)하거나 삽입(Embedding)하여 편집할 수 있게 하는 기능
  • OLE로 연결된 이미지를 원본 프로그램에서 수정하거나 편집하면 그 내용이 그대로 해당 문서에 반영됨.
255자의 긴 파일명
  • Windows에서는 파일 이름을 지정할 때 VFAT(Virtual File Allocation Table)를 이용하여 최대 255자까지 지정할 수 있음.
Single-User 시스템
  • 컴퓨터 한 대를 한 사람만이 독점해서 사용함.

143 UNIX / LINUX / MacOS

UNIX

  • 1960년대 AT&T 벨(Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제
  • 시분할 시스템(Time Sharing System)을 위해 설계된 대화식 운영체제
  • 소스가 공개된 개방형 시스템(Open System)
  • 대부분 C언어로 작성되어 있어 이식성이 높으며 장치, 프로세스 간의 호환성이 높음.
  • 크기가 작고 이해하기가 쉬움.
  • 다중 사용자(Multi-User), 다중 작업(Multi-Tasking)을 지원
  • 많은 네트워킹 기능을 제공하므로 통신망(Network) 관리용 운영체제로 적합함.
  • 트리 구조의 파일 시스템
  • 전문적인 프로그램 개발에 용이
  • 다양한 유틸리티 프로그램들
UNIX에서의 프로세스 간 통신(IPC)
  • 각 프로세스는 시스템 호출을 통해 커널의 기능을 사용하며, 프로세스 간 통신은 시그널, 파이프, 소켓 등을 사용
    • 시스템 호출: 프로세스가 커널에 접근하기 위한 인터페이스를 제공하는 명령어

144 기억장치 관리의 개요

기억장치 계층 구조의 특징

  • (상위) 레지스터 ㅡ 캐시 기억장치 ㅡ 주기억장치 ㅡ 보조기억장치 (하위)
  • 계층 구조에서 상위의 기억장치일수록 접근 속도와 접근 시간이 빠르지만, 기억 용량이 적고 고가임.
  • 주기억장치는 각기 자신의 주소를 갖는 워드 또는 바이트들로 구성되어 있으며, 주소를 이용하여 액세스할 수 있음.
  • 레지스터, 캐시 기억장치, 주기억장치의 프로그램과 데이터는 CPU가 직접 액세스 할 수 있으나 보조기억장치에 있는 프로그램이나 데이터는 직접 액세스할 수 없음.
  • 보조기억장치에 있는 데이터는 주기억장치에 적재된 후 CPU에 의해 액세스될 수 있음.

기억장치의 관리 전략의 개요

  • 기억장치의 관리 전략은 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 적재 위치 등을 지정하여 한정된 주기억장치의 공간을 효율적으로 사용하기 위한 것.
  • 반입 전략, 배치 전략, 교체 전략이 있음.

반입(Fetch) 전략

  • 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
  • 요구 반입(Demand Fetch): 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법
  • 예상 반입(Anticipatory Fetch): 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법

배치(Placement) 전략

  • 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략
  • 최초 적합(First Fit): 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에 배치시키는 방법
  • 최적 적합(Best Fit): 프로그램이나 데이터가 갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치시키는 방법
  • 최악 적합(Worst Fit): 프로그램이나 데이터가 갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치시키는 방법

교체(Replacement) 전략

  • 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때, 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략
  • FIFO, OPT, LRU, LFU, NUR, SCR 등이 있음.

145 주기억장치 할당 기법

주기억장치 할당의 개념

  • 주기억장치 할당 기법은 프로그램이나 데이터를 실행시키기 위해 주기억장치에 어떻게 할당할 것인지에 대한 내용이며, 연속 할당 기법과 분산 할당 기법으로 분류할 수 있음.
  • 연속 할당 기법: 프로그램을 주기억장치에 연속으로 할당하는 기법으로, 단일 분할 할당 기법과 다중 분할 할당 기법이 있음.
    • 단일 분할 할당 기법: 오버레이, 스와핑
    • 다중 분할 할당 기법: 고정 분할 할당 기법, 동적 분할 할당 기법
  • 분산 할당 기법: 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법으로, 페이징 기법과 세그먼테이션 기법이 있음.
    • 가상기억장치 관리 기법이라고도 함.

단일 분할 할당 기법

  • 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법
  • 가장 단순한 기법으로 초기의 운영체제에서 많이 사용하던 기법
  • 운영체제를 보호하고, 프로그램이 사용자 영역만을 사용하기 위해 운영체제 영역과 사용자 영역을 구분하는 경계 레지스터(Boundary Register)가 사용됨.
  • 프로그램의 크기가 작을 수록 사용자 영역이 낭비될 수 있음.
오버레이(Overlay) 기법
  • 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법
  • 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행함.
  • 프로그램이 실행되면서 주기억장치의 공간이 부족하면 주기억장치에 적재된 프로그램의 조각 중 불필요한 조각이 위치한 장소에 새로운 프로그램의 조각을 중첩(Overlay)하여 적재함.
  • 프로그램을 여러 개의 조각으로 분할하는 작업은 프로그래머가 수행해야 하므로 프로그래머는 시스템 구조나 프로그램 구조를 알아야 함.
스와핑(Swapping) 기법
  • 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법
  • 주기억장치에 있는 프로그램이 보조기억장치로 이동되는 것을 Swap Out, 보조기억장치에 있는 프로그램이 주기억장치로 이동되는 것을 Swap In이라고 함.
  • 하나의 사용자 프로그램이 완료될 때까지 교체 과정을 여러 번 수행할 수 있음.
  • 가상기억장치의 페이징 기법으로 발전됨.

다중 분할 할당 기법

고정 분할 할당(Multiple contiguous Fixed parTition allocation, MFT) 기법 = 정적 할당(Static Allocation) 기법
  • 프로그램을 할당하기 전에 운영체제가 주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행하는 기법

  • 프로그램을 실행하려면 프로그램 전체가 주기억장치에 위치해야 함.

  • 프로그램이 분할된 영역보다 커서 영역 안에 들어갈 수 없는 경우가 발생할 수 있음.

  • 일정한 크기의 분할 영역에 다양한 크기의 프로그램이 할당되므로 내부 단편화 및 외부 단편화가 발생하여 주기억장치의 낭비가 많음.

    • 내부 단편화: 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아 있는 빈 공간
    • 외부 단편화: 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고 빈 공간으로 남아 있는 분할된 전체 영역
  • 실행할 프로그램의 크기를 미리 알고 있어야 함.

  • 다중 프로그래밍을 위해 사용되었으나 현재는 사용되지 않음.

  • 고정 분할 할당 기법은 절대 번역과 적재, 재배치 번역과 적재로 구분할 수 있음.

    • 절대 번역과 적재 : 프로그램이 할당될 분할 영역을 어셈블러나 컴파일러가 지정하는 방식으로, 각 프로그램은 분할된 각 영역의 준비상태 큐에서 기다리며, 다른 분할 영역이 비어 있다 하더라도 지정된 분할 영역만을 사용해야 함.
    • 재배치 번역과 적재 : 프로그램이 할당될 영역이 미리 지정되지 않고, 하나의 준비상태 큐에서 기다린 순서대로 분할 영역에 할당되는 방식
가변 분할 할당(Multiple contiguous Variable parTition allocation, MVT) 기법 = 동적 할당(Dynamic Allocation) 기법
  • 고정 분할 할당 기법의 단편화를 줄이기 위한 것으로, 미리 주기억장치를 분할해 놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할하는 기법
  • 주기억장치를 효율적으로 사용할 수 있으며, 다중 프로그래밍의 정도를 높일 수 있음.
  • 고정 분할 할당 기법에 비해 실행될 프로세스 크기에 대한 제약이 적음.
  • 단편화를 상당 부분 해결할 수 있으나 영역과 영역 사이에 단편화가 발생될 수 있음.

146 가상기억장치 구현 기법 / 페이지 교체 알고리즘

가상기억장치의 개요

  • 가상기억장치는 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것으로, 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법
  • 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리함.
    • 블록: 보조기억장치와 주기억장치 간에 전송되는 데이터의 최소 단위
  • 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용함.
  • 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있음.
  • 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸는 주소 변환 작업이 필요함.
    • 주소 변환: 가상기억장치에 있는 프로그램이 주기억장치에 적재되어 실행될 때 논리적인 가상주소를 물리적인 실기억주소로 변환하는 것. 주소 사상 또는 주소 매핑(Mapping)이라고도 함.
  • 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있음.
  • 구현 방법에는 블록의 종류에 따라 페이징 기법과 세그먼테이션 기법이 있음.

페이징(Paging) 기법

  • 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법
  • 프로그램을 일정한 크기로 나눈 단위를 페이지(Page)라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임(Page Frame)이라고 함.
  • 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있음.
  • 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블(Page Map Table)이 필요함.
  • 페이지 맵 테이블 사용으로 비용이 증가되고, 처리 속도가 감소됨.

세그먼테이션(Segmentation) 기법

  • 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
  • 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트(Segmentation)라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖음.
  • 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법임.
  • 세그먼테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위함.
  • 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블(Segment Map Table)이 필요함.
  • 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치 보호키(Storage Protection Key)가 필요함.
  • 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있음.

페이지 교체 알고리즘

  • 페이지 교체 알고리즘은 페이지 부재(Page Fault)가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데, 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법
    • 페이지 부재(Page Fault): CPU가 액세스한 가상 페이지가 주기억장치에 없는 경우. 페이지 부재가 발생하면 해당 페이지를 디스크에서 주기억장치로 가져와야 함.
  • 페이지 교체 알고리즘에는 OPT, FIFO, LRU, LFU, NUR, SCR 등이 있음.
OPT (OPTimal replacement, 최적 교체)
  • 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
  • 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘
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)가 사용됨.
SCR (Second Chance Replacement, 2차 기회 교체)
  • 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO 기법의 단점을 보완하는 기법

147 가상기억장치 기타 관리 사항

  • 가상기억장치를 구현할 때 시스템의 성능에 영향을 미치는 페이지 크기나 Locality, 워킹 셋, 페이지 부재 빈도, 프리페이징 등

페이지 크기

  • 페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데, 페이지의 크기에 따라 시스템에 미치는 영향이 다름.
  • 페이지 크기가 작을 경우
    • 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어듬.
    • 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋을 유지할 수 있음.
    • Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아짐.
    • 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어짐.
    • 디스크 접근 횟수가 많아져서 전체적인 입출력 시간은 늘어남.
  • 페이지 크기가 클 경우
    • 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라짐.
    • 디스크 접근 횟수가 줄어들어 전체적인 입출력의 효율성이 증가됨.
    • 페이지 단편화가 증가되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어남.
    • 프로세스(프로그램) 수행에 불필요한 내용까지도 주기억장치에 적재될 수 있음.

Locality

  • Locality(국부성, 지역성, 구역성, 국소성)는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론
  • 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 됨.
  • 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 됨.
  • 데닝 교수에 의해 구역성의 개념이 증명되었으며 캐시 메모리 시스템의 이론적 근거임.
  • 시간 구역성과 공간 구역성이 있음.
    • 시간 구역성 (Temporal Locality)
      • 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상
      • 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미
      • 시간 구역성이 이루어지는 기억 장소 : Loop(반복), 스택(Stack), 부 프로그램(Sub Routine), Counting(1씩 증감), 집계(Totaling)에 사용되는 변수(기억 장소)
    • 공간 구역성 (Spatial Locality)
      • 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상
      • 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미
      • 공간 구역성이 이루어지는 기억 장소 : 배열 순회(Array Traversal), 순차적 코드의 실행, 프로그래머들이 관련된 변수(데이터를 저장할 기억장소)들을 서로 근처에 선언하여 할당되는 기억장소, 같은 영역에 있는 변수를 참조할 때 사용

워킹 셋 (Working Set)

  • 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
  • 데닝이 제안한 프로그램의 움직임에 대한 모델로, 프로그램의 Locality 특징을 이용함.
  • 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정됨.
  • 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋은 시간에 따라 변경됨.

페이지 부재 빈도 방식

  • 페이지 부재(Page Fault)는 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상이며, 페이지 부재 빈도(PFF; Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미
  • 페이지 부재 빈도 방식은 페이지 부재율(Page Fault Rate)에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식
  • 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당하고, 페이지 부재율을 지속적으로 감시하고 있다가 부재율이 상한선을 넘어가면 좀더 많은 페이지 프레임을 할당하고, 부재율이 하한선을 넘어가면 페이지 프레임을 회수하는 방식을 사용함.

프리페이징 (Prepaging)

  • 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법
  • 기억장치에 들어온 페이지들 중에서 사용되지 않는 페이지가 많을 수도 있음.

스래싱 (Thrashing)

  • 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
  • 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정 중 자주 페이지 부재가 발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하됨.
  • 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 됨.
  • 스래싱 현상 방지 방법
    • 다중 프로그래밍의 정도를 적정 수준으로 유지
    • 페이지 부재 빈도를 조절하여 사용
    • 워킹 셋을 유지
    • 부족한 자원을 증설하고, 일부 프로세스를 중단
    • CPU 성능에 대한 자료의 지속적 관리 및 분석으로 임계치를 예상하여 운영

148 프로세스의 개요

  • 프로세스(Process)는 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미. 작업(Job), 태스크(Task)라고도 함.
  • 프로세스는 다음과 같이 여러 형태로 정의 가능
    • PCB를 가진 프로그램
    • 실기억장치에 저장된 프로그램
    • 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
    • 프로시저가 활동중인 것 // 프로시저- 한 프로그램은 여러 개의 작은 프로그램으로 분할될 수 있는데, 이때 분할된 작은 프로그램을 의미
    • 비동기적 행위를 일으키는 주체
    • 지정된 결과를 얻기 위한 일련의 계통적 동작
    • 목적 또는 결과에 따라 발생되는 사건들의 과정
    • 운영체제가 관리하는 실행 단위

PCB (Process Control Block, 프로세스 제어 블록)

  • 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳. Task Control Block 또는 Job Control Block 이라고도 함.

  • 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됨.

  • PCB에 저장되어 있는 정보

    • 프로세스의 현재 상태
      • 준비, 대기, 실행 등의 프로세스 상태
    • 포인터
      • 부모 프로세스에 대한 포인터: 부모 프로세스의 주소 기억
      • 자식 프로세스에 대한 포인터: 자식 프로세스의 주소 기억
      • 프로세스가 위치한 메모리에 대한 포인터: 현재 프로세스가 위치한 주소 기억
      • 할당된 자원에 대한 포인터: 프로세스에 할당된 각 자원에 대한 주소 기억
    • 프로세스 고유 식별자
      • 프로세스를 구분할 수 있는 고유의 번호
    • 스케줄링 및 프로세스의 우선순위
      • 스케줄링 정보 및 프로세스가 실행될 우선순위
    • CPU 레지스터 정보
      • Accumulator(누산기), 인덱스 레지스터, 범용 레지스터, 프로그램 카운터(PC) 등에 대한 정보
    • 주기억장치 관리 정보
      • 기준 레지스터(Base Register), 페이지 테이블(Page Table)에 대한 정보
        • 기준 레지스터: 주기억장치가 분할된 영역으로 나뉘어 관리될 때, 프로그램이 한 영역에서 다른 영역으로 옮겨지더라도 명령의 주소 부분을 바꾸지 않고 정상적으로 수행될 수 있도록 하기 위한 레지스터
    • 입·출력 상태 정보
      • 입·출력장치, 개방된 파일 목록
    • 계정 정보
      • CPU 사용 시간, 실제 사용 시간, 한정된 시간

프로세스 상태 전이

  • 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것을 의미
  • 프로세스의 상태는 제출, 접수, 준비, 실행, 대기 상태로 나눌 수 있으며, 이 중 주요 세 가지 상태는 준비, 실행, 대기 상태임.
  • 제출(Submit): 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태
  • 접수(Hold): 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태
  • 준비(Ready)*
    • 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태
    • 프로세스는 준비상태 큐에서 실행을 준비
    • 접수 상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행됨
  • 실행(Run)*
    • 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태
    • 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료(Timer Run Out)되면 프로세스는 준비 상태로 전이됨.
    • 실행중인 프로세스에 입·출력(I/O) 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이됨.
    • 준비 상태에서 실행 상태로의 전이는 CPU(프로세서) 스케줄러에 의해 수행
  • 대기(Wait)*, 보류, 블록(Block): 프로세스에 입·출력 처리가 필요한 현재 실행 중인 프로세스가 중단되고, 입·출력 처리가 완료될 때까지 대기하고 있는 상태
  • 종료(Terminated, Exit): 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태
프로세스 상태 전이 관련 용어
  • Dispatch: 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 중인 상태로 전이되는 과정
  • Wake Up: 입·출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정
  • Spooling: 입·출력장치의 공유 및 상대적으로 느린 입·출력장치의 처리 속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기 위해 입·출력할 데이터를 직접 입·출력장치에 보내지 않고 나중에 한꺼번에 입·출력하기 위해 디스크에 저장하는 과정
  • 교통량 제어기(Traffic Controller): 프로세스의 상태에 대한 조사와 통보를 담당

스레드 (Thread)

  • 프로세스 내에서의 작업 단위. 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위.
  • 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 함.
  • 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당함.
  • 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능함.
  • 스레드의 분류
    • 사용자 수준의 스레드: 사용자가 만든 라이브러리를 사용하여 스레드를 운용. 속도는 빠르지만 구현이 어려움.
    • 커널 수준의 스레드: 운영체제의 커널에 의해 스레드를 운용. 구현이 쉽지만 속도가 느림.
  • 스레드 사용의 장점
    • 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진
    • 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상
    • 응용 프로그램의 응답 시간(Response Time)을 단축
    • 실행 환경을 공유시켜 기억장소의 낭비가 줄어듬.
    • 프로세스들 간의 통신이 향상됨.
    • 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신함.

149 스케줄링 (Scheduling)

  • 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업을 의미

  • 프로세스가 생성되어 완료될 때까지 프로세스는 여러 종류의 스케줄링 과정을 거치게 됨.

  • 종류

    • 장기 스케줄링
      • 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 준비상태 큐로 보내는 작업
      • 작업 스케줄링(Job Scheduling), 상위 스케줄링이라고도 하며, 작업 스케줄러에 의해 수행
    • 중기 스케줄링
      • 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업
      • CPU를 할당받으려는 프로세스가 많을 경우 프로세스를 일시 보류시킨 후 활성화해서 일시적으로 부하를 조절
    • 단기 스케줄링
      • 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업
      • 프로세서 스케줄링(Processor Scheduling), 하위 스케줄링이라고도 함.
      • 프로세서 스케줄링 및 문맥 교환은 프로세서 스케줄러에 의해 수행됨.
  • 문맥 교환(Context Switching): 하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생되는 것. 새로운 프로세스에 CPU를 할당하기 위해 현재 CPU가 할당된 프로세스의 상태 정보를 저장하고, 새로운 프로세스의 상태 정보를 설정한 후 CPU를 할당하여 실행되도록 하는 작업

스케줄링의 목적

  • 스케줄링은 CPU나 자원을 효율적으로 사용하기 위한 정책

  • 공정성

  • 처리율(량) 증가

  • CPU 이용률 증가

  • 우선순위 제도

  • 오버헤드 최소화

  • 응답 시간(Response Time, 반응 시간) 최소화

  • 반환 시간(Turn Around Time) 최소화

  • 대기 시간 최소화

  • 균형 있는 자원의 사용

  • 무한 연기 회피

  • 스케줄링의 성능 평가 기준: 스케줄링의 목적 중 CPU 이용률, 처리율, 반환 시간, 대기 시간, 응답 시간

프로세스 스케줄링의 기법

비선점(Non-Preemptive) 스케줄링
  • 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법
  • 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용함
  • 모든 프로세스에 대한 요구를 공정하게 처리할 수 있음.
  • 프로세스 응답 시간의 예측이 용이. 일괄 처리 방식에 적합
  • 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있음.
  • 종류에는 FCFS, SJF, 우선순위, HRN, 기한부 등의 알고리즘이 있음.
    • FIFO(First-In First-Out) = FCFS(First-Come First-Service)
    • SJF(Shortest Job First): 실행 시간이 긴 프로세스가 뒤로 밀리는 기법
    • HRN(Highest Response-ratio Next): SJF 기법을 보완하기 위한 것으로, (대기시간 + 서비스 시간) / 서비스 시간으로 우선순위를 정함. 서비스 실행 시간이 짧거나 대기시간이 긴 프로세스일 경우 우선순위가 높아짐.
선점(Preemptive) 스케줄링
  • 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
  • 우선순위가 높은 프로세스를 빠르게 처리할 수 있음.
  • 주로 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 사용
  • 많은 오버헤드(Overhead)를 초래함.
  • 선점이 가능하도록 일정 시간 배당에 대한 인터럽트용 타이머 클록(Clock)이 필요
    • 인터럽트용 타이머 클록: 하나의 시스템 내에서 동작하는 장치들을 감시하기 위해 주기적인 신호를 발생하는 것으로, 하나의 프로세스가 자원을 독점하지 못하도록 방지하기 위해 사용됨.
  • 우선순위가 높은 프로세스를 먼저 수행할 수 있기에 정확한 대기시간을 산정하기 매우 어려움.
  • 종류에는 RR(Round Robin), SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐 등의 알고리즘이 있음.
    • RR(Round Robin): 대화식 시분할 시스템을 위해 고안된 방식. '퀀텀타임'이라는 프로세스가 실행 가능한 시간 제약을 두어 다음 프로세스에게로 CPU 사용 권한을 넘김.
    • SRT(Shortest Remaining Time): SJF방식으로 선점형 기법, 현재 실행 중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실행 시간을 비교하여 가장 짧은 실행 시간을 요구하는 프로세스에게 CPU를 할당하는 기법
    • 다단계 큐(MQ; Multi Level Queue): 프로세스들을 우선순위에 따라 시스템 프로세스, 대화형 프로세스, 일괄처리 프로세스 등으로 상위, 중위, 하위 단계의 단계별 준비 큐를 배치하는 CPU 스케줄링 기법
    • 다단계 피드백 큐(MFQ; Multi Level Feedback Queue): 여러 개의 큐를 두어 낮은 단계로 내려갈수록 프로세스의 시간 할당량을 크게 하는 프로세스 스케줄링 방식

150 환경 변수 (Environment Variable)

  • 환경 변수: 시스템 소프트웨어의 동작에 영향을 미치는 동적인 값들의 모임
    • 시스템의 기본 정보를 저장함.
    • 자식 프로세스에 상속됨.
    • 시스템 전반에 걸쳐 적용되는 시스템 환경 변수와 사용자 계정 내에서만 적용되는 사용자 환경 변수로 구분됨.
      • 시스템 환경 변수는 적용되는 범위가 모듈이나 실행 프로세스 내인 경우 내부 환경 변수, 모듈 외인 경우 외부 환경 변수로 구분함.
  • UNIX, LINUX에서 모든 환경 변수와 값을 표시하려면 set, env, printenv
  • Windows에서는 set을 입력

Windows의 주요 환경 변수

  • 변수명 앞뒤에 %를 입력

UNIX / LINUX의 주요 환경 변수

  • 변수명 앞에 $을 입력

151 운영체제 기본 명령어

Windows 기본 명령어

- DIR
- COPY
- TYPE : 파일의 내용을 표시 (UNIX의 cat과 유사)
- REN : 파일의 이름을 변경
- DEL : 파일을 삭제
- MD : 디렉터리 생성
- CD : 디렉터리 위치 변경
- CLS : 화면의 내용을 지움
- ATTRIB : 파일의 속성을 변경
- FIND : 파일을 찾음
- CHKDSK : 디스크 상태를 점검
- FORMAT : 디스크 표면을 트랙과 섹터로 나누어 초기화
- MOVE : 파일을 이동

UNIX / LINUX 기본 명령어

- cat
- chdir : 현재 사용할 디렉터리의 위치를 변경
- chmod : 파일의 보호 모드를 설정하여 파일의 사용 허가를 지정
- chown : 소유자를 변경
- cp
- exec : 새로운 프로세스를 수행
- find
- fork : 새로운 프로세스를 생성 (하위 프로세스 호출, 프로세스 복제 명령)
- fsck : 파일 시스템을 검사하고 보수
- getpid : 자신의 프로세스 아이디를 얻음
- getppid : 부모 프로세스 아이디를 얻음
- mount/unmount : 파일 시스템을 마운팅함/마운팅 해제함.
- rm
- wait : fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 event를 기다림.

152 인터넷

(생략 669p)

153 OSI 참조 모델

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

  • 개방형 시스템(Open System) 간의 데이터 통신 시 필요한 장비 및 처리 방법 등을 7단계로 표준화하여 규정

  • 1~3 계층을 하위 계층, 4~7 계층을 상위 계층

  • 응용 계층

  • 표현 계층

  • 세션 계층

  • 전송 계층

  • 네트워크 계층

  • 데이터 링크 계층

  • 물리 계층

OSI 참조 모델의 목적

  • 서로 다른 시스템 간을 상호 접속하기 위한 개념을 규정
  • OSI 규격을 개발하기 위한 범위를 정함
  • 관련 규정의 적합성을 조절하기 위한 공통적 기반을 제공

OSI 참조 모델에서의 데이터 단위

  • 프로토콜 데이터 단위(PDU; Protocol Data Unit)
    • 물리 계층 : 비트
    • 데이터 링크 계층 : 프레임
    • 네트워크 계층 : 패킷
    • 전송 계층 : 세그먼트
    • 세션, 표현, 응용 계층 : 메시지
  • 서비스 데이터 단위(SDU; Service Data Unit)

물리 계층(Physical Layer)

  • 물리 계층은 전송에 필요한 두 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의
  • 물리적 전송 매체와 전송 신호 방식을 정의
  • RS-232C, X.21 등의 표준
  • 관련 장비 : 리피터, 허브
  • 데이터 링크 계층은 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 함.
  • 송신 측과 수신 측의 속도 차이를 해결하기 위한 흐름 제어 기능을 함.
  • 프레임의 시작과 끝을 구분하기 위한 프레임의 동기화 기능을 함.
  • 오류의 검출과 회복을 위한 오류 제어 기능을 함.
  • 프레임의 순서적 전송을 위한 순서 제어 기능을 함.
  • HDLC, LAPB, LLC, MAC, LAPD, PPD 등의 표준
  • 관련 장비 : 랜카드, 브리지, 스위치

네트워크 계층(Network Layer, 망 계층)

  • 네트워크 계층은 개방 시스템들 간의 네트워크 연결을 관리하는 기능과 데이터의 교환 및 중계 기능을 함.
  • 네트워크 연결을 설정, 유지, 해제하는 기능
  • 경로 설정(Routing), 데이터 교환 및 중계, 트래픽 제어, 패킷 정보 전송을 수행
  • X.25, IP 등의 표준
  • 관련 장비 : 라우터

전송 계층 (Transport Layer)

  • 전송 계층은 논리적 안정과 균일한 데이터 전송 서비스를 제공함으로써 종단 시스템(End-to-End) 간에 투명한 데이터 전송을 가능하게 함.
  • OSI 7계층 중 하위 3계층과 상위 3계층의 인터페이스를 담당함.
  • 종단 시스템(End-to-End) 간의 전송 연결 설정, 데이터 전송, 연결 해제 기능을 함.
  • 주소 설정, 다중화(분할 및 재조립), 오류 제어, 흐름 제어를 수행함.
  • TCP, UDP 등의 표준
  • 관련 장비 : 게이트웨이

세션 계층 (Session Layer)

  • 세션 계층은 송·수신 측 간의 관련성을 유지하고 대화 제어를 담당함.
  • 대화(회화) 구성 및 동기 제어, 데이터 교환 관리 기능을 함.
  • 송·수신 측 간의 대화 동기를 위해 전송하는 정보의 일정한 부분에 체크점을 두어 정보의 수신 상태를 체크하며, 이때의 체크점을 동기점(Synchronization Point)이라고 함.
  • 동기점은 오류가 있는 데이터의 회복을 위해 사용하는 것으로, 종류에는 소동기점과 대동기점이 있음.

표현 계층 (Presentation Layer)

  • 표현 계층은 응용 계층으로부터 받은 데이터를 세션 계층에 보내기 전에 통신에 적당한 형태로 변환하고, 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 기능을 함.
  • 서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층
  • 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식(포맷) 변환, 문맥 관리 기능을 함.

응용 계층 (Application Layer)

154 네트워크 관련 장비

네트워크 인터페이스 카드 (NIC; Network Interface Card)
  • 컴퓨터와 컴퓨터 또는 컴퓨터와 네트워크를 연결하는 장치
  • 정보 전송 시 정보가 케이블을 통해 전송될 수 있도록 정보 형태를 변경함.
  • 이더넷 카드(LAN 카드) 혹은 네트워크 어댑터라고도 함.
허브 (Hub)
  • 한 사무실이나 가까운 거리의 컴퓨터들을 연결하는 장치
  • 각 회선을 통합적으로 관리
  • 신호 증폭 기능을 하는 리피터의 역할도 포함
  • 종류
    • 더미 허브(Dummy Hub)
      • 네트워크에 흐르는 모든 데이터를 단순히 연결하는 기능만을 제공
      • LAN이 보유한 대역폭을 컴퓨터 수만큼 나누어 제공
    • 스위칭 허브(Switching Hub)
      • 네트워크상에 흐르는 데이터의 유무 및 흐름을 제어하여 각각의 노드가 허브의 최대 대역폭을 사용할 수 있는 지능형 허브
      • 최근에 사용되는 허브는 대부분 스위칭 허브
리피터 (Repeater)
  • 전송되는 신호가 전송 선로의 특성 및 외부 충격 등의 요인으로 인해 원래의 형태와 다르게 왜곡되거나 약해질 경우 원래의 신호 형태로 재생하여 다시 전송하는 역할을 수행
  • OSI 참조 모델의 물리 계층에서 동작하는 장비
  • 근접한 네트워크 사이에 신호를 전송하는 역할로, 전송 거리의 연장 또는 배선의 자유도를 높이기 위한 용도로 사용
브리지 (Bridge)
  • LAN과 LAN을 연결하거나 LAN 안에서의 컴퓨터 그룹(세그먼트)을 연결하는 기능을 수행
  • 데이터 링크 계층 중 MAC(Media Access Control) 계층에서 사용되므로 MAC 브리지라고도 함.
  • 네트워크 상의 많은 단말기들에 의해 발생되는 트래픽 병목 현상을 줄일 수 있음.
  • 네트워크를 분산적으로 구성할 수 있어 보안성을 높일 수 있음.
  • 브리지를 이용한 서브넷 구성 시 전송 가능한 회선 수는 브리지가 n개일 때, n(n-1)/2 개임.
스위치 (Switch)
  • 브리지와 같이 LAN과 LAN을 연결하여 훨씬 더 큰 LAN을 만드는 장치
  • 하드웨어를 기반으로 처리하므로 전송 속도가 빠름.
  • 포트마다 각기 다른 전송 속도를 지원하도록 제어할 수 있고, 수십~수백 개의 포트를 제공함.
  • OSI 참조 모델의 데이터 링크 계층에서 사용함.
라우터 (Router)
  • 브리지와 같이 LAN과 LAN의 연결 기능에 데이터 전송의 최적 경로를 선택할 수 있는 기능이 추가된 것으로, 서로 다른 LAN이나 LAN과 WAN의 연결도 수행함.
  • OSI 참조 모델의 네트워크 계층에서 동작하는 장비
  • 접속 가능한 경로에 대한 정보를 라우팅 테이블 (Routing Table)에 저장하여 보관함.
  • 3계층(네트워크 계청)까지의 프로토콜 구조가 다른 네트워크 간의 연결을 위해 프로토콜 변환 기능을 수행함.
게이트웨이 (Gateway)
  • 전 계층(1~7계층)의 프로토콜 구조가 다른 네트워크의 연결을 수행함.
  • 세션 계층, 표현 계층, 응용 계층 간을 연결하여 데이터 형식 변환, 주소 변환, 프로토콜 변환 등을 수행
  • LAN에서 다른 네트워크에 데이터를 보내거나 다른 네트워크로부터 데이터를 받아들이는 출입구 역할

155 프로토콜의 개념

  • 프로토콜 (Protocol): 서로 다른 기기들 간의 데이터 교환을 원활하게 수행할 수 있도록 표준화시켜 놓은 통신 규약
    • 통신을 제어하기 위한 표준 규칙과 절차의 집합으로 하드웨어와 소프트웨어, 문서를 모두 규정함.

프로토콜의 기본 요소

  • 구문(Syntax): 전송하고자 하는 데이터의 형식, 부호화, 신호 레벨 등을 규정
  • 의미(Semantics): 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를 규정
  • 시간(Timing): 두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정

프로토콜의 기능

  • 단편화와 재결합
  • 캡슐화
  • 흐름 제어
  • 오류 제어
  • 동기화
  • 순서 제어
  • 주소 지정
  • 다중화
  • 경로 제어
  • 전송 서비스

156 TCP/IP

TCP/IP의 개요 (Transmission Control Protocol / Internet Protocol)

  • TCP/IP는 인터넷에 연결된 서로 다른 기종의 컴퓨터들이 데이터를 주고받을 수 있도록 하는 표준 프로토콜
  • TCP/IP는 UNIX의 기본 프로토콜로 사용되었고, 현재 인터넷 범용 프로토콜로 사용됨.
  • TCP
    • OSI 7계층의 전송 계층에 해당
    • 신뢰성 있는 연결형 서비스를 제공
    • 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능을 제공
    • 스트림(Stream) 전송 기능 제공
  • IP
    • OSI 7계층의 네트워크 계층에 해당
    • 데이터그램을 기반으로 하는 비연결형 서비스를 제공
    • 패킷의 분해/조립, 주소 지정, 경로 선택 기능을 제공

TCP/IP의 구조

  • TCP/IP응용 계층, 전송 계층, 인터넷 계층, 네트워크 액세스 계층으로 이루어짐.

응용 계층의 주요 프로토콜

  • FTP (File Transfer Protocol)
  • SMTP (Simple Mail Transfer Protocol)
  • TELNET
  • SNMP (Simple Network Management Protocol): TCP/IP의 네트워크 관리 프로토콜로, 라우터나 허브 등 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보내는 데 사용되는 표준 통신 규약
  • DNS (Domain Name System)
  • HTTP (HyperText Transfer Protocol)

전송 계층의 주요 프로토콜

  • TCP (Transmission Control Protocol)
  • UDP (User Datagram Protocol)
  • RTCP (Real-Time Control Protocol)

인터넷 계층의 주요 프로토콜

  • 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 주소로 변환하는 기능

네트워크 액세스 계층의 주요 프로토콜

  • Ethernet(IEEE 802.3)
  • IEEE 802
  • HDLC
  • X.25
  • RS-232C

0개의 댓글