ABOUT ME

개발에 관한 지식들을 공유하고 공부하는 블로그입니다.

Today
Yesterday
Total
  • [CS 면접] 운영체제 - 2
    개발/운영체제 2023. 5. 16. 20:42

    보초님의 github에 있는 질문들을 보며 답변을 달아본 것입니다.

    문제사항, 잘못된점 혹은 궁금한점이 있다면 댓글로 남겨주시면 감사하겠습니다.

    이전 글을 읽지 않았다면 먼저 읽어보시면 좋습니다.

    → 보러가기

     

    [CS 면접] 운영체제 - 1

    보초님의 github에 있는 질문들을 보며 답변을 달아본 것입니다. 문제사항, 잘못된점 혹은 궁금한점이 있다면 댓글로 남겨주시면 감사하겠습니다. 이전 글을 읽지 않았다면 먼저 읽어보시면 좋습

    grulsuitg.tistory.com

    프로세스 스케줄링 알고리즘에는 어떤 것들이 있나요?

    1. FCFS : 먼저 온 순서대로 처리 , Convey effect 현상이 발생.
    2. SJF : 작업 시간이 짧은 순서대로 처리
    3. STCF : 남은 시간이 짧은 작업을 먼저 수행
    4. RR : 돌아가면서 실행
    5. MLFQ : 우선순위를 기반으로 스케쥴링 진행, 오랫동안 할당 안된 프로세스는 우선순위를 높임.

    RR을 사용할 때, Time Slice에 따른 trade-off를 설명해 주세요.

    Time Slice가 길어진다면 응답 시간이 나빠지지만 컨텍스트 스위칭 오버헤드가 작아집니다. 반면 Time Slice 가 짧아진다면 응답시간이 좋아지지만 컨텍스트 스위칭 오버헤드가 커집니다.

    싱글 스레드 CPU에서 상시로 돌아가야 하는 프로세스가 있다면, 어떤 스케쥴링 알고리즘을 사용하는 것이 좋을까요? 또 왜그럴까요?

    우선순위를 기반으로 할당하는 MLFQ, 짧은 타임 Slice로 동시에 실행하는것처럼 느낄 수 있는 RR 등이 있습니다.

    동시성과 병렬성의 차이에 대해 설명해 주세요.

    동시성은 한장치에서 여러 작업을 동시에 수행하는 기능을 말하는 것으로 멀티태스킹, 멀티스레딩과 같은 방식으로 이루어집니다. 반면에 병렬성은 여러 장치를 통해 여러 작업을 처리하는 것으로 멀티 프로세싱, 분산처리 등과 같은 기술로 이루어집니다.

    타 스케쥴러와 비교하여, Multi-level Feedback Queue는 어떤 문제점들을 해결한다고 볼 수 있을까요?

    MLFQ 는 오랫동안 할당되지 않는 프로세스틀의 우선순위를 높이는 boost 기능이 있어 starvation 문제를 해결할 수 있습니다.

    뮤텍스와 세마포어의 차이점은 무엇인가요?

    뮤텍스는 공유 대상이 1개일 때 사용하는 방법이고 세마포어는 여러개일 때 사용하는 방식입니다.

    뮤텍스는 잠금 메커니즘을 통해 공유 리소스 액세스 제어를 하지만 세마포어는 대기와 신호라는 두 가지 작업을 제공합니다. 대기는 사용 가능한 리소스 개수를 줄이고 개수가 0인경우 호출 스레드 프로세스를 차단합니다. 신호 는 사용가능한 리소스 수를 올리고 차단된 스레드 또는 프로세스 중 하나를 깨웁니다.

    이진 세마포어와 뮤텍스의 차이에 대해 설명해 주세요.

    이진 세마포어는 신호전달 메커니즘 기반으로 세마포어를 획득한 스레드 외에 다른스레드도 세마포어를 획득할 수 있습니다. 또한 여러개의 스레드가 동시에 세마포어를 획득할 수 있으며 소유권이 없습니다. 반면 뮤텍스는 잠금 메커니즘 기반으로 동작하여 뮤텍스를 획득한 스레드만 해제가 가능하며 한 번에 하나의 스레드만 뮤텍스를 획득 가능하고 해당 스레드가 소유권 가지게 됩니다. 이런 특성 때문에 이진 세마포어가 뮤텍스보다 빠르게 동작하게 됩니다.

    deadlock 에 대해 설명해 주세요.

    데드락은 공유자원을 획득하기 위해 서로 대기하는 상황이 발생하여 무한히 기다리는 상태를 의미합니다.

    Deadlock 이 발생하기 위한 4가지 조건에 대해 설명해 주세요.

    1. 비선점성 : 다른 스레드가 획득하고 있는 자원을 뺏어오지 못합니다.
    2. 순환대기 : 두개의 스레드가 각각 점유하고 있는 스레드를 각각 기다립니다.
    3. 점유대기 : 한 자원을 점유한 상태로 다른 자원을 얻기 위해 대기합니다.
    4. 상호배제 : 한 번에 하나의 스레드만 자원을 획득할 수 있습니다.

    그렇다면 3가지만 충족하면 왜 Deadlock이 발생하지 않을까요?

    1. 선점성 : 자원을 뺏어서 획득할 수 있으므로 대기 상태가 필요 없게 됩니다.
    2. 비순환대기 : 순환구조가 아니면 하나의 자원에 대한 잠금이 해제되면 순차적으로 작업을 진행할 수 있게됩니다.
    3. 비점유대기 : 자원을 점유하고 있지 않으므로 다른 스레드가 무한히 대기하는 상황이 일어나지 않습니다.
    4. 비상호배제 : 한번에 여러개의 스레드가 자원을 획들할 수 있으므로 대기 상태가 발생하지 않습니다.

    어떤 방식으로 예방할 수 있을까요?

    1. 순환대기 회피 : 리소스의 고유한 숫자 값을 할당해 순서를 정해서 획득하도록 합니다.
    2. 리소스 할당 : 뱅커 알고리즘(자원을 할당해도 deadlock이 발생하지 않을만큼만 할당)등을 이용해 리소스를 제한적으로 할당합니다.
    3. 시간 제한 : 리소스 획득 제한시간을 설정하여 무한정 기다리지 않도록 합니다.
    4. 선점 : 다른 스레드가 획득하고 있는 자원을 강제로 얻을 수 있도록 합니다.

    왜 현대 OS는 Deadlock을 처리하지 않을까요?

    시스템에 복잡성이 커지고 예측할 수 없는 이벤트등의 여러 조합으로 인해 완전히 방지하거나 제거가 불가능합니다. 대신 다음과 같은 기술을 사용해 Deadlock을 관리합니다.

    1. 감지 : 교착상태를 감지하여 프로세스 종료 등 수적 조치
    2. 예방 : 네 가지 조건 중 하나를 예방
    3. 복구 : 교착상타개 발생했을 때 프로세스 종료, 롤백 등 이용

    Wait Free와 Lock Free를 비교해 주세요.

    Wait Free는 다른 스레드의 진행 상황과 관계없이 기다리지 않는 것을 의미합니다. 고성능 실시간 시스템에서 사용하기에 적합하며 실시간 게임 및 통신과 같은 영역에서 자주 사용됩니다. CAS 명령 및 원자작업에 의존하여 동작합니다.

    Lock Free는 공유자원에 대한 엑세스를 관리하기 위해 잠금 또는 동기화 구조를 사용하지 않는 것을 의미합니다.

    wait free는 모든 스레드가 기다림이 없어야 하지만 Lock free의 경우는 대기는 발생할 수 있지만 작업이 멈추면 안되는 더 큰 범위를 의미한다.

    프로그램이 컴파일 되어, 실행되는 과정을 간략하게 설명해 주세요.

    1. 컴파일 : 컴파일러가 소스 코드를 컴퓨터가 실행할 수 있는 실행프로그램으로 변환합니다.
    2. 연결 : 외부 라이브러리나 모듈이 필요한 경우 컴파일된 코드를 라이브러리와 연결해 완전한 실행 파일을 생성합니다. 이때 링커를 사용해 수행합니다.
    3. 프로그램 실행 : 생성된 실행파일을 실행합니다.

    링커와 로더의 차이에 대해 설명해 주세요.

    링커 : 링커는 라이브러리와 타겟 파일을 단일 실행 파일로 결합하기위해 컴파일 과정에서 사용되는 도구입니다. 기호 확인, 재배치, 최적화, 디버깅 등의 작업을 수행합니다.

    로더 : 로더는 실행 가능한 프로그램을 메모리에 로드하고 실행 준비를담당하는 프로그램입니다. 메모리 할당, 재배치, 기호 확인, 초기화, 제어 전송 등의 작업을 수행합니다.

    즉, 링커는 컴파일 단계에서 로더는 컴파일 이후 실행 단계에서 사용되는 소프트웨어입니다.

    컴파일 언어와 인터프리터 언어의 차이에 대해 설명해 주세요.

    컴파일 언어는 코드를 실행시키기 위해 컴파일러가 사전에 코드를 분석하여 컴퓨터가 실행할 수 있는 코드로 변환후 실행시킬 수 있습니다. 그 예로 C, Java 등이 있습니다. 반면 인터프리터 언어는 동적으로 작동하며 명령어를 입력하는 동시에 번역하여 코드를 실행시킵니다. 그 예로 Python 등이 있습니다.

    JIT에 대해 설명해 주세요.

    JIT는 Just In Time의 약자로 실행시간에 자주 쓸만한 코드를 저장시켜놓고 재사용하는 방식을 말합니다. 초기에는 저장시간때문에 실행속도가 느릴 수 있으나 그 이후에는 성능 향상이 있습니다.

    본인이 사용하는 언어는, 어떤식으로 컴파일 및 실행되는지 설명해 주세요.

    1. 자바 코드 작성
    2. JVM 에서 실행할수 있는 바이트코드 형태로 컴파일
    3. 클래스 파일 생성
    4. JVM 에 필요한 클래스 파일 로드
    5. 실행 전 JVM이 바이트 코드 확인
    6. JIT 컴파일러를 이용하여 최적화를 통한 성능 향샹
    7. 코드 실행

    IPC가 무엇이고, 어떤 종류가 있는지 설명해 주세요.

    Inter Process Communication의 약자로 프로세스간 통신 방법을 의미하며, 파이프, 신호, 공유 메모리, 메시지큐, 소켓 등이 있습니다.

    Shared Memory가 무엇이며, 사용할 때 유의해야할 점에 대해 설명해 주세요.

    프로세스간 통신할 때 메모리를 공유하는 것으로 사용할 때 동기화, 데이터 무결성, 메모리 관리, 보안, 데드락 등에 유의해야 합니다.

    메시지 큐는 단방향이라고 할 수 있나요?

    네 메시지 큐는 단방향이라고 할 수 있습니다. 메시지를 보내는 프로세스는 큐에 메시지를 보내고 메시지를 받는 프로세스는 해당 큐에서 메시지를 읽어오는 단방향 구조가 일반적이지만 양뱡향 통신을 지원하기도 합니다.

    Thread Safe 하다는 것은 어떤 의미인가요?

    멀티 스레드 프로그램에서 공유 자원에 대해 동시에 접근이 이루어져도 실행과 결과에 문제가 없는 것을 의미합니다.

    Thread Safe를 보장하기 위해 어떤 방법을 사용할 수 있나요?

    Mutex, Semaphore, Atomic Operation, Thread-Local Storage 등을 사용할 수 있습니다.

    Peterson’s algorithm이 무엇이며, 한계점에 대해 설명해 주세요.

    flag와 turn 두 개의 변수를 사용하여 critical section의 진입할 프로세스를 결정하는 알고리즘 입니다.한계점으로는 busy waiting이 발생하고, starvation 문제가 발생할수 잇습니다. 또한 두 개의 프로세스 일때만 동작한다는 단점이 있습니다.

    busy waiting을 극복하기 위한 방법으로는 atomic operation을 통해서 발생 시간을 줄이는 방법이 있습니다.

    Race Condition이 무엇인가요?

    critical section에 동시에 진입하여 상황에 따라 결과가 올바르게 실행되지 않는 상황이 발생하는 것을 의미합니다.

     

     


    출처

    '개발 > 운영체제' 카테고리의 다른 글

    댓글

Designed by Tistory.