* 운영체제(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)

: 각 사용자들에게 컴퓨터 자원을 시간적으로 분할하여 사용할 수 있게 해주는 대화식 시스템

 

 

+ Recent posts