[정보처리기사/필기] 4. 프로그래밍 언어 활용

메밀·2024년 4월 29일
0

1. 서버 프로그램 구현

1) 배치 프로그램(Batch Program)

상호작용 없이 여러 작업을 일련/일괄적으로 처리

- 필수 요소

  • 대용량 데이터 처리 가능
  • 자동화: 사용자 개입X
  • 견고성: 데이터 이상으로 중단 X
  • 안정성/신뢰성: 오류 추적 가능
  • 성능: 다른 프로그램 방해X, 지정된 시간 내 처리

2. 프로그래밍 언어 활용

1) C/C++

- 데이터 타입 크기, 기억 범위

  • 문자
    • char(1)
    • unsiged char(1)
  • 정수
    • short(2)
    • int(4)
    • long(4)
    • long long(8)
  • 실수
    • float(4)
    • double(8)
    • long double(8)

- 구조체

데이터 집합체, 자료형을 만드는 것
struct으로 정의

struct sawon {
	char name[10];
    char position[10];
    int pay;
}

2) Java

- 데이터 타입 크기, 기억 범위

  • 논리: boolean(1)
  • 문자: char(2)
  • 정수
    • byte 1
    • short 2
    • int 4
    • long 8
  • 실수
    • float 4
    • double 8

- 가비지 콜렉터

선언만 하고 사용하지 않은 메모리 공간 회수

3) Python

- 시퀀스 자료형

값이 연속적으로 이어진 자료형

  • List: 다양한 자료형의 값을 연속 저장, 개수 업다운 가능
  • 튜플: 요소의 CUD 불가
  • range: 연속된 숫자 생성 → 리스트, 반복문에서 사용 가능

4) 변수

- 개요

처리 도중 발생하는 값을 저장하는 공간, 변할 수 있는 값을 의미
→ 정수형, 실수형, 문자형, 포인터형

- 변수명 작성 규칙

  • 영문자, 숫자, 언더바 가능
  • 첫글자 영문자, 언더바 가능 / 숫자 시작 불가
  • 글자수 제한 없음
  • 공백, 특수문자, 예약어 불가
  • 선언 시 세미콜론
  • 헝가리안 표기법: 변수명에 데이터 타입 명시

5) 연산자

- 산술 연산자

++, --

  • 전치: 변수 값 증감시킨 후 연산에 사용 (++a)
  • 후치: 변수 사용 후 증감 (a++)

- 관계 연산자

거짓 == 0
참 == 0 빼고 다

- 비트 연산자

비트별 연산으로 결과 얻기

  • & (and): 모든 비트가 1일 때만 1
  • ^ (xor): 모든 비트가 같으면 0, 다르면 1
  • | (or): 하나라도 1이면 1
  • ~ (not): 각 비트의 부정, 0이면 1 / 1이면 0
  • << : 왼쪽으로 이동
  • : 오른쪽으로 이동

- 논리 연산자

- 대입 연산자

- 조건 연산자

a ? b : c

- 연산자 우선순위 (높은 순)

  • 단항 연산자: !, ~(비트 not), ++, --, sizeof
  • 이항 연산자
    • 산술 연산자: * / %
    • 시프트: + -
    • 관계: << >>
    • 비트: < <= >= > == !=
    • 논리: & ^ | && ||
  • 삼항 연산자: 조건 연산자(? :)
  • 대입 연산자
  • 순서 연산자

6) 입출력

C 언어

- scanf(서식 문자열, 변수 주소): 입력

scanf("%3d", &a)

  • %: 서식 문자임을 지정
  • 3: 입력자리수 == 3자리
  • d: 10진수
  • &: 주소 연산자
  • &a: 입력 받은 데이터를 a 변수 주소에 저장
> 특징
  • 한 번에 여러개 데이터 입력 받을 수 있다.
  • 서식 문자열과 변수의 자료형 일치해야 함
  • scanf("%d %f", &i, &j);
> 서식 문자열
  • %d: 정수형 10진수
  • %u: 부호 없는 정수형 10진수
  • %o: 8진수
  • %x: 16진수
  • %c: 문자
  • %s: 문자열
  • %f: 소수점을 포함하는 실수
  • %e: 지수형 실수
  • %ld: long형 10진수
  • %lx: long형 16진수
  • %p: 주소 16진수

- printf(서식 문자열, 변수): 출력

printf("%-8.2f", 200.2);
200.20VV (V는 빈칸을 의미)

  • -: 왼쪽부터 정렬
  • 8: 출력 자릿수 8자리
  • 2: 소수점 이하 2자리
  • f: 실수로 출력
> 주요 제어 문자
  • \n: new line
  • \b: backspace
  • \t: tab
  • \r: 현재줄 처음으로 커서 이동
  • \0: null
  • \'
  • \"
  • \a: 스피커로 벨소리 ㅋㅋㅋ
  • \
  • \f: 한 페이지 넘김

Java

print(), println(), printf()

7) 조건문

- 단순 if문

- 다중 if문

- switch문

8) 반복문

- for문

초기값, 최종값, 증가값

- while문

- do ~ while문

무조건 한 번 실행 후 조건 판단

- break, continue

9) 배열

- 개념

동일한 데이터 유형 여러개

  • 하나의 이름으로 여러 기억장소 가리킴 → 개별 요소 위치는 첨자로 지정
  • 행 우선으로 데이터가 기억장소에 할당
  • C 언어에서 배열의 위치를 나타내는 첨자 없이 배열 이름을 사용하면, 배열 첫번째 요소의 주소를 지정하는 것과 같음

- 1차원 배열

- 2차원 배열

[행][열]

- 초기화

  • 선언 시 초기값 지정 가능
  • 선언 시 배열 크기 생략 → 초기값 지정해야 그 개수만큼의 배열 선언됨

- 배열 형태의 문자열 변수

C언어에서 ""로 묶인 글자는 수 관계 없이 문자열로 처리됨

  • 문자열 자료형이 없으므로 배열, 포인터로 처리
  • char 배열이름[크기] = "문자열"
  • 문자열의 끝을 알리기위한 널문자 ₩0이 자동 삽입됨 → 얘도 고려해서 배열크기 지정
    • char a[5] = "love" → l o v e \0
  • 배열 선언 시 초기값으로 지정해야 하고, 이미 선언된 배열에는 문자열 저장 불가
char a = 'A';
char b[9] = "SINAGONG";
char *c = "SINAGONG"; // "SINAGONG"이 저장된 곳의 주소 저장

printf("%c\n", a); // A
printf("%s\n", b); // SINAGONG
printf("%s\n", c); // SINAGONG (c 주소가 가리키는 곳의 값)

10) 포인터

- 포인터와 포인터 변수

포인터: 변수의 주소 → C언어에서 주소 제어 기능 제공

  • 포인터 변수: 주소 저장 변수 (int *a) 간접연산자
  • 변수 주소 알아내기 → a = &b (번지 연산자 &)
  • 포인터 변수에 를 붙이면 가리키는 곳의 값을 말함 (c = a)
  • 힙 영역에 접근하는 동적 변수
int a = 50;
int *b; // 포인터 변수
b = &a; // a의 주소 저장
*b = *b + 20; // b가 가리키는 곳(a)의 값에 20 더하기, 즉 a의 값도 같이 바뀜

printf("%d %d", a, *b); // 70 70

- 포인터와 배열

배열을 포인터 변수에 저장한 후, 포인터를 이용해 배열 요소에 접근할 수 있다

  • 배열 위치를 나타내는 첨자를 생략하고 대표명만 지정하면, 배열의 첫번째 요소의 주소를 지정하는 것과 같다
  • & 연산자를 사용하여 주소 지정
  • 포인터형 배열 선언 가능
int a[5];

int i;
int *p;

for(i=0; i<5; i++) {
	a[i] = i + 10;
}

p = a; // 배열 a의 시작 위치가 기억됨
// 배열의 이름은 주소이므로 p = &a가 아님

for(i=0; i<5; i++) {
	printf("%d", *(p+i)); // 10 11 12 13 14
}

11) Python

- 기본 문법

  • 자료형 선언, 세미콜론 X
  • 변수에 연속 값 저장 가능 (x, y, z = 10, 20, 30)
  • 코드블록은 콜론과 여백으로 구분
  • 탭도 문법

- 데이터 입출력

> input(출력문자): 입력

  • 출력문자 생략 가능
  • a = input("입력하세요")
    • 화면에 입력하세요가 출력되고, 키보드로 값을 입력하면 a에 저장

> print(출력값1, 2, ..., sep = 분리문자, end = 종료문자): 출력

print(82, 24, sep = '-', end = ',')
82-24,

- 입력값 형변환

input은 입력값 무조건 문자열로 저장

  • 변환할 데이터가 1개일 때
    • 변수 = int(input())
    • 변수 = float(input())
  • 2개 이상
    • a, b = map(int, input().split())

- List

크기 동적, 배열과 달리 여러 자료형 섞어서 저장 가능

a = [값1, 값2, 값3, ...]
b = list([값1, 값2, 값3, ...])

a[0] = 1

- Dictionary

연관된 값을 묶어서 저장하는 용도
key, value 구조

딕셔너리명 = {키1:값1, 키2:값2, ...}
딕셔너리명 = dict({키1:값1, 키2:값2, ...})

a['이름'] = "이순신"

- slice

문자열, 리스트 같은 순차형 객체에서 일부를 잘라 반환

  • 객체명[초기위치: 최종위치]
    • 초기위치~ 최종위치-1까지 가져옴
  • 객체명[초기위치: 최종위치: 증가값]
    • 초기위치~ 최종위치-1까지 증가값만큼 증가하며 가져옴
    • 증가값이 음수인 경우 초기위치에서 최종위치+1까지 증가값만큼 감소하며 가져옴
  • 일부 인수 생략 가능
    • 객체명[:], 객체명 [::]
      • 모든 요소 반환
    • 객체명[초기위치:]
      • 초기위치에서 마지막 위치까지
    • 객체명[:최종위치]
      • 0부터 최종위치-1까지
    • 객체명[::증가값]
a = ['a', 'b', 'c', 'd', 'e']

a[1:3] // b c
a[0:5:2] // a c e
a[3:] // d e
a[:3] // a b c
a[::3] // a d

- if문

- for문

> range

for 변수 in range(최종값):
	실행할 문장

for i in range(10): // 0부터 9까지
	sum += i; // i를 sum에 누적 == 45
    
for i in range(11, 20): // 11~19
	sum += i; // 135

for i in range(-10, 20, 2) // -10부터 19까지 2씩 증가하면서

> list

for 변수 in 리스트

a = [35, 55, 65, 84, 45]
hap = 0;

for i in a:
	hap += i

avg = hap / len(a)
print(hap, avg)

- while문

i, hap = 0, 0

while i < 5:
	i += 1
    hap += i
    
print(hap)

- 클래스

class Cls:
	x, y = 10, 20
    
    	def chg(self):
        	temp = self.x
            self.x = self.y
            self.y = temp

a = Cls()
print(a.x, a.y) // 10 20
a.chg()
print(a.x, a.y) // 20 10

- 클래스 없는 메소드의 사용

C언어의 사용자 정의 함수와 같이 클래스 없이 메소드만 단독 사용 가능

def calc(x, y):
	x *= 3
    y /= 3
    print(x, y)
    return x
    
a, b = 3, 12
a = calc(a, b) // print: 9 4.0 (a == 9)

print(a, b) // 9 12

12) 언어 종류

- 절차적 프로그래밍 언어

  • C
    • 데니스 리치
    • 시스템 프로그래밍 언어
    • 포인터 제공(자료 주소 조작)
    • 고급/저급 프로그래밍 언어 특징 모두 갖춤
    • UNIX의 일부가 C로 구현됨
    • 컴파일러 방식의 언어
    • 이식성 좋음
  • ALGOL
    • 수치 계산, 논리 연산을 위한 과학 기술 계산용 언어
    • PASCAL과 C의 모체
  • COBOL
    • 사무 처리용
    • 영어 문장 형식 → 배우기 쉬움
    • 4개의 DIVISION
  • FORTRAN
    • 과학 기술 계산용 언어
    • 공식, 수식 형태로 프로그래밍 가능

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

  • JAVA
    • 분산 네트워크, 멀티 스레드
    • 운영체제, 하드웨어 독립적, 이식성 강함
    • 캡슐화 재사용성
  • C++
    • C + 객체지향
    • 모든 문제를 객체로 모델링하여 표현
  • Smalltalk
    • 1세대 객체지향 프로그래밍 언어
    • 최초로 GUI 제공한 언어

- 스크립트 언어

  • JavaScript
    • 웹 페이지 동작 제어용 클라이언트 스크립트 언어
    • 클래스 x, 변수 선언 X
  • VB 스크립트
    • 마이크로소프트, Active X
  • ASP(Active Server Page)
    • 서버측에서 동적으로 수행되는 페이지를 만들기 위한 언어
    • 마이크로소프트
    • window 계열에서만 수행 가능
  • JSP(Java Server Page)
    • 자바 기반 서버용 스크립트, 다양한 운영체제
  • PHP
    • 서버용 스크립트 언어, Linux, unix, windows
    • C, Java와 문법 유사
  • Python
    • 객체지향 지원하는 대화형 인터프리터 언어
    • 플랫폼 독립적, 간단한 문법
  • 쉘 스크립트
    • Unix/Linux 계열의 Shell에서 사용되는 명령어 조합으로 구성된 스크립트 언어
    • 컴파일X → 실행속도 빠름
    • 확장자 .sh
    • Bash Shell, Bourne Shell, C Shell, Korn Shell
    • 제어문: if, case / for, while, until
  • Basic: 절차지향 대화형 인터프리터 언어, 초보자도 사용가능한 문법 구조

- 선언형 프로그래밍 언어

  • HTML
  • LISP: 인공지능, 기본자료구조 == 연결리스트, 재귀 호출 많이 사용
  • PROLOG: 논리학 기반 고급 언어, 인공지능, 리스트 처리
  • XML: HTML 보완, 웹 문서 상호 교환, 새로운 태그 정의, 내용과 표현 독립적
  • Haskell: 함수형 프로그래밍 언어, 사이드이펙트X, 간결한 코드, 에러 가능성↓

14) 라이브러리

자주 사용하는 함수 데이터 모음

  • 반복적인 코드 작성 피하기 위해, 필요할 때 호출
  • 표준 라이브러리: 언어에 포함
  • 외부 라이브러리: 설치해서 사용

- C언어의 대표적인 표준 라이브러리

라이브러리를 헤더파일로 제공
#include <studio.h>처럼 선언 후 사용

  • studio.h
    • 데이터 입출력
    • printf, scanf, fprintf, fscantf, fclose, fopen
  • math.h
    • 수학 함수, sqrt, pow, abs
  • string.h
    • 문자열, strlen, strcpy, strcmp
  • stdlib.h
    • 자료형 변환, 난수 발생, 메모리 할당
    • atoi, atof, srand, rand, malloc, free
  • time.h
    • 시간 처리, time, clock

15) 예외처리

  • 프로그램 종료 or 로그 남기기
  • C++, Ada, JAVA, JavaScript → 예외처리 기능 내장
  • 그 외 언어는 조건문으로 예외처리 루틴 작성
  • 원인: 하드웨어 문제, 운영체제 설정 실수, 라이브러리 손상, 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근

3. 응용 SW 기초 기술 활용

1) 운영체제

- 정의, 목적

컴퓨터 시스템 자원 관리, 사용자가 컴퓨터를 편리하게 사용할 환경 제공 프로그램의 모임

  • 사용자와 하드웨어 간 인터페이스로 동작하는 시스템 소프트웨어의 일종
  • 다른 응용프로그램의 환경 제공
  • 목적: 처리능력, 사용 가능도, 신뢰도 향상 / 반환 시간 단축
  • 운영체제 성능 평가 기준
    • 처리 능력: 일정 시간 내에 시스템이 처리하는 일의 양
    • 반환 시간: 작업 의뢰~처리 완료까지 기간
    • 사용 가능도: 즉시 사용 가능한 정도
    • 신뢰도: 정확히 해결

- 구성

> 제어 프로그램

컴퓨터 전체의 작동 상태 감시, 작업 순서 지정, 작업 데이터 관리

  • 감시 프로그램: 핵심, 자원 할당/시스템 전체의 작동상태 감시
  • 작업 관리 프로그램: 작업 순서, 방법 관리
  • 데이터 관리 프로그램: 데이터, 파일의 처리, 전송

> 처리 프로그램

제어 프로그램의 지시를 받아 문제 해결

  • 언어 번역 프로그램
    • 사용자의 원시 프로그램(고급 언어) → 목적 프로그램(기계어)
    • 컴파일러, 어셈블러, 인터프리터
  • 서비스 프로그램
    • 사용자의 효율적인 컴퓨터 사용
    • 분류/병합, 유틸리티 프로그램

- 기능

  • 프로세서(처리기), 기억장치(주/보조 기억장치), 입출력장치, 파일, 정보 등의 자원 관리
  • 자원의 스케줄링 기능
  • 사용자와 시스템 간 인터페이스 제공
  • 하드웨어, 네트워크 관리 제어
  • 데이터 관리, 데이터/자원의 공유기능 제공
  • 시스템 오류 검사, 복구
  • 자원 보호 기능 제공
  • 입출력 보조 기능
  • 가상 계산기 기능

- 종류

> Windows

90s. 마이크로소프트

  • GUI
  • 선점형 멀티태스킹: 멀티태스킹 중 문제 발생 시 해당 프로그램 강제 종료, 자원 반환
  • PnP(Plug and Play, 자동 감지 기능): 새 하드웨어 환경 자동 구성
  • OLE(Object Linking and Embedding): 응용 프로그래밍 간 개체 연결, 삽입
  • 255자의 긴 파일명
  • Single-User 시스템

> UNIX

AT&T 벨 연구소, MIT, General Electric 공동 개발 운영 체제

  • 시분할 시스템(time)을 위해 설계된 대화식 운영체제, 오픈 소스
  • C언어로 작성, 이식성 높음, 호환성도 높음
  • 크기가 작고 이해하기 쉬움
  • 다중 사용자, 다중 작업 지원
    • 여러 사용자 동시에 시스템 사용 가능, 여러 개의 작업/프로그램 동시 수행 가능
  • 네트워크 관리용 운영체제로 적합
  • 트리구조 파일 시스템
  • 전문적인 프로그램 개발에 용이
  • 다양한 유틸 프로그램

> UNIX 시스템 구성

  • 커널(Kernel)
    • 핵심. 부팅 시 주기억장치에 적재, 상주하며 실행
    • 하드웨어 보호, 프로그램-하드웨어 간 인터페이스 역할
    • 프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일/입출력 관리, 프로세스 간 통신, 데이터 전송 및 변환 기능 수행
  • 쉘(Shell)
    • 사용자의 명령어를 인식, 프로그램 호출, 명령 수행 → 명령어 해석기
    • 시스템과 사용자간 인터페이스 담당
    • DOS의 COMMAND.COM
    • 주기억장치 상주 X, 파일 형태로 존재, 보조 기억장치에서 교체 가능
    • 파이프라인 지원, 입출력 재지정 가능
    • 공용 Shell(Bourne Shell, C Shell, Korn Shell)이나 커스텀 쉘 사용 가능
  • Utility Program
    • 일반 사용자가 작성한 응용 프로그램 처리
    • DOS의 외부 명령어
    • 에디터, 컴파일러, 인터프리터, 디버거

2) 파일 디스크립터

시스템(운영체제)이 필요로하는 파일에 대한 정보를 가진 제어 블록
파일 제어 블록(FCB)

  • 파일마다 독립적으로 존재, 시스템에 따라 다른 구조
  • 보조기억장치에 저장되어 있다가 해당 파일이 open될 때 주 기억장치로 옮겨짐
  • 사용자의 직접 참조X, 파일 시스템이 관리

3) 기억장치 관리

- 배치 전략

새로 반입되는 프로그램, 데이터를 주 기억장치 어디에 위치시킬 것인지 결정하는 전략

  • 최초적합(First Fit): 들어갈 수 있는 빈 영역 중 첫 번째 분할 영역
  • 최적적합(Best Fit): 단편화를 가장 작게 남기는 분할 영역
  • 최악적합(worst fit): 가장 많이 남기는

- 페이징 기법

  • 가상기억 장치의 프로그램과 주 기억장치의 영역을 동일한 크기로 나눈 후, 나눠진 프로그램(페이지)을 나눠진 주기억장치 영역(페이지 프레임)에 적재
  • 외부 단편화 발생X, 내부 단편화 O
  • 페이지 맵 테이블: 주소 변환을 위해 페이지의 위치 정보 저장

- 세그먼테이션 기법

  • 가상기억장치의 프로그램을 논리적 단위로 나눈 후(세그먼트) 주 기억장치에 적재
  • 세그먼트는 고유한 이름, 크기를 가짐
  • 세그먼트 맵 테이블: 세그먼트 위치 정보
  • 내부 단편화 X, 외부 단편화 O

4) 페이지 교체 알고리즘

페이지 부재(Page Fault) 시 가상기억장치의 필요한 페이지를 주 기억장치에 적재해야 하는데,
이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 교체할지 결정하는 기법

  • OPT(최적 교체): 앞으로 가장 오래 사용하지 않을 페이지 교체, 벨레이디, 페이지 부재횟수가 가장 적게 발생 (가장 효율적인 알고리즘)
  • FIFO
  • LRU(Least Recently Used): 최근에 가장 오랫동안 사용하지 않은 페이지 교체, 각 페이지마다 계수기(counter)/스택(stack)
  • LFU(Frequently): 사용 빈도가 가장 적은 페이지
  • SCR(2차 기회 교체): the oldest 주기억장치의 페이지 중 자주 사용되는 페이지의 교체 방지, FIFO 보완
  • NUR(Not Used Recently): LRU와 비슷, LRU의 시간적인 오버헤드 줄이기, 참조비트/변형비트로 사용여부 확인

- 페이지 크기

> 작을 경우

  • 페이지 단편화 감소, 한 페이지를 주기억장치로 이동하는 시간 ↓
  • 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹셋
  • Locality에 더 일치 → 기억장치 효율 좋아짐
  • 페이지 맵 테이블의 크기가 커지고, 매핑속도 ↓
  • 디스크 접근 횟수가 많아져서 전체적 입출력 시간 늘어남

> 클 경우

  • 맵 테이블 크기 감소, 매핑 속도 증가
  • 디스크 접근 횟수 감소 → 입출력 효율 증가
  • 페이지 단편화 증가, 한 페이지를 주기억장치로 이동하는 시간 증가
  • 프로세스 수행에 불필요한 내용까지도 주기억장치에 적재됨

- Locality

프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다

  • 스래싱 방지용 워킹 셋 이론의 기반
  • 시간 구역성, 공간 구역성으로 분류

> 시간 구역성(Temporal Locality)

  • 일정시간 집중적 액세스 현상
  • 한 번 참조한 페이지는 금방 또 참조할 가능성이 높음
  • 기억장소: Loop, Stack, 부 프로그램, Counting, 집계에 사용되는 변수

> 공간 구역성(Spatial Locality)

  • 일정 위치의 페이지에 집중적 엑세스
  • 어느 한 페이지를 참조하면 그 근처 페이지 계속 참조 가능성 높음
  • 기억장소: 배열 순회, 순차적 코드 실행, 근처에 선언/할당된 변수들, 같은 영역에 있는 변수

- Working Set

프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합

  • Denning이 제안한 프로그램 움직임에 대한 모델, 프로그램의 Locality 특징 이용
  • 자주 참조되는 워킹셋을 주기억장치에 상주 → 페이지 부재, 교체 현상 감소 → 기억장치 사용 안정
  • 시간에 따라 변경됨

- 스레싱

프로세스 처리 시간 < 페이지 교체 소요 시간

  • 페이지 부재가 자주 발생해서 나타나는 현상 → 전체 시스템 성능 저하
  • 다중 프로그래밍의 정도가 높아짐에 따라 CPU 이용율은 특정 시점까지 높아짐 → 스래싱 발생 → CPU 이용률 급격히 감소

방지 방법

  • 다중 프로그래밍 정도를 적정 수준으로 유지
  • 페이지 부재 빈도 조절하여 사용
  • 워킹셋 유지
  • 부족한 자원 증설, 일부 프로세스 중단
  • CPU 임계치 예상하여 운영

5) 프로세스

실행중인 프로그램
프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램
작업, 태스크라고도 함

  • PCB를 가진 프로그램
  • 실 기억장치에 저장된 프로그램
  • 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
  • 프로시저가 활동중인 것
  • 비동기적 행위를 일으키는 주체
  • 지정된 결과를 얻기 위한 일련의 계통적 동작
  • 목적, 결과에 따라 발생되는 사건의 과정
  • 운영체제가 관리하는 실행단위

- PCB

프로세스 제어 블록

운영체제가 프로세스에 대한 중요 정보를 저장해놓는 곳
Task Control Block, Job Control Block

  • 각 프로세스 생성 시 고유의 PCB가 생성되고, 완료시 제거됨

> PCB에 저장된 정보

  • 프로세스의 현재 상태
  • 포인터
    • 부모/자식 프로세스의 포인터
    • 프로세스 위치한 메모리 포인터
    • 할당된 자원 포인터
  • 식별자
  • 스케줄링/프로세스의 우선순위
  • CPU 레지스터 정보
  • 주기억장치 관리 정보
  • 입출력 상태
  • 계정

- 프로세스 상태 전이

프로세스 상태가 변하는 것
상태전이도로 표시

=> 제출, 접수, 준비, 실행, 대기

프로세스상태전이

  • 제출
  • 접수: 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장
  • 준비
  • 실행: 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행됨
  • 대기: 보류, 블록 / 입출력이 필요하면 중단되고, 입출력 처리가 완료될 때까지 기다림
  • 종료: 프로세스 할당 해제

> 관련 용어

  • Dispatch: 준비 상태의 프로세스가 프로세서를 할당받아 실행상태로 전이되는 과정
  • Wake Up: 입출력 작업 완료 → 프로세스가 대기에서 준비상태로
  • Spooling: 입출력 한번에 하려고 디스크에 저장
  • 교통량 제어기: 프로세스 상태에 대한 조사, 통보

- 스레드

프로세스 내에서의 작업 단위
시스템의 자원을 할당받아 실행하는 프로그램의 단위

  • 단일 스레드, 다중 스레드
  • 경량 프로세스라고도 함
  • 스레드 기반 시스템 → 독립적인 스케줄링의 최소단위로서 프로세스의 역할 담당
  • 동일 프로세스 환경에서 독립적인 다중 수행 가능

> 스레드의 분류

사용자 수준의 스레드

  • 사용자가 만든 라이브러리로 스레드 운용
  • 빠른 속도, 구현 어려움

커널 수준 스레드

  • 운영체제 커널에 의해 스레드 운용
  • 구현 쉽지만 속도 느림

> 장점

  • 병행성 증진
  • HW, OS 성능 / 응용 프로그램 처리율 향상
  • 응답 시간 단축
  • 실행환경 공유 → 기억장소 낭비 저하
  • 프로세스 간 통신 향상
  • 스레드는 공통적으로 접근가능한 기억장치를 통해 효율적으로 통신

6) 스케줄링

- 주요 스케줄링 알고리즘

> FCFS(First Come First Service) = FIFO

  • 준비상태 큐에 도착한 순서에 따라 CPU 할당, 가장 간단한 알고리즘
  • 공평하지만, 짧은 작업이 긴 작업을, 중요한 작업이 중요하지 않은 작업을 기다리게 된다

> SJF(Shortest Job First): 단기 작업 우선

  • 실행시간이 가장 짧은 프로세스에 CPU 할당
  • 가장 적은 평균 대기 시간 제공

> HRN(Highest Response-ratio Next)

  • 실행시간이 긴 프로세스에 불리한 SJF 보완
  • 대기시간과 서비스 시간 이용 → 우선순위 계산 공식
    • (대기시간 + 서비스 시간) / 서비스 시간

7) UNIX/LINUX

- 환경변수

명령어, 스크립트에서 사용하려면 변수명 앞에 $를 붙여야함
set, env, printenv, setenv 중 하나를 입력하면 모든 환경변수, 값을 표시

  • $DISPLAY: 현재 X 윈도 디스플레이 위치
  • $PS1: 쉘 프롬프트 정보
  • $HOME: 사용자의 홈 디렉토리
  • $PWD: 현재 작업하는 디렉토리
  • $LANG: 프로그램 사용 시 기본적으로 지원되는 언어
  • $TERM: 로긴 터미널 타입
  • $MAIL: 메일 보관 경로
  • $USER: 사용자 이름
  • $PATH: 실행 파일 경로

- 기본 명령어

명령어기능
cat파일 내용 표시
chdirchange directory
chmod파일의 보호 모드 설정
chown소유자 변경
cp파일 복사
exec새로운 프로세스 수행
find파일 찾기
fork새 프로세스 생성
fsck파일 시스템 검사, 보수
getpid프로세스 아이디 얻음
getppid부모 프로세스 아이디 얻기
ls파일 목로
mount/unmount파일 시스템 마운팅/해제
rm삭제
waitfork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 이벤트를 기다림

8) 인터넷

- IP 주소

Internet Protocol Address

인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유 주소

  • 숫자 8비트씩 4부분, 총 32비트로 구성
  • 네트워크 부분의 길이에 따라 A~E 클래스로 구성

ip-class

- 서브네팅

할당된 네트워크를 다시 여러개의 작은 네트워크로 나누어 사용

  • 서브넷 마스크: 4바이트의 IP 주소 중 네트워크, 호스트 주소를 구분하기 위한 비트
  • 이를 변경하여 네트워크 주소를 여러개로 분할
  • 각 클래스마다 다르게 사용됨

- IPv6

IPv4 주소 부족 문제 해결을 위해 개발

  • 128비트의 주소, 속도 빠름
  • 인증성, 기밀성, 데이터 무결성 지원 → 보안문제 해결
  • IPv4와 호환성 뛰어남
  • 주소의 확장성, 융통성, 연동성 ↑ / 실시간 흐름 제어로 향상된 멀티미디어 기능
  • 패킷 크기 확장 가능 → 즉 크기 제한 없음

> 구성

16비트씩 8부분 → 총 128 비트
각 부분 16진수 표현, 콜론으로 구분
세 가지 주소 체계로 나누어짐

  • 유니캐스트: 단일 송신자 - 단일 수신자 (1:1통신)
  • 멀티캐스트: 단일 송신자 - 다중 수신자
  • 애니캐스트: 단일 송신자와 가장 가까이 있는 단일 수신자 통신

9) OSI 참조 모델

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

> OSI 7계층

하위계층: 물리, 데이터 링크, 네트워크
상위계층: 전송, 세션, 표현, 응용

  • 물리 계층: 장치간 규칙
  • 데이터 링크 계층
    • 시스템간 연결 설정과 유지 및 종료
    • 송수신 속도 차이를 위한 흐름 제어
    • 프레임의 시작, 끝 구분을 위한 프레임 동기화 기능
    • 오류제어
  • 네트워크 계층, 망 계층
    • 네트워크 연결 관리, 데이터 교환/중계
    • 네트워크 연결 설정, 유지, 해제
    • 경로설정(routing), 데이터 교환 및 종계, 트래픽 제어, 패킷 정보 전송
  • 전송 계층
    • 종단 시스템(end-to-end)간 투명한 데이터 전송
    • 주소 설정, 다중화(분할, 재조립), 오류 제어, 흐름 제어
  • 세션 계층
    • 송수신 측 간의 관련성 유지, 대화 제어
    • 대화 구성 및 동기 제어, 데이터 교환 관리
  • 표현 계층
    • 세션-응용 계층간 데이터 가공
    • 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식 변환, 문맥 관리
  • 응용 계층
    • 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스 제공

10) 네트워크 관련 장비

  • 네트워크 인터페이스 카드
    • 컴퓨터-컴퓨터, 컴퓨터-네트워크 연결 장치 / 정보 전송 시 케이블을 통해 전달될 수 있도록 형태 변경
  • 허브: 가까운 거리 컴퓨터 연결, 신호 증폭(리피터) 역할도 포함 / 더미허브, 스위치 허브
  • 리피터
  • 브리지: LAN과 LAN을 연결, LAN 안에서 컴퓨터 그룹(세그먼트) 연결 / 네트워크 분산 구성 → 보안↑
  • 스위치: LAN + LAN = 더 큰 LAN
  • 라우터: 브리지 + 데이터 전송 최적 경로 선택 기능 / 서로다른 LAN이나 WAN과의 연결도 수행
  • 게이트웨이: 전계층 프로토콜 구조가 다른 네트워크의 연결

11) 프로토콜

- 응용 계층의 주요 프로토콜

  • FTP: 원격 파일 전송 프로토콜
  • SMTP: 전자우편 교환
  • TELNET: 원격연결
  • SNMP: 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보낼 때의 표준 통신 규약
  • DNS
  • HTTP: www의 html 송수신 프로토콜

- 전송 계층

  • TCP: 양방향 연결, 스트림 위주 전달(패킷 단위), 헤더(20~100Byte)
  • UDP: 비연결형 서비스, 헤더 단순, 오버헤드 적고 흐름/순서 제어 X, 실시간 전송에 유지, 신뢰 < 속도
  • RTCP: RTP 전송 품질 제어 프로토콜, 세션에 참여한 각 참여자들에게 제어정보 전송

- 인터넷 계층

  • IP: 전송할 데이터에 주소 지정 → 경로 설정, 비연결형 데이터그램 방식 사용 → 신뢰성 보장X
  • ICMP: IP와 조합, 오류 처리, 전송 경로 변경 등의 제어 메시지 관리, 헤더 8Byte
  • IGMP: 멀티캐스트 그룹 유지
  • ARP: 호스트 IP를 연결된 장치의 물리적 주소(MAC Address)로 바꿈
  • RARP: ARP의 반대. 물리적 주소를 IP 주소로

- 네트워크 액세스 계층

  • Ethernet: CSMA/CD 방식의 LAN
  • IEEE 802: LAN을 위한 표준 프로토콜
  • HDLC: 비트 위주의 데이터 링크 제어 프로토콜
  • X.25: 패킷 교환망을 통한 DTE와 DCE간 인터페이스 제공 프로토콜
  • RS-232C: 공중전화 교환망을 통한 DTE와 DCE간 인터페이스 제공

0개의 댓글