포스트

31. 운영체제 기초 활용 3

31. 운영체제 기초 활용 3

Scheduling

개념

  • 메모리에 올라온 프로세스들 중 어떤 프로세스를 먼저 처리할지 순서를 정하는 것

  • Ready Queue에 있는 프로세스들 중 누구에게 CPU를 할당해 줄 것인지 정하는 것

목적

공평성 : 모든 프로세스가 자원을 공평하게 배정받아야 하며, 특정 프로세스가 배제되어서는 안됨
효율성 : 시스템 자원을 최대한 활용하여 스케줄링 해야 함
안정성 : 중요한 프로세스가 먼저 처리되도록 함
반응 시간 보장 : 적절한 시간 안에 프로세스의 요구에 반응해야 함
무한 연기 방지 : 특정 프로세스의 작업이 무한하게 연기되어서는 안됨

성능척도

프로세서 차원

  • CPU 사용률
  • 처리량Throughput

프로세스 차원

응답시간 | Response Time

  • 프로세스가 대기 상태에 들어와 CPU를 최초로 얻기까지 걸리는 시간

대기시간 | Waiting Time

  • 프로세스가 CPU를 할당받기 전 대기 상태일 때의 시간

반환시간 | Turn-around Time

  • 프로세스가 생성되어 종료된 후 자원을 모두 반환하는데 걸리는 시간

기법

선점형 스케줄링 | Preemptive

  • 다른 프로세스가 실행 중이더라도 운영체제가 CPU를 강제로 뺏을 수 있는 방식

  • CPU 처리 시간이 매우 긴 프로세스가 CPU 사용 독점을 막을 수 있어 효율적인 운영이 가능

  • 잦은 문맥 교환으로 오버헤드가 많이 발생

  • 종류 : Round Robin, SRT, 다단계 큐(MLQMulti-Level Queue), 다단계 피드백 큐(MFQMulti-Level Feedback Queue) 등

비선점형 스케줄링 | Non-Preemptive

  • 프로세스가 CPU를 점유하고 있다면 이를 빼앗을 수 없는 방식

  • 순서대로 처리되는 공정성 보장

  • 다음에 처리해야 할 프로세스와 관계없이 응답시간을 예상할 수 있음

  • 낮은 문맥 교환으로 오버헤드가 적음

  • CPU 사용시간이 짧은 여러 프로세스가 오래 기다릴 수 있어, 처리율이 떨어질 수 있음

  • 종류 : FCFS, SJF, HRN, 우선순위, 기한부 등


스케줄링 알고리즘

선점형 기법

Round Robin

  • 시간단위(Time Quantum / Slice)를 정해서 프로세스를 순서대로 CPU를 할당하는 방식

  • 컴퓨터 자원을 사용할 수 있는 기회를 프로그램 프로세스들에게 공정하게 부여하기 위한 방법

SRT | Shortest Remaining Time

  • 비선점 스케줄링인 SJF 기법을 선점 형태로 변경한 기법

  • CPU 점유 시간이 가장 짧은 프로세스에 CPU를 먼저 할당하는 방식

다단계 큐 | Multi-Level Queue

  • 프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비 상태 큐를 사용하는 기법

  • 특정 그룹의 준비상태 큐에 들어갈 경우 다른 준비상태 큐로 이동할 수 없음

  • 하위 준비 상태 큐에 있는 프로세스를 실행하는 도중이라도 상위 준비 상태 큐에 프로세스가 들어오면 상위 프로세스에게 CPU를 할당

다단계 피드백 큐 | Multi-Level Feedback Queue

  • 프로세스 생성 시 가장 높은 우선 순위 준비 큐에 등록되며 등록된 프로세스는 FCFS 순서로 CPU를 할당받아 실행되고, 할당된 시간이 끝나면 다음 단계의 준비큐로 이동

  • 단계가 내려갈수록 시간 할당량이 증가하고, 가장 하위큐는 Round Robin 방식으로 운영

  • 적응 기법(Adaptive Mechanism)의 개념을 적용

비 선점형 기법

FCFS | First Come, First Service

  • 먼저 도착한 프로세스를 먼저 처리하는 스케줄링 알고리즘

  • 공평성이 유지되지만, 중요한 작업이 중요치 않은 작업에 밀려서 늦게 처리되는 문제점 발생

  • 실행시간이 긴 프로세스가 먼저 도착하게 되면, 효율성이 떨어지는 현상 발생

SJF | Shortest Job First

  • 실행시간이 가장 짧은 프로세스에게 CPU를 할당하는 방식

  • 짧은 작업들을 우선적으로 처리하다 보니, 평균 대기시간이 가장 적은 최적의 스케줄링 기아현상이 발생할 수 있음

HRN | Highest Response Ratio Next

  • SJF 기법에서 실행시간이 긴 프로세스가 가질 수 있는 불리함을 보완한 스케줄링 방식

  • 우선순위를 계산해서 프로세스들에게 순서를 부여하는 방식

  • 우선순위 = (대기시간 + 실행시간) / 실행시간

  • 실행시간이 짧은 프로세스에게 밀려서 오랫동안 기다린 프로세스가 더 높은 우선순위를 가지게 됨

우선순위 | Priority

  • 프로세스마다 우선순위를 부여하여 높은 우선순위를 가진 프로세스에게 먼저 자원을 할당

  • 우선순위가 낮을 경우 기아상태가 일어날 수 있음

기한부 | Deadline

  • 프로세스에게 일정한 시간을 주어 그 시간 안에 완료하도록 하는 기법

  • 주어진 시간 내에 완료되지 못할 경우, 해당 프로세스는 제거되거나 처음부터 다시 실행되어야 하므로 부담이 매우 큰 기법


병행 프로세스와 교착상태

병행 프로세스

  • 두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것

문제점

  • 동시에 2개 이상의 프로세스를 병행 처리하면 한정된 자원(CPU, 메모리, 디스크, I/O 장치 등)에 대한 사용 순서 등의 문제가 발생

해결책

  • 임계구역

  • 상호배제 기법

  • 동기화 기법

임계 구역 | Critical Section

  • 여러 개의 프로세스에 의하여 공유되는 데이터 및 자원에 대하여 한 순간에는 반드시 하나의 프로세스에 의해서만 자원 또는 데이터가 사용되도록 하고, 이러한 자원이 프로세스에 의하여 반납된 후 비로소 다른 프로세스에서 자원을 이용하거나 데이터를 접근할 수 있도록 지정된 영역

특징

  • 특정 프로세스가 독점할 수 없음

  • 프로세스가 임계구역에 대한 진입을 요청하면 일정 시간 내에 진입을 허락해야 함

상호 배제 | Mutual Exclusion

  • 한 프로세스가 공유 메모리 혹은 공유 파일을 사용하고 있을 때 다른 프로세스들이 사용하지 못하도록 배제시키는 제어 기법

상호 배제 기법

  • Dekker’s Algorithm

  • Peterson’s Algorithm

  • Dijkstra Algorithm

  • Lamport’s Bakery Algorithm

동기화 기법

  • 스레드들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법

Semaphore

  • 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법

  • 다익스트라가 제안

  • P와 V라는 2개의 연산에 의해서 동기화를 유지시키고, 상호 배제의 원리를 보장

  • P는 임계구역에 들어가기 전에 수행되고, V는 임계 구역에서 나올 때 수행

  • 종류 : 계수 세마포어, 이진 세마포어

Monitor

  • 프로그래밍 언어 수준에서 동시성을 제어하여 타이밍 오류를 해결한 상호 배제 기법

  • 모니터 내의 자원을 공유하려면 프로세스는 반드시 모니터의 진입부를 호출해야 함

  • 모니터 외부의 프로세스는 모니터 내부의 데이터를 직접 액세스 할 수 없음

  • Wait와 Signal 연산이 사용

교착 상태 | Dead Lock

  • 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상

발생 조건

상호 배제 | Mutual Exclusion

  • 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 함

점유와 대기 | Hold & Wait

  • 자원을 점유하고 있으면서 다른 프로세스에 할당되어 있는 자원을 추가로 요구하며 대기

비선점 | NonPreemption

  • 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음

환형 대기 | Circular Wait

  • 각 프로세스가 순차적으로 다음 프로세스가 요구하고 있는 자원을 가지고 있는 상태

해결 방법

예방 기법 | Prevention

  • 교착상태가 발생되지 않도록 사전에 시스템을 제어하는 방법

회피 기법 | Avoidance

  • 교착상태가 발생하려고 할 때, 교착상태 가능성을 피해가는 방법
  • 주로 은행원 알고리즘(Banker’s Algorithm) 사용

발견 기법 | Detection

  • 시스템에 교착 상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것

회복 기법 | Recovery

  • 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것

Disk Scheduling

개념

  • 사용할 데이터가 디스크 상의 여러 곳에 저장되어 있을 경우, 데이터를 액세스하기 위해 디스크 헤드를 움직이는 경로를 결정하는 기법

  • 효율적으로 데이터를 액세스 하는 방법

목표

  • 하드 디스크 검색으로 낭비되는 시간을 최소화

  • 특정한 프로세스의 입출력 요청의 우선순위를 정함

  • 디스크 대역을 실행중인 각 프로세스에 할당

  • 정해진 기한까지 요청을 처리

종류

FCFS 스케줄링 | First Come First Served

  • 요청이 들어온 순서대로 처리

  • 장점 : 알고리즘이 다른 기법보다 단순하며, 공평하게 요청을 처리

  • 단점 : 비용이 많이 발생되어 비효율적

SSTF | Shortest Seek Time First

  • 현재 헤드에서 가장 가까운 트랙의 요청을 먼저 처리

  • 장점
    • Seek Time이 적음
    • 트랙을 찾는 시간을 최소화할 수 있음
    • 처리량(Throughput)을 극대화할 수 있음
  • 단점
    • 안쪽 및 바깥쪽에 있는 요청들은 기아 현상이 발생할 수 있음

SCAN

  • 헤드의 진행방향에 있는 요청을 처리하고, 다시 반대 방향으로 틀어 반대방향에 있는 요청들을 처리

  • 엘리베이터가 동작하는 원리가 같아서 엘리베이터 기법이라고도 함

  • 진행되는 과정에서 요청이 들어오면 해당 요청도 처리

  • 장점 : SSTF의 바깥쪽 트랙의 기아 가능성을 제거할 수 있고, 응답시간의 편차를 줄일 수 있음

  • 단점 : 양 쪽 끝 트랙은 가운데 위치한 트랙보다 대기 시간이 길어짐

C-SCAN

  • 항상 한쪽 방향에서 반대방향으로 진행하며 트랙의 요청을 처리

  • 바깥쪽에서 안쪽으로 진행하며 요청을 처리

  • SCAN의 변형된 형태로 조금 더 시간을 균등하게 배분할 수 있음

  • 진행되는 과정에서 요청이 들어오면 해당 요청은 처리하지 않음

  • 장점 : 응답시간의 편차가 매우 적음, SCAN보다 시간 균등성이 좋음

  • 단점 : 안쪽이나, 바깥쪽으로 처리할 요청이 없어도 헤드셋이 끝까지 이동하기 때문에 비효율적

LOOK

  • SCAN 기법을 기초로 사용하며, 진행 방향의 마지막 요청을 처리한 후 반대 방향으로 처리하는 기법

C-LOOK

  • C-SCAN 기법을 기초로 사용하며, 바깥쪽에서 안쪽 방향의 모든 요청을 처리한 후, 가장 바깥쪽으로 이동한 후 다시 안쪽 방향으로 서비스 하는 기업

N-STEP SCAN

  • SCAN 기법을 기초로 두고 있으며, 시작하기 전 대기하고 있는 요청들을 우선적으로 처리하고, 처리하는 과정 중에 요청이 들어오는 것들은 이후에 모아서, 반대방향으로 진행할 때 서비스

에션바흐 기법 | Eschenbach

  • 부하가 매우 큰 항공 예약 시스템을 위해 개발

  • 탐색 시간과 회전 지연 시간을 최적화하기 위한 최초의 기법


환경 변수

개념

  • 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임

  • OS에서 프로세스들을 생성할 때 참조하는 ‘변수’

UNIX / Linux 환경변수

  • env, set, printenv 명령어들을 사용하여 환경 변수와 그에 따른 모든 값을 볼 수 있음

  • export 명령을 이용하여 사용자 환경 변수를 전역 변수로 설정할 수 있음

종류

$PATH : 디렉터리의 경로
$HOME : 사용자의 홈 디렉터리
$LANG : 기본 지원되는 언어
$USER : 사용자의 이름
$TERM : 로그인 터미널 타입
$PS1 : 1차 명령 프롬프트 변수
$HISTFILE : 히스토리 파일의 절대 경로
$MAIL : 도착한 메일이 저장되는 경로
$TMOUT : 로그인 후 일정시간 작업을 하지 않을 경우 로그아웃시키는 시간
$UID : 사용자의 UID
$PWD : 사용자의 현재 작업 디렉토리
$DISPLAY : X 윈도우에서 프로그램 실행 시 출력되는 창
$OSTYPE : 운영체제 타입

Windows 환경 변수

  • 제어판 -> 시스템 및 보안 -> 시스템 -> 고급 시스템 설정 -> 환경변수

  • 커맨드 창에서 set 명령으로 확인

종류

%HOMEDRIVE% : 로그인한 계정 정보가 들어있는 드라이브
%HOMEPATH% : 로그인한 계정의 폴더
%SYSTEMDRIVE% : 윈도우가 부팅된 드라이브
%SYSTEMROOT% : 부팅된 운영체제가 들어있는 폴더
%PROGRAMFILES% : 기본 프로그램 설치 폴더
%TEMP% : 임시 파일이 저장되는 폴더
%COMSPEC% : 기본 명령 프롬프트 프로그램
%USERDOMAIN% : 로그인한 시스템의 도메인명
%USERNAME% : 로그인한 계정 이름
%USERPROFILE% : 로그인한 유저의 프로필이 들어있는 폴더명
%ALLUSERPROFILE% : 모든 사용자 프로필이 저장된 폴더
%APPDATA% : 설치된 프로그램의 필요 데이터가 저장된 폴더
%PATH% : 실행 참조용 폴더 지정 목록


로그 파일

개념

  • 시스템의 모든 기록을 담고 있는 데이터

로그 데이터 정보

  • 외부로부터의 침입 감지 및 추적

  • 시스템 성능 관리

  • 마케팅 전략으로 활용

  • 시스템의 장애 원인 분석

  • 시스템 취약점 분석

로그 데이터 중요성

  • 시스템에서 발생하는 모든 문제에 대한 유일한 단서

  • 시스템에서 발생한 오류 및 보안 결함 검색이 가능

  • 잠재적인 시스템 문제를 예측하는 데 사용

  • 장애발생 시 복구에 필요한 정보로 활용

  • 침해사고 시 근거 자료로 활용

리눅스 로그 종류

messages : 시스템 로그 파일
secure : 보안인증에 관한 메시지 로그파일
maillog : 메일 로그 파일
xferlog : ftp 로그 파일
dmesg : 부팅 시의 시스템 로그
wtmp : 시스템에 로그인 기록이 저장되는 파일(전체 로그인 기록)
utmp : 시스템에 로그인 기록이 저장되는 파일(현재 로그인 사용자에 대한 기록)
lastlog : 각 계정들의 가장 최근 로그인 기록
btmp : 로그인 실패 정보 기록


쉘 스크립트

개념

  • 쉘에게 무슨 명령들을 실행할지 알려주는 스크립트 파일

  • 명령어 창에 직접 입력했던 명령어들을 일종의 파일로 표현해서, 이 파일을 실행했을 때 해당 명령어들이 직접 입력된 듯한 효과를 주는 것

기본 문법

주석

  • #으로 주석 처리

입력 / 출력

  • 입력 : read

  • 출력 : echo

  • 변수명 = 값으로 선언

  • 사용시 앞에 $를 붙임

1
2
3
4
5
6
read Name
echo "hello, $NAME!"

h = "hello"
w = "world"
echo "${h}, ${w}"

예약변수

  • HOME : 사용자 홈 디렉토리

  • PATH : 실행 파일의 경로

  • LANG : 프로그램 실행 시 지원되는 언어

  • UID : 사용자 ID

  • SHELL : 사용자가 로그인 시 실행되는 쉘

  • USER : 사용자의 계정 이름

  • FUNCNAME : 현재 실행되고 있는 함수 이름

  • TERM : 로그인 터미널

IF 조건문

  • 기본작성법 : if [조건] then 작업내용 fi
1
2
3
4
5
a = 10
b = 5
if [ ${a} -eq ${b} ]; then
	echo "a와 b는 같다"
fi

Switch 조건문

  • 기본작성법 : case 변수 in 조건 작업내용;; esac
1
2
3
4
5
6
7
a = 10
case "$a" in
	10) echo "10입니다"
    ;;
    5) echo "5입니다"
    ;;
esac

반복문

  • while loop : 조건과 일치할 때 반복

  • until loop : 조건과 일치할 때까지 반복

  • for loop : 조건이나 값이 일치하는 경우 반복

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.