운영체제

Cramming An·2022년 7월 26일
0

JS Interview

목록 보기
3/7
post-thumbnail

1. 운영체제 개요

운영체제 란?

사용자가 컴퓨터를 쉽게 다루고, 효율적으로 컴퓨터 자원을 사용할 수 있도록 도와주는 시스템 소프트웨어 -> 사용자가 하드웨어 몰라도 쉽고, 효율적으로 사용가능하게 도와줌.

운영체제 역할

  • 프로세스 관리
  • 저장장치 관리
  • 네트워크 관리
  • I/O 관리

운영체제 모드

  • 유저모드: 어플리케이션 프로그램 수행
  • 커널모드: 인터럽트 -> 운영체제 호출 모드 (CPU 명령)

2. 인터럽트

프로그램 실행 도중 예기치 못한 상황이 벌어졌을 때, 현재 실행 중인 작업을 종료하고, 발생한 상황에 대한 우선적인 처리가 필요함을 CPU에 알리는 작업

외부 인터럽트

  • 전원 이상
  • I/O 인터럽트
  • 타이머 인터럽트

내부 인터럽트

  • Exception 인터럽트: CPU가 명령어를 실행할 수 없을 때

S/W 인터럽트

  • SVC (SuperVisor Call): User task에서 필요하지만 할 수 없는 일 할 때, 운영체제에게 부탁 (ex. hardware 접근)

3. 프로세스

프로세스와 스레드 차이

프로세스

  • 정의: 프로그램의 인스턴스 -> 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU 할당을 받음 -> 운영체제로 부터 독립적인 주소공간 할당받음
  • 프로세스 주소공간:
    • Code
    • Data
    • Heap
    • Stack
  • PCB(프로세스 제어 블록): 프로세스의 중요한 정보를 담고있는 운영체제 데이터 구조 -> 프로세스 전환이 발생할 때, 프로세스 정보를 PCB에 저장하고 CPU 반납 -> 다시 프로세스 할당받으면 PCB에서 정보를 불러온 후 실행

스레드

  • 정의
    • 한 프로세스 내에서 동작되는 실행 단위
    • 자원 공유
    • 스택, PC 레지스터 독립적
  • 스택이 독립적인 이유:
    • 스택은 함수 매개 변수, 복귀 주소, 로컬 변수 -> 함수실행이 필요
    • 독립적인 함수 호출을 위함 -> 독립적인 실행 단위
  • PC 레지스터가 독립적인 이유:
    • PC 값은 스레드가 명령을 어디까지 수행했는지 알려줌
    • 스레드는 연속적으로 수행 못 함 -> 스케줄러가 중간에 스레드에 할당받은 CPU 선점 -> 어디까지 수행했는지 기억해야함
  • 멀티스레드: 프로세스들로 동시에 처리하던 일을 스레드로 동시에 처리
    • 장점:
      • 메모리 공간, 자원 소모 줄임
      • 스레드간 통신 편리: Data나 Heap 사용
      • 스레드 context switch: 캐시 메모리 비울 일 없음
    • 단점:
      • 공유되는 자원 동기화 필요 -> 작업 처리 순서, 공유 자원 접근 관리 -> 병목현상 발생할 수도 있다.
      • 오류로 하나의 스레드 종료되면 모든 스레드 종료 될 수 있다.

프로세스 스케줄러

  • 정의: Job, Ready, Device 큐에 프로세스를 넣고, 빼주는 역할

장기 스케줄러

  • 정의: 디스크와 메모리 사이의 스케줄링 -> 대용량 메모리에서 어떤 프로세스에 메모리를 할당하고, Ready Queue에 들어갈지 판단

단기 스케줄러 (CPU Scheduler)

  • 정의: CPU와 메모리 사이의 스케줄링 -> Ready Queue에 존재하는 어떤 프로세스를 running(CPU 할당) 시킬지 판단 -> scheduler dispatch

중기 스케줄러

  • 정의: 메모리 여유 공간의 위해 메모리에 올라간 프로세스 deallocate

4. CPU 스케줄러

  • 정의: Ready Queue에 있는 프로세스 중 실행시킬 프로세스 선택하는 작업

스케줄링 목표

  • Batch system(한 번에 하나의 프로그램): 가능하면 많은 일
  • Interactive system(사용자와 컴퓨터간 대화형): 빠른 응답시간
  • Real time system(시간이란는 제약): 데드라인

비선점 스케줄링

  • 프로세스 종료나 입출력 이벤트 있을 때 까지 실행 보장

1) FCFS (First Come First Served)

  • 순서대로
  • Convoy effect: CPU Burst Time 긴게 앞으로 가면 average waiting time 길어짐

2) SJF (Shortest Job First)

  • CPU Burst Time 짧은 프로세스 앞으로
  • 단점
    • starvation (무한히 기다림): 사용시간이 긴 프로세스가 지나치게 차별받음
    • 각 프로세스의 CPU Burst Time을 알기 어렵다.

3) HRN (Highest Response-ratio Next)

  • 우선순위 대로 정렬
  • 우선순위 = (대기시간 + 실행시간) / 실행시간

선점 스케줄링

  • OS가 실행중인 프로세스의 CPU를 선점할 수 있다.

Priority Scheduling

  • 우선 순위가 높은 프로세스 먼저 스케줄링 (우선순위: OS 내적/외적으로 정해짐 -> 정수로 표현되고, 작을수록 높다.)
  • 선점, 비선점 두 가지 방식으로 사용가능
  • 단점
    • starvation
  • 해결책
    • Aging: 우선 순위가 낮아도, 오래 기다리면 우선순위 높이기
  • 구조: 각 Priority로 큐가 이루어짐 -> 하나의 Priority 안에 ready 상태의 프로세스들이 있다. => 근데, 같은 Priority를 가진 프로세스들은 어떻게 스케줄링 될까? -> Round Robin

Round Robin

  • Robin 이라는 새는 새끼들에게 먹이를 조금씩 다 주고, 그것을 반복
  • FCFS의 preemptive version
  • 각 프로세스는 동일한 크기의 Time quantum (할당시간) 갖는다.
  • Time quantum 끝나면 프로세스 선점 당함 -> ready queue 맨 뒤로 보내짐
  • Time quantum 작을 수록 context switching 많아짐 (CPU burst의 80% 가 적당)
  • 장점:
    • 프로세스가 기다리는 시간이 CPU burst time 만큼 증가한다.
    • 어떤 프로세스도 (n - 1) * q 이상 기다리지 않는다.
    • 각 프로세스의 CPU brust time이 랜덤할 때 효율적
  • 주의할 점
    • Time quantum 너무 커지면 -> FCFS
    • Time quantum 너무 작아지면 -> context switching 자주 발생

📌 동기와 비동기

  • 메소드를 실행시킴과 동시에 return 값을 기대되는 경우 -> 동기
  • 그렇지 않은 경우 -> 비동기

5. 동기화

Critical Section

  • 동일한 자원을 동시에 접근하는 코드 영역
  • 따라서 각 프로세스나 스레드가 Critical Section을 함께 사용하기 위해 수행 순서를 정해줘야 함 (한순간에 하나의 프로세스만 진입 -> 독점 필요)

Race condition

  • 2개 이상의 concurrent 한 스레드들이 공유된 자원에 접근할 때, 동기화 없이 접근하려는 상황

1) Lock

  • critical section에 하나의 프로세스만 들어가도록 lock, unlock 하는 것
  • busy-waits: lock이 걸리면(held1 이면) 무한루프 돌다가, 다른 프로세스로 넘김 -> 무한루프를 도는 과정이 비효율적임
  • 단점: held1로 업데이트 하기 전에 인터럽트 걸리면 작동 x

2) Mutex Lock

  • Lock을 이용해 동기화 문제 해결
  • 단점:

3) Semaphores

  • 소프트웨어 상에서 Critical Section 문제 해결을 위한 동기화 도구
  • Semaphore: 깃발이라는 뜻 -> 공유된 기차 선로 -> 깃발로 기차 안전 보장
  • shared data: 0개 이면 0, 1개이면 1, ... , n개이면 n
  • Binary semaphore: 0과 1의 값만 갖는 경우 -> Mutex
  • Counting semaphore: 가용가능한 갯수를 가진 자원 접근 할 때 사용 (0~n) -> 가용된 자원 갯수로 초기화 (n) -> 자원 접근하면 semaphore 감소

Semaphore 접근함수

  • 자원을 사용하고, 반납하는 방법 -> wait(), signal()

Busy Waiting

  • 해결방법: Critical Section 진입에 실패한 프로세스 Block 후, 자리가 날 때 깨우는 방식

Deadlock

  • 2개 이상의 프로세스가 Critical Section 진입을 기다리고, Critical Section에서 실행되는 프로세스는 대기 중인 프로세스가 실행되야만 빠져나올 수 있는 상태

구현

6. 메모리 관리 전략 - 작성중

  • 배경: 각각의 프로세스는 메모리에 독립적인 공간을 가지고 있지만, 운영체제 혹은 다른 프로세스의 공간에는 접근할 수 없다. 유일하게 모든 메모리에 접근가능한 것 => 운영체제

1) Swapping

  • 메모리 관리를 위해 한 프로세스가 가지는 메모리 공간 전체를 secondary storage로 보내버림 (swap-out)
  • 다시 메모리로 가져오는 것 (swap-in) -> 시간 오래 걸림

Swapping vs Virtual Memory Management

  • Swapping 은 프로세스 단위, VMM은 paging 단위 swapping.

Reference

profile
La Dolce Vita🥂

0개의 댓글