* 운영체제(OS; Operating System):
- 하드웨어를 쉽게 사용할 수 있도록 인터페이스를 제공해주는 소프트웨어
- 컴퓨터 시스템의 자원들을 효율적으로 관리, 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 프로그램의 모임
* 운영체제의 목적:
- 처리능력 : 일정 시간 내 시스템이 처리하는 일의 양
- 반환 시간: 시스템에 작업을 의뢰한 시간부터 처리가 완료될때까지 걸린 시간
- 사용 가능도: 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
- 신뢰도: 시스템이 주어진 문제를 정확하게 해결하는 정도
* 운영체제의 종류
1. Windows
- 1990년대 마이크로소프트 사가 개발한 운영체제
- Windows의 주요 특징
특징 | 설명 |
그래픽 사용자 인터페이스 (GUI; Graphic User Interface) |
마우스로 아이콘이나 메뉴를 선택하여 작업을 수행하는 그래픽 기반의 인터페이스 방식 |
선점형 멀티태스킹 (Preenptive Multi-Tasking) |
동시에 여러 개의 프로그램을 실행하면서 운영체제가 각 작업의 CPU이용 시간을 제어 |
자동 감지 기능 (PnP; Plug and Play) |
하드웨어를 설치했을 때 필요한 시스템 환경을 운영체제가 자동으로 구성해주는 자동감지 기능 제공 |
OLE (Object Linking and Embedding) |
개체를 현재 작성 중인 문서에 자유롭게 연결 또는 삽입하여 편집할 수 있게 하는 기능 제공 |
255자의 긴 파일명 | \/*?"<>| 를 제외한 모든 문자 및 공백을 사용하여 최대 255자 파일 이름을 지정 가능 |
Single-User 시스템 | 컴퓨터 한 대를 한 사람만 독점해서 사용함 |
2. UNIX
- AT&T 벨 연구소, MIT, General Electric이 공동 개발한 운영체제
- UNIX의 주요 특징
특징 | 설명 |
대화식 운영체제 | 프롬프트가 나타난 상태에서 사용자가 명령을 입력하면 시스템은 명령을 수행하는 명령 기반의 대화식 운영체제 |
다중작업 기능 제공 | 다수의 작업이 CPU(중앙처리장치)와 같은 공용자원을 나누어 사용하여 한 번에 하나 이상의 작업을 수행하는 기능 제공 |
다중 사용자 기능 제공 | 여러 대의 단말이 하나의 컴퓨터에 연결되어서 여러 사람이 동시에 시스템을 사용하여 각각의 작업을 수행할 수 있는 기능 제공 |
이식성 제공 | 90% 이상 C언어로 작성되어있어 이식성이 높으며 장치, 프로세스간의 호환성이 높다 |
계층적 트리 구조 파일 시스템 제공 | 유닉스는 계층적 트리 구조를 가짐으로써 통합적인 파일 관리가 용이 |
- UNIX의 시스템 구성
커널(Kernel) :
- 하드웨어 보호, 프로그램-하드웨어 간의 인터페이스 역할 담당.
- UNIX의 핵심 부분
- 프로세스 관리, 기억장치 관리, 파일 관리, 입/출력 관리, 프로세스간 통신, 데이터 전송 및 변환 등 수행
쉘(Shell):
- 사용자의 명령어를 인식하여 프로그램을 호출, 명령 수행하는 명령어 해석기
- 시스템과 사용자 간의 인터페이스 담당
- 종류: Bourne Shell, C Shell, Korn Shell
유틸리티 프로그램 (Utility Program):
- 일반 사용자가 작성한 응용 프로그램을 처리하는 데 사용
- DOS애서의 외부 명령어에 해당됨
- 종류: 에디터, 컴파일러, 인터프리터, 디버거
3. LINUX
- 리누스 토발즈(Linus Torvalds)가 UNIX를 기반으로 개발한 운영체제
- 리눅스의 주요 특징
- 소스 코드가 공개된 오픈 소스 기반의 운영체제
- 다양한 플랫폼에 설치하여 사용이 가능하며 재배포가 가능
- UNIX와 호환가능하며 유닉스가 갖는 운영체제, 다중 작업 기능, 다중 사용자 기능, 이식성, 계층적 트리 구조 파일 시스템을 갖는다.
4. MacOS
- 1980년대 애플(Apple) 사가 UNIX를 기반으로 개발한 그래픽 사용자 인터페이스 기반 운영체제
- 드라이버 설치 및 인스톨, 언인스톨의 과정이 단순하다.
- 클라이언트 버전, 서버 제품 등으로 제품군을 확대 하였으며 지속적으로 업데이트를 하고있다.
5. 안드로이드(Android)
- 휴대전화를 비롯한 휴대용 장치를 위한 운영체제와 미들웨어, 사용자 인터페이스, 표준 응용 프로그램을 포함하는 운영체제
- Google사에서 개발한 모바일 운영체제
- 안드로이드 특징
특징 | 설명 |
리눅스 기반 | 리눅스 커널 위에서 동작 |
자바와 코틀린 언어 | 고수준 언어를 통해 응용프로그램 작성. 생산성이 높으며 전문 지식 없어도 개발 가능 |
런타임 라이브러리 | 컴파일된 바이트 코드 구동 가능 |
안드로이드 소프트웨어 개발 키트; SDK | 응용 프로그램을 개발하는 데 필요한 각종 도구와 API를 제공 |
개방형 소프트웨어 | 모든 코드가 공개된 개방형 소프트웨어 |
* 운영체제 핵심 기능
- 기억장치 관리: 한정된 주기억장치의 공간을 효율적으로 사용
- 프로세스 관리: CPU와 데이터를 송수한 하는 상황에서 프로세스에 대한 종합적 관리 기법.
ex) 동기화, 통신, 일시 중지 및 재실행, 교착상태 처리, 프로세스 생성 삭제
* 기억장치 관리의 종류
- 반입 Fetch 전략
- 배치 Placement 전략
- 교체 Replacement 전략
* 반입 전략: 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지 결정 (When)
- 요구 반입(Demand Fetch): 실행중인 프로그램이 데이터 등의 참조를 요구할 때 적재하는 방법
- 예상 반입(Anticipatory Fetch): 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재
* 배치 전략: 프로그램이나 데이터를 주기억장치의 어디에 위치시킬것인지 결정 (Where)
- 최초 적합(First Fit): 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역중 첫번째 분할 영역에 배치
- 최적 적합(Best Fit): 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역중 단편화를 가장 작게 남기는 영역에 배치
- 최악 적합(Worst Fit): 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역중 단편화를 가장 많이 남기는 영역에 배치
* 교체 전략: 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지 결정 (Who)
- FIFO, OPT, LRU, LFU, NUR, SCR
* 주기억장치 할당: 프로그램이나 데이터를 실행시키기 위해 어떻게 할당할것인지에 대한 내용
* 주기억장치 할당 기법의 분류:
1. 연속 할당 기법: 프로그램을 주기억장치에 연속으로 할당하는 기법
- 단일 분할 할당 기법:
- 한순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용
- 가장 단순한 기법으로 초기 운영체제에서 많이 사용
- 운영체제 보호를 위해 운영체제 영역, 사용자 영역을 구분하는 경계 레지스터 사용
- 프로그램의 크기가 작을수록 사용자 영역 낭비
- 종류:
- 오버레이 기법(Overlay): 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법
- 스와핑 기법(Swapping): 하나의 프로그램 전체를 주기억장치에 할당하여 필요에 따라 다른 프로그램과 교체
- 다중 분할 할당 기법:
- 고정분할 할당 기법(정적 할당 기법): 프로그램을 할당하기 전에 운영체제가 주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행
- 가변 분할 할당 기법(동적 할당 기법): 고정 분할 할당 기법의 단편화를 줄이기 위해 사용. 프로그램을 주기억장치에 적재하며 필요한 만틈의 크기로 영역 분할
2. 분산 할당 기법: 가상기억장치 관리 기법. 가상기억장치의 내용을 주기억장치에 할당하기 위한 기법. 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당
- 페이징(Paging)기법:
- 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후, 주기억장치의 영역에 적재시켜 실행
- 주소 변환을 위해 페이지의 위치 정보를 갖고있는 페이지 맵 테이블(Page Map Table)이 필요.
- 페이지 맵 테이블 사용으로 비용 증가, 처리 속도 감소.
- 외부 단편화는 없지만 내부 단편화 발생 가능.
- 세그먼테이션(Segmentation) 기법:
- 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행.
- 기억공간을 절약하기 위해 사용.
- 주소변환을 위해 세그먼트 존재 위치 정보를 갖고 있는 세그먼트 맵 테이블(Segment Map Table)이 필요.
- 내부 단편화는 없지만 외부 단편화 발생 가능.
* 가상기억장치(Virtual Memory):
- 보조기억장치의 일부를 주기억장치처럼 사용하는 것.
- 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용.
- 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관 후, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리.
- 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다.
- 블록 단위로 나누어 사용.
- 연속 할당 방식에서 발생할 수 있는 단편화 해결.
* 주소변환:
- 주소 사상 / 주소 매핑(Mapping)
- 가상기억장치에 있는 프로그램이 주기억장치에 적재되어 실행될 때 논리적인 가상주소를 물리적인 실기억주소로 변환하는 것.
- 인위적 연속성: 연속적인 가장주소가 반드시 연속적인 실기억주소로 변환되지 않아도 됨
* 페이지(Page):
- 프로그램을 일정한 크기로 나눈 단위
* 페이지 프레임(Page Frame):
- 페이지 크기로 일정하게 나누어진 주기억장치의 단위
* 세그먼트(Segment):
- 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위.
- 각 세그먼트는 고유한 이름과 크기를 갖는다.
* 페이지 교체 알고리즘
: 페이지 부재(Page Fault)가 발생하면 어떤 페이지 프레임을 선택, 교체할것인지 결정하는 기법.
종류 | 설명 |
FIFO(First In First Out) | - 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체 |
LRU(Least Recently Used) | - 최근에 가장 오랫동안 사용하지 않은 페이지 교체 - 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현시점에서 가장 오래전에 사용한 페이지를 교체 |
LFU(Lesat Frequently Used) | - 사용 빈도가 가장 적은 페이지를 교체 - 활발히 사용되는 페이지는 사용횟수가 많아 교체하지 않는다 |
NUR(Not Used Recently) | - 최근에 사용하지 않은 페이지를 교체 - 최근 사용 여부를 확인하기 위해 각 페이지마다 두 개의 비트(참조비트; Referemce Bit)와 변형 비트(Modified Bit, Dirty Bit)가 사용된다 - LRU에서 나타나는 시간적인 오버헤드를 줄일 수 있음 - 참조비트 0, 변형비트 1 vs 참조비트 1, 변형비트 0 일때는 변형비트가 1일때 우선순위. |
SCR(Second Chance Replacement, 2차 기회 교체) | - 가장 오랫동안 주기억장치에 있던 페이지중 자주 사용되는 페이지의 교체를 방지 - FIFO 기법의 단점 보완 |
* 참조비트: 페이지가 호출되지 않았을때는 0, 호출되었을 때는 1로 지정됨
* 변형비트: 페이지 내용이 변경되지 않았을 때는 0, 변경되었을 때는 1로 지정됨
* 페이지 크기에 따른 영향
페이지 크기가 작을 경우 | - 페이지 단편화 감소 - 한 페이지를 주기억장치로 이동시키는 시간 감소 - 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹셋 유지 가능 - 페이지 정보를 갖는 페이지 맵 테이블 크기가 커지고 매핑속도가 느려짐 - 디스크 접근 횟수가 많아져 전체적 입/출력 시간은 늘어남 |
페이지 크기가 클 경우 | - 페이지 단편화 증가 - 한 페이지를 주기억장치로 이동시키는 시간이 늘어남 - 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라짐 - 디스크 접근 횟수가 줄어들어 전체적인 입/출력의 효율성이 증가 |
* Locality(국부성, 지역성, 구역성, 국소성):
- 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질.
- 스레싱을 방지하기 위한 워킹 셋 이론의 기반이 됨
- 가상기억장치 관리와 캐시 메모리 시스템의 이론적인 근거
- 데닝(Denning) 교수가 개념 증명
- Locality의 종류
- 시간 구역성(Temporal Locality): 한번 참조한 페이지는 가까운 시일 내에 계속 참조할 가능성이 높음
- 공간 구역성(Spatial Locality): 한 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음
* 워킹 셋(Working Set)
- 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
- 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델
- 프로그램의 Locality 특징을 이용
- 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체현상이 줄어들어 프로세스의 기억장치 사용이 안정됨
* 스레싱(Thrashing)
- 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
- 시스템에서 하나의 프로세스 수행 과정 중 자주 페이지 부재(Page Fault)가 발생함으로써 나타남
- 전체 시스템의 성능 저하 야기
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU 이용률은 높아지지만 특정 시점 이후 스래싱이 나타나면 CPU 이용률이 급격히 감소
* 페이지 부재(Page Fault)
: 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상.
*페이지 부재 빈도(Page Fault Frequency)
: 페이지 부재가 일어나는 횟수
*다중 프로그래밍의 정도
: 얼마나 많은 프로그램이 동시에 수행되는지의 정도.
* 프로세스(Process)
- PCB를 가진 프로그램
- 실기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체로서 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 존재
- 목적 또는 결과에 따라 발생되는 사건들의 과정
* 프로시저: 부프로그램. 분할된 작은 프로그램
* 비동기적 행위: 다수의 프로세스가 서로 규칙적/연속적이지 않고 독립적으로 실행되는 것
* PCB(Process Control Block, 프로세스 제어 블록)
: 운영체제가 프로세스에 대한 중요한 정보를 저장해놓는 곳. 각 프로세스가 생성될 때 고유의 PCB이 생성되고 프로세스 완료시 제거됨.
- PCB에 저장되어 있는 정보
- 프로세스의 현재 상태
- 포인터
- 프로세스 고유 식별자
- 스케줄링 및 프로세스의 우선순위
- 주기억장치 관리 정보
- 입/출력 상태 정보
- 계정 정보
* 프로세스의 상태 전이
: 프로세스가 시스템 내 존재하는 동안 프로세스의 상태가 변하는 것
- 프로세스 상태:
- 제출 (Submit) - 작업을 처리하기 위해 시스템에 제출된 상태
- 접수 (Hold) - 제풀된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태
- 준비 (Ready) - 프로세스가 프로세서를 할당받기 위해 기다리는 상태
- 실행 (Run) - 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태
- 대기 / 블록 (Wait/Block) - 프로세스에 입/출력 처리가 필요하면 현재 실행중인 프로세스 중단, 입/출력 처리가 완료될 때까지 대기하는 상태
- 종료 (Terminated,Exit) - 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태
- 프로세스 상태 전이 관련 용어:
- Dispatch : 준비상태의 프로세스가 프로세서를 할당받아 실행 상태로 전이되는 과정
- Wake Up: 입/출력 작업이 완료되어 프로세스가 대기 상태에서 준비상태로 전이 되는 과정
- Spooling: 입/출력 장치의 처리속도 보완, 다중 프로그래밍 시스템 성능 향상을 위해 디스크에 저장하는 과정
- Timer run out 타이머 런 아웃: CPU를 할당받은 프로세스는 시간 초과시 스케줄러에 의해 PCB저장, CPU반납 후 실행상태에서 준비상태로 전이
- Traffic Controller 교통량 제어기: 프로세스의 상태에 대한 조사와 통보 담당
* 스레드 (Thread)
- 경량 프로세스
- 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위
- 스레드 기반 시스템에서 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당
- 단일 스레드 : 하나의 프로세스에 하나의 스레드가 존재
- 다중 스레드 : 하나의 프로세스에 하나 이상의 스레드가 존재
* 스케줄링(Scheduling)
: 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업
- 스케줄링의 종류
- 장기 스케줄링: 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인지를 결정하여 준비상태 큐로 보내는 작업
- 중기 스케줄링: 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업
- 단기 스케줄링: 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업
- 스케줄링 주요 용어
용어 | 설명 |
서비스 시간 | 프로세스가 결과를 산출하기까지 소요되는 시간 |
응답 시간 | - 작업을 지시, 반응하기 시작하는 시간 - 응답시간 = 대기시간 + 수행시간 |
반환 시간 | 프로세스를 제출한 시간부터 실행이 완료될 때까지 걸리는 시간 |
대기 시간 | - 프로세스가 대기 큐에서 대기하는 시간 - 프로세스가 도착 즉시 프로세서에 할당되면 대기시간은 '0'이 됨 |
종료 시간 | 요구되는 Processing time을 모두 수행하고 종료된 시간 |
시간 할당량 | 한 프로세스가 프로세서를 독점하는 것을 방지하기 위해 서비스되는 시간 할당량 |
응답률 | - (대기시간 + 서비스 시간) / 서비스시간 - HRN(Highest Responce ratio Next) 스케줄링에서 사용 - HRN 스케줄에서 응답률이 높으면 우선순위가 높다고 판단 |
- 프로세스 스케줄링 유형
1. 선점형 스케줄링
- 우선 순위가 높은 프로세스가 진행중인 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식
- 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 적합
- 실시간 응답환경 , Deadline 응답 환경에 적합
- 많은 오버헤드(Overhead) 초래
- 알고리즘:
알고리즘 유형 | 설명 |
라운드 로빈 (Round Robin) |
- 프로세스는 같은 크기의 CPU 시간을 할당 - 프로세스가 할당된 시간 내에 처리 완료를 못하면 분비 큐 리스트의 가장 뒤로 보내지고 CPU는 대기중 다음 프로세스로 넘어감 - 균등한 CPU 점유시간 - 시분할 시스템 사용 |
SRT (Shortest Remaining Time First) |
- 가장 짧은 수행시간 프로세스 우선 수행 - 남은 처리시간이 더 짧다고 판단되는 프로세스가 준비 큐에 생기면 프로세스 선점 |
다단계 큐 (Multi-Level Queue) |
- 독립된 스케줄링 큐 - 여러개의 큐를 이용하여 상위 단계 작업에 의한 하위 단계 작업이 선점 |
다단계 피드백 큐 (Multi-Level Feedback Queue) |
- 프로세스의 특성에 따라 큐마다 서로 다른 CPU 시간 할당량 부여 - FCFS와 라운드 로빈 스케줄링 기법을 혼합 - 마지막 단계는 라운드 로빈 처리 |
2. 비선점형 스케줄링
- 한 프로세스에게 할당된 CPU는 작업 종료 후 CPU 반환 전 까지 다른 프로세스에게 점유가 불가능한 스케줄링 방식
- 프로세스 응답 시간의 예측이 용이
- 일괄 처리방식에 적합
- 처리시간 편차가 적은 특정 프로세스 환경에 적합
- 짧은 작업을 수행하는 프로세스가 긴 작업 종료시까지 대기함
- 알고리즘:
알고리즘 유형 | 설명 |
우선순위 (Priority) |
- 주요/긴급 프로세스에 대한 우선 처리 - 설정, 자원 상황에 따른 우선순위 선정 - 동일 순위는 FCFS |
기한부 (Deadline) |
- 요청에 명시된 시간 내 처리를 보장 - 작업들이 명시된 시간, 기한 내에 완료되도록 계획 |
FCFS (First Come First Service) = FIFO (First In First Out) |
- 준비상태 큐에 도착한 순서에 따라 차례로 CPU 할당 - 가장 간단한 알고리즘 |
HRN (Highest Response ratio Next) |
- 대기시간과 서비스 시간을 이용하는 기법 - 우선순위를 계산하여 숫자가 높은것부터 낮은 순으로 우선순위 부여 - 우선순위 계산식: (대기 시간 + 서비스 시간) / 서비스 시간 - SJF의 기아현상 보완 |
SJF(Shortest Job First, 단기 우선 작업) | - 준비상태 큐에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU 할당 - 가장 적은 평균 대기 시간을 제공하는 알고리즘 - CPU 요구 시간이 긴 작업과 짧은 작업간의 불평등으로 인해 기아현상 발생 가능 |
* 시분할 시스템(Time Sharing System)
: 각 사용자들에게 컴퓨터 자원을 시간적으로 분할하여 사용할 수 있게 해주는 대화식 시스템
'정처기 실기' 카테고리의 다른 글
[정처기 실기] 응용 SW 기초 기술 활용 (2) (0) | 2022.07.17 |
---|---|
[정처기 실기] 소프트웨어 개발 보안 구축 (1) | 2022.07.12 |
[정처기 실기] 애플리케이션 테스트 관리 (2) (0) | 2022.07.11 |
[정처기 실기] 애플리케이션 테스트 관리 (1) (0) | 2022.07.11 |
[정처기 실기] 화면설계 (0) | 2022.07.10 |