본문 바로가기

자격증/정보처리기사

[정처기필기] 프로그래밍 언어 활용

Chapter 01 서버 프로그램 구현

개발환경구축 - 응용 소프트웨어의 개발 편의성, 개발 성능 향상을 위해 (하드웨어 및 소프트웨어) 개발환경을 구축하는 과정
- 빌드도구, 구현도구, 테스트도구, 형상관리도구
빌드도구 작성한 코드의 빌드 및 배포, 각각 구성요소와 모듈에 대한 의존성 관리 지원
구현도구 코드의 작성과 디버깅, 수정 등과 같은 작업 시 사용되는 도구
테스트도구 전체 품질 향상을 위해 코드의 기능 검증
형상관리도구 산출물에 대한 버전 관리를 위한 도구(필수)
웹 서버 -웹 브라우저의 요청을 받아 http를 통해 웹 브라우저에서 요청하는 html문서나 오브젝트(이미지 파일 등)를 전송해주는 서버
-클라이언트와 서버를 웹을 통해 보여주는 서버
WAS -Web Application Server
-동적 서비스 제공, 인터페이스 역할 => 웹 요청시 처리 해주는 역할
-Oracle WebLogic, Apache Tomcat, IBM WebSphere, Jeus등
데이터베이스 서버 -데이터(자료)를 관리하는 서버
파일 서버 -물리 저장 장치를 활용한 서버(이동형 장치를 연결하기 위해 사용)
프레임워크 -반복적으로 사용되는 일련의 작업 단위를 묶어 재사용이 가능하게끔 제공하는 뼈대
-개발환경/실행환경/관리환경/관리환경
다형성 (객체지향언어의 특징) 시스템을 다양한 형태로 제공
전자정부 프레임 워크 정부에서 모든 기관들이 자주 사용하는 기본 작업들을 모아 만든 프레임워크, 주로 sping f/w사용
재사용 -검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
(기존의 소프트웨어 기능을 활용하여 새로운 소프트웨어를 구축함으로써 목표 시스템의 개발 시간 및 비용 절감)
-함수와 객체 재사용/ 컴포넌트 재사용/ 애플리케이션 재사용
컴포넌트 - S/W 프로그램 (특정 기능의 집합)
객체지향 프로그래밍 객체 단위로 재사용 (구조화된 프로그래밍)
제네릭 프로그래밍 하나의 값이 여러 데이터 타입 (재사용성 향상)
자동 프로그래밍 사용자가 설정 변수에 근거한 프로그램 생성
메타 프로그래밍 런타임에 수행해야 할 작업의 일부를 컴파일 타임 동안 수행
컴파일 타임 소스코드를 작성하고 컴파일하는 과정( 실행 가능한 프로그램이 되기 위한 편집 과정)
런타임 컴파일 타임을 마친 프로그램이 실제 동작되어지는 시간
라이브러리 -소프트 웨어 개발 시 공통으로 사용될 수 있는 특정한 기능을 모듈화(프레임워크에 포괄되는 개념)
-표준라이브러리/런타임 라이브러리
프레임워크 클래스와 라이브러리가 합쳐진 형태
S/W아키텍처 설계도(청사진)
모듈화 시스템을 분할하고 추상화함으로써 소프트웨어 성능을 향상시키거나, 재사용, 유지보수에 용이하도록
"모듈 단위"로 분할하는 기법
분할과 정복 복잡한 문제를 분해하여 모듈 단위로 해결(정복)
정보 은닉 타 모듈로부터 내부의 정보를 은폐
데이터 추상화 복잡한 것을 간단하게 보여주는 게 추상화
구체적이고 복잡한 데이터에 대해 간단하게 보여주어 내부 표현을 은폐
모듈독립성 모듈의 크기를 작게 만들어 낮은 결합도와 높은 응집도를 통해 모듈독립성이 높아진다
모듈(설계측면) 라이브러리 형태로 사용
컴포넌트(설계측면) 바이너리 형태로 사용(로직을 수행할 수 있는 모듈 단위)
서비스(설계측면) 기존 컴포넌트보다는 느슨한 결합의 형태로 사용
함수(구현측면) 코드로 제공
매크로(구현측면) 반복실행되는 부분에 특정 이름을 부여하여 제공
인라인(구현측면) (매크로와 비슷하게 사용)
결합도(Coupling) 모듈 간의 상호 의존성(외부 모듈과의 연관도)
=> 낮은 결합도를 통해 외부 의존성, 복잡성, 파급효과를 최소화 
내용 결합도(Content) 다른 모듈 내부에 있는 변수나 기능을 직접적으로 참조
공통 결합도(Common) 전역 변수를 참조하여 전역 데이터에 접근하면 상호작용하여 공통 결합
(공유되는 공유 데이터 영역을 여러 모듈이 사용)
외부 결합도(External) 외부에서 선언한 데이터를 외부의 다른 모듈에서 참조
제어 결합도(Control) 권리 전도 현상 발생
스탬프 결합도(Stamp) 모듈의 자료 구조 형태로 전달, 두 모듈이 동일한 자료 구조를 조회하는 경우
자료 결합도(Data) 가장 낮은 결합도, 모듈의 자료 형태로 전달, 모듈 간의 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우
응집도(Cohesion) 모듈 내부 구성요소 간의 연관성(정보은닉, 하나의 모듈은 하나의 기능 수행)
=> 모듈이 하나의 기능을 분리 구현하여 독립성이 보장되고, 변경이 쉬워 유지보수에 편리
우연적 응집도
(Coincidental)
모듈 내부 구성요소가 서로 어떠한 의미 관련도 없는 경우로, 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행
논리적 응집도
(Logical)
유사한 성격이나 특정 형태로 분류된 요소들이 한 모듈에서 처리되는 경우
시간적 응집도
(Temporal)
서로 다른 기능을 특정 시간에 처리하기 위해 한 모듈에서 처리되는 경우
절차적 응집도
(Procedural)
모듈 기능을 순차적으로 수행
통신적 응집도
(Communication)
동일한 입/출력을 사용하여 다른 기능을 수행
순차적 응집도
(Sequential)
모듈 내로부터 나온 출력값을 다른 활동이 사용
기능적 응집도
(Funtional)
가장 강한 응집도, 모듈 내부의 모든 기능이 단일한 목적을 위해 수행
보안 취약성
Vulnerability
불법적 사용자의 접근, 정상적 서비스 방해, 정보시스템에서 관리하는 중요 데이터의 유출, 변조, 삭제에 대한 위협
침투테스트
Penetration
전문해커가 공격자보다 먼저 시스템의 취약점을 찾기 위한 "보안 취약성 테스트"
서비스거부(DoS) 서버에 무의미한 요청을 반복해서 서버의 과부하 유발
코드실행 Shell명령을 이용해 적절한 입력 유효성 검사 없이 임의 코드 실행
버퍼오버플로우 정해진 메모리를 넘치게 하여 오류발생과 잘못된 동작 유발
정보수집 스캐닝을 통해 불법적으로 정보 수집
권한상승 루트권한(마스터)획득
SQL Injection
SQL삽입
SQL문을 삽입하는 방법으로 DB에 침투하여 정보를 열람
XSS
크로스 사이트 스크립팅
게시판에 악성 스크립트를 작성하고 사용자가 열람했을 때 쿠키정보나 개인정보를 빼내는 기법
=> 클라이언트 대상(사용자의 정보)
CSFS
사이트 간 요청 위조공격
크로스 사이트 스크립팅과 비슷한 방법
=>서버 대상(서버를 공격해 사용자가 이상행위를 하도록 유도)
디렉터리 접근 제한된 디렉토리(폴더)에 접근
FTP 바운스 공격 FTP서버가 데이터 전송시 목적지를 확인하지 않는 취약점을 이용해 데이터를 엉뚱한 곳으로 전송
방화벽 Firewall. 불법적인 사용자나 데이터의 침투를 막아주는 보안 시스템
시큐어 코딩 Secure Coding(보안 개발), 보안 취약성을 막는 프로그래밍
API 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
(Application Programming Interface)
프로그래머가 특정 기술을 사용하기 쉽게 해주는 프로그램의 일종, 오픈API&비공개API
XML 확장된 마크업 언어(범용적으로 사용 가능)
JSON 비동기 브라우저/서버통신(ajax)을 위해 "키-값 쌍", "속성-값 쌍"으로 이루어진 데이터를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
REST 자원의 존재/상태정보를 표준화된 http메서드로 주고받는 웹 아키텍처
SOAP XML기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜
배치 프로그램 -사용자와의 상호작용없이 일괄처리(일련의 작업단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라)
-자동화 / 안정성(추적가능) / 대용량 데이터 / 견고성(비정상적중단X) / 성능(주어진 시간내 처리, 동시동작방해X)
-이벤트 배치: 조건 충족시 일괄 처리
-온디맨드 배치: 사용자 요구에 따라 일괄 처리
-정기 배치: 정해진 정기 시점에 일괄 처리
-스프링 배치(대용량 처리), 쿼츠 스케줄러(오픈소스 기반 스케줄러)

Chapter 02 프로그래밍 언어 활용

데이터타입 -실수형. 정수형과 같은 여러 종류의 데이터를 식별하는 형태(2진수 데이터를 다양한 형태로 활용가능)
-데이터 타입은 변수가 가질 수 있는 속성값의 길이 및 성질
변수(Valiable) -어떤 값(속성값)주기억 장치에 기억하기 위한 사용하는 공간
-사용 가능 문자: 영어 대/소문자, 숫자, 밑줄_
-변수 사용 규칙: 첫 자리 숫자 사용 불가, 변수명에 공백 사용 불가
-변수 의미 부여: 데이터 값의 의미나 역할, 예약어는 사용불가
예약어 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어(변수나 다른 목적으로 사용불가)
배열(Array) 같은 타입의 변수들로 이루어진 집합 "구조적 자료형"
포인터(Pointer) 변수의 주소값을 저장하는 공간
데이터타입* 포인터변수명 = &변수명;
명령문 프로그램을 구성하는 문장으로 지시사항을 처리하는 단위(조건문 & 반복문)
조건문 if문, swich문(swichcase문)
if문 조건이 참인지 거짓인지에 따라 경로를 선택
swich문
(파이썬 지원 X)
조건에 따라 여러 개의 선택 경로 중 하나 선택 실행 
반복문 특정 부분을 조건이 만족할 때까지 실행(무한 처리 반복)
for문 -C언어는 초기식, 조건식, 증감식을 지정하여 반복
-파이썬은 for 변수 in range (반복횟수), for 변수 in range (시작값, 끝값+1)
while문 조건이 참인 동안에 해당 분기를 반복해서 실행
(자바,C는 불린타입을 지원 안함, 따라서 while의 조건문이 불린타입(참,거짓)이 아닌경우 오류 발생)
do while문 참, 거짓과 관련없이 무조건 한번 (do)문 실행하고, 다음부터 조건이 참인 동안에 해당 분기를 반복해서 실행
(자바,C는 불린타입을 지원 안함, 따라서 while의 조건문이 불린타입(참,거짓)이 아닌경우 오류 발생)
루프 제어 명령어 break문, continue문
사용자 정의함수 특별한 목적의 작업을 수행하도록 설계된 블록
클래스 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메서드를 정의
*C언어는 명령형 프로그래밍(객체지향X)으로 클래스를 지원하지 안함
this포인터  
self  
생성자  
소멸자  
절차적 프로그래밍언어 - 명령형 프로그래밍, 프로시저 호출에 따라 순서대로 진행되어 흐름 파악이 용이
- 복잡하지 않고 유지보수가 용이(직관적)
- 같은 코드 재사용 가능
- 모듈화, 구조화 가능

- 포트란(FORTRAN)
- 알골(ALGOL)
- C언어
객체지향프로그래밍언어 - 독립된 단위인 "객체"중심의 프로그래밍 언어 (명령어X)
- 자료 추상화, 상속, 다중상속, 다형성, 동적바인딩, 접근제어자(접근제한자)

- C++
 성능하락이 없는 형태로 개발 가능한 언어로 메모리 관리가 많아서 개발이 어려움
 접근 제어자 default 빼고 제공

- C#
 마이크로소프트 개발(c++과 자바) 
 자바와 달리 불안전코드를 통해 플랫폼 간 상호 운용성 확보
 접근 제어자 모두 제공

- JAVA
 썬 마이크로 시스템즈(오라클합병)개발
 자바 언어로 작성된 프로그램을 바이트코드로 변환(특수한 바이너리 형태)
 정수형 int 4바이트 기준으로 short는 2바이트(1/2), long은 8바이트(2배)

- 델파이
 파스칼 문법, 높은 생산성과 간결한 코드, 저수준 프로그래밍도 가능<-기계어와 가까울수록 저수준
자료 추상화 중요한 정보만 표현(복잡하고 불필요한 정보는 숨기고 보기 쉽게)
상속 새로운 클래스가 기존 클래스의 자료와 연산을 이용가능
다중상속  
다형성 여러 한 요소에 여러 개념을 넣는 것
오버라이딩과 오버로딩
동적 바인딩 런타임에 여러 속성이나 연산에 바인딩 함으로써 호출될 함수가 결정됨 (<-> 정적바인딩)
즉, 실행되는 동안 포인터가 가리키는 객체에 따라서 호출될 함수가 유동적
접근 제어자 클래스, 변수, 메소드를 외부에서 접근할 수 있도록 권한 설정
public + protected #  default ~ private - 
가비지 컬렉터 메모리 관리용(더 이상 사용되지 않는 객체를 제거해주는 역할)
스크립트 언어 -컴파일 하지 않고도 실행할 수 있는 프로그래밍 언어
-시작에서 끝날 때까지 실행되며, 시작점이 따로 명시되지 않음(상대적으로 단순한 구문과 의미 내포)
-인터프리터 방식: 프로그래밍 소스코드를 바로 실행하는 환경

-PHP
 동적 웹페이지, 명령 줄 인터페이스(CLI)
 @ 오류억제자, <>값이 다름, ===값과 타입이 같은지 확인

-Perl(펄)
 인터프리터 방식, 실용성 중시, 불특정한 데이터 길이의 제약없이 강력한 문자열 처리 기능 제공

-Python
 귀도 반 로섬, 인터프리터 방식이면서 객체 지향적, 다양한 플랫폼에서 풍부한 라이브러리 보유
 유니코드 문자열을 지원하기에 다양한 언어의 문자 처리 굿(이식성 좋음)
 리스트는 slice를 이용, 들여쓰기 사용해 블록 구분

-Javascript
 객체 기반의 스크립트 프로그래밍 언어, 타입을 명시할 필요 없는 인터프리터 언어
 브라우저마다 지원되는 버전 상이
 프로토타입(프로토타입 링크와 프로토타입 오브젝트 활용)

-bash
 Shell명령과 호환되며 리눅스에 기본 탑재

-Basic
 교육용, 다양한 종류의 베이직 언어 존재하며 문법 차이 큼

선언형 언어 -문제를 설명하는 언어, "무엇"을 할 것인지에 중점을 둔 언어(Declarative Language)

-함수형 언어: 자료 처리를 수학적 함수의 계산으로 취급_하스켈, 리스프
 순수함수(Pure function): 부작용이 없는 함수(어느 순간에도 동일한 값 반환)
 ✓ 익명함수(Anonymous function)(=림다식): 이름이 없는 함수
 ✓ 고계함수(Higher-oder function): 함수를 또 하나의 값으로 간주하여 함수의 인자 혹은 반환값으로 사용

-논리형 언어: 논리 문장을 이용 예_프롤로그
 ✓ 사실: 객체와 객체 간의 관계에 대한 논리적 사실을 포함한 문장
 ✓ 규칙: 지식베이스로부터 새로운 논리를 찾는 과정
 ✓ 질문: 추론이 참인지 거짓인지 확인
라이브러리 - 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아놓은 집합체
(라이브러리는 모듈과 패키지의 총칭. 모듈이 개별 파일이라면, 패키지는 파일들을 모아놓은 폴더)
- 도움말, 설치 파일, 샘플 코드 등으로 구성
- 표준 라이브러리 & 외부 라이브러리
데이터 입출력 데이터가 입력 및 출력되도록 하기 위한 기법
표준 입력, 표준 출력, 표준 오류(표준 오류는 오류메시지나 진단의 출력을 위해 쓰이는 또 다른 출력 스트림)
예외 처리 오류가 발생 시 오류를 그대로 실행시키지 않고 대응하는 방법으로 처리하는 프로그래밍 기법
- throw: 정상적으로 실행될 수 없은 상황일 때 예외를 던짐
- try: 예외가 발생할만한 코드 블록{ }을 지정 
- catch: 예외 핸들러, try-catch문(try안에서 throw한 예외 객체에 대한 예외처리)
프로토타입 객체지향 프로그래밍과 달리 클래스를 명확하게 정의하지 않아도 되며, 속성과 메서드를 다른 클래스의 인스턴스나 빈 객체에 추가하는 작업을 덜 수 있는 프로그래밍 스타일

Chapter 03 응용 SW기초 기술활용

운영체제(OS
;Operating System)
-사용자가 하드웨어를 편리하게 사용할수 있도록 인터페이스를 제공해주는 소프트웨어
(하드웨어는 중앙처리 장치, 기억장치, 통신장치, 입출력 장치 등으로 구분)

- 운영체제는 하드웨어를 편리하게 제어하고 처리
 ✓제어 프로그램 : 감시 프로그램 / 작업 제어 프로그램 / 데이터 관리 프로그램
 ✓처리 프로그램 : 언어 번역 프로그램 / 서비스 프로그램 / 문제 프로그램

-사용자 편리성 제공, 인터페이스 기능을 담당, 스케줄링 담당, 자원 관리, 제어 기능

-운영체제는 크게 인터페이스(쉘)과 커널의 구조
커널 운영체제의 핵심적인 기능
프로세스 관리, 기억장치 관리, 주변장치 관리, 파일관리, 자원관리, 보안 
커널을 편리하게 사용하게끔 "인터페이스"를 제공, 사용자의 명령어를 커널로 전달하는 "명령어 해석기"
윈도우 OS GUI기반 운영 체제, 트리 디렉터리 구조, 선점형 멀티 태스킹, 자동감지(플러그앤플레이),OLE(객체 연결 삽입)
리눅스/유닉스 OS  
맥 OS  
안드로이드 OS  
메모리 관리 - 메모리는 고가의 자원이기 때문에 시스템에서 중요한 역할을 수행

- 반입기법: 적재 시기 결정
- 배치기법: 적재 위치 결정
- 할당기법: 적재 방법 결정
-교체기법: 교체 대상 결정
반입기법(When) 반입 시기를 결정하는 관리 기법

✓요구 반입 기법: 요구가 있을 경우에 적재
✓예상 반입 기법: 사전에 미리 예측해서 요구되는 페이지 이외 다른 페이지 함께 적재
배치기법(Where) 어느 위치에 저장할 것인지 결정하는 관리 기법

✓최초 적합(Fist fit): 적재될 가용 공간 중에서 첫 번째에 분할 할당
✓최적 적합(Best fit): 가용 공간 중 가장 크기가 비슷한 공간 선택(공백 최소화)
✓최악 적합(Worst fit): 가용 공간 중 가장 큰 공간에 할당
할당기법(How) 어떻게(어떤 방법) 할당할 것인지 결정하는 관리 기법

<연속 할당 기법>
✓단일 분할 할당: 오버레이, 스와핑
✓다중 분할 할당: 고정 분할 할당, 동적 분할 할당

<분산 할당 기법> 분산하여 배치하는 비연속적 할당 배치
페이징 기법: 고정된 크기의 일정한 크기(프레임)로 분할 -> 내부 단편화 현상 발생
세그먼테이션 기법: 가변적 크기(세그먼트)로 분할-> 외부 단편화 현상 발생
✓페이징/세그먼테이션 기법: 내/외부 단편화 최소화를 위해 결합된 기법,
                                           하나의 세그먼트를 정수 배의 부분 페이지로 다시 분할(효과적이나 고비용)
교체기법(Who) 어떤 프로세스를 제거할 것인지 결정하는 관리 기법 p4-86

FIFO: 선입선출(Fist In Fisrt Out)
LRU: 사용된 시간을 확인하여 가장 오랫동안 사용되지 않은 페이지를 교체(Least Recently Used)
LFU: 참조횟수가 가장 적은 페이지를 교체(Least Frequently Used)
✓OPT: 페이지 부재 횟수가 가장 적게 발생하는 최적의 알고리즘 (OPTimal replacement)
✓NUR: LRU와 비슷, 단 시간이 아닌 사용여부에 따라 최근에 사용하지 않은 페이지 교체(Not Used Recently)
✓SCR: 오랫동안 주기억장치에 있지만 자주 사용되는 페이지 교체 방지, FIFO 보완(Second Chance Replace)
페이지 부재 현재 없던 페이지가 참조되었을 때 일어나는 인터럽트
메모리 단편화 - 내부단편화 해결 -> slab allocator(동적 메모리 관리), 통합, 압축
- 외부단편화 해결 -> 버디 메모리 할당, 통합 압축
스레싱 - 계속적 페이지 부재 발생으로 인해 프로세스 실제 처리 시간보다 페이지 교체 시간이 더 많아지는 현상
- 페이징 기법의 문제점, 스레싱으로 인해 전체 시스템의 성능 및 처리율 저하
✓스레싱 해결 방안으로 워킹세트(Working Set), 페이지 부재 빈도(PFF)
지역성(Locality) -어느 한 순간에 특정부분, 일부 페이지만 집중적으로 참조하는 특성(=국부성 =구역성 =국소성 =참조 지역성) 
  -> 스레스 방지를 위한 워킹 셋 이론의 기반

-시간 지역성: 최근 참조했던 메모리가 가까운 장래에도 참조되는 경향
                   예)루프(반복, 순환), 스택, 부 프로그램(서브루틴), 카운팅, 집계 등
-공간 지역성: 하나의 기억장소가 참조되면 그 근처의 기억장소가 계속 참조되는 경향
                   예)배열순회, 같은 영역에 있는 변수 참조
-순차 지역성: 데이터가 순차적으로 참조되는 경향(공간 지역성에 편입되어 설명되기도 함)
                   예)순차적 코드 실행
프로세스 실행 중인 프로그램 (Job, Task)
생성→준비→실행→대기→완료
PCB -프로세스 제어 블록(Process Control Block)
프로세스 관리를 위해 필요한 자료를 담고있는 자료 구조
스레드 -프로세스의 실행 단위(=경량 프로세스)
-하나의 프로세스는 여러개의 스레드를 가질 수 있다
프로세스 상태 전이 프로세스 상태가 변하는 활동

-디스패치(dispatch): 준비 상태의 프로세스 중 실행될 프로세스를 CPU에 할당-> 문맥교환 발생
-할당 시간 초과(timeout): 지정된 시간이 초과되면 실행에서 준비로 전이(스케줄러에 의해 PCB저장 후 반환)
-입출력 발생(block): 지정된 시간을 초과하기 전에 입출력이나 기타 사건 발생시 실행에서 대기상태로 전이
-깨움(wake-up): 입출력이 종료되면 대기에서 준비상태로 전이
문맥 교환 CPU가 현재 실행되는 프로세스의 문맥상태를 PCB에 저정하고, 다음 프로세스의 PCB로부터 문맥을 복원
프로세스 스케줄링 -하나의 CPU를 사용하려고 하는 여러 프로세스들 사이의 우선 순위를 관리하는 작업
(처리율과 CPU이용률을 증가시키고 오버헤드, 응답시간, 반환시간, 대기시간을 최소화)
선점형 스케줄링 -우선순위가 높은 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 선점형
-비교적 빠른 응답과, 대화식 시분할 시스템에 적합
-단, 오버헤드 초래(높은 우선 순위 프로세스들이 계속해서 선점하려고 하기때문에)

✓ 라운드 로빈(RR): 타임 퀀텀(시간 할당량)을 통해 균등한 CPU점유시간, 시분할 시스템(Time Sharing) 사용
✓ SRT(Shortest Remaining Time First): 가장 짧은 수행시간의 프로세스 우선 수행
✓ 다단계 큐(MLQ): 여러 종류의 그룹으로 분할하여 여러 개의 큐 이용, 독립된 스케줄링 큐
✓ 다단계 피드백 큐(MLFQ,MFQ): 큐마다 서로 다른 cpu시간 할당량 부여
                                         (상위단계에서 완료되지 못한 작업은 하위 단계로 전달되어 마지막에 RR방식 사용)
비선점형 스케줄링 -한 프로세스가 CPU를 할당받으면 작업을 끝까지 종료 후 반환까지 다른 프로세스는 점유 불가능
-응답시간예상이 용이하고, 모든 프로세스에 대한 요구를 공정하게 처리가능
-단, 기아현상 발생(짧은 작업을 수행하는 프로세스가 긴 작업 종료 시까지 무한정 대기)

✓ 우선순위(Priority): 우선순위에 따라 할당 (동일 순위는 FCFS)
✓ 기한부(Deadline): 명시된 시간이나 기한 내에 완료되도록 할당
✓ FCFS(First Come First Serverd): 대기 큐에 먼저 도착한 순서대로 할당(=FIFO알고리즘)
SJF(Shortest Job First): 최단 작업 우선 할당->기아현상발생
✓ HRN(Highest Response Ratio Next): 대기 시간이 긴 프로세스의 우선순위를 높아지게 하여 결정
    HRN의 우선순위 계산식=(대기시간+서비스시간)/서비스시간, 수치가 높을 수록 우선순위가 높다

반환 시간 = 종료시간 - 도착시간 
대기시간 = 반환시간 -서비스시간 
**반종도 대반서
교착상태 두 개 이상의 프로세스가 특정 자원할당을 무한정 대기하는 상태
상호배제 / 점유와 대기 / 비선점/ 환형 대기

💡 교착상태 해결 방안 p4-104
- 예방, 회피(은행가 알고리즘), 발견, 복구
디스크 스케줄링 -많은 양의 데이터에 빠르게 엑세스 하기 위해 디스크 헤드를 움직이는 경로를 결정
-FCFS, SSTF, SCAN, C-SCAN, LOOK(엘레베이터 알고리즘), N-STEP SCAN, SLTF(섹터큐잉)
환경변수 컴퓨터 동작하는 방식에 영향을 미치는 동적 값들의 모임

💡 
유닉스 시스템의 환경 변수
env : 전역 변수 설정 및 조회
set(setenv) : 사용자 환경 변수 설정 및 조회
export : 사용자 환경변수를 전역 변수로 설정(변수를 export시키면 끝까지 기억)
ㄴ 위의 명령어는 변수 없이 사용하면 모든 환경 변수 및 그에 따른 모든 값을 보여준다
쉘 스크립트 쉘이나 명령줄 인터프리터(CLI)에서 동작되도록 사용하는 스크립트

💡 리눅스는 최상위 유저를 #으로 표시, 일반 유저를 $로 표시
uname: 시스템의 모든 정보 확인(버전 확인)
last: 부팅부터 현재까지의 모든 사용자 로그인과 로그아웃 정보 확인
pwd: print working directory. 현재 작업중인 디렉토리의 절대 경로 출력
ls: list. 현재 디렉터리 내 파일 및 폴더들을 표시하는 명령어
fork: 새로운 프로세스를 생성

cat: 파일의 내용을 화면에 출력
rm: 파일 삭제
cp: 파일 복사
mv: 파일 이동
chmod: 특정 파일 또는 디렉토리의 퍼미션 수정
ifconfig: 네트워크 인터페이스 설정 및 확인(ip확인)
/ : 최상위 디렉터리
root : 최상위 디렉터리 아래 root 계정의 홈 디렉터리
파일 디스크립터
(파일 서술자)
-운영체제가 필요로 하는 파일에 대한 정보가 있는 파일 제어 블록(FCB)
-파일마다 독립적으로 존재하며, 시스템에 따라 다른 구조
-보통 보조기억장치 내에 저장되어 있다가 파일이 개방될때 주기억장치로 이동
-파일시스템에서 관리하므로 사용자가 직접 참조불가
인터넷 TCP/IP 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크
<구성요소> 종단 시스템, 통신망, 프로토콜, 인터넷 주소체계, 인터넷 접속제공
종단 시스템 호스트와 서버, 통신링크, 처리량 등으로 구성
통신망 ▸ 근거리 통신망(LAN; Local Area Network)
유선, 네트워크 매체를 이용하여 집, 사무실, 학교 등의 건물과 같은 가까운 지역을 한데 묶은 컴퓨터 네트워크
버스형, 트리형, 링형, 매시형, 성형

무선랜 통신망(WLAN; Wireless Local Area Network)
유선랜과 무선 단말 사이를 무선 주파수를 이용하여 전송하는 네트워크 IEEE802.11

원거리 통신망(WAN; Wide Area Network)
국가망 또는 각 국가의 국제 정보통신망으로 운용되는 네트워크, 거리에 제약이 없지만 속도가 느리고 높은 에러율
<WAN연결기술> 전용 회선 방식, 회선 교환방식, 패킷 교환 방식
QoS
(Quality of Service)
QoS 강화를 위해 MAC지원 기능 채택IEEE802.11e-> 초고속 서비스(IP전화,비디오)등 
AP Access Point. 무선공유기(무선랜 단말과 유선랜 간의 연계)
전용 회선 방식 전용 회선 활용, 통신 사업자가 사전에 계약을 체결한 송신자와 수신자 끼리만 데이터를 교환
회선 교환방식 물리적 전용선을 활용, 데이터가 정해진 동일 경로로만 전달
대역폭(동시에 전송할 수 있는 양)이 고정되고, 안정적인 전송률 확보
패킷 교환 방식 전체 메시지를 각 노드가 수용할 수 있는 크기(패킷)로 잘라서 보내는 방식
전송 매체 접속 제어 통신망 사용시 공유 매체에 대한 다중 접근제어 중요
CSMA/CD: 반송파 감지 다중 접속/충돌 탐지, IEEE802.3 유선LAN 반이중방식
CSMA/CA: 반송파 감지 다중 접속/충돌 회피, IEEE802.11 무선LAN 반이중방식
프로토콜 서로 다른 시스템에 있는 두 개체 간의 데이터 교환을 원활히 하기 위한 일련의 통신 규약
톰 마린, 프로토콜은 기술적 은어 구문, 의미, 타이밍
인터넷 주소체계 - IP주소 방식
- DNS 방식(도메인 주소)
인터넷 접속 제공 - ISP: 통신회사(인터넷 서비스 제공자로 인터넷 접속의 수단 제공)
- URL: 네트워크상에서 자원이 어디 있는지 알려주기 위한 규약
-웹 브라우저:쌍방향 통신
OSI 7계층 개방형 시스템 상호 연결 모델로 각 계층은 서로 독립적으로 구성
계층1 물리 
Physical 
◼︎ 실제 장치들을 연결하기 위해 필요한 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환(물리 신호)
◼︎ 전송단위: 비트

◼︎ 프로토콜
RS-232C 
 
◼︎ 물리 계층 장비  
-허브: 여러 대의 컴퓨터를 연결하여 네트워크로 송신하거나, 하나의 네트워크로 수신된 정보를 여러 대의 컴퓨터로 송신하기 위한 장비, 물리선으로 연결되는 장비
-리피터: 디지털 신호를 증폭시켜주는 역할을 하며 신호가 약해지지 않고 컴퓨터로 수신되도록 하는 장비
(디지털 신호 증폭기)
계층2 데이터 링크
Data Link 
◼︎ 하위 두 계층 사이에 물리적 연결을 이용해 신뢰성 있는 정보 전송,
링크의 설정과 유지 및 종료를 담당하며 노드 간의 동
기화, 오류제어, 흐름제어, 회선 제어, 오류검출/ 재전송
◼︎ 전송단위: 프레임(mac#, ip#, port#, data)

◼︎ 
프로토콜
HDLC, PPP, 프레임 릴레이, ATM

◼︎ 데이터 링크 계층
장비
- 스위치: 프레임을 MAC주소 기반으로 빠르게 전송시키는 데이터 링크 계층의 통신 장치(브리지와 허브 단점 개선)
- 브리지: 두개의 근거리 통신망을 연결해주는 통신망 연결 장치

** 스위치 장비의 주요 기술 
- VLAN: 물리적 배치와 상관없이 논리적으로 LAN을 구성하여 Broadcast domain을 구분할 수 있게 해주는 기술로 접속된 장비들의 성능향상 및 보안성 증대 효과
- STP: 스위치 무한 루프 현상을 막기 위해서 우선 순위에 따라 1개의 경로로만 통신하도록 하는 프로토콜


**데이터 링크 계층의 오류 제어-
데이터 전송 시 감쇠, 왜곡, 잡음에 의해 생성된 오류를 검출하고 정정하는 기능
💡 전진(순방향)오류 수정(FEC) 검출된 오류를 재전송 오류없이 수신 측에서 스스로 수정
[오류 검출 및 수정] 해밍 코드 방식, 상승 코드 방식

💡
후진(역방향)오류 수정(BEC) 오류가 발생 시 수신측에서 송신측으로 재전송을 요구하는 방식
[오류 검출] 패리티 검사, CRC, 블록합 검사
[오류 제어] 자동 반복 요청(ARQ; Automatic Repeat reQuest)
Stop-and-wait ARQ
: 한 개의 프레임 전송하고 수신측에서 수신할 때까지 정지하고 기다리는 방식(정지-대기 반복)
• Go-back-N ARQ
: 데이터 프레임을 연속적으로 전송하다가 NAK을 수신 시 오류 발생한 프레임 후로 전송된 모든 프레임을 재전송
• Selective repeat ARQ
: 연속적으로 데이터 프레임을 전송하고 에러가 발생한 데이터 프레임만 재전송
(수신측에서 전부 다 받고 안받은 걸 요청해서 송신쪽에서 재전송)

계층3 네트워크
Network
◼︎ 다양한 길이의 패킷을 네트워크를 통해 전달, 최적화 된 경로를 제공(라우팅)
그 과정에서 전송계층이 요구하는 서비스 품질(QoS)을 위한 수단을 제공
◼︎ 전송단위: 패킷 (ip#, port#, data)

◼︎ 프로토콜
IP, ICMP, ARP(<->RARP), IMGP, 라우팅 프로토콜(RIP, OSPF, EGP, BGP)

◼︎
장비
라우터
L3스위치
계층4 전송
Transport
◼︎ 단말기 사이에 신뢰성 있고 명확한 데이터를 전달 (송/수신 프로세스 간 연결하여 신뢰성 있는 통신 보장)
데이터 분할, 재조립, 흐름 제어, 오류 제어, 혼잡 제어
◼︎ 전송단위: 세그먼트 (port#, data)

◼︎ 프로토콜
TCP(연결지향,신뢰성), UDP(비연결지향,비신뢰성)


◼︎ 장비
L4스위치
계층5 세션
Session
◼︎ 송/수신 간의 논리적인 연결, 연결접속, 동기제어
◼︎ 전송단위: 데이터 

◼︎ 프로토콜
 RPC, NetBIOS


◼︎ 
장비: 호스트(PC등)
계층6 표현
Presentation
◼︎ 하위 계층에서 온 데이터를 사용자가 이해할 수 있는 형태로 데이터 형식 설정, 부호 교환, 암/복호화
◼︎ 전송단위: 데이터 

◼︎ 프로토콜
JPEG, MPEG

◼︎ 
장비: 호스트(PC등)
계층7 응용
Application
◼︎ 사용자와 네트워크 간 응용서비스를 수행하고 데이터 생성(인터페이스 역할)
◼︎ 전송단위: 데이터 

◼︎ 프로토콜
HTTP(텍스트 전송), FTP(파일 전송, 포트번호20번/21번)
SMTP(이메일 전송,포트번호25번),POP3, IMAP
telnet(보안없는 원격 접속,포트23번), SSH(강력한 보안의 원격접속, 포트22번)

◼︎
장비: L7스위치, 호스트(PC등)
페이징 기법 ■ 페이지 크기가 작을 경우 ■
더 많은 페이지 사상 테이블 공간이 필요
내부 단편화는 줄고, 특정한 참조 구역성만을 포함하기 때문에 기억 장치 효율 증가
페이지 정보가 갖는 페이지 맵 테이블의 크기가 커지면서 맵핑 속도가 늦어짐
디스크 접근 횟수가 많아 져서 전체적인 입/출력 시간의 증가

■ 페이지 크기가 큰 경우 ■
테이블의 크기가 작아지므로 주기억 장치의 공간이 절약
페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아져서 관리가 용이하고, 맵핑속도가 빨라짐
디스크 접근 횟수가 줄고, 전체적인 입/출력 시간 감소
페이지 단편화가 증가하고, 이에 따라 기억공간의 낭비 초래