Computer Science/운영체제

운영체제 정리 ::

HJPlumtree 2023. 6. 1. 22:50

운영체제에서 기억하고 싶은 내용

 

 

 

운영체제란??

 

운영체제는

응용 소프트웨어와 하드웨어 사이의 매개체 역할을 한다

대표적인 시스템 소프트웨어다

컴퓨터 시스템의 자원을 관리한다

컴퓨터 프로그램의 서비스를 제공하는 프로그램들의 모음이다

 

 

운영체제 역할

컴퓨터 시스템 자원 관리와 사용자 지원을 한다

 

1. 컴퓨터 시스템 자원 관리 역할

자원이란 하드웨어 자원, 소프트웨어 자원 그리고 데이터가 있다

저장장장치에서 데이터를 읽어 오는 역할을 한다

키보드, 마우스 제어 역할을 한다

동시에 여러 프로그램 실행시 CPU와 메모리를 효율적으로 관리한다

=> 컴퓨터 시스템을 효율적으로 운영하려는 목적이다

 

2. 사용자 지원의 역할

사용자가 내린 명령을 해석해서 실행한다(CLI)

사용자와 하드웨어 사이의 매개체가 된다

=> 사용자에게 편의성을 제공하기 위한 목적

 

 

커널 모드와 사용자 모드

1. 커널 모드

커널 모드는 하드웨어를 직접 제어하는 CPU 명령어를 사용할 수 있다

슈퍼바이저 모드라고도 부른다

 

2. 사용자 모드

사용자 모드에서는 하드웨어를 직접 제어하는 CPU 명령어 사용 불가능하다

응용 프로그램이 동작하는 모드다

 

시스템 호출
운영체제에 서비스를 요청하는 것을 시스템 호출이라고 한다
응용 프로그램이 하드웨어에 대한 제어가 필요한 경우 사용자 모드에서 커널모드로 바꼈다가 동작이 끝나면 사용자 모드로 변경된다

 

 

커널

응용 프로그램과 하드웨어의 가교 역할을 한다

운영체제의 핵심!

 

 

커널의 종류

1. 일체형 커널

운영체제의 모든 서비스가 커널에 포함되서 운영체제이 곧 커널인 경우

장점: 내부 요소가 전부 커널에 포함되어 있어 효율적으로 상호작용이 가능하다

단점: 하나의 요소에 오류가 발생하면 시스템 전체에 장애가 발생 가능하다

UNIX, Linux 등

 

2. 마이크로커널

커널 내부에는 핵심만 두고 운영체제 요소의 대부분을 커널 외부로 분리

장점: 유지보수가 용이하고, 안정성 우수, 새로운 서비스 추가해서 운영체제 확장 가능하다

단점: 커널 외부 요소들 사이에는 커널 내부에 있는 IPC 통해야 되서 성능 저하될 수 있다

 

 

운영체제의 유형

1. 일괄처리 운영체제

작업을 모아서 순차적으로 처리한다

앞의 작업이 끝나야 뒷 작업이 시작된다

 

2. 시분할 운영체제

시간을 분할해서 각 프로그램을 조금씩 수행한다

대화형(Interactive) 운영체제 라고도 한다

응답 시간이 일괄처리 운영체제보다 빨라졌다

응답 시간은 작업에 대한 반응이 시작된 시점

 

3. 실시간 운영체제

원하는 시간 내에 프로그램의 결과를 얻을 수 있는 방식으로 중요한 작업에 대한 기한을 맞추기 좋겠다

우선순위가 높은 작업부터 처리할 수 있는 기법이 있다

오... 증권거래, 미사일 제어가 예시네

 

4. 분산 운영체제

여러 컴퓨터 시스템이 네트워크로 연결되어 서로 자원을 사용할 수 있는 시스템

분산 시스템을 관리하기 위한 운영체제다

 

 

 

스케줄링

 

스케줄링의 목표

공정성: 모든 프로세스가 적정 수준에서 CPU 작업할 수 있다

균형: 시스템 자원을 충분히 활용 한다

 

 

스케줄링 정책

1. 선점(preemptive) 정책

실행 중인 프로세스에 인터럽트하고 다른 프로세스에 CPU 할당하는 방식

높은 우선순위 프로세스를 먼저 처리하는 경우 좋다

문맥 교환에 대한 오버헤드가 발생하기도 한다

 

문맥
모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스 상태

 

문맥 교환
CPU가 현재 실행중인 프로세르의 문맥을 PCB에 저장하고,
다른 프로세스의 PCB에서 문백을 복원되는 것이 문맥 교환

 

2. 비선점(Nonpreemptive) 정책

실행중인 프로세스를 준비 상태로 바로 변하지 않는 정책

강제적인 문맥 교환이 없어 강제적인 오버헤드가 발생하지 않는다

현재 프로세스가 길어지면 다음 프로세스가 오래 기다린다

 

 

스케줄링 알고리즘 종류

1. FCFS(First Come First Served)

  • 준비 큐에 도착한 순서에 따라 디스패치 된다
  • 비선점 방식이다
  • 시분할, 실시간 운영체제에 부적합

장점

  • 간단한 기법

단점

  • 중요한 프로세스가 나중에 수행될 수 있다

 

2. SJF(Shortest Job First)

  • 가장 짧다고 예상되는 것부터 디스패치
  • 비선점 방식이다
  • 시분할, 실시간 운영체제에 부적합

장점

  • 일괄처리 환경에서 구현이 쉽다

단점

  • 실제 먼저 처리할 프로세스의 CPU 시간 예상 불가능
  • 중요한 프로세스가 나중에 수행될 수 있다

 

 

3. SRT(Shortest Remaining Time)

  • SJF 알고리즘의 선점 방식이다
  • 준비 큐의 프로세스 중에 실행시간 짧을 것 같은 것부터 실행

장점

  • SJF부터 평균 대기시간과 평균 반환시간에서 효율적이다

단점

  • 프로세스 CPU 시간 예상 불가능
  • 실행시간 추적, 선점을 위한 문맥 교환 등 SJF 보다 오버헤드 크다

 

 

RR(Round Robin)

  • 기본적으론 준비 큐에 도착한 순서대로 디스패치(FCFS)
  • 하지만 할당 시간 안에 못 끝내면 준비 큐 마지막에 배치한다
  • 시분할 운영체제에 적합하다

장점

  • CPU 독점없이 공평하게 사용한다

단점

  • 적당한 시간 할당량 잡기가 힘들다
  • 시간 할당량이 너무 크며 FCFS와 동일하고,
  • 너무 작으면 잦은 문맥 교환이 발생해서 오버헤드가 생긴다

 

 

병행 프로세스, 세마포어

 

병행 프로세스란?

동시에 수행되는 프로세스

멀티 프로세서

 

CPU가 1개라도 병행 프로세스 가능

인터리빙 방식이라고도 하는데,

CPU 하나가 프로세스를 번갈아 가면서 병행처럼 보이게 처리한다

 

CPU가 여러 개인 경우

각 CPU가 각 프로세스를 처리하는 병렬 처리 방식

 

 

멀티 프로세서 메모리 구조

1. 강결합 시스템

여러 CPU가 메모리 하나를 공유한다

같은 메모리를 사용하기에 정보 공유가 쉽다

 

2. 약결합

CPU 마다 별도 메모리가 존재하는 구조

정보 주고 받으려면 통신을 통하는 번거로움이 있다

 

 

독립 프로세스 vs 협력 프로세스

1. 독립 프로세스

  • 다른 프로세스에 영향을 주지도 받지도 않는다
  • 다른 프로세스와 데이터, 상태를 공유하지 않는다
  • 실행 결과는 입력에 의해서만 결정된다
  • 같은 입력에 대해 항상 동일한 실행 결과

 

2. 협력 프로세스

  • 다른 프로세스와 영향을 주고 받는다
  • 다른 프로세스와 데이터, 상태를 공유한다
  • 실행 순서에 따라 실행 결과가 달라진다
  • 같은 입력에 대해 동일한 실행 결과 보장 못한다
  • 병행성 문제가 발생한다

 

 

그래서 병행성 문제란?

협력 프로세스에서 발생할 수 있는 문제

 

1. 상호배제

2개 이상의 프로세스가 동시에 임계 영역을 수행하지 못하도록

 

임계영역
2개 이상의 프로세스가 동시에 사용하면 안되는 공유 자원을 액세스하는 프로그램 코드 영역

 

2. 프로세스 동기화

2개 이상의 프로세스에 대한 처리순서 결정

 

3. 프로세스 간 통신(IPC)

프로세스들이 데이터 공유를 위해 필요

 

 

세마포어

상호배제와 프로세스 동기화 문제를 해결하기 위한 도구

오호 그 유명한 다익스트라(Dijkstra)가 제안했다

 

 

세마포어가 상호배제를 해결하는 방법

1. 한 프로세스가 임계영역을 수행한다

다른 프로세스는 임계영역에 진입하면 안된다

 

2. 누군가는 임계 영역을 새로 수행할 수 있어야 한다

임계영역을 수행하던 프로세스가 임계영역을 벗어나는 경우

 

3. 적절한 시간 안에 임계영역 수행을 시작할 수 있어야 한다

임계영역 진입 못하고 대기하는 프로세스에 대하여

 

 

프로세스 간 통신(IPC)

병행 프로세스가 데이터를 서로 공유하는 방법

 

1. 공유 메모리 방법

  • 공유 자원의 메모리 공간에 동일한 변수를 사용한다
  • 장점: 대량 데이터의 교환이 편해서 고속 통신이 가능하다
  • 단점: 통신상 발생 가능한 에러를 응용 프로그래머가 다 처리해야 함..

 

2. 메시지 전달 방법

  • 협력 프로세스가 메시지를 주고 받는다
  • 시스템 호출 함수를 사용한다, send(), receive()
  • 소량 데이터 교환에 적합하다
  • 장점: 통신상 발생 가능한 문제를 운영체제가 해결해준다

 

통신 링크

메시지가 지나는 통로를 통신 링크라 한다

 

 

 

교착 상태

 

교착 상태

어느 쪽도 영원히 진행하지 못하는 상태

여러 개의 프로세스가 다른 작업이 끝나기만을 기다리는 상태

 

 

교착 상태의 필요 조건

다음 4개의 조건이 동시에 만족하게 되면 교착 상태가 발생 가능하다

 

1. 상호배제

다른 프로세스가 점유한 자원 필요시 대기 필요

프로세스가 자원에 대해 배타적 통제권 요구

 

2. 점유대기

프로세스가 자원을 점유한 상태로 다른 자원을 원할 시 대기

자원 가지고 있으면서 다른 자원 원하는 욕심

 

3. 비선점

할당된 자원을 타의에 의해 해제되지 않는다

선점이면 해제 되겠지?

 

4. 환형대기(Circular wait)

자원을 점유하고 점유한 자원의 요구 관계가 원(환형)을 이루면서 대기 상태

서로 원하는게 돌고 도니 답답한 상태구만

 

 

교착 상태를 어떻게 처리할까?

1. 예방

네 가지 필요 조건이 동시에 만족되지 않도록 예방

 

2. 회피

각 프로세스가 필요한 자원의 최대량에 대한 정보로 방지

사전 정보를 가지고 회피를 한다는 의미인 듯 하다

 

3. 탐지 및 복구

교착 상태가 생겼는지 탐지하고 정상 상태로 복구

 

 

교착 상태의 예방

교착 상태의 필요 조건 4가지가 일어나지 않도록 예방

 

1. 상호 배제 조건 제거

공유할 수 있는 자원은 상호배제 필요 없다

공유할 수 없는 자원은 상호배제 필요하다

 

2. 점유 대기 조건 제거

2-1. 필요한 자원을 처음에 전부 요구해서 자원을 점유했을 때 대기하지 않도록

단점: 자원 이용률이 낮아지고, 기아상태 발생 가능하다

 

2-2. 새로운 자원 요구시 할당 받은 자원 해제, 대기시 자원을 점유하고 있지 않도록

단점: 점유 도중에 해제할 수 없는 자원에는 적용 불가능하다

 

3. 비선점 조건 제거

3-1. 선점이 가능토록 한다

단점: 선점이 불가능한 경우가 존재한다(프린터 등)

 

3-2. 점유 대기 상황 발생시 점유한 자원 모두 해제해서, 다른 프로세스 대기 가능성 줄인다

단점: 프린터 간은 적용 불가

 

4. 환형대기 조건 제거

모든 자원에 일련번호를 지정한다

 

 

교착상태 회피

자원 사용에 대한 사전 정보를 활용해서 교착 상태가 발생하지 않는 상태로 머물도록 하는 것

 

사전 정보

  • 현재 할당된 자원
  • 가용상태의 자원
  • 프로세스의 최대 요구량

 

안전 상태

교착 상태를 회피하면서 각 프로세스 최대 요구량까지 자원을 할당할 수 있는 상태

최고의 상태인듯?

 

불안전 상태

안전 순서열이 존재하지 않는 경우

교착 상태는 불안전 상태에서만 발생한다

 

 

교착 상태 탐지 및 복구

탐지

교착 상태 여부를 확인하는 상태 조사 알고리즘을 주기적으로 실행한다

Shoshani와 Coffman 알고리즘을 이용한다

 

복구

1. 교착 상태를 탐지하면 해소한다

모든 교착상태 프로세스를 종료한다

단점: 복원 비용이 크다

 

2. 사이클이 제거될 때까지 교착 상태 프로세스 하나씩 제거한다

단점: 종료 대상 선택을 위한 비용, 프로세스 종료 후 교착상태 재확인 비용이 든다

 

 

 

메모리 관리자

 

메모리 관리자가 하는 일

1. 메모리 호출

새로운 프로세스를 언제 메모리에 둘지

 

2. 메모리 배치

메모리 어디에 둘지

 

3. 메모리 교체

메모리 가득 찼을 때 어떤 프로세스 제거할지

 

 

단일 프로그램 환경

하나의 프로세스가 메모리를 전용으로 사용한다

연속된 블록으로 메모리에 할당

 

문제점

메모리 용량을 초과하는 프로세스는 실행하지 못한다

지속적이지 않은 프로세스도 적재되어 있어 메모리 낭비가 심하다

주변장치 등 자원 낭비가 심하다

 

 

다중 프로그래밍 환경

보통 우리가 사용하는 환경이다

여러 개의 프로세스가 메모리에 동시에 적재된다

CPU 연산과 입출력 동시에 사용하는 등

=> CPU 이용도와 시스템 처리량의 증가한다

그럼 여기서 메모리 분할을 어떻게 할까?

 

 

메모리 고정 분할

메모리를 여러 개의 고정된 크기로 나눈다

크기가 fixed 되었다는 말이지, 다 같은 크기라는 것이 아니다

 

프로세스 배치 방법 1

분할 영역마다 큐를 두고, 큐에 들어온 프로세스는 해당 분할 영역에 적재한다

 

프로세스 배치 방법 2

하나의 큐만 두고, 어느 분할 영역에든 적재한다

 

고정 분할의 문제점

=> 내부 단편화

분할 영역보다 프로세스 크기가 작으면 남는 메모리가 발생한다

 

 

메모리 동적 분할

분할 경계를 고정하지 않는다

각 프로세스에 필요한 메모리를 할당한다

 

외부 단편화 발생

작은 크기의 공백이 메모리 공간에 흩어져서 생긴다

 

외부 단편화 해결 방법 1

인접한 공백을 더 큰 하나의 공백으로 만든다

 

외부 단편화 해결 방법 2

모든 공백을 하나로 모은다

단점: 기존에 배치된 프로세스를 옮기는 비용이 든다

 

 

메모리 배치 기법

새로 반입된 프로그램/데이터를 어디에 배치할까?

 

최초 적합

프로세스가 적재될 수 있는 빈 공간 중에 제일 먼저 발견한 곳에 할당

 

후속 적합

앞선 탐색이 끝난 다음 부터 탐색해서 빈 공간에 할당

 

최적 적합

빈 공간이 가장 적은 곳을 선택한다

큰 빈 공간을 최대한 많이 남겨 놓을 수 있는 방법

 

최악 적합

빈 공간 중 가장 큰 곳을 선택한다

사용하지 못하는 너무 작은 자투리를 안만들려는 방법이다

 

 

 

가상 메모리

 

가상 메모리

필요한 부분만 실제 메모리에 적재해서 사용할 수 있도록 도와준다

실제 메모리보다 큰 기억공간이 필요한 프로세스도 실행 가능하다

 

사상

가상 주소를 실제 주소로 변환하는 과정

 

주소변환 사상표

가상 메모리에서 실제 메모리로 주소 변환을 위한 정보가 담긴 표

 

 

블록 사상 시스템

블록 단위로 사상(주소 변환)을 하는 것

바이트나 워드 단위로 주소를 변환하면 정보량이 너무 많아 비효율적

이들을 묶어서 사상을 하는 방법

 

블록의 크기가 커지면?

사상표 크기는 감소하지만,

블록이 커진만큼 전송시간 증가하고 실제 메모리에 적재할 수 있는 프로세스는 적어진다

 

블록의 크기가 작아지면?

사상표 크기가 커지고 복잡하지만,

전송 시간은 감소하고, 동시에 적재할 수 있는 프로세스의 수는 증가한다

 

 

블록 구성 방식

1. 페이지

블록의 크기를 동일하게 나눈 방식

 

2. 세그먼트

블록의 크기가 다를 수 있는 방식

 

 

페이징 기법

가상 메모리, 실제 메모리 동일한 페이지 단위로 나눈다

가상 메모리 부분을 페이지, 실제 메모리 부분을 페이지 프레임이라고 한다

 

페이지 사상표

가상 주소를 실제 주소로 변환할 수 있게 해준다

페이지 번호에 대해 페이지 프레임 번호를 저장한다

 

연관-직접 사상 방법

일반적으로 이 방법으로 동적 주소 변환을 한다

연관 사상표에 가장 최근에 참조된 페이지만 보관하고,

연관 사상표에 없으면 직접 사상을 이용한다

 

 

세그먼테이션 기법

재각기 다른 세그먼트 단위로 관리하는 기법

논리적 의미에 부합한 다양한 크기의 블록으로 나눈다

 

 

페이지 - 세그먼테이션 혼용 기법

페이징의 메모리 관리 측면과 세그먼테이션의 논리적 의미로 나누는 방법을 합침

 

1. 가상 메모리를 세그먼트 단위로 나눈다

2. 각 세그먼트를 다시 페이지 단위로 분할해서 관리

 

 

메모리 호출 기법

어느 시점에 페이지/세그먼트를 메모리에 적재할까 하는 것

요구 페이지 호출 기법과 예상 페이지 호출 기법이 있다

 

 

페이지 교체 알고리즘

 

페이지 교체 알고리즘

새로운 페이지를 적재해야 하지만, 모든 페이지 프레임이 사용되고 있다면?

그럼 교체할 페이지 프레임을 결정해야 한다

FIFO, LRU, LFU, 2차 기회 페이지 교체 등이 있다

 

 

최적화의 원칙

가장 오랫동안 사용되지 않을 페이지를 선택하는 방법이다

이론적으로 완벽한 방법이지만 미래를 예측할 수 없어 실현 불가능하다

 

 

교체 제외 페이지

어차피 필요한 영역은 교체하지 않는 것이 효율적이다

페이징을 위한 커널 코드 영역

보조기억장치 드라이버 영역

입출력장치 위한 데이터 버퍼 영역

 

 

FIFO(First In First Out)

가장 간단한 방법으로 큐를 사용하는 알고리즘이다

메모리 내에 가장 오래 있었던 페이지를 교체하는 방법

 

단점

가장 많이 쓰는 페이지를 교체 해버릴수도!

Belady의 이상현상 발생 가능

 

Belady의 이상현상

페이지 프레임을 늘리면 부재 횟수가 줄어들길 기대하지만,

타이밍이 안맞아 오히려 부재 횟수가 늘어나는 이상현상

 

 

LRU(Least Recently Used)

메모리 내에 가장 오랫동안 사용되지 않은 페이지를 교체

국부성(Locality) 휴리스틱을 기반으로 한 방법

 

단점

국부성이 맞지 않는 상황이 존재 가능

오버헤드도 많이 필요하다

 

 

LFU(Least Frequently Used)

메모리 내에 참조된 횟수가 가장 적은 페이지를 교체한다

 

단점

가장 최근에 옮겨진 페이지를 교체될 가능성이 높다

초반에 많이 사용됐지만 사용 안되는 페이지는 살아남기도 한다

막대한 오버헤드도 문제다

 

 

2차 기회 페이지 교체

두 번째 기회를 주는 방법

큐에 페이지와 참조 비트를 짝지어서 구현한다

참조 비트가 0이면서, 가장 오래 있었던 페이지를 교체한다

 

방법

처음 메모리에 적재되면 참조 비트는 0

적재된 상태에서 추가로 참조되면 참조 비트를 1로 만든다

교체를 해야할 때 해당 페이지의 참조 비트가 1이면 한번 더 기회를 준다

참조 비트를 0으로 바꾸고 큐의 마지막에 다시 넣어준다

 

 

 

문제

 

병행성

여러 개의 프로세스 또는 쓰레드가 동시에 실행되는 시스템의 특성

동시에 실행되는 여러 개의 프로세스 또는 쓰레드

하나의 CPU 에서는 인터리빙 형식으로 병행 프로세스 실행

 

 

상호배제

2개 이상의 프로세스가 동시에 공유 자원을 액세스 하는 코드 영역에 진입하지 못하도록 하는 것

 

 

세마포어

Dijkstra가 제안한 동기화 도구

정수형 공용변수

두 표준단위 연산 P와 V에 의해서만 접근 가능

 

 

상호배제를 위한 세마포어의 이름은?
mutex

 

 

판독기/기록기 문제

기록기가 다른 기록기와 동시에 공유 데이터 객체에 접근

기록기가 판독기와 동시에 공유 데이터 객체에 접근

판독기가 기록기와 동시에 공유 데이터 객체에 접근

 

 

교착상태의 필요조건

환형 대기, 비선점 ... 등

 

 

기억장치 크기 순서

레지스터 < 캐시 기억장치 < 메모리 < 보조기억장치

 

 

다중 프로그래밍 환경에서 여러 프로세스에 메모리 적재하기 위한 메모리 분할 기법

고정 분할은 메모리를 여러 개의 고정된 크기의 영역으로 분할

동적 분할은 필요한 만큼의 메모리만 할당

고정 분할에서 분할마다 큐를 두는 방법은 메모리 효율성이 낮다

 

 

최적 적합

빈 공간 제일 적을 곳

 

최악 적합

빈 공간 제일 많은 곳

 

 

메모리 관리 기법 중에 세그먼테이션 기법

사상표에 세그먼트 길이 저장

 

 

페이지 호출 기법

요구 페이지 호출 기법은 실제 요구가 있을 때 메모리로 이동

예상 페이지 호출 기법은 프로세스 시작 시점에 적용하면 성능 업

예상 페이지 호출 기법은 예상이 잘못되면 메모리 낭비

 

 

최적화의 원칙

앞으로 가장 사용되지 않을 페이지 교체

이론적인 완벽한 방법

 

 

장치의 구성

장치 드라이버는 응용 프로그램의 입출력 요청을 장치에 맞도록 변환

 

 

FIFO 페이지 교체 기법

먼저 들어온 페이지 프레임 교체

 

LFU 페이지 교체 기법

제일 적게 사용된 페이지 프레임 교체

 

 

CPU 데이터 처리 속도와 입출력 장치의 데이터 전송 속도의 차이로 인한 문제를 임시 저장 장소를 이용해서 해결하는 인출력 관리 방법은?

버퍼링

 

 

디스크 스케줄링에서 가장 중요하게 고려하는 시간

탐구시간

 

 

FCFS 스케줄링

들어온 순서대로

 

 

운영체제 보안의 기본 목표

무결성, 기밀성, 가용성

 

 

벨-라파둘라 모델

기밀성 유지에 초점을 둔다

벨과 라파둘라가 개발한 수학적 모델

보안 시스템 내에서 허용되는 정보의 흐름을 설명