[CS] 운영체제 (3)

young-gue Park·2023년 11월 8일
0

CS

목록 보기
10/18
post-thumbnail

⚡ 운영체제 (3)


📌 스레드와 멀티스레딩

⭐ 스레드

🔷 프로세스의 실행 가능한 가장 작은 단위

  • 프로세스는 여러 스레드를 가질 수 있다.
  • 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와는 달리 스레드는 코드, 데이터, 힙을 스레드끼리 서로 공유한다. 그 외의 영역은 각각 생성된다.

⭐ 멀티스레딩

🔷 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법

  • 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.
  • 새 프로세스 생성 대신 스레드를 사용하는 웹 서버는 훨씬 적은 리소스를 소비하고 작업의 중단 없이 빠른 처리가 가능하다.
  • 동시성에 장점을 갖고 있다.
  • 다만 한 스레드에 문제가 생길 때 연쇄적으로 다른 스레드에도 영향을 끼친다는 단점이 있다.

💡 동시성
서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것


📌 공유 자원과 임계 영역

⭐ 공유 자원 (Shared Resource)

🔷 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 메모리, 파일, 데이터 등의 자원이나 변수

🔷 경쟁 상태 (race condition)

  • 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황
  • 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있다.

⭐ 임계 영역 (Critical Section)

🔷 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역

🔷 임계 영역을 해결하기 위한 방법은 크게 세 가지가 있으며 모두 잠금(lock) 매커니즘을 기반으로 한 상호 배제, 한정 대기, 융통성이란 조건을 만족한다.

🌈 화장실로 알아보는 임계 영역 해결 세 가지 조건
상호 배제: 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다. (문 잠금)
한정 대기: 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 된다. (나도 똥 좀 싸자!!)
융통성: 한 프로세스가 다른 프로세스의 일을 방해해서는 안 된다. (나오던 똥도 안나오니까 조용히 해라!)

🔷 임계 영역 해결 방법 세 가지

  1. 뮤텍스(Mutex)
  • 프로세스나 스레드가 공유 자원을 lock()을 통해 잠금 설정하고, 사용한 후에는 unlock()을 통해 잠금 해제하는 객체
  • 잠금이 설정되면 다른 프로세스나 스레드는 해제 전까지 잠긴 코드 영역에 접근할 수 없다.


  1. 세마포어(Semaphore)
  • 일반화된 뮤텍스로서 간단한 정수 값과 두 가지 함수 wait(또는 p 함수), signal(또는 v 함수)로 공유 자원에 대한 접근을 처리한다.

wait(): 자신의 차례가 올 때까지 기다리는 함수
signal(): 다음 프로세스로 순서를 넘겨주는 함수

  • 세마포어에는 조건 변수가 없고, 프로세스나 스레드가 세마포어 값을 수정할 때 다른 프로세스나 스레드는 동시에 세마포어 값을 수정할 수 없다.

1) 바이너리 세마포어

  • 0과 1의 두 가지 값만 가질 수 있는 세마포어
  • 구현은 뮤텍스와 유사하지만 뮤텍스가 잠금 기반이라면 세마포어는 신호 기반이라는 점에서 다르다.

2) 카운팅 세마포어

  • 여러 개의 값을 가질 수 있는 세마포어
  • 여러 자원에 대한 접근을 제어하는 데 사용

  1. 모니터
  • 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공한다.

  • 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면에, 세마포어에서는 상호 배제를 명시적으로 구현해야 하는 차이점이 있다.


⭐ 교착 상태 (Deadlock)

🔷 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태

  • 한 화장실을 두고 먼저 똥 싸려 하는 두 사람과 같다. (양보가 쉽지 않다.)

🔷 교착 상태의 원인

  1. 상호 배제
  • 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들의 접근을 불허한다.
  • 3대 1000을 치는 사람이 혼자서 화장실을 독차지하고 들어오는 족족 팬다.
  1. 점유 대기
  • 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태이다.
  • 그 남자 앞에서 오래 참아서 너무 급하다고 무릎 꿇고 빌고 있다.
  1. 비선점
  • 다른 프로세스의 자원을 강제로 가져올 수 없다.
  • 3대 1000치는 남자를 제끼고 들어갈 순 없는 법이다.
  1. 환형 대기
  • 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황을 말한다.
  • A: 나 그냥 니네 집에서 쌀래. B: 나는 니네 집에서 싸려 했는데?

🔷 교착 상태의 해결 방법

  1. 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계한다.
  • 각자 다른 화장실을 주자.
  1. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원할당 가능 여부를 파악하는 은행원 알고리즘을 사용한다.

💡 은행원 알고리즘
총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정 또는 불안정 상태로 나누고 안정 상태로 가도록 자원을 할당하는 알고리즘

  • 국민은행 화장실 청소아주머니: 지금은 화장실 칸이 널널하니 전부 들어가세요.
  1. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한 개씩 지운다.
  • 3대 1000을 치는 남자가 화장실을 독점하다 검거되었다.
  1. 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 크다. 그래서 현재 운영체제는 이런 상태가 발생하면 사용자가 작업을 종료하게 유도한다. 그 빡치는 '응답없음'의 이유 중 하나가 이런 교착 상태이다.
  • ???: 화장실 사람 많다고 관리 직원을 배치해??? 다른 곳에 가서 싸든 바닥에 싸든 하라 하고 직원은 빼!!!

📌 CPU 스케줄링 알고리즘

⭐ CPU 스케줄러와 CPU 스케줄링 알고리즘

🔷 CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야하는 일을 스레드 단위로 CPU에 할당한다.

  • 프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.

  • 이 알고리즘의 목표는 다음과 같다.

  1. CPU 이용률은 높인다.
  2. 주어진 시간에 많은 일을 한다.
  3. 준비 큐(Ready queue)에 있는 프로세스는 적게 유지한다.
  4. 응답 시간은 짧게 설정한다.

⭐ 비선점형 방식

🔷 프로세스가 스스로 CPU 소유권을 포기하는 방식

  • 강제로 프로세스를 중지하지 않고 컨텍스트 스위칭으로 인한 부하가 적다.
  1. FCFS(First Come, First Served)
  • 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘
  • 프로세스가 길게 수행 되어 준비 큐에서 오래 기다리는 현상이 발생할 수도 있다.

💡 Convoy Effects
CPU 사용시간이 긴 프로세스에 의해 사용시간이 짧은 프로세스들이 오래 기다리는 현상으로"호위 효과 ” 라고도 하며, 이로 인해 평균 대기시간이 길어지게 된다.

  1. SJF(Shortest Job First)
  • 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘

  • 긴 시간을 가진 프로세스가 실행되지 않는 현상(starvation)이 일어나며 평균 대기 시간이 가장 짧다.

    💡 실제로는 실행 시간을 알 수 없기 때문에 과거의 실행 시간을 토대로 추측해서 사용한다.

  1. 우선순위
  • 기존 SJF 스케줄링의 starvation을 보완하기 위해 오래된 작업일수록 우선 순위를 높이는 방법(aging)을 사용한 알고리즘

⭐ 선점형 방식

🔷 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식

  • 현대 운영체제가 쓰는 방식이다!

1. 라운드 로빈(RR, Round Robin)

  • 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링(priority scheduling)의 일종
  • 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 간다.
  • 일반적으로 전체 작업 시간은 길어지지만 평균 응답 시간은 짧아진다.
  • 로드밸런서에서 트래픽 분산 알고리즘으로도 쓰인다.

💡 로드밸런서
서버에 가해지는 부하(=로드)를 분산(=밸런싱)해주는 장치 또는 기술,
한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보이게 한다.

2. SRF

  • 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘

3. 다단계 큐

  • 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것
  • 프로세스 이동이 안 되므로 스케줄링 부담이 적지만 유연성이 떨어진다.

profile
Hodie mihi, Cras tibi

0개의 댓글