운영체제 정리
· 121 min read
시스템 소프트웨어
- 시스템 전체를 작동시키는 프로그램
- 프로그램을 주기억 장치에 적재시키거나 인터럽트 관리, 장치 관리, 언어번역 등의 기능 담당
- 대표적으로 운영체제가 있음
- 번역프로그램, 매크로 프로세서, 링커, 라이브러리, 정렬/합병프로그램, 로더 등
구성
- 제어프로그램
- 감시프로그램
- 작업 제어 프로그램 : Jbo Scheduler, Master Scheduler
- 자료 관리 프로그램
- 처리프로그램
- 언어 번역기 : 어셈블러, 컴파일러, 인터프리터
- 서비스 프로그램 : 연결 편집기, 정렬/합병 프로그램, 라이브러리안, 유틸리티
- 문제 프로그램
제어 프로그램
- Control Program
- 시스템 전체의 작동 상태 감시, 작업의 순서 지정, 작업에 사용되는 데이터의 관리 등의 역할 수행
- 깜짝데이트(감시, 작업, 데이터)
감시 프로그램
- Supervisor Program
- 제어 프로그램 중 가장 중요함
- 각종 프로그램 실행과 시스템 전체의 작동 상태를 감시 감독
작업 제어 프로그램
- Job Control Program
- 다른 업무의 이행을 자동으로 수행하기 위해 준비
- 처리에 대한 완료를 담당하는 프로그램
- 작업의 연속 처리를 위한 스케쥴 및 시스템 자원 할당
- Job Scheduler : 다음 작업을 준비시키는 역할
- Master Scheduler : 시스템과 운영자 사이에서 정보를 주고 받을 수 있도록 중개자 역할 (CMD)
자료 관리 프로그램
- Data Management Program
- 주기억장치와 보조기억장치 사이의 데이터 전송과 보조기억장치의 자료 갱신 및 유지보수 기능을 수행
처리 프로그램
- Processing Program
언어 번역 프로그램
- 원시 프로그램을 기계어 형태의 목적 프로그램으로 번역하는 프로그램
- 어셈블러, 컴파일러, 인터프리터
서비스 프로 그램
- 연결 편집기 : 프로그램을 연결하여 실행 가능한 프로그램을 만드는 프로그램 (링커)
- 정렬/합병 프로그램 : 데이터를 일정한 기준으로 정렬하거나 정렬된 파일을 합치는 프로그램
- 라이브러리안 : 프로그램의 라이브러리를 유지 관리
- 유틸리티 프로그램 : 사용자의 편의를 도모하기 위한 프로그램 (텍스트에디터, 디버거)
- 문제 프로그램 : 특정 업무 및 문제 해결을 위해 사용자가 작성
운영체제
- 컴퓨터 시스템의 자원들을 효율적으로 관리
- 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 프로그램의 집합
- 유틸리티와 하드웨어 사이의 인터페이스 제공
목적
- 처리능력 : Throughput 일정 시간 내에 시스템이 처리하는 양
- 반환시간 : Turn Around Time 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
- 사용가능도 : Availability 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
- 신뢰도 : Reliability 시스템이 주어진 문제를 정확하게 해결하는 정도
기능
- 프로세서, 기억장치, 입출력장치, 파일 및 자원 관리
- 자원 스케쥴링
- 사용자와 시스템 간의 인터페이스 제공
- 하드웨어와 네트워크 관리 제어
- 데이터 관리하고 데이터 및 자원 공유 기능 제공
- 시스템 오류 검사 및 복구
- 자원 보호 기능 제공
- 입 출력에 대한 보조 기능을 제공
- 가상 계산기 기능을 제공
자원관리
- 프로세스 관리 : 프레세스 스케쥴링, 동기화, 생성 제거, 시작 정지, 메시지 전달
- 기억장치 관리 : 프로세스 메모리 할당 및 회수
- 주변장치 관리 : 입출력 장치 스케쥴링 및 관리
- 파일 관리
종류
- 단일 작업 처리 시스템
- Single Tasking System
- 시스템을 한 개의 작업이 독점하여 사용하는 방식
- DOS
- 다중 작업 처리 시스템
- Multi Tasking System
- 여러 개의 프로그램을 열어 두고 다양한 작업을 동시에 진행하는 방식
- Windows
운영체제 운용 기법
일괄 처리 시스템
- 초기의 컴퓨터 시스템
- 일정량 또는 일정 기간 동안 데이터를 모아서 한꺼번에 처리하는 방식
- 일괄 처리를 위해 작업제어언어(JCL)을 제공
- 시스템 효율적 사용 가능
- 반환 시간이 늦지만 하나의 작업이 모든 자원을 독점하므로 CPU Idle Time이 줄어듦
- 급여 계산, 지불 계산, 연말 결산 등
다중 프로그래밍 시스템
- 하나의 CPU와 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식
- CPU 사용률과 처리량이 증가
시분할 시스템
- Time Sharing System = Round Robin
- 여러 명의 사용자가 사용하는 시스템에서 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리
- 여러 사용자가 각자의 컴퓨터로 동시에 운영체제와 대화하면서 프로그램 실행
- 하나의 CPU는 같은 시점에서 여러 개의 작업을 동시 수행이 안되기 때문에 CPU를 같은 작업 시간량으로 나눠서 그 시간량 동안 번갈아가면서 CPU를 사용
- 작업시간량 : Time Slice = Quantum
- 다중 프로그래밍 방식과 결합하여 모든 작업이 동시에 진행되는 것처럼 대화식 처리 가능
- 시스템 전체 효율은 좋으나 사용자는 반응 속도가 느려질 수 있음
다중 처리 시스템
- 여러 개의 CPU와 하나의 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식
- 여러 CPU는 하나의 메모리를 공유하며 단일 운영체제에 의해 관리
- 프로그램의 처리 속도는 빠르지만 기억장치, 입출력장치 등의 자원 공유에 대한 문제점을 해결해야함
실시간 처리 시스템
- 데이터 발생 즉시 처리하여 결과를 산출
- 처리시간이 단축되고 처리비용이 절감
- 우주선, 교통제어, 레이더, 핵실험, 데이터수집, 전화교환장치, 인터넷뱅킹 등 시간에 제한을 두고 수행되어야하는 작업
다중 모드 처리
- 일괄처리, 시분할, 다중처리, 실시간처리를 한 시스템에서 모두 제공하는 방식
분산 처리 시스템
- Distributed Processing System
- 여러 개의 컴퓨터를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식
- 각 단말은 고유의 운영체제와 CPU, 메모리를 가진다.
발달과정
- 1세데 : 일괄처리
- 2세대 : 다중프로그래밍, 다중처리, 시분할, 실시간
- 3세대 : 다중모드
- 4세대 : 분산처리
컴파일러와 인터프리터
고급언어로 작성된 원시프로그램을 목적프로그램으로 번역하는 번역프로그램
저급 언어
기계어
- 컴퓨터가 직접 이해할 수 있는 언어
- 기종마다 기계어가 다르므로 언어의 호환성이 없음
어셈블리어
- 기계어와 1:1 대응되는 기호로 이루어진 언어
- 니모닉 언어 = Mnemonic = 상징어
- 하드웨어 제어에 주로 사용
- 언어의 호환성이 없음
- 어셈블러를 사용하여 기계어로 번역해야 됨
고급 언어
- 컴파일러 언어
- 자연어와 비슷한 형태 및 구조
- 하드웨어 지식이 없어도 작성 가능
- 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용
- C, BASIC, COBOL, ALGOL 등
컴파일러
- 고급언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후 링킹 작업을 통해 실행 프로그램을 생헝
- 번역과 실행과정을 거쳐야하기 때문에 번역 과정이 번거로움
- 번역 시간이 오래걸림
- 한번 번역 후에는 다시 번역하지 않아 실행속도는 빠름
- C, C++, FORTRAN, COBOL, PL/1
- 대부분의 언어는 컴파일러로 변환된다.
인터프리터
- 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역
- 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행
- 프로그램이 직접 실행되므로 목적프로그램이 생성되지 않음
- 시분할 시스템에 유용
- 원시 프로그램에 변화에 대한 반응이 빠름
- 번역 속도는 빠르지만 실행속도는 느림
- BASIC, SNOBOL, LISP, APL
- CPU의 시간낭비가 크다.
어셈블리어
- 사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호를 기계어와 1:1 대응시켜 코드화한 기호 언어
- 어셈블리어로 작성한 원이프로그램은 어셈블러를 통해 목적 프로그램으로 어셈블하는 과정을 거쳐야한다.
- 사용자가 프로그램을 쉽게 읽고 이해할 수 있다.
- 프로그램에 기호화된 명령 및 주소를 사용한다.
- CPU마다 사용되는 어셈블리어가 다르다.
- 의사명령과 실행명령으로 구 분
형식
Label, OP, Operand
- Label : 데이터를 기억할 장소 또는 분기할 위치, 기호 상수에 대한 Symbol을 기술하는 부분으로 생략할 수 있다.
- OP : OPCode를 기술하는 부분
- Operand : OPCode가 연산을 수행하기 위한 대상인 상수, 데이터나 주소, 레지스터 번호를 기술하는 부분
어셈블러
- 어셈블리어로 작성된 걸 기계어로 번역하는 프로그램
- 이중 패스 어셈블러르 사용하면 정의되지 않은 기호를 사용할 수 있다.
- 현재 대부분 이중 패스 어셈블러를 사용한다.
- 두 개의 패스를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이하다.
- 단일 패스 어셈블러 : 원시 프로그램을 하나의 명령문씩 읽는 즉시 기계어로 번역하여 목적 프로그램을 만듦
- 이중 패스 어셈블러 : 원시 프로그램을 끝까지 읽어서 1단계 작업을 수행한 후 다시 처음부터 읽어나가면서 1단계에서 수행한 결과를 이용해 완전한 목적프로그램을 만듦
- 크로스 어셈블러 : 현재 사용하는 컴퓨터와 다른 명령 형태로 동작하는 컴퓨터에서 사용할 프로그램을 어셈블 할 때 사용하므로 실행시킬 컴퓨터에 맞게 목적 프로그램을 생성
구성
- 기계 명령어 테이블
- Machin Operation Table = MOT
- 어셈블리어의 실행 명령에 대응하는 기계어에 대한 정보를 가지고 있는 테이블
- 어셈블러에 기본적으로 포함
- 의사 명령어 테이블
- Pseudo Operation Table = POT
- 의사 명령과 그 명령을 처리하는 실행 루틴의 주소를 가지고 있는 테이블
- 어셈블러에 기본적으로 포함
- 기호 테이블
- Symbol Table = ST
- 원시 프로그램의 Label 부분에 있는 기호들을 모두 차례대로 저장하는 테이블
- 리터럴 테이블
- Literal Table = LT
- 원시 프로그램의 Operand 부분에 있는 리터럴을 차례로 저장하는 테이블
Pass-1 Pass-2
- Pass-1
- 기호와 리터럴을 정의
- 기계 명령어의 길이 정의
- 위치 계수기(PC, LC) 관리
- 기호들의 값을 심볼 테이블에 기억
- 사용된 리터럴을 리터럴 테이블에 기억
- 해당하는 의사 명령어 처리
- 사용 관련 DB : 원시 프로그램, Program Counter, MOT, POT, ST, LT
- Pass-2
- 기호 번지에 대한 상대 번지를 생성
- 목적 프로그램 생성
- 기계 명령어 생성
- 심볼 테이블에서 기호의 값을 찾음
- 의사 명령어 처리
- 리터럴 발생
- 사용 관련 DB : 원시 프로그램의 사본, Program Counter, Pass-1에서 만든 ST, LT, MOT, POT, 베이스 레지스터 테이블, PRINT LINE, 목적 프로그램
매크로
- 일종의 부 프로그램 = 개방 서브루틴
- 프로그램 작성시 한 프로그램에서 동일한 코드가 반복될 경우 반복되는 코드를 한 번만 작성하여 이름을 정의하고 피료시에 정의된 이름을 호출하여 사용
- 호출된 횟수만큼 정의된 매크로 코드가 해당 위치에 삽입되어 실행
- 매크로 내에 매크로 사용 가능
- 사용자의 반복적인 코드 입력을 줄여준다.
- 프로그램 내에서 매크로 코드를 확인할 수 있음
부프로그램과 비교
구분 | 매크로 | 부 프로그램 |
---|---|---|
별칭 | 개방 서트루틴 | 폐쇄 서브루틴 |
처리방식 | 매크로 호출 명령이 있는 위치마다 매크로 내용을 삽입하여 확장된 프로그램을 만들어 놓고 연속적으로 실행 | 부 프로그램 호출될 때마다 제어가 부 프로그램으로 넘어갔다가 다시 주 프로그램으로 복귀 |
특징 | 부 프로그램은 매크로에 비해 프로그램 크기가 작아지고 기억장소가 절약되지만 실행 시간은 약간 느림 |
매크로 프로세서
- 원시프로그램에 존재하는 매크로 호출 부분에 매크로를 삽입하여 확장된 원시 프로그램을 생성하는 시스템 소프트 웨어
- 처리과정
- 매크로 정의 인식
- 매크로 정의 저장
- 매크로 호출 인식
- 매크로 확장과 매개변수 치환
링커
- 연결 편집기
- 언어 번역 프로그램이 생성한 목적 프로그램과 라이브러리, 또 다른 실행 프로그램 등을 연결하여 실행 가능한 로드 모듈을 만드는 시스템 소프트웨어
- 연결 기능만 수행하는 로더의 한 형태
로더
- 컴퓨터 내부로 정보를 들여오거나 로드 모듈을 보조기억장치로부터 주기억장치에 적재하는 시스템 소프트웨어
기능
- 할당 : Allocation 실행 프로그램을 실행시키기 위해 기억장치 내에 옮길 공간을 확보하는 기능
- 연결 : Linking 부 프로그램 호출 시 그 부 프로그램이 할당된 기억장소의 시작주소를 호출한 부분에 등록하여 연결하는 기능
- 재배치 : Relocation 기억장소의 실제 주소로 배치시키는 기능
- 적재 : Loading 실행 프로그램을 할당된 기억공간에 실제로 옮기는 기능
종류
Compile And Go 로더
- 별도의 로더 없이 언어 번역 프로그램이 로더의 기능까지 수행
- 연결 기능은 수행하지 않는다.
- 할당, 재배치, 적재 작업을 모두 언어 번역 프로그램이 담당
절대 로더
-
Absolute Loader
-
절대적으로 로딩(적재)만 하는 로더
-
목적 프로그램을 기억장소에 적지시키는 기능만 수행하는 로더
-
로더 중 가장 간단한 프로그램으로 구성
-
기억장소 할당이나 연결을 프로그래머가 직접 지정
-
한번 지정한 주기억장소의 위치는 변경이 어려움
-
절대로더의 기능별 행위 주체
- 할당 : 프로그래머
- 연결 : 프로그래머
- 재배치 : 언어 번역 프로그램
- 적재 : 로더
직접 연결 로더
- Direct Linking Loader = Relocation Loader = Relative Loader = 재배치로더 = 상대로더
- 일반적인 기능의 로더로 로더의 기본 네 가지 기능을 모두 수행
동적 적대 로더
- Dynamic Loading Loader = 호출 시 적재 로더
- 프로그램을 실행시 필요한 부분만 을 적재하고 나머지는 보조기억장치에 저장
- 프로그램 크기가 주기억장치의 크기보다 큰 경우에 사용
프로세스
- 프로세서에 의해 처리되는 실행중인 프로그램
- 작업 = 태스크
- PCB를 가진 프로그램
- 실기억장치에 저장된 프로그램
- 프로세서가 할다오디는 실체로 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 운영체제가 관리하는 실행 단위
PCB
- Process Control Block = 프로세스 제어 블록 = Task Control Block = Job Control Block
- 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성
- 프로세스가 완료되면 PCB는 제거됨
- PCB에 저장된 정보
- 프로세스의 현재 상태
- 포인터
- 부모 프로세스에 대한 포인터
- 자식 프로세스에 대한 포인터
- 프로세스가 위치한 메모리에 대한 포인터
- 할당된 자원에 대한 포인터
- 프로세스 고유 식별자
- 스케쥴링 및 프로세스의 우선순위
- CPU 레지스터 정보 : AC, IR, PC, 범용 레지스터
- 주기억 장치 관리 정보 : Base Register, Page Table
- 입출력 상태 정보
- 계정 정보 : CPU 사용시간, 실제 사용시간, 한정된 시간
프로세스 상태
- 제출 : Submit 사용자가 작업을 시스템에 제출한 상태
- 접수 : Hold 작업이 스풀공간인 디스크의 할당 위치에 저장된 상태
- 준비 : Ready
- 프로세스가 프로세서를 할당 받기 위해 기다리고 있는 상태
- 프로세스는 준비상태 큐(스케쥴링 큐)에서 실행을 준비
- 접수 상태에서 준비상태로의 전이는 Job Scheduler에 의해 수행
- 실행 : Run
- 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태
- 할당 시간이 종료되면 프로세스는 준비상태로 전이
- 실행중인 프로세스에 I/O처리가 필요하면 실행중인 프로세스는 대기상태로 전이
- 준비 상태에서 실행상태로의 전이는 CPU Scheduler에 의해 수행
- 대기, 보류, 블록: 프로세스에 I/O처리가 필요하면 현재 실행 중인 프로세스가 중단되고 I/O처리가 완료될 때까지 대기하는 상태
- 종료 : Terminated, Exit 프로세스 실행이 끝나고 프로세스 할당이 해제된 상태
- 실행중지 : Suspend
- 하나의 프로세스가 입출력 이외의 다른 이유에 의해 실행되지 못하는 상태
- 실행중지된 프로세스는 다른 프로세스로 다시 시작하기 전에는 실행될 수 없다.
- 시스템에 이상이 있거나 부하가 많을 경우 운영체제 필요에 의해 중지
- 프로세스의 이상유무를 확인하기 위해 해당 프로세스를 완전히 종 료하지 않고 중지
상태 용어
- Dispatch : 준비상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정
- Wake Up : 입출력 작업이 완료되어 프로세스가 대기 상태에서 준비상태로 전이되는 과정
- Traffic Controller : 프로세스의 상태에 대한 조사와 통보 담당
스레드
- 프로세스의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위
- 프로세스의 일부 특성을 가지고 있지 때문에 경량 프로세스라고 한다.
- 독립적인 스케쥴링의 최소 단위
- 동일 프로세스 환경에서 서로 독립적인 다중 수행 가능
- 병행성 증진
- 처리율 향상
- 응답시간 단축
- 기억장소 낭비 줄어듦
- 프로세스 간 통신 향상
- 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신
사용자 수준의 스레드
- 사용자가 만든 라이브러리를 사용하여 스레드 운용
- 속도는 빠르지만 구현이 어려움
커널 수준의 스레드
- 운영체제 커널에 의해 스레드 운용
- 구현 쉽지만 속도가 느림
스케쥴링
- 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업
- 장기 스케쥴링 : 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 준비상태 큐로 보내는 작업
- 중기 스케쥴링 : 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업
- 단기 스케쥴링 : 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업
- 문맥교환 : 하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생되는 것으로 새로운 프로세스에 CPU를 할당하기 위해 현재 할당된 프로세스의 상태를 저장하고 새로운 프로세스의 상태정보를 설정한 후 CPU를 할당하여 실행되도록 하는 작업
목적
스케쥴링은 PCU나 자원을 효율적으로 사용하기 위한 정책
- 공정성
- 처리율 증가
- CPU 이용률 증가
- 우선순위 제도 : 우선순위가 높은 프로세스 먼저 실행
- 오버헤드 최소화
- 응답시간 최소화
- 반환시간 최소화
- 대시시간 최소화
- 균형 있는 자원의 사용
- 무한 연기 회피
성능 평가 기준
- CPU 이용률
- 처리율
- 반환시간
- 대기시간
- 응답시간
비선점 스케쥴링
- Non-preemptive
- 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케쥴링 기법
- 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용
- 모든 프로세스에 대한 요구를 공정하게 처리 가능
- 응답 시간 예측이 용이
- 일괄 처리 방식에 적합
- 짧은 작업이 긴 작업을 기다리는 경우가 발생
- FCFS, SJF, 우선순위, HRN, 기한부 알고리즘
선점 스케쥴링
- Preemptive
- 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 빼앗아 사용할 수 있는 스케쥴링 기법
- 우선순위가 높은 프로세스를 빠르게 처리 가능
- 시분할 시스템에 사용
- 많은 오버헤드 초래
- 인터럽트용 타이머 클록이 필요
- RR, SRT, 선점우선순위, 다단계 큐, 다단계 피드백 큐 알고리즘
비선점 스케쥴링
FCFS
- FIFO
- 짧은 작업이 긴 작업을 기다리는 경우가 생김
- 가장 간단한 알고리즘
SJF
- Shortest Job First = 단기 작업 우선
- 프로세스들 중에서 실행시간이 가장 짧은 프로세스에게 먼저 CPU를 할당
- 가장 적은 평균 대기시간을 제공하는 최적 알고리즘
- 실행시간이 긴 프로세스는 실행시간이 짧은 프로세스에게 할당 순위가 밀려 무한 연기 상태가 발생할 수 있음
HRN
- 긴 프로세스에 불리한 SJF를 보완하기 위한 것
- 대기 시간과 서비스 실행 시간을 이용하는 기법
- 서비스 실행 시간이 짧거나 대기 시간이 긴 프로세스일 경우 우선순위가 높아진다.
- 우선순위 = (대기시간 + 서비스시간) / 서비스 시간
기한부
- Deadline
- 일정한 시간을 주고 그 시간안에 프로세스를 완료하도록 하는 기법
- 프로세스가 제한시간 안에 완료되지 않을 경우 제거되거나 처음부터 다시 실행해야함
- 프로세스 실행 시 집중적으로 요구되는 자원관리에 오버헤드가 발생
우선순위
- Priority
- 준비 상태 큐에서 기다리는 각 프로세스마다 우선순위를 부여하여 그 중 가장 높은 프로세스에게 먼저 CPU를 할당하는 기법
- 우선순위가 동일할 경우 FCFS 기법으로 CPU 할당
- 가장 낮은 순위를 부여받은 프로세스는 무한연기 또는 기아상태가 발생
에이징
- Aging
- 특정 프로세스의 우선순위가 낮아 무한정 기다리게 되는 경우 기다린 시간에 비례하여 일정 시간이 지나면 우선순위를 한 단계씩 높여 가까운 시간에 자원을 할당받도록하는 기법
- SJF나 우선순위 기법에서 발생하는 무한연기, 기아상태를 예방
선점 스케쥴링
선점 우선순위
- 준비상태 큐의 프로세스 중에서 우선순위가 가장 높은 프로세스에게 먼저 CPU를 할당하는 기법
- 준비상태 큐에 새로 들어온 프로세스의 우선순위가 높을 경우 현재 프로세스를 보류하고 새로운 프로세스를 실행
SRT
- Shortest Remaining Time = 선점 SJF 기법
- 비선점 스케쥴링인 SJF기법을 선점으로 변경
- 시분할 시스템에 유용
- 오버헤드 증가
RR
- Round Robin
- 시분할 시스템을 위해 고안
- FCFS를 선점형태로 변경
- 시간할당량 동안만 실행 후 실행이 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주고 준비상태 큐의 가장 뒤로 배치
- 할당시간이 큰 경우 FCFS와 같음
- 할당시간이 작을 경우 문맥교환 및 오버헤드가 자주 발생되 요청 작업을 신속히 처리 불가
- 할당되는 시간의 크기가 작으면 작은 프로세스에 유리
- 대기시간 : 구하고자하는 프로세스의 가장 마지막 실행이 시작되기 전까지의 진행시간을 구하고 해당 프로세스가 앞에서 실행되었을 경우 그 시간을 뺀다.
다단계 큐
- MQ = Multi-level Queue
- 프로세스를 특정 그룹으로 분류할 수 있을경우 그룹에 따라 각기 다른 준비상태 큐를 사용하는 기법
- 우선순위에 따라 시스템 프로세스, 대화형 프로세스, 편집 프로세스, 일괄 처리 프로세스 등으로 나누어 큐를 배치
- 각 큐는 독자적인 스케쥴링을 가지고 있어 그룹의 특성에 따라 다른 스케쥴링 기법 사용 가능
- 각 큐가 준비상태로 들어간 경우 달느 준비상태 큐로 이동할 수 없음
- 하위 단계 큐를 실행 중이라도 상위 단계 큐에 프로세스가 들어오면 상위단계에게 CPU를 할당
다단계 피드백 큐
- MFQ = Multi-level Feedback Queue
- 다단계 큐 기법에서 준비상태 큐 사이를 이동할 수 있게 개선
- 적응 기법(Adaptive Mechanism)의 개념을 적용
- 각 준비상태 큐마다 시간할당량을 부여해서 완료하지 못한 프로세스는 다음 단계의 준비상태 큐로 이동
- 상위 단계 큐일수록 우선순위가 높고 시간할당량이 적다.
- 요구 시간이 적은 프로세스, I/O 프로세스, 오래 기다린 프로세스를 기준으로 높은 우선순위를 할당
- 하위 단계 큐를 실행 중이라도 상위 단계 큐에 프로세스가 들어오면 상위단계에게 CPU를 할당, 마지막 단계 큐에선 작업이 완료될 때까지 RR 사용
병행 프로세스
두 개 이상의 프로세스들이 동시에 존재하며 실행상태에 있는 것
임계구역
- 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유한 데이터 및 자원에 대해 어느 한 시점에는 하나의 프로세스만 데이터 또는 자원을 사용하도록 지정된 공유 자원영역
- 하나의 프로세스만 접근할 수 있고 해당 프로세스가 자원을 반납한 후 에만 다른 프로세스가 자원이나 데이터를 사용할 수 있다.
- 특정 프로세스가 독점할 수 없다.
- 수행 중인 프로세스는 인터럽트가 불가능하다.
- 임계 구역 내의 작업은 신속하게 이루어져야 한다.
- 프로세스가 임계 구역에 대한 진입을 요청하면 일정 시간 내에 진입을 허락해 야한다.
- Critical Section
- 임계구역은 화장실에 비유해 기억하자
상호 배제 기법
-
특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법
-
임계 구역을 유지하는 기법
-
소프트웨어적 구현
- 두 개 프로세스 기준 : Dekker, Peterson 알고리즘
- 여러 개의 프로세스 기준 : Lamport의 빵집 알고리즘
-
하드웨어적 구현 : Test & Set 기법, Swap 명령어 기법
동기화 기법
두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는 것으로 상호 배제의 한 형태
세마포어
- Semaphore = 신호기 = 깃발
- 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법
- E.J.Dijkstra가 제안
- P와 V라는 두 개의 연산에 의해서 동기화를 유지시키고 상호 배제의 원리를 보장
- S는 P와 V 연산으로만 접근 가능한 세마포어 변수로 공유 자원의 개수를 나타내며 0과 1혹은 0과 양의 값을 가질 수 있다.
- 다른 프로세스가 이미 자원을 점유한 상태라면 자원을 사용할 수 있을 때까지 기다린다.
- 순서
- P :
While S <= 0 Do skip
; - S = S - 1;
- V : S = S + 1;
- P :
모니터
- Monitor
- 동기화를 구현하기 위한 특수 프로그램 기법
- 특정 공유 자원을 프로세스에게 할당하는데 필요한 데이터와 이 데이터를 처리하는 프로시저로 구성
- 자료 추상화와 정보 은폐 개념을 기초
- 공유 자원을 할당하기 위한 병행성 구조
- 모니터 내의 공유자원을 사용하려면 프로세스는 반드시 모니터 진입부를 호출해야함
- 외부 프로시저는 직접 액세스할 수 없음
- 모니터 경계에서 상호배제가 시행
- 한 순간에 하나의 프로세스만 진입하여 자원을 사용
- Wait와 Signal 연산 사용
교착상태
- Dead Lock
- 상호 배제에 의해 나타나는 문제점
- 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상
필요 충분 조건
교착상태가 되려면 이 조건들이 모두 충족되어야함
- 상호 배제 : Mutual Exclusion 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.
- 점유와 대기 : Hold & Wait 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
- 비선점 : Non-preemption 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
- 환형 대기 : Circular Wait 공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.
예방기법
- 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법
- 교착상태 발생의 네 가지 조건 중에서 어느 하나를 제거함으로 수행
- 자원의 낭비가 가장 심한 기법
- 상호 배제 부정 : 한 번에 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다, 실제로는 구현하지 않음
- 점유 대기 부정 : 프로세스가 실행되기 전 필요한 모든 자원을 할당하여 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.
- 비선점 부정 : 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고 요구한 자원을 사용하기 위해 기다리게 한다.
- 환형 대기 부정 : 자원을 선형 순서로 분류하여 고유 번호를 할당하고 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한 방향으로만 자원을 요구하도록 한다.
회피기법
교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법
은행원 알고리즘
- E.J.Dijkstra가 제안한 것
- 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래
- 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않음
- 모든 프로세스가 완료될 수 있는 상태를 안전 상태
- 교착상태가 발생할 수 있는 상태를 불안전 상태 (불안전 상태라고해서 모두 교착상태는 아님)
- 적용하기 위해선 자원의 양과 프로세스 수가 일정해야 한다.
- 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것을 보장
발견기법
- 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것
- 교착상태 발견 알고리즘과 자원할당 그래프 등을 사용
회복기법
- 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것
- 프로세스 종료 : 교착상태에 있는 프로세스 종료
- 자원 선점 : 프로세스가 점유하고 있는 자원을 선점하여 다른 프로 세스에게 할당하며 해당 프로세스를 일시 정지시키는 방법
기억장치 관리
상위 계층구조일 수록 접근 속도와 접근 시간이 빠르지만 기억용량이 적고 비싸다.
반입 전략
- Fetch
- 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
- 요구 반입 : Demand Fetch 실행 중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재
- 예상 반입 : Anticipatory Fetch 실행 중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재
배치 전략
- Placement
- 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략
- 최초 적합 : First Fit 프로그램에 데이터가 들어갈 수 있는 크기의 빈 영역 중에 첫 번째 분할 영역에 배치
- 최적 적합 : Best Fit 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치
- 최악 적합 : Worst Fit 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치
교체 전략
- 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때, 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략
- FIFO, OPT, LRU, LFU, NUR, SCR
주기억장치 할당 기법
- 연속 할당 기법 : 프로그램을 주기억장치에 연속으로 할당하는 기법 (로딩)
- 단일 분할 할당 기법 : 오버레이, 스와핑
- 다중 분할 할당 기법 : 고정 분할 할당 기법, 동적 분할 할당 기법
- 분산 할당 기법 : 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법
- 페이징 기법
- 세그먼테이션 기법
단일 분할 할당 기법
- 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 오직 한 명의 사용자만 주기억장치의 사용자 영역을 사용하는 기법
- 경계 레지스터가 사용된다.
- 오버레이 기법을 사용하면서 주기억장치보다 큰 사용자 프로그램을 실행할 수 있게 되었다.
오버레이 기법
- 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법
- 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행한다.
- 불필요한 조각이 위치한 장소에 새로운 프로그램 조각을 중첩하여 적재
- 프로그램을 여러 개의 조각으로 분할하는 작업은 프로그래머가 수행하므로 시스템 구조나 프로그램 구조를 알아야함
스와핑 기법
- 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법
- 하나의 사용자 프로그램이 완료될 때까지 교체 과정을 여러 번 수행할 수 있다.
- 주기억장치 => 보조기억장치 이동을 Swap Out
- 보조기억장치 => 주기억장치 이동을 Swap In
다중 분할 할당 기법
고정 분할 할당
- Multiple contiguous Fixed partTition allocation = MFT = 정적 할당 = Static Allocation
- 프로그램을 할당하기 전에 운영체제가 주기억장치 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행하 는 기법
- 프로그램을 실행하려면 프로그램 전체가 주기억장치에 위치해야 한다.
- 프로그램이 분할된 영역보다 커서 영역 안에 못 들어가는 경우가 있다.
- 내부 단편화 및 외부 단편화 발생
- 다중 프로그래밍을 위해 사용되었으나 현재는 사용되지 않음
가변 분할 할당
- Multiple contiguous Variable parTition allocation = MVT = 동적 할당 = Dynamic Allocation
- 고정 분할 할당 기법의 단편화를 줄이기 위한 것으로 프로그램을 주기억 장치에 적재하면서 필요한 만큼의 크기로 영역을 분할하는 기법
- 주기억장치를 효율적으로 사용 가능
- 다중 프로그래밍의 정도를 높일 수 있음
- 실행될 프로세스 크기에 대한 제약이 적음
- 단편화를 해결할 수 있으나 영역과 영역사이에 단편화가 발생할 수 있음
단편화
- 분할된 주기억 장치에 프로그램을 할당하고 반납하는 과정을 반복하면서 사용되지 않고 남는 기억장치의 빈 공간 조각
- 내부 단편화 : Internal Fragmentation 분할된 영역이 할당될 프로그램 크기보다 크기 때문에 남는 공간
- 외부 단편화 : External Fragmentation 분할된 영역이 할당될 프로그램 크기보다 작아 들어갈 수 없어 남는 공간
해결방법
통합 기법
- Coalescing
- 빈 공간이 다른 빈 공간과 인접되어 있는지 점검한 후 결합하여 사용
압축 기법
- Compaction
- 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 공간을 만드는 작업
- 집약 = 가비지 컬렉션
- 분산된 단편화된 공간을 주기억 장치의 한 쪽 끝으로 옮긴 후 합침
- 압축이 실행되는 동안 시스템은 모든 일을 일시 중지
- 기억장소의 재배치
- 압축기법을 수행시에 각 프로그램에 주어진 분할영역의 주소를 새롭게 지정해줘야한다.
- Base Register와 Boundary Register를 사용한다.
가상기억장치
- 보조기억장치의 일부를 주기억장치처럼 사용하는 것
- 프로그램을 여러 개의 작은 블록으로 나눠서 가상기억장치에 보관하고 프로그램 실행시 요구되는 블록만 주기억장치에 불연속적으로 할당
- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용
- 주기억장치의 이용률과 다중 프로그래밍 효율 증대
- 단편화 해결
- 가상기억장치에 저장된 프로그램 실행시 주소변환 작업 필요
- 주소변환
- 가상기억장이체 있는 프로그램이 주기억장치에 적재되어 실행될 때 논리적인 가상주소를 실기억주소로 변환하는 것
- 주소 사상 = 주소 매핑
- 인위적 연속성 : Artificial Contiguity 연속적인 가상주소가 반드시 연속적인 실기억주소로 변환되지 않아도 된다.
- 가상주소는 보조기억장치에 있는 프로그램 상의 주소 = 논리 주소
- 실기억주소는 주기억장치에 있는 기억공간의 주소 = 실주소
페이징 기법
- 가상 기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법
- 페이지 : 프로그램을 일정한 크기로 나눈 단위
- 페이지 프레임 : 페이지 크기로 일정하게 나눠진 주기억장치의 단위
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생
- 주소 변환을 위해 페이지 위치정보를 가지고 있는 페이지 맵 테이블 필요
- 페이지 맵 테이블 사용으로 비용 증가, 처리속도 감소
- 일반적인 페이지 크기는 1~4KB
- 가상 주소는 페이지 번호와 실제 내용이 위치하고 있는 곳까지의 거리를 나타내는 변위값으로 구성
- 실기억주소는 페이지 프레임 번호와 프레임 내에서 실제 참조하는 위치까지의 거리를 나타내는 변위값으로 구성
- 페이지 맵 테이블은 주기억장치에 존재하는지의 여부를 나타내는 상태 비트와 보조기억장치 주소를 나타내는 디스크주소, 페이지가 주기억장치에 있을 때의 페이지 프레임 번호로 구성
Page Fault
- 프로그램 실행시 참조한 페이지가 주기억장치에 없는 현상
- 처리 순서
- 운영체제에서 트랩요청
- 사용자 레지스트리와 프로그램 상태 저장
- 현재 교체 가능한 페이지를 페이지 맵 테이블에서 검색
- 가상기억장치에 있는 페이지를 주기억장치로 전달
- 페이지 맵 테이블 갱신
- 프로그램 상태를 불러와 이전 작업 진행
세그먼테이션 기법
- Segmentation
- 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
- 각 세그먼트는 고유한 이름과 크기를 갖는다.
- 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.
- 기억공간을 절약하기 위해 사용한다.
- 주소변환을 위해서 세그먼트 맵 테이블이 필요
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며 이를 위해 기억장치 보호키가 필요
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생
- 가상 주소는 세그먼트 번호와 세그먼트 내에 실제 내용이 위치하고 있는 곳까지의 거리를 나타내는 변위값으로 구성
- 실기억주소는 완전주소 형태이면 세그먼트 기분번지와 변위값을 더해서 구함