운영체제 정리
· 43 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
- 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
- 각 세그먼트는 고유한 이름과 크기를 갖는다.
- 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.
- 기억공간을 절약하기 위해 사용한다.
- 주소변환을 위해서 세그먼트 맵 테이블이 필요
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며 이를 위해 기 억장치 보호키가 필요
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생
- 가상 주소는 세그먼트 번호와 세그먼트 내에 실제 내용이 위치하고 있는 곳까지의 거리를 나타내는 변위값으로 구성
- 실기억주소는 완전주소 형태이면 세그먼트 기분번지와 변위값을 더해서 구함
- 세그먼트 맵 테이블은 세그먼트 번호와 세그먼트 크기, 주기억장치 상의 기준번지로 구성
페이지 교체 알고리즘
- 페이지 부재가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법
- OPT ,FIFO, LRU, LFU, NUR, SCR
OPT
- OPTimal replacement = 최적 교체
- 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
- Belady가 제안
- 페이지 부재가 가장 적게 발생하는 효율적인 알고리즘
- 각 페이지의 호출 순서와 참조 상황을 예측해야하므로 실현 가능성이 없음
FIFO
- 가장 오래 있었던 페이지를 교체하는 기법
- 이해하기 쉽고 프로그램이 및 설계가 간단
- 벨레이디의 모순 현상 발생 : 페이지 프레임 수를 증가시 켰는데도 페이지 부재가 더 많이 일어나는 현상
LRU
- Least Recently Used
- 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법
- 각 페이지마다 Counter나 Stack을 두어 체크한다.
- 별도의 하드웨어가 필요하며 시간적인 오버헤드가 발생한다.
- 실제로 구현하기가 매우 어렵다.
LFU
- Least Frequently Used
- 사용 빈도가 가장 적은 페이지를 교체하는 기법
- 프로그램 실행 초기에 많이 사용된 페이지가 후에 사용되지 않을 경우에도 프레임을 계속 차지할 수 있다.
NUR
- Not Used Recently
- LRU와 비슷한 알고리즘으로 최근에 사용하지 않은 페이지를 교체하는 기법
- 최근에 사용하지 않은 페이지는 나중에도 사용되지 않을 가능성이 높다는 것을 전제로, LRU에서 나타나는 시간적인 오버헤드를 줄일 수 있다.
- 각 페이지마다 참조 비트와 변형비트가 사용된다.
- 참조비트 : 페이지가 호출되지 않았을 때는 0, 호출되었을 때는 1
- 변형비트 : 페이지 내용이 변경되지 않았을 때는 0, 변경되었을 때는 1
- 참조비트와 변형비트 값에 따라 교체될 페이지의 순서가 결정된다.
순서 | 참조비트 | 변형비트 |
---|---|---|
1 | 0 | 0 |
2 | 0 | 1 |
3 | 1 | 0 |
4 | 1 | 1 |
SCR
- Second Chance Replacement = 2차 기회 교체
- 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것
- FIFO의 단점을 보완한다.
- 각 페이지마다 참조 비트를 두고 0일경우 교체하고 1일 경우 참조 비트를 0으로 변경 후 FIFO 큐의 맨 마지막으로 이동시킨다.
- LRU처럼 참조 비트를 둔다.
가상기억장치 관리
페이지 크기
페이지 크기가 작을 경우
- 페이지 단편화 감소
- 효율적인 워킹 셋 유지
- Locality에 더 일치하기 때문에 기억장치 효율이 높아짐
- 맵 테이블의 크기가 커지고 매핑 속도가 늦어짐
- 디스크 접근 횟수가 많아져서 전체적인 I/O 효율성 감소
페이지 크기 가 클 경우
- 맵 테이블 크기가 작아지고 매핑 속도가 빨라짐
- 디스크 접근 횟수가 줄어들어 I/O 효율성이 증가
- 페이지 단편화가 증가
- 불필요한 내용까지 주기억장치에 적재될 수 있음
Locality
- 국부성 = 지역성 = 구역성 = 국소성
- 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론
- 스레싱 방지를 위한 워킹 셋 이론의 기반
- 가상기억장치 관리의 이론적인 근거
- Denning 교수에 의해 구역성의 개념이 증명
- 캐시 메모리 시스템의 이론적 근거
시간 구역성
- Temporal Locality
- 프로세스가 실행되면서 하나의 페이지를 일정 시간동안 집중적으로 액세스
- 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음
- Loop, Stack, Sub Routine, Counting, 집계(Totaling)
공간 구역성
- Spatial Locality
- 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상
- 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미
- 배열 순회, 순차적 코드 실행, 프로그래머가 변수를 서로 근처에 선언하여 할 당되는 기억장소, 같은 영역에 있는 변수 참조할 때 사용
워킹 셋
- 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
- Denning이 제안한 프로그램의 움직임에 대한 모델로 프로그램의 Locality 특징을 이용
- 워킹 셋을 주기억장치에 상주시킴으로 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정
- 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹셋은 시간에 따라 변경
페이지 부재 빈도 방식
- 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식
프리페이징
- 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 방식
스래싱
- Thrashing
- 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정 중 자주 페 이지 부재가 발생함으로써 나타나는 현상
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 시점까지는 높아지지만, 더 높아질 경우 스래싱이 나타나고 CPU 이용률은 급격히 감소한다.
스래싱 방지
- 다중 프로그래밍의 정도를 적정 수준으로 유지
- 페이지 부재 빈도를 조절하여 사용
- 워킹 셋을 유지
- 부족한 자원을 증설하고 일부 프로세스를 중단
- CPU 성능에 대한 자료의 지속적 관리 및 분석해 임계치를 예상하고 운영
디스크 스케쥴링
- 사용할 데이터가 디스크 상에 여러 곳에 저장되어 있을 경우 데이터를 액세스하기 위해 디스크 헤드가 움직이는 경로를 결정하는 기법
- 탐색시간을 최적화하기 위해 수행된다.
- 처리량 최대화
- 응답 시간 최소화
- 응답 시간 편차의 최소화
FCFS
- FIFO
- 가장 간단한 스케쥴링으로 디스크 대기 큐에 먼저 들어온 순서로 실행
- 디스크 오버헤드가 적을 때 효율적
- 프로그래밍이 쉬움
- 헤드 이동거리가 상당히 길어질 수 있다.
- 디스크 오버헤드가 커지면 응답시간이 길어진다.
- 탐색 시간을 최적화하 려는 시도가 없는 기법
SSTF
- Short Seek Time First
- 탐색거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스
- 현재 헤드 위치에서 가장 가까운 거리에 있는 트랙으로 헤드를 이동
- FCFS보다 처리량이 많고 평균 탐색 시간이 짧다.
- 일괄 처리 시스템에 유용
- 먼 거리의 트랙은 무한정 기다릴 수도 있음
- 응답 시간 편차가 크기 때문에 대화형 시스템에 부적합
SCAN
- SSTF가 갖는 탐색 시간의 편차를 해소하기 위한 기법
- Denning이 개발, 대부분의 디스크 스케쥴링에서 기본 전략으로 이용
- 현재 헤드의 위치에서 진행방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스하고, 끝까지 이동하면 역방향으로 요청 사항을 서비스
- 헤드가 이동하면서 새로운 요청이 서비스됨
- 현재 진행방향에 더 이상의 요청이 없을 때만 방향을 바꿈
- SSTF에서 발생하는 응답 시간의 편차 감소
- 오버헤드가 적을 경우 가장 효율적인 기법
C-SCAN
- Cicular SCAN
- 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스
- 헤드는 트랙 바깥쪽에서 안쪽으로 한 방향만 움직이며 서비스하여 끝까지 이동한 후 안쪽에 더 이상의 요 청이 없으면 헤드는 가장 바깥쪽의 끝으로 이동한 후 다시 안쪽으로 이동하면서 요청을 서비스
- 처음과 마지막 트랙을 인접시킨 것과 같은 원형 형태로 디스크를 처리
- 새로운 요청이 도착하면 다음 헤드가 진행할 때 서비스
- 트랙 안쪽과 바깥쪽 요청에 대한 서비스가 공평
LOCK
- SCAN 기법을 기초로 사용하되 마지막 요청을 서비스한 후 그 방향의 끝으로 이동하는 것이 아니라 바로 역방향으로 진행하는 기법
C-LOCK
- C-SCAN 기법을 기초로 사용하되 바깥쪽에서 안쪽 방향의 모든 요청을 처리한 후 가장 바깥쪽 요청 트랙으로 이동한 후 안쪽 방향으로 요청을 서비스
N-SCAN
- N-step SCAN
- SCAN 기법의 무한 대기 발생 가능성을 제거한 것
- 어떤 방향의 진행이 시작될 시에 대기 중이던 요청들만 서비스하고 진행 도중 들어온 요청은 한데 모아서 다음 반대 방향 진행 때 서비스하는 기법
- SSTF나 SCAN보다 응답시간의 편차가 적다.
- 특정 방향에 많은 수의 요청이 도착할 경우 반대 방향에서의 무한 지연 발생을 방지
- 진행도중 도착한 요청은 반대 방향 진행시 서비스하기 위해 디스크 대기 큐에 저장
Eschenbach
- 에션바흐는 부하가 매우 큰 항공 예약 시스템을 위해 개발
- 탐색 시간과 회전 지연 시간을 최적화하기 위한 최초의 기법
- 헤드는 C-SCAN처럼 움직이며 모든 실린더는 그 실린더에 요청이 있던 없던 전체 트랙이 한 바퀴를 회전할 동안에 서비스를 받음
SLTF
- Shortest Latency Time First = Sector Queuing
- 회전 지연 시간의 최적화를 위해 구현된 기법
- 드럼에서 사용
파일
- 사용자가 작성한 서로 관련 잇는 레코드의 집합체
- 프로그램 구성의 기본 단위며 보조기억장치에 저장
- 소멸성 : 파일을 추가하거나 제거하는 작업의 빈도수
- 활성률 : 프로그램이 한번 수행되는 동안 처리되는 레코드 수의 백분율
- 크기 : 파일에 저장되어 있는 정보량
파일 시스템
- 파일의 저장, 액세스, 공유, 보호 등 보조기억장치에서의 파일을 총괄하는 파일 관리 기술
- 사용자와 보조기억장치 사이에서 인터페이스를 제공
- 사용자가 파일을 생성, 수정, 제거할 수 있도록 한다.
- 파일을 공동으로 사용할 수 있게 한다.
- 여러 종류의 액세스 제어방법 제공
- 사용자가 적합한 구조로 파일을 구성
- 파일의 예비와 복구 등의 기능 제공
- 사용자가 물리적 장치 이름 대신에 기호화된 이름을 사용할 수 있게 함
- 사용자가 파일을 편리하게 사용할 수 있도록 파일의 논리적 상태를 보여줘야함
- 파일을 안전하게 사용할 수 있도록하고 파일이 보호되어야함
- 파일 정보가 손실되지 않도록 데이터 무결성을 유지
- 파일 단위 작업 : Open Close Create Copy Destory Rename List
- 파일 내 레코드 단위 작업 : Read Write Update Insert Delete Search
파일 디스크립터
- File Descriptor = 파일 서술자 = FCB = File Control Block = 파일 제어 블록
- 시스템이 필요로하는 파일에 대한 정보를 갖고 있는 제어블록
- 파일마다 독립적으로 존재
- 시스템에 따라 다른 구조를 가짐
- 보조기억장치 내에 저장되어 있다가 해당 파일이 열릴 때 주기억장치로 옮겨짐
- 파일 시스템이 관리하므로 사용자가 참조 불가
- 파일 디스크립터의 정보
- 파일 이름 및 파일 크기
- 보조기억장치에서의 파일 위치
- 파일 구조 : 순차, 색인 순차, 색인 파일..
- 보조기억장치의 유형
- 액세스 제어 정보
- 파일 유형 : 텍스트, 목적 프로그램...
- 생성 날짜와 시간
- 제거 날짜와 시간
- 최종 수정 날짜와 시간
- 액세스한 횟수