운영체제_스레드 & CPU스케쥴링

황호준·2023년 5월 14일

CS

목록 보기
3/29

스레드

스레드란 ?

  • 하나의 프로세스 내에서 여러 개의 실행 흐름(단일,동시적,병렬적)을 두어 작업을 효율적으로 처리하기 위한 모델
  • 프로그램 실행하면 JVM이 시작되고JVM이 시작되면 자바 프로세스가 시작된다. 이때 프로세스 안에 스레드가 있다. 여러 프로세스가 공유하는 하나의 스레드가 수행되는 일은 없고, 어떤 프로세스든 하나 이상의 스레드가 수행된다.
  • 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 하며 멀티 스레드는 주어진 자원을 극한으로 사용하기 위한 모델이다.

멀티스레드의 구조

장점 :

  • 응답성 : 작업을 분리해서 수행하므로 다른 작업이 끝나지 않아도 실시간으로 응답을 한다.
  • 자원 공유 : 스레드는 자신이 속한 프로세스 내의 스레드들과 메모리나 자원을 공유하여 효율적으로 사용가능(프로페스는 공유 메모리나 메시지 패싱을 통해 해야함)
  • 경제성 : 프로세스를 새로 생성하는 비용보다 스레드를 새로 생성하는 것이 훨씬 싸다.
  • 확장성 :한 프로세스를 여러 프로세스에서 수행할 수 있으므로 훨씬 효율적이다.

단점:

  • 자원을 공유하기에 동기화 문제가 발생할 수 있다.(병목현상,데드락 등)
  • 주의 깊은 설계가 필요하고 디버깅이 어렵다.(불필요 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생)
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받음
  • 단을 프로세스 시스템의 경우 효과를 기대하기 어려움

멀티프로세스 vs 멀티 스레드.

  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.

CPU스케줄링

스케쥴러란 ?
어떤 프로세스에게 자원을 할당할지를 결정하는 운영체계 커널의 모듈을 지칭

장기 스케줄링(작업 스케쥴러)

  • 어떤 프로세스를 준비 큐에 삽입할지 결정(메모리와 디스크 사이의 스케쥴링을 담당) , 디스크에서 하나의 프로그램을 가져와 커널에 등록하면 프로세스가 되는데,이때 디스크에서 어떤 프로그램을 가져와 커널에 등록할지 결정

중기 스케줄링

  • 너무 많은 프로세스에게 메모리를 할당해서 시스템의 성능이 저하되는 경우 이를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러
    ※메모리에 올라와 있는 프로세스 중 일부의 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장

    스왑 아웃(swap out)
    중기 스케줄러의 등장으로 프로세스의 상태에는 중지 상태가 추가되었으며, 중지 상태의 프로세스는 메모리를 통째로 빼앗기고 디스크로 스왑 아웃된다.

    • 중지 준비 상태 : 준비 상태의 프로세스가 중기 스케줄러에 의해 디스크로 swap out
    • 봉쇄 중지 상태 : 봉쇄 상태의 프로세스가 중기 스케줄러에 의해 디스크로 swap out
    • 중지 봉쇄 상태이던 프로세스가 봉쇄 되었던 조건을 만족하게 되면 이 프로세스의 상태는 중지 준비 상태로 바뀌게 된다 중지 상태에 있는 프로세스들은 중지 준비 상태이든 중지 봉쇄 상태이든 관계없이 메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재하게 된다.
    • 스와핑(Swapping) : 일부 프로세스를 메모리에서 디스크로 보내고(swap-out), 시간이 흘러 메모리에 여유가 생기면 다시 적재(swap-in)한다-

단기 스케줄링(CPU 스케쥴러)

  • 준비 상태의 프로세스 중에서 어떤 프로세스를 다음 순서로 실행할 것인지 결정(cpu와 메모리 사이의 스케쥴링을 담당)
    • 일반적으로 스케줄러 = 단기 스케줄러
    • 단기 스케줄러는 미리 정한 스케줄링 알고리즘에 따라 cpu를 할당할 프로세스를 선택
    • 단기 스케줄러는 밀리 세컨드(ms) 이하의 시간 단위로 매우 빈번하게 호출 -> 수행 속도가 충분히 빨라야 함
profile
기록 블로그

0개의 댓글