Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

운영체제 면접 질의 정리 #27

Open
simoniful opened this issue May 4, 2022 · 0 comments
Open

운영체제 면접 질의 정리 #27

simoniful opened this issue May 4, 2022 · 0 comments
Labels

Comments

@simoniful
Copy link
Owner

simoniful commented May 4, 2022

1. 운영 체제란 무엇입니까?

운영 체제는 컴퓨터 하드웨어가 컴퓨터 소프트웨어와 통신하고 작동하도록하는 소프트웨어 프로그램이다.

2. 운영 체제의 주요 목적은 무엇입니까?

운영 체제에는 두 가지 주요 목적이 있다.

  1. 컴퓨터 시스템의 계산 활동을 관리하여 컴퓨터 시스템이 제대로 작동하도록 한다.
  2. 프로그램 개발 및 실행을 위한 환경을 제공한다.

3. 프로세스란 무엇을 의미합니까?

컴퓨터에서 실행되고 있는 프로그램을 프로세스라고 한다.
두 가지 유형의 프로세스가 있다. 운영 체제 프로세스, 사용자 프로세스

  • 프로세스의 특징

    • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
    • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
    • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
    • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)

4. 스레드(Thread)는 무엇입니까? 🔥🔥

스레드는 CPU 사용의 기본 단위이다. 프로세스 내에서 실행되는 여러 흐름의 단위를 말한다.
스레드는 스레드 ID, 프로그램 카운터, 레지스터 세트 및 스택으로 구성된다.

→ 운영체제는 자원을 효율적으로 사용하려고 한다. 스레드를 사용하면 프로세스보다 생성할 때 오버헤드도 적고 공유된 자원에 대해서도 오버헤드가 적다. 그리고 병렬성을 높일 수 있다.

1. 스레드의 특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

2. 프로세스와 스레드의 차이?

  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
  • 프로세스는 운영체제로부터 메모리, 주소 공간 등을 할당받고 쓰레드는 할당받은 자원들을 내부 스레드끼리 공유하면서 실행된다.
    • 프로세스는 실행 중인 프로그램으로 다른 프로세스와 상관없이 독립적으로 자원을 할당 받는다.
    • 스레드는 경량화된 프로세스로 프로세스 안에 존재한다. 각 스레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유한다.
  • 스레드를 사용하는 이유
    • 운영체제에서 더 효율적으로 시스템 자원을 관리하기 위해 사용된다고 할 수 있다.
    • 멀티 프로세스로 진행되는 작업을 멀티 쓰레드로 수행하게 되면 시스템 콜이 줄어들기 때문에, 자원을 효율적으로 관리 할 수 있고 프로세스의 통신비용보다 쓰레드간 통신 비용이 적다는 이점도 있다.
    • 단 스레드간의 자원공유는 전역변수를 이용하므로 동기화 문제에 신경을 써야하며 멀티스레드 프로그래밍은 프로그래머의 주의를 요구한다.

3. 스레드의 장점?

  • 스레드는 프로세스보다 생성 및 종료시간, 스레드간 전환시간이 짧다.
  • 스레드는 프로세스의 메모리, 자원등을 공유하므로 커널의 도움없이 상호간의 통신이 가능하다.

4. 멀티 스레딩(Multi-threading) 의 장점과 단점은?

멀티 스레딩이란 하나의 프로세스를 다수의 스레드로 만들어 실행하는 것

  • 장점
    • 하나의 프로세스 내에 다수의 실행 단위들이 존재하여 작업의 수행에 필요한 자원들을 공유하기 때문에 자원의 생성과 관리가 중복되는 것을 줄일 수 있다.
  • 단점
    • 교착상태를 발생시킬 수 있다.
    • 동기화에 주의해야한다.

5. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 무엇입니까?

  • 쉽게 설명하면, 프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이다.
  • 자원의 효율성 증대
    • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
    • 프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크기 때문
    • 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
  • 처리 비용 감소 및 응답 시간 단축
    • 프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다. (스레드는 Stack 영역을 제외한 모든 메모리를 공유하기 때문)
    • 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다. (Context Switching시 스레드는 Stack 영역만 처리하기 때문)

6. 멀티 프로세싱과 멀티프로그래밍의 차이는?

멀티 프로세싱은 여러개의 처리장치(CPU)를 장착하여 동시에 여러 작업을 병렬로 실행하는 방법.
멀티 프로그래밍은 다수 개의 프로그램의 같이 주 기억장치에 있도록 한 방식.

5. 소켓이란 무엇입니까?

소켓은 두 응용 프로그램을 연결하는 데 사용된다. 연결의 끝점을 소켓이라고 한다.

6. 커널이란 무엇입니까?

커널은 OS의 모든 부분에 대한 기본 서비스를 제공하는 컴퓨터 운영 체제의 핵심이자 가장 중요한 부분이다.

7. 힙 영역과 스택영역의 차이점을 설명하시오.

프로그램이 실행되기 위해 프로그램이 메모리에 로드가 되어야한다. 따라서 운영체제에서 프로그램의 실행을 위해 다향한 메모리 공간을 제공한다. 코드, 데이터, 스택, 힙 영역이 할당되고 각 역할은 다음과 같다.

  • 코드 : 실행할 프로그램의 코드가 저장되는 텍스트 영역이다. CPU는 코드영역에서 저장된 명령어를 하나씩 가져가서 처리한다.
    데이터 : 전역변수와 정적변수가 이해 해당된다. 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸된다.
  • 스택 : 스택영역은 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역이다. 함수의 호출과 함께 할당되며, 함수의 호출이 종료될때 해제된다.
  • 힙 : 힙 영역은 사용자가 직접 관리할 수 있는 메모리 영역이다. 힙 영역은 사용자에 의해 메모리공간이 동적으로 할당되고 해제된다.

8. 운영 체제에서 페이징을 사용하는 것은 무엇입니까?

페이징은 운영 체제에서 외부 단편화 문제를 해결하는 데 사용된다. 이 기술을 사용하면 필요한 데이터를 최대한 빨리 사용할 수 있다.

9. 멀티 프로세서 시스템의 장점은 무엇입니까?

프로세서가 많을수록 처리량이 크게 증가한다. 리소스를 공유 할 수 있기 때문에 비용 효과적이다. 따라서 전반적인 안정성이 향상된다.

10. 가상 메모리(Virtual Memory)란 무엇입니까?

가상 메모리는 프로세스가 메모리 외부에서 실행될 수 있도록하는 매우 유용한 메모리 관리 기술이다. 이 기술은 실행 프로그램이 실제 메모리에 맞지 않을 때 특히 사용된다.

11. 교착 상태(DeadLock)이란? 🔥🔥

두 개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말한다.
교착 상태는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태이다.
과거 배치 처리 시스템에서는 일어나지 않는 문제이다. 프로세스, 스레드 둘 다 이와 같은 상태가 일어날 수 있다.

1. 교착 상태의 4 가지 필요 조건은 무엇입니까?

다음과 같은 4 가지 조건이 있다.

  1. 상호 배제(Mutual Exclusion) : 한 자원에 대한 여러 프로세스의 동시 접근은 불가능하다. 즉, 하나의 자원을 특정 시기에 하나의 프로세스나 스레드만 소유할 수 있는 형태.

  2. 점유와 대기(Hold and Wait) : 하나의 자원을 소유하고 다른 프로세스 혹은 스레드의 자원을 요청하는 상태이다.

  3. 비선점(Non preemptive) : 하나의 프로세스나 스레드에게 주어진 자원은 해당 프로세스나 스레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태. 즉, 다른 프로세스에서 자원을 사용하는 동안 자원을 강제로 가져올 수 없다.

  4. 환형 대기(Circle wait) : 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있는 것을 말한다. 두 개의 프로세스나 스레드의 경우, A -> B, B -> C, C -> A 에게 서로 자원을 요청하고 기다리는 상황

2. 교착 상태 해결 방법을 말하시오.

위의 4가지 조건들 중 하나라도 제거하면 된다. 예방, 회피, 탐지, 복구방법이 있다.

공유 자원 중 많은 경우가 한 번에 한 프로세스만 사용할 수 있기 때문에 상호배제 조건은 제거하기 어렵다. 대부분의 교착상태 방지 알고리즘은 순환대기가 발생하는 일을 막는데 초점이 맞춰져 있다.

  1. 예방(Prevention) : 교착상태가 발생하지 않도록 하는 것
  2. 회피(Avoidance) : 교착상태를 피하는 것. Ex) Dijkstra의 Banker’s Algorithm
  3. 탐지(Detection) : 교착상태가 발생하면 탐지 하는 것, 복구를 수반
  4. 복구(Recovery) : 프로세스 중지, 자원 선점(희생자의 선택-> 기아, 복귀)

3. Banker's algorithm 은 무엇입니까?

교착 상태를 피하기 위해 뱅커 알고리즘이 사용된다. E,J, Dijkstra가 제안한 방법으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래한 기법이다. 프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지를 사전에 검사하여 교착 상태를 회피하는 기법이다. 안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기한다. 은행은 더 이상 모든 고객의 요구 사항을 충족시킬 수없는 방식으로 가용 현금을 할당하지 않는 뱅킹 시스템에서 뱅커 알고리즘이라고 한다.

12. RAID 란 무엇입니까? RAID의 종류에 대해 말하시오.

RAID는 Redundant Array of Independent Disks의 약자이다. 전체 성능을 향상시키기 위해 동일한 데이터를 중복 저장하는 데 사용된다.

RAID 0-내결함성이없는 스트립 디스크 어레이
RAID 1-미러링 및 이중화
RAID 2-메모리 스타일 오류 수정 코드
RAID 3-비트 인터리브 패리
RAID 4-블록 인터리브 패리티
RAID 5-블록 인터리브 분산 패리티
RAID 6-P + Q 이중화

13. Sync 와 Async의 차이는 무엇입니까?

일반적으로 동기와 비동기의 차이는 메소드를 실행과 동시에 반환 값이 기대되는 경우를 동기 라고 표현하고 그렇지 않은 경우에 대해서 비동기 라고 표현한다.
동기에서 동시라는 의미는 실행 되었을 때 값이 반환되기 전까지는 blocking되어 있다는 것을 의미한다.
비동기의 경우, blocking되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task 를 위임하고 바로 다음 코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않는다.

14. 스풀링이란 무엇입니까?

스풀링은 장치, 프로그램 또는 시스템에서 데이터를 사용하고 실행하기 위해 일시적으로 데이터를 수집하는 프로세스이다. 인쇄와 관련이 있다. 다른 응용 프로그램이 동시에 출력을 프린터로 보내면 스풀링은 이러한 모든 작업을 디스크 파일에 보관하고 프린터에 따라 대기열에 넣는다.

15. 뮤텍스와 세마포어 🔥🔥

프로세스 혹은 스레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 스레드가 접근하는 경우에 문제가 발생한다. 이를 제어하기위해 스레드는 뮤텍스를 사용하고, 프로세스에서는 세마포어를 사용한다.

1. 뮤텍스란 무엇입니까?

  • 뮤텍스 : 상호배제라고도 하며, Critical Section을 가진 스레드의 Running Time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술이다. 뮤텍스는 상태가 0, 1 두개 뿐인 이진 세마포어. synchronized 또는 lock을 통해 해결한다.

2. 세마포어란 무엇입니까?

세마포어는 사용중인 리소스를 잠그는 데 사용되는 보호 된 변수 또는 추상 데이터 유형이다.
공유된 자원의 데이터를 여러 '프로세스'에서 접근하는 것을 막는다.
세마포어의 값은 공통 자원의 상태를 나타냅니다. 리소스 상태를 나타내는 간단한 카운터이다.
공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있다.

3. 뮤텍스와 세마포어의 차이?

가장 큰 차이는 동기화 대상의 갯수이다. 뮤텍스는 동기화 대상이 하나뿐이고, 세마포어는 동기화 대상이 하나 이상일 때 사용한다

16. 운영 체제에서 기아(Starvation) 란 무엇입니까?

특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태이다.
기아상태는 자원 관리 문제이다. 이 문제에서 대기중인 프로세스는 리소스가 다른 프로세스에 할당되어 있기 때문에 오랫동안 필요한 리소스를 얻지 못한다.

17. 운영 체제에서 에이징(Aging)는 무엇입니까?

에이징은 자원 스케줄링 시스템에서 기아를 방지하기 위해 사용되는 기술이다. 특정 프로세스의 우선순위가 낮아 무한정 기다리게되는 경우, 한번 양보하거나 기다린 시간에 비례하여 일정 시간이 지나면 우선순위를 한 단계씩 높여 가까운 시간 안에 자원을 할당받도록 하는 기법을 말한다.

18. 운영 체제에서 페이징(Paging)은 무엇입니까? 🔥

세그먼테이션과 가상 메모리를 고정된 크기로 나누어 메모리(가상메모리)를 관리하는 기법을 말한다. 자세하게 말하자면 커다란 크기의 작업을 일정한 크기로 나누어 잘게 쪼개어 처리하는 것이다. 따라서 불연속적인 메모리 요청 등에 유연하게 처리할 수 있다.

세그먼테이션은 논리적 블록을 필요에 따라 다른 크기로 할당한 것이라면, 페이징은 고정된 크기로 나누는 것이다. 외부 단편화는 해결하지만, 내부 단편화가 발생할 수있다.

  1. 페이징의 장점과 단점은?
  • 장점: 메모리를 페이지단위로 가져와서, 프로세스의 효율적인 운영이 가능하다.
  • 단점: 페이지 크기별, 단위별로 페이지 폴트 현상이 발생할 수 있다.

19. 세그먼테이션(Segmentation) 이란? 🔥

메모리를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(segment)로 분할하고 메모리를 할당하여 물리 주소를 논리 주소로 변환하는 것을 말한다. 미리 분할하는 것이 아니라 메모리를 사용할 시점에 할당된다. 내부 단편화는 �없지만 외부단편화가 발생할 수 있다.

20. 멀티 스레드 프로그래밍 🔥🔥

1. 장점은 무엇입니까?

  • 프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
    • 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap(힙) 영역을 이용하여 데이터를 주고받을 수 있다.
    • 그렇기 때문에 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
    • 심지어 스레드의 context switch(문맥교환)는 프로세스 context switch 와는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
    • 따라서 시스템의 성능이 향상되고 자원 소모가 줄어들며 자연스럽게 프로그램의 응답 시간이 단축된다. 이러한 장점 때문에 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 스레드로 나눠 수행하는 것이다.
  • 사용자의 반응을 향상시킨다.
    • 응답성이 좋다 : 하나의 프로세스에 여러 스레드를 생성하여 스레드에 각기 다른 작업을 하게 함으로써 특정 작업을 하면서도 사용자로부터 명령을 입력받게 할 수 있다
  • 프로세스 내 리소스 공유하여 경제적이다. (= 자원공유를 효율적으로 할 수 있다.)
  • 작업이 분리되어 코드가 간결해진다.

2. 단점은 무엇입니까?

  • 멀티 프로세스 기반으로 프로그래밍할 때는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근하는 일(교착상태)이 없었지만 멀티 스레딩을 기반으로 프로그래밍할 때는 이 부분을 신경써줘야 한다.
    • 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
  • 그렇기 때문에 멀티스레딩 환경에서는 동기화 작업이 필요하다.
    • 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤 하는 것이다.
    • 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다. 그러므로 과도한 락으로 인한 병목현상을 줄여야 한다
  • 구현하기 어렵고, 테스트와 디버깅이 어렵다.
  • 전체 프로세스에 영향을 줄 수 있다.
  • 성능 저하가 동반됩니다.

21. Scheduling 이란(Process Scheduling)?

여러 프로세스가 있고, 이 프로세스들이 자원(CPU 등)을 동시에 요구하는데 자원이 제한되어 있다. 그러면 제한된 자원들을 어떻게(순서를 할당하는 등) 나눠줄 것인지에 대한 정책을 말한다.

22. CPU Scheduling? 🔥🔥

CPU 하나는 동시에 여러개의 프로세스를 처리할 수 없기 때문에, 한 순간에 어떤 프로세스가 CPU를 사용할 수 있게 하는지 결정하는 정책이다.

1. CPU 스케줄링은 언제 발생하는가?

실행상태에서 대기상태로 전환될 때 (예, 입출력 요청) - Non preemptive(비선점)
실행상태에서 준비상태로 전환될 때 (예, 인터럽트 발생) - preemptive(선점)
대기상태에서 준비상태로 전환될 때(예, 입출력이 종료될 때)
종료될 때(Terminated)

2. CPU 스케줄링의 종류를 설명하시오.

비선점(Non-preemptive) 스케줄링

이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이다.
프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용한다.
일괄 처리 방식의 스케줄링(공정하지만 긴급 응답을 요하는 작업에 좋지 않다.)

  • FCFS(FIFO) : 준비상태 큐에 도착한 순서에 따라 CPU를 할당하는 기법. 공평성은 유지되지만 짧은 작업이 긴 작업을, 중요한 작업이 중요하지 않은 작업을 기다리게 됨.
    • 장점 : 평균 응답시간이 길다. (대화식 시스템에 부적합)
    • 단점 : 도착 순서에 따라 공평하다.
  • SJF(Shortest Job First) : 실행시간이 가장 짧은 프로세스에 먼저 CPU를 할당하는 기법. 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘
    • 장점 : 평균 응답 시간을 최소화 할 수 있다.
    • 단점 : 실행시간이 긴 프로세스는 CPU를 할당받지 못하고 무한히 대기하는 현상 발생(starvation)
  • HRN(Highest Response ratio) : 실행 시간이 긴 프로세스에 불리한 SJF 기법을 보완하기 위한 것으로 우선순위 계산 결과 값이 높은 것부터 우선순위가 부여된다. 대기 시간이 길수록 계산 결과가 높다. 우선순위 = (대기시간 + 서비스시간 / 서비스시간) 큰 프로세스일수록 우선순위가 낮으므로 평균 응답시간도 단축
  • 기한부(DeadLine) : 프로세스에게 일정한 시간을 주어 그 시간 안에 프로세스를 완료하도록 하는 기법
  • 우선순위(Priority) : 준비상태 큐에서 기다리는 각 프로세스마다 우선순위를 부여하여 그 중 가장 높은 프로세스에게 먼저 CPU를 할당하는 기법. 정적, 동적 우선순위 방법 존재

선점(Preemptive) 스케줄링

하나의 프로세스가 CPU를 할당받아 실행 하고 있을 때 우선순위가 높은 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
선점으로 인한 많은 오버헤드가 발생한다.
시분할 시스템에 사용하는 스케줄링이다. (긴급을 요하는 우선순위를 갖는 시분할 처리, 실시간 처리에 유용)
선점을 위해 시간 배당을 위한 인터럽트용 타이머 클럭(Clock)이 필요한다.

  • SRT(Shortest Remaining Time) : 현재 실행 중인 프로세스의 남은 시간과 대기 큐에 프로세스의 실행시간이 가장 짧은 프로세스에게 CPU를 할당하는 기법 (비선점 기법인 SJF 알고리즘의 선점 형태로 변경한 기법)
    • 단점 : 잦은 선점으로 인한 문맥교환의 부담, starvation 의 위험
  • 선점 우선순위 : 준비상태 큐의 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 먼저 CPU를 할당하는 기법
  • RR(Round Robin) : 시분할 시스템을 위해 고안된 방법으로, FCFS 알고리즘을 선점 형태로 변형한 기법. 대기 큐를 사용하여 먼저 대기한 작업이 먼저 CPU를 사용한다.
    • 단점 : CPU를 사용할 수 있는 시간(Quantum)동안 CPU를 사용한 후에 다시 대기 큐의 가장되로 배치된다. 할당되는 시간이 클 경우 FCFS 기법과 같아지고, 시간이 작을 경우 문맥교환 및 오버헤드가 자주 발생됨
  • MLQ(다단계 큐) : 프로세스를 특정 그룹으로 분류할 수 있는 경우 그룹에 따라 각기 다른 준비상태 큐를 사용한다. 작업들을 여러 종류의 그룹으로 분할. 큐들간에 프로세스 이동이 불가능하다. 각 큐는 자신만의 독자적인 스케줄링을 가진다. 상위 우선 순위의 큐가 Empty 이면 하위 우선순위의 큐의 프로세스가 수행된다.
  • MLFQ(다단계 피드백 큐) : 특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계 큐 기법을 준비상태 큐 사이를 이동할 수 있도록 개선한 기법. 새로운 프로세스는 높은 우선순위, 프로세스의 실행이 길어질 수록 점점 낮은 우선순위 큐로 이동. 제일 마지막 단계에서는 RR/FCFS 처리. 우선순위가 높은 단계의 큐일수록 시간 할당량을 작게 설정한다. 기아 상태를 예방하는 Aging 방법. 현대 OS에서 RR방식과 함께 가장 많이 사용되는 스케줄링 기법.
  • RM(Rate Monotonic, 주기단조) 알고리즘 : 수행 주기가 가장 짧은 프로세스에 가장 높은 우선순위를 부여하는 실시간 스케줄링 알고리즘. 정적 스케줄링방식. 마감 시간과 주기가 일치.
    • 장점 : 간단, 사용률이 0.69이하일때 항상 스케줄링 가능
    • 단점 : 주기가 긴 태스크들의 우선순위가 낮아서 장시간 대기
  • EDF(Earliest Deadline First, 최단 마감시간 우선)알고리즘 : 프로세스의 마감시한이 가까울수록 우선순위를 높게 부여하는 선점방식의 동적 스케줄링
    • 장점 : 이론적으로 총 이용률이 1이하면 스케줄링 가능
    • 단점 : 태스크들의 수행 시간, 마감시간, 주기 등을 정확히 예측하는 것이 현실적으로 어려움.

정리

비선점형 : FCFS, 비선점형 SJF
선점형 : RR, MLQ, MLFQ, 선점형 SJF(SRF), RM(Rate Monotonic), EDF

3. 선점 스케줄링과 비선점 스케줄링의 차이점?

  • 선점 : CPU를 할당받아 실행 중인 프로세스로부터 CPU를 선점(빼앗는 것)하여 다른 프로세스를 할당 할 수 있는 방식
    • Ex) RR, SRT, MLQ, MFQ
  • 비선점 : CPU를 할당받은 프로세스는 스스로 CPU를 반납할 때까지 CPU를 독점하여 사용
    • Ex) FCFS, SJR, HRN

23. 메모리 단편화 란 무엇인가? 🔥🔥

메모리의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상을 말한다.
할당한 메모리를 해제를 하게 되면 그 메모리 공간이 빈 공간(사용하지 않는 공간)이 되고
그 빈공간의 크기보다 큰 메모리는 사용할 수 없다.
그리하여 이 공간들이 하나 둘 쌓이게 되면 수치상으로는 많은 메모리 공간이 남았음에도 불구하고, 실제로 사용할 수 없는 메모리가 발생한다.

1. 내부단편화와 내부단편화란?

  • 내부단편화

    • 분할된 영역이 할당된 프로그램의 크기보다 커서 사용되지 않고 남아 있는 빈 공간을 말한다.
    • 내부 단편화는 페이징에서 발생한다.
  • 외부단편화

    • 분할된 영역이 할당될 프로그램의 크기보다 작아서 모두 빈 공간으로 남아 있는 전체 영역을 말한다.
    • 외부 단편화는 세그먼테이션에서 발생한다.

2. 메모리 단편화 해결방법은?

메모리 압축(디스크 조각 모음), 메모리 통합(단편화가 발생된 공간들을 하나로 통합시켜 큰 공간으로 만드는 기법)

24. 문맥교환(Context Switching)이란?

프로세스 상태를 변경하는 것을 말한다.
하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업이다.
즉, 스케줄링에 의해 실행 중인 코드, 자원 등을 저장하고 현재 상태를 대기 상태로 만들고, 다른 프로세스를 실행시키는 과정

[참고] CPU가 현재 처리중인 프로세스의 PCB(Process Controll Block)을 따로 저장하고 다른 PCB를 가져오는 것

PCB? 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성한다.

25. 커널 수준 스레드와 사용자 수준 스레드

1. 서로의 장단점

커널 수준 스레드

  • 장점
    • 프로세스의 스레드들을 몇몇 프로세서에 한꺼번에 디스패치 할 수 있기 때문에 멀티프로세서 환경에서 매우 빠르게 동작한다.
    • 다른 스레드가 입출력 작업이 다 끝날 때까지 다른 스레드를 사용해 다른 작업을 진행할 수 있다.
    • 커널이 각 스레드를 개별적으로 관리할 수 있다.
    • 커널이 직접 스레드를 제공해 주기 때문에 안정성과 다양한 기능이 제공된다.
  • 단점
    • 스케줄링 동기화를 위해 커널을 호출하는데 무겁고 오래걸린다. (저장한 내용을 다시 불러오는 과정이 필요)
    • 즉, 사용자 모드에서 커널 모드로의 전환이 빈번하게 이뤄져 성능 저하가 발생한다.
    • 사용자가 프로그래밍할 때 구현하기 어렵고 자원을 더 많이 소비하는 경향이 있다.

사용자 수준 스레드

  • 장점
    • 운영체제에서 스레드를 지원할 필요가 없다
    • 스케줄링 결정이나 동기화를 위해 커널을 호출하지 않았기 때문에 인터럽트가 발생할 때 커널 레벨 스레드보다 오버헤드가 적다
    • 즉, 사용자 영역 스레드에서 행동을 하기에 OS Scheduler의 context switch가 없다. (사용자 레벨 스레드 스케줄러 이용)
    • 커널은 스레드의 존재조차 모르기 때문에 모드 간의 전환이 없고 성능 이득이 발생한다.
  • 단점
    • 시스템 전반에 걸친 스케줄링 우선순위를 지원하지 않는다. (무슨 스레드가 먼저 동작할 지 모른다)
    • 프로세스에 속한 스레드 중 I/O 작업 등에 의해 하나라도 블록이 걸린다면 전체 스레드가 블록된다.

2. 사용자 수준 스레드와 커널 수준 스레드 차이는?

코드가 실행되는 모드의 차이.
커널 수준의 스레드는 커널 모드이기 때문에 write()같은 함수를 사용할 수 있다.
사용자 모드에서 커널 스레드를 사용하면 문맥 교환이 일어나서 오버헤드가 발생할수 있다.
사용자 스레드가 여럿 있을때 하나라도 커널 모드가 되면 다른 쓰레드가 중지된다.
그래서 요즘에는 혼합해서 쓸수 있는 스레드를 사용하는 것으로 알고 있다.

26. 모드 스위치와 프로세스 스위치 간의 차이점은?

모드 스위치는 사용자 모드에서 커널모드로 변경할 때 발생하며 완전문맥교환이 필요하지 않고 시스템 스택을 사용한다. 프로세스 스위치는 보통 문맥교환이라고 부르는 것이며 실행중인 프로세스를 멈추고 새 프로세스를 실행하는 것

@simoniful simoniful added the CS label May 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant