[cs] 운영체제(os) 면접 질문(기술면접 대비)

 

목차

  1. Process와 Thread의 차이

  2. 사용자 수준 스레드, 커널 수준 스레드, 혼합 스레드

  3. 교착상태와 기아상태

  4. Context Switching(문맥 교환)

  5. 프로세서(CPU) 스케줄링

  6. 가상메모리_페이징과 세그먼테이션

  7. 내부단편화 vs 외부 단편화

1. Process와 Thread의 차이

 🍂Process

  • 실행 중인 프로그램. (프로그램이 실행되서 메모리에 적재된 경우)

  • 자원을 할당받는 작업 단위.

    🌵 프로그램과 프로세스의 차이

    • 프로그램 : 컴파일 코드, 전역변수, 문자열, 문자열 상수 등의 정적 데이터를 가진 정적인 객체
    • 프로세스 : 스택, 힙 데이터와 메모리 구조, 레지스터 처럼 현재 관리하는 자원 정보를 가진 동적인 객체


🍂  Thread

  • 작업이 실행되는 실행 단위.

  • 프로세스는 자원+제어로 구분되는데 이 중 “제어”만 분리된 실행단위.

  • 하나의 프로세스는 한 개 이상의 스레드로 나눌 수 있다.

  • 프로그램 카운터(PC), 스택 포인터(SP)와 같은 스레드 실행환경 정보, 지역변수, 스택 등을 가진다.

  • 같은 프로세스 내의 스레드들은 관련 자원 및 메모리를 서로 공유 => 효율적 자원관리


🍂  멀티 프로세스와 멀티 스레드

멀티 프로세스

  • 하나의 응용 프로그램을 여러 프로세스가 각각의 작업을 처리

  • 단점 - 모든 프로세스들은 각각의 고유한 메모리 영역을 가지므로 자원 공유 시 오버헤드가 크고 문맥교환(Context Switching)에 비용이 많이 소모된다.

  • 멀티 스레드

  • 하나의 프로그램을 여러 스레드병렬처리 하는 것.

  • 장점 - 모든 스레드가 서로 자원과 메모리를 공유하므로 통신에 따른 오버헤드가 적다.

    단점 - 교착상태가 발생하지 않도록 주의해야 한다.

2. 사용자 수준 스레드, 커널 수준 스레드, 혼합 스레드

메모리 영역은 사용자에 의해 할당되는 공간인 유저 영역과 운영체제라는 소프트웨어를 실행시키기 위해 필요한 공간인 커널 영역으로 나뉜다.

사용자레벨 스레드와 커널 레벨 스레드는 생성 주체가 누구인지에 따라 구분된다. 쓰레드를 생성하고 스케줄링하는 주체가 커널일 경우 커널 레벨 스레드(Kernel Level Thread)이다.


🍂  사용자 수준 스레드(User Level Thread)

  • 스레드와 관련된 모든 행위를 사용자 영역에서 한다.

  • 스레드 라이브러리를 이용하여 작동하는 형태.

  • 단일 프로세서에서 작동한다.

  • 커널이 스레드의 존재를 알지 못함.

  • 다수의 사용자 레벨 스레드가 커널 레벨 스레드 한 개에 매핑 => N:1 매핑

    장점 - 이식성이 높다.

    ​ - 운영체제에서 스레드를 지원할 필요가 없다.

    ​ - 커널 모드/유저모드 간 전환이 일어나지 않기 때문에 오버헤드 적음.

    단점 - 스레드 간 보호 불가능.

    ​ - 프로세스에 속한 스레드 중 I/O 작업 등에 의해 하나라도 블록이 걸릴 경우 전체 스레드가 블록됨.


🍂   커널 영역 스레드(Kernel Level Thread)

  • 커널이 스레드와 관련된 모든 작업을 관리함.(커널에 종속적)

  • 멀티 스레드 프로세스 환경에서 동작한다. (따라서 스레드가 작업을 하고 있더라도 다른 스레드로 다른 작업 가능.)

  • 커널이 각 스레드를 개별적으로 관리한다. => 1:1 매핑

  • 사용자 수준 스레드의 한계 극복.

    장점 - 각 커널이 스레드를 개별적으로 관리하므로 병행처리 가능.

    ​ - 커널이 직접 제공해주기 때문에 안정성과 다양한 기능이 제공된다.

    단점 - 커널-유저모드 간 전환이 빈번하게 이루어지기 때문에 오버헤드가 커진다.


🍂   혼합형 스레드(Multiplexed Thread)

  • 사용자 수준 스레드 + 커널 수준 스레드 => N:M매핑

OS_Thread

3. 교착상태(Deadlock)와 기아상태

🍂  교착상태와 기아상태의 차이점

  • 교착상태 : 자원을 자유롭게 할당한 결과(자원 부족)
  • 기아상태 : 기다리는 결과를 예방하기 위해 자원할당할 때 발생하는 결과


🍂 교착상태(Deadlock)

  • 프로세스가 절대 일어나지 않을 사건을 기다리는 행위.

  • 둘 이상의 프로세스가 다른 프로세스가 사용 중인 자원을 동시에 기다리는 상태.

  • 교착 상태는 하나 이상의 작업에 영향을 주기 때문에 무한 대기나 기아 상태보다 더 심각한 문제를 일으킨다.


    교착 상태의 4가지 조건

    4가지 조건이 모두 만족할 경우 교착상태가 발생한다.

    • 상호 배제 : 한 번에 하나의 프로세스/스레드만 해당 공유 자원을 사용할 수 있는 것.
    • 자원 점유 : 하나의 자원을 소유하고 있는 프로세스/스레드가 다른 자원도 요청할 수 있는 것.
    • 비선점 : 한 프로세스/스레드가 다른 프로세스/스레드의 자원 접근 권한을 강제로 취소할 수 없는 것.
    • 순환 대기 : 2개 이상의 프로세스/스레드가 공유 자원을 기다리는데 그 관계에 사이클이 있는 경우.

    교착상태의 해결법

    운영체제가 교착상태를 해결하지 못할 경우 시스템 운영자나 사용자가 작업을 교체하거나 종료하는 외부 간섭으로 해결한다.

    • 예방

    • 회피 - 교착상태를 발생시킬 수 있다고 판단한 경우 프로세스를 시작 중지.

      ​ - 교착상태를 발생시킬 수 있다고 판단한 경우 자원할당 거부(대표 알고리즘 : 은행가 알고리즘)

    • 회복 - 이미 발생했을 경우 해결 알고리즘을 이용. ex) 프로세스 중단.

OS_Deadlock

🍂  기아상태

  • 프로세스의 우선순위가 낮아서 원하는 자원을 결코 할당받지 못하여 영원히 기다리는 상태.

4. 문맥교환(Context Switching)

🍂  문맥교환

" 멀티프로세서 환경에서 이미 하나의 프로세스를 실행하고 있는 cpu가 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행될 때 기존 프로세스의 상태나 레지스터의 값을 저장하고 다음 프로세스를 실행할 수 있도록 새로운 프로세스의 상태나 레지스터의 값을 교체하는 작업 "

5. 프로세서(CPU) 스케줄링

🍂  스케줄링(Scheduling)이란?

  • 프로세스가 생성되어 실행될 때 필요한 시스템의 여러자원을 해당 프로세스에게 할당하는 작업을 의미한다.
  • CPU나 자원을 효율적으로 사용하기 위해 스케줄링 알고리즘을 이용한다.
  • 장기 스케줄링, 중기 스케줄링, 단기 스케줄링으로 구분된다.


🍂  선점 스케줄링

: 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법.

  • 주로 빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용된다.

  • 장점 - 우선순위가 높은 프로세스를 빠르게 처리할 수 있다.

    단점 - 우선순위가 높은 프로세스가 생길 때마다 계속 문맥교환이 일어나므로 오버헤드가 크다.


🍂  비선점 스케줄링

​ : 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄 기법. 프로세스가 CPU를 할당받을 경우 해당 프로세스가 완료될 때까지 인터럽트 없이 CPU를 사용한다.

  • 일괄처리 방식에 적합하다.

  • 장점 - 프로세스 응답 시간을 예측하기 쉽다.

    단점 - 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있다.

6. 가상메모리_페이징 vs 세그먼테이션

메모리 관리 기법 중 가장 많이 쓰이는 것이 “가상 메모리 관리 기법”이다. 물리 메모리를 사용할 때 보통 페이지를 고정 크기인 프레임(Frame)단위로 나눈다.


즉, 고정된 크기의 블록을 페이지(Page)라고 하고, 이에 대응하는 물리 메모리를 나누는 블록 단위를 프레임(Frame)이라고 한다.


🍂  페이징

논리(가상) 메모리도 물리 메모리와 마찬가지로 고정된 크기인 프레임단위 페이지(Page)로 나누어 관리하는 것이다.


🍂  세그먼테이션

페이징과 달리 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌 서로 다른 크기의 논리적 단위세그먼트(Segment)로 분할한다.

7. 내부단편화 vs 외부단편화

🍂  내부단편화


🍂  외부단편화


참고 사이트

https://m.blog.naver.com/PostView.nhn?blogId=cmw1728&logNo=220475950348&proxyReferer=https%3A%2F%2Fwww.google.com%2F

https://coding-factory.tistory.com/309