운영체제

해롱그·2023년 4월 24일
0

CS

목록 보기
1/4

운영체제 (Operating System, OS)

컴퓨터 하드웨어 바로 위에 설치되어, 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어이다. 우리가 일반적으로 컴퓨터를 사용하면서 실행한 모든 프로그램들은 운영체제에서 관리하고 제어한다.

대표적인 운영체제는 Windows, Linux, Mac OSX, iOS 등이 있다.


애플리케이션은 위의 그림과 같이 운영체제 위에서 수행한다. 즉, 하드웨어 자원을 직접적으로 사용하지 않고 운영체제가 제공하는 자원만을 사용할 수 있다.

★ 프로그램 (Program)
사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합

★ 프로세스 (Process)
간단히 말하면 ‘실행 중인 프로그램’
프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됨
프로세스는 데이터와 메모리 등의 자원과 쓰레드로 구성

★ 쓰레드 (Thread)
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것, 프로세스에서 가장 작은 실행 단위

★ 교착상태 (Deadlock) 란?
프로세스들이 서로 작업을 진행하지 못하고 영원히 대기 상태로 빠지는 현상
이러한 교착상태가 발생하는 원인은 프로세스 사이에 할당된 자원의 충돌로 인하여 발생하게 됨

예를 들어 A와 B라는 2개의 프로세스가 동작을 한다고 하자.
그리고 이들은 각각 a와 b라는 자원을 할당 받아 사용하고 있다고 가정하자.
이때 프로세스 A에서는 작업을 계속 진행하기 위해서 b라는 자원을 요청하고 프로세스 B에서는 a라는 자원을 요청하게 되면 각각의 프로세스가 요청한 자원이 이미 다른 프로세스에 할당이 되어있기 때문에 할당이 풀릴 때까지 대기 상태에 들어가게 된다. 그런데 A와 B 프로세스 모두 상대방이 자원을 내놓기를 기다리면서 대기상태로 들어가기 때문에 이들은 영원히 대기 상태에 머무는 교착상태에 빠지게 되는 것이다.

★ 임계 구역 (Critical Section)
프로세스 또는 쓰레드들이 공통 변수들에 접근 및 수정하고 테이블을 갱신하며 파일의 읽기, 쓰기 작업들을 수행하는 영역
즉, race condition이 발생하는 영역
이미 한 쓰레드가 Critical Section에 들어갔을 때 다른 쓰레드들은 이곳으로의 접근을 막아야 한다!

뮤텍스와 세마포어는 데드락을 피하기 위한 기술

★ 뮤텍스 (mutex)
MUTual EXclusion 으로 우리말로 해석하면 '상호 배제'
Critical Section을 가진 쓰레드들의 러닝타임이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술

★ 세마포어 (Semaphore)
프로세스의 순차적인 처리를 위해 만든 기법으로 프로세스들끼리 경쟁을 막아 원활한 자원 공유를 가능하게 함
wait(약어P)와 signal(약어V) 의 함수를 적절히 호출함으로 여러 프로세스를 수행하는 방법
쓰레드가 임계 구역에 접근할 때 (또는 processer로 부터 resource를 할당 받을 때) 해당 쓰레드는 세마포어의 카운트를 감소시키고 수행이 종료된 후엔 세마포어의 카운트를 원래대로 증가시킨다. 다시 말하면 세마포어는 일종의 신호등 역할을 하는 것이다.

★ 페이지 교체 알고리즘 (FIFO, LFU, LRU)

  • FIFO (First In First Out) : 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법

    • 이해하기 쉽고, 프로그래밍 및 설계가 간단하다.
    • 벨레이디의 모순 (Belady's Anomaly) 현상이 발생한다.
      • 페이지 프레임 수가 많으면 페이지 부재의 수가 줄어드는 것이 일반적이지만, 페이지 프레임 수를 증가시켰는데도 불구하고 페이지 부재가 더 많이 일어나는 현상
  • LRU (Least Recently Used) : 최근 기준 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법

    • 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래전에 사용된 페이지를 교체한다.
    • 계수기나 스택과 같은 별도의 하드웨어가 필요하며, 시간적인 오버헤드가 발생된다.
    • 실제로 구현하기가 매우 어렵다!
    • LRU에서 교체 페이지 선정 방법 : 최근에 가장 오랫동안 사용하지 않은 페이지를 쉽게 선정하려면, 현 시점까지 참조된 페이지 번호 순서를 거꾸로 검사하여 중복되지 않고 가장 나중에 나타나는 페이지를 선택한다.
    • LRU 근사 알고리즘 : LRU 알고리즘은 실제로 구현하기 어렵기 때문에 시스템에서는 LRU와 비슷한 알고리즘을 사용하게 되는데, 이를 LRU 근사 알고리즘이라고 한다.
      • LRU 근사 알고리즘은 참조 비트를 사용하는 것으로 NUR 등이 있다.
  • LFU (Least Frequently Used) : 사용 빈도가 가장 적은 페이지를 교체하는 기법

    • 활발하게 사용되는 페이지는 사용횟수가 많아 교체되지 않고 계속 사용된다.
    • 프로그램 실행 초기에 많이 사용된 페이지가 그 후로 사용되지 않을 경우에도 프레임을 계속 차지할 수 있다.

★ 메모리의 단편화 (Memory Fragmentation)

  • 내부 단편화 (Internal Fragmentation) : 필요한 양보다 더 큰 메모리가 할당이 되어서 할당 된 메모리 내부에 사용하는 메모리 공간 이외에 사용하지 않은 메모리 공간이 발생 했을 때를 말한다.

  • 외부 단편화 (External Fragmentation) : 메모리가 할당이 되고 해제가 되는 작업이 반복될 때 작은 단위의 메모리가 띄엄띄엄 존재하게 되는데, 빈 메모리의 전체 공간은 충분한 양이지만 실제로 사용할 수 없는 경우를 말한다.

**<해결 방법>**

  • 압축 (Compaction) : 메모리 공간들을 재배치 하여, 단편화로 인해 분산되어 있는 메모리 공간들을 하나로 합치는 기법

  • 통합 (Coalescing) : 단편화로 인해 분산된 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법
    압축은 재배치가 일어나지만, 통합은 인접한 공간들끼리 통합된다는 차이가 있음!

  • 페이징 (Paging) : 사용하지 않는 프레임을 페이지에 옮기고 (swap-out), 필요한 메모리를 페이지 단위로 프레임에 옮기는 (swap-in) 기법 (중기 스케줄링)

    • 가상 메모리 사용, 외부 단편화 해결 (내부 단편화는 해결되지 않음)
    • 보조기억장치를 이용한 가상 메모리(Virtual Memory)를 같은 크기의 블록으로 나눈 것을 페이지(Page)라고 한다.
    • 주 기억장치를 페이지와 같은 크기로 나눈 것을 프레임(Frame)이라고 한다.
  • 세그멘테이션 (Segmentation) : 가상 메모리를 사용한다는 것으로는 페이징 기법과 유사하지만, 같은 크기로 나누지 않고 서로 다른 크기로 나누며 단위는 세그먼트(Segment)라고 한다. 이를 이용한 메모리 관리 기법

    • 가상 메모리 사용, 내부 단편화 해결 (외부 단편화는 해결되지 않음)

★ 멀티 코어 프로그래밍 (Multi-core programming)
하나의 작업을 위해 여러 개의 CPU 코어를 사용하기 위해 코드를 작성하는 작업

**<멀티 코어를 활용할 수 있는 프로그래밍 기법>**

  • 멀티 스레드
  • 멀티 프로세스
  • OpenMP(Open Multi-Processing) : 공유 메모리 다중 처리 프로그래밍 API
  • C++ ox PPL(병렬 패턴 라이브러리)
  • Intel TBB
profile
사랑아 컴퓨터해 ~

0개의 댓글