공부방

운영체제 본문

네트워크&클라우드

운영체제

코딩 화이팅 2023. 5. 30. 18:02

운영체제(OS, Operating System)란?

  • 하드웨어 바로 윗단에 설치되는 소프트웨어
  • 사용자의 하드웨어, 시스템 자원을 제어하고 프로그램에 대한 서비스를 지원

운영체제의 기능과 역할

  • 자원관리
  • 자원보호
  • 인터페이스 제공

운영체제의 구조

  • 커널과 인터페이스
  • 인터페이스를 통해 사용자와 소통
  • 운영체제의 핵심적인 기능들은 커널 안에 존재
  • 시스템 콜
    • 사용자의 직접 접근 차단
    • 사용자 모드와 커널 모드를 구분해서 명령어를 실행
    • 중요한 명령어는 커널모드만 사용할 수 있도록 제한
  • 드라이버
    운영체제와 하드웨어 사이의 인터페이스

운영체제의 분류

  • 싱글 태스크 : 한번에 하나의 작업만 처리
  • 멀티 태스크 : 한번에 여러 개의 작업 처리 가능
  • 일괄 처리(batch processing) : 작업이 주어지며누 바로 처리하지 않고 일정량 모이면 처리, 응답 시간 느림
  • 시분할(time sharing) : 여러 작업을 처리할 때 아주 작은 단위로 쪼개서 번갈아가며 처리, 응답시간이 빠름
  • 실시간(real time) : 정해진 시간(데드라인) 내에 반드시 작업이 종료됨을 보장
    • Hard : 시간 제한 위반시 위험한 사건 발생
    • Soft : 시간 제한 위반해도 위험하지 않음

컴퓨터 시스템의 구조

내부 장치

  • CPU
  • 메모리

외부 장치

  • 입출력(I/O)장치
    • 키보드
    • 모니터
    • 프린터
  • CPU에도 레지스터라는 저장장치 존재
  • 하지만 용량이 매우 작아 정보를 메모리에 저장해두고 필요한 정보를 메모리에서 읽어옴

CPU와 입출력

  • 컴퓨터에 대한 연산은 CPU가 처리한다.
  • 그러나 I/O 장치의 연산을 CPU가 처리하지는 않음. I/O 장치 각각의 컨트롤러가 처리

인터럽트

CPU가 프로그램을 실행하고 있을 때 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려서 처리할 수 있도록 하는 것

인터럽트 사용 이유

  • CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때
    I/O 연산 처리, 어떤 프로그램이 CPU를 너무 오래 사용하고 있다거나, 오류 발생

인터럽트 종류

  • 하드웨어 인터럽트
  • 소프트웨어 인터럽트

하드웨어 인터럽트

  • 하드웨어(I/O 장치) 컨트롤러가 CPU의 서비스를 받기 위해 발생시킨 인터럽트
  • 외부 인터럽트

소프트웨어 인터럽트

  • CPU 내부에서 발생한 인터럽트
  • 프로그램에서 예외 발생
    프로그램에 허용되지 않은 연산을 하려고 하면 발생(0으로 나누기, 프로그램에 허용되지 않은 메모리 영역 참조 등)
  • 특별한 상황 발생(시스템 콜, System call)
    사용자 프로그램이 운영체제의 서비스를 요청할 때, 사용자 프로그램은 직접 특권 명열을 실행할 수 없으므로 운영체제의 커널 호출
  • 인터럽트를 발생시킨 주체가 소프트웨어

인터럽트 처리 과정

인터럽트 처리 루틴

  • 인터럽트 벡터
    여러가지 인터럽트에 대해 해당 인터럽트가 발생했을 때 실행해야 할 서비스 루틴의 주소 테이블
  • 인터럽트 서비스 루틴(언터럽트 핸들러)
    실제 인터럽트를 처리하기 위한 절차(기계어 코드), 운영체제마다 이미 프로그래밍 되어 있는게 대부분

프로세스 관리

프로세스

실행중인 프로그램

프로그램vs프로세스

  • 프로그램 : 보다 정적인 개념, hdd나 ssd에 저장된 실행 파일을 의미
  • 프로세스 : 보다 동적인 개념, 컴퓨터의 자원(cpu, 메모리)을 할당 받아서 실행중인 프로그램을 의미

디스크에 있는 프로그램이 메모리에 로드되면 프로세스가 된다.

프로세스의 상태

프로세스 상태

  1. New : 프로세스가 새로 생성된 상태
  2. Ready : 프로세스가 CPU에 할당되기를 기다리는 상태(실행 준비 완료)
  3. Running : 프로세스가 CPU에 할당되어 명령을 실행하는 상태
  4. Watitng : 프로세스가 I/O나 어떠한 이벤트를 기다리는 상태, CPU를 할당해도 당장 실행 불가능
  5. Terminated : 프로세스가 실행을 마쳤을 때, 아직 완전히 제거되지는 않음

프로세스의 구조

프로세스 제어 블록(PCB)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스 별로 보유하고 있는 정보 묶음
  • 커널에 존재

가지고 있는 정보들

  • 프로세스 ID : 프로세스 식별자
  • 프로그램 카운터 : 실행해야 할 명령어의 주소를 가리키는 포인터(프로그램의 몇 번째 줄을 실행?)
  • 프로그램 스택(함수 호출, 재귀 함수)
  • 레지스터의 값

문맥 교환

  • 프로세스가 실행되다가 인터럽트 등에 의하여 CPU를 다른 프로세스에게 넘겨주는 과정
  • 프로세스 A-> 프로세스 B로 바뀜, 문백 교환 발생
  • CPU가 가지고 있는 PCB 정보가 바뀌게 된다. 그래서 문맥교환이 자주 일어나면 CPU의 부하가 크다.

프로세스의 개념

  • 여러 개의 프로세스를 실행할 수 있는 것은 좋지만 부하가 크다->멀티 쓰레드(Thread)라는 개념 등장
  • Thread
    • 프로세스 안에서의 실행 흐름 단위
    • 전통적인 프로세스는 한 개의 쓰레드로 구성(싱글 쓰레드)
    • 프로세스는 여러 개의 쓰레드로 구성될 수 있음(멀티 쓰레드)
    • 쓰레드는 프로세스 안에서 같은 자원을 공유할 수 있음
      • 아까 보았던 프로세스의 구조에서 스택 영역을 제외한 나머지 영역은 쓰레드들끼리 서로 공유 가능
      • 스택 영역은 각자의 쓰레드가 독립적으로 유지

멀티쓰레드의 장점

  • 문맥교환이 적게 일어나므로 메모리의 부하가 줄어든다.
  • 쓰레드는 프로세스 내의 스택 영역을 제외한 모든 자원을 공유하기 때문에 쉽게 공유할 수 있다.
    프로세스들은 독립적이기 때문에 프로세스들끼리 데이터를 공유하는 것이 어려움
  • 반응성 증가

멀티쓰레드의 단점

같은 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.(데드락, 교착 상태)

데드락(교착 상태)

두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리면서 결과적으로 아무것도 완료되지 못하는 상태

스케줄링

  • 다중 프로그래밍 상황에서 CPU 이용률을 최대하하기 위해 항상 프로세스를 실행 중에 있게 하는 것
    CPU는 일반적으로 시스템 내에 하나밖에 없으므로 여러 프로그램이 동시에 실행되는 시분할 환경에서 최대한 효율적으로 관리되어야 한다.
  • 전문적으로 어떤 프로세스를 CPU에게 할당할지를 결정하는 개념이 필요하게 되어 등장한 것이 스케줄러

스케줄러

  • 스케줄러는 준비 상태에 있는 프로세스등 중에 하나를 선택하여 CPU를 할당한다.
    • 준비 상태에 있는 스케줄러들은 Ready Queue라는 구조 안에 저장된다.
      • FIFO 방식의 큐가 아니어도 된다. 우선순위 큐, 트리 등
  • 스케줄러 방식에는 비선점형 방식과 선점형 방식이 존재
  • 비선점형 방식 : CPU를 획득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 빼앗기지 않는 방식
  • 선점형 방식 : 다른 프로세스가 원하면 CPU를 강제로 빼앗아서 사용할 수 있는 방식
    대신 문맥 교환이 발생하므로 오버헤드 증가

스케줄링 방법 종류

FCFS, First Come First Served(선입 선처리 방식)

  • 비선점형 스케줄링
  • CPU 할당을 먼저 요청한 프로세스가 먼저 할당을 받는 방식(순서대로)
  • 큐를 이용해서 간단히 구현

SJF, Shortest Job First

  • 작업 시간이 제일 짧은 것부터 처리하는 방식
  • 선점형, 비선점형 둘 다 가능
    • 작업 시간이 오래 걸리는 프로세스를 처리하고 있는데, 작업시간이 잛은 프로세스가 왔다.
      • CPU를 넘겨준다 : 선점형
      • CPU를 넘겨주지 않는다 : 비선점형
  • 처음에는 실행시간이 16만큼 걸리는 P1만 있다고 가정
    • 바로 뒤에 실행시간이 4인 P2가 온다 -> P1은 CPU를 P2에게 넘겨준다.
    • 그 뒤에 실행시간이 4인 P3이 온다 -> 다음 차례는 P3
    • 그 뒤로도 P1보다 실행시간이 짧은 프로세스만 온다면? P1은 영원히 작업을 처리하지 못하게 될 것이다.
      이 상황을 기아 상태라고 한다.

기아 상태

처리 시간이 긴 프로세스는 무한정 기다리는 상태로 남게 된다.

에이징 기법

  • 프로세스가 기다린 만큼 우선순위를 부여함
  • 전에 오래 기다린 적이 있는 프로세스는 우선순위가 높아지므로 처리시간이 길더라도 우선적으로 처리될 수 있음

Priority(우선순위 스케줄링)

  • 각 프로세스마다 특정한 기준에 따른 우선순위 부여
  • 만약 우선순위가 같다면 FCF5 방법을 이용하여 먼저 도착한 프로세스부터 처리할 수 있음

SJF도 일종의 우선순위 스케줄링 방법

  • 우선 순위 부여 기준->작업 시간
  • 기아 문제 발생, 에이징 기법으로 해결 가능

Round Robbin(RR, 라운드 로빈)

  • 일정 시간(Time Slice)를 정하여 각각의 프로세스가 이 정해진 시간동안 CPU를 정유하도록 하는 방식
  • 문맥교환이 일정 시간마다 계속 일어나므로 선점형 방식
  • Time Slice를 너무 작게 설정하면 문백교환이 많아 일어나므로 오버헤드 증가
  • 인터랙티브한(대화형) 운영체제에 유용

Multi Level Queue(멀티 레벨 큐)

  • 큐를 여러 개 사용해서 각 큐에 특정한 기준에 따른 우선순위 부여
  • 각 큐는 자신의 스케줄링 알고리즘을 가지고 있도록 함
  • 각 큐 사이에 절대적인 우선순위 존재

 

'네트워크&클라우드' 카테고리의 다른 글

서버관리  (0) 2023.06.01
데이터베이스MySQL  (0) 2023.05.31
네크워크  (0) 2023.05.30